aboutsummaryrefslogtreecommitdiff
path: root/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
diff options
context:
space:
mode:
authorNick Brassel <[email protected]>2024-02-28 21:47:37 +1100
committerNick Brassel <[email protected]>2024-02-28 21:47:37 +1100
commit4e369d405af6bba1adce6337b2e1b1ea1788566c (patch)
treeb0f020feff1809e37c9e7795d344929ff0bb290a /keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
parent4e04da397ef643f8fcf4afbe1d19f63aee1fc561 (diff)
parentdd1706e468bb18dd7f7ae143de735a5d3be1bfb8 (diff)
downloadqmk_firmware-0.24.0.tar.gz
qmk_firmware-0.24.0.zip
Merge branch 'develop'0.24.0
Diffstat (limited to 'keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h')
-rw-r--r--keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
new file mode 100644
index 0000000000..9c46642195
--- /dev/null
+++ b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
@@ -0,0 +1,95 @@
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "quantum.h"
+
+#include "via.h" // only for EEPROM address
+#include "satisfaction_keycodes.h"
+
+#define EEPROM_ENABLED_ENCODER_MODES (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
+#define EEPROM_DEFAULT_OLED (VIA_EEPROM_CUSTOM_CONFIG_ADDR+1)
+#define EEPROM_CUSTOM_ENCODER (VIA_EEPROM_CUSTOM_CONFIG_ADDR+2)
+
+enum s75_keyboard_value_id {
+ id_encoder_modes = 1,
+ id_oled_default_mode,
+ id_encoder_custom,
+ id_oled_mode
+};
+
+enum encoder_modes {
+ ENC_MODE_VOLUME,
+ ENC_MODE_MEDIA,
+ ENC_MODE_SCROLL,
+ ENC_MODE_BRIGHTNESS,
+ ENC_MODE_BACKLIGHT,
+ ENC_MODE_CUSTOM0,
+ ENC_MODE_CUSTOM1,
+ ENC_MODE_CUSTOM2,
+ _NUM_ENCODER_MODES,
+ ENC_MODE_CLOCK_SET // This shouldn't be included in the default modes, so we put it after NUM_ENCODER_MODES
+};
+
+enum custom_encoder_behavior {
+ ENC_CUSTOM_CW,
+ ENC_CUSTOM_CCW,
+ ENC_CUSTOM_PRESS
+};
+
+enum oled_modes {
+ OLED_DEFAULT,
+ OLED_TIME,
+ OLED_OFF,
+ _NUM_OLED_MODES
+};
+
+
+// Keyboard Information
+extern volatile uint8_t led_numlock;
+extern volatile uint8_t led_capslock;
+extern volatile uint8_t led_scrolllock;
+extern uint8_t layer;
+
+// OLED Behavior
+extern uint8_t oled_mode;
+extern bool oled_repaint_requested;
+extern bool oled_wakeup_requested;
+extern uint32_t oled_sleep_timer;
+
+// Encoder Behavior
+extern uint8_t encoder_value;
+extern uint8_t encoder_mode;
+extern uint8_t enabled_encoder_modes;
+
+// RTC
+extern RTCDateTime last_timespec;
+extern uint16_t last_minute;
+
+// RTC Configuration
+extern bool clock_set_mode;
+extern uint8_t time_config_idx;
+extern int8_t hour_config;
+extern int16_t minute_config;
+extern int8_t year_config;
+extern int8_t month_config;
+extern int8_t day_config;
+extern uint8_t previous_encoder_mode;
+
+void pre_encoder_mode_change(void);
+void post_encoder_mode_change(void);
+void change_encoder_mode(bool negative);
+uint16_t handle_encoder_clockwise(void);
+uint16_t handle_encoder_ccw(void);
+uint16_t handle_encoder_press(void);
+uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior);
+void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code);
+
+void update_time_config(int8_t increment);
+
+void oled_request_wakeup(void);
+void oled_request_repaint(void);
+bool oled_task_needs_to_repaint(void);
+
+void custom_config_load(void);