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);