qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

satisfaction_core.h (2461B)


      1 // Copyright 2023 Andrew Kannan
      2 // SPDX-License-Identifier: GPL-2.0-or-later
      3 
      4 #pragma once
      5 
      6 #include <stdint.h>
      7 #include <stdbool.h>
      8 
      9 #include <hal.h>
     10 
     11 #include "via.h" // only for EEPROM address
     12 #include "satisfaction_keycodes.h"
     13 
     14 #define EEPROM_ENABLED_ENCODER_MODES_OFFSET 0
     15 #define EEPROM_DEFAULT_OLED_OFFSET 1
     16 #define EEPROM_CUSTOM_ENCODER_OFFSET 2
     17 
     18 enum s75_keyboard_value_id {
     19   id_encoder_modes = 1,
     20   id_oled_default_mode,
     21   id_encoder_custom,
     22   id_oled_mode
     23 };
     24 
     25 enum encoder_modes {
     26   ENC_MODE_VOLUME,
     27   ENC_MODE_MEDIA,
     28   ENC_MODE_SCROLL,
     29   ENC_MODE_BRIGHTNESS,
     30   ENC_MODE_BACKLIGHT,
     31   ENC_MODE_CUSTOM0,
     32   ENC_MODE_CUSTOM1,
     33   ENC_MODE_CUSTOM2,
     34   _NUM_ENCODER_MODES,
     35   ENC_MODE_CLOCK_SET // This shouldn't be included in the default modes, so we put it after NUM_ENCODER_MODES
     36 };
     37 
     38 enum custom_encoder_behavior {
     39     ENC_CUSTOM_CW,
     40     ENC_CUSTOM_CCW,
     41     ENC_CUSTOM_PRESS
     42 };
     43 
     44 enum oled_modes {
     45   OLED_DEFAULT,
     46   OLED_TIME,
     47   OLED_OFF,
     48   _NUM_OLED_MODES
     49 };
     50 
     51 
     52 // Keyboard Information
     53 extern volatile uint8_t led_numlock;
     54 extern volatile uint8_t led_capslock;
     55 extern volatile uint8_t led_scrolllock;
     56 extern uint8_t layer;
     57 
     58 // OLED Behavior
     59 extern uint8_t oled_mode;
     60 extern bool oled_repaint_requested;
     61 extern bool oled_wakeup_requested;
     62 extern uint32_t oled_sleep_timer;
     63 
     64 // Encoder Behavior
     65 extern uint8_t encoder_value;
     66 extern uint8_t encoder_mode;
     67 extern uint8_t enabled_encoder_modes;
     68 
     69 // RTC
     70 extern RTCDateTime last_timespec;
     71 extern uint16_t last_minute;
     72 
     73 // RTC Configuration
     74 extern bool clock_set_mode;
     75 extern uint8_t time_config_idx;
     76 extern int8_t hour_config;
     77 extern int16_t minute_config;
     78 extern int8_t year_config;
     79 extern int8_t month_config;
     80 extern int8_t day_config;
     81 extern uint8_t previous_encoder_mode;
     82 
     83 void pre_encoder_mode_change(void);
     84 void post_encoder_mode_change(void);
     85 void change_encoder_mode(bool negative);
     86 uint16_t handle_encoder_clockwise(void);
     87 uint16_t handle_encoder_ccw(void);
     88 uint16_t handle_encoder_press(void);
     89 uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior);
     90 void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code);
     91 
     92 void update_time_config(int8_t increment);
     93 
     94 void oled_request_wakeup(void);
     95 void oled_request_repaint(void);
     96 bool oled_task_needs_to_repaint(void);
     97 
     98 void custom_config_load(void);
     99 
    100 uint32_t read_custom_config(void *data, uint32_t offset, uint32_t length);
    101 uint32_t write_custom_config(const void *data, uint32_t offset, uint32_t length);