summaryrefslogtreecommitdiffstats
path: root/keyboards/helix/rev2/keymaps/default/oled_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/helix/rev2/keymaps/default/oled_display.c')
-rw-r--r--keyboards/helix/rev2/keymaps/default/oled_display.c196
1 files changed, 127 insertions, 69 deletions
diff --git a/keyboards/helix/rev2/keymaps/default/oled_display.c b/keyboards/helix/rev2/keymaps/default/oled_display.c
index 824d2e4d86..ad5558869f 100644
--- a/keyboards/helix/rev2/keymaps/default/oled_display.c
+++ b/keyboards/helix/rev2/keymaps/default/oled_display.c
@@ -18,10 +18,6 @@
#include <string.h>
#include QMK_KEYBOARD_H
-#ifdef SSD1306OLED
- #include "ssd1306.h"
-#endif
-
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -35,10 +31,15 @@ enum layer_number {
_ADJUST
};
-//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
-#if defined(SSD1306OLED) || defined(OLED_ENABLE)
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-# if defined(OLED_ENABLE)
+//OLED update loop
+#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master()) {
return OLED_ROTATION_0;
@@ -46,12 +47,120 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180;
}
}
-# else
-# define oled_write(data,flag) matrix_write(matrix, data)
-# define oled_write_P(data,flag) matrix_write_P(matrix, data)
+
+static void render_rgbled_status(bool full) {
+# ifdef RGBLIGHT_ENABLE
+ char buf[30];
+ if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) {
+ if (full) {
+ snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
+ rgblight_get_mode(),
+ rgblight_get_hue()/RGBLIGHT_HUE_STEP,
+ rgblight_get_sat()/RGBLIGHT_SAT_STEP,
+ rgblight_get_val()/RGBLIGHT_VAL_STEP);
+ } else {
+ snprintf(buf, sizeof(buf), "[%2d] ", rgblight_get_mode());
+ }
+ oled_write(buf, false);
+ }
# endif
+}
+
+static void render_layer_status(void) {
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[10];
+ oled_write_P(PSTR("Layer: "), false);
+ switch (layer_state) {
+ case L_BASE:
+ oled_write_P(PSTR("Default"), false);
+ break;
+ case L_RAISE:
+ oled_write_P(PSTR("Raise"), false);
+ break;
+ case L_LOWER:
+ oled_write_P(PSTR("Lower"), false);
+ break;
+ case L_ADJUST:
+ case L_ADJUST_TRI:
+ oled_write_P(PSTR("Adjust"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Undef-"), false);
+ snprintf(buf,sizeof(buf), "%ld", layer_state);
+ oled_write(buf, false);
+ }
+ oled_write_P(PSTR("\n"), false);
+}
+
+void render_status(void) {
+ // Render to mode icon
+ static const char os_logo[][2][3] PROGMEM = {{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if (is_mac_mode()) {
+ oled_write_P(os_logo[0][0], false);
+ oled_write_P(PSTR("\n"), false);
+ oled_write_P(os_logo[0][1], false);
+ } else {
+ oled_write_P(os_logo[1][0], false);
+ oled_write_P(PSTR("\n"), false);
+ oled_write_P(os_logo[1][1], false);
+ }
+
+ oled_write_P(PSTR(" "), false);
+ render_layer_status();
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(led_state.num_lock ? PSTR("NUMLOCK") : PSTR(" "), false);
+ oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
+ oled_write_P(led_state.scroll_lock ? PSTR("SCLK") : PSTR(" "), false);
+ oled_advance_page(true);
+ render_rgbled_status(true);
+ oled_write_P(PSTR("\n"), false);
+}
+
+bool oled_task_user(void) {
+
+# if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+# endif
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_helix_logo();
+ render_rgbled_status(false);
+ render_layer_status();
+ }
+ return false;
+}
+#endif // end of OLED_ENABLE
+
+//SSD1306 OLED update loop
+/*
+ The following code is left as a sample to help you transition from SSD1306OLED to OLED_ENABLE.
+
+ * `matrix_write(matrix, data)` is replaced by `oled_write(data, false)`.
+ * `matrix_write_P(matrix, data)` is replaced by `oled_write_P(data, false)`.
+ * It is no longer necessary to call `iota_gfx_task()`.
+ * `matrix_update()` are no longer needed.
+ * `iota_gfx_task_user()` is no longer needed. Instead, `bool oled_task_user(void)` is provided.
+
+ 以下のコードは、SSD1306OLED から OLED_ENABLE に移行する助けになるようにサンプルとして残してあります。
+
+ * `matrix_write(matrix, data)` は、`oled_write(data, false)` に書き換えます。
+ * `matrix_write_P(matrix, data)` は、`oled_write_P(data, false)` に書き換えます。
+ * `iota_gfx_task()` を呼び出す必要はなくなります。
+ * `matrix_update()` は不要になります。
+ * `iota_gfx_task_user()` は不要になります。代りに `bool oled_task_user(void)` を用意します。
+ */
+
+#ifdef SSD1306OLED
+#include "ssd1306.h"
+#define oled_write(data,flag) matrix_write(matrix, data)
+#define oled_write_P(data,flag) matrix_write_P(matrix, data)
-# ifdef SSD1306OLED
void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
@@ -63,16 +172,7 @@ void matrix_update(struct CharacterMatrix *dest,
dest->dirty = true;
}
}
-# endif
-
-//assign the right code to your layers for OLED display
-#define L_BASE 0
-#define L_LOWER (1<<_LOWER)
-#define L_RAISE (1<<_RAISE)
-#define L_ADJUST (1<<_ADJUST)
-#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-# ifdef SSD1306OLED
static void render_logo(struct CharacterMatrix *matrix) {
static const char helix_logo[] PROGMEM ={
@@ -82,13 +182,8 @@ static void render_logo(struct CharacterMatrix *matrix) {
0};
oled_write_P(helix_logo, false);
}
-# endif
-# ifdef SSD1306OLED
static void render_rgbled_status(bool full, struct CharacterMatrix *matrix) {
-# else
-static void render_rgbled_status(bool full) {
-# endif
# ifdef RGBLIGHT_ENABLE
char buf[30];
if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) {
@@ -106,11 +201,7 @@ static void render_rgbled_status(bool full) {
# endif
}
-# ifdef SSD1306OLED
static void render_layer_status(struct CharacterMatrix *matrix) {
-# else
-static void render_layer_status(void) {
-# endif
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
char buf[10];
oled_write_P(PSTR("Layer: "), false);
@@ -136,11 +227,7 @@ static void render_layer_status(void) {
oled_write_P(PSTR("\n"), false);
}
-# ifdef SSD1306OLED
void render_status(struct CharacterMatrix *matrix) {
-# else
-void render_status(void) {
-# endif
// Render to mode icon
static const char os_logo[][2][3] PROGMEM = {{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
if (is_mac_mode()) {
@@ -154,11 +241,7 @@ void render_status(void) {
}
oled_write_P(PSTR(" "), false);
-# ifdef SSD1306OLED
render_layer_status(matrix);
-# else
- render_layer_status();
-# endif
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
@@ -166,35 +249,28 @@ void render_status(void) {
oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
oled_write_P(led_state.scroll_lock ? PSTR("SCLK") : PSTR(" "), false);
oled_write_P(PSTR("\n"), false);
-# ifdef SSD1306OLED
render_rgbled_status(true, matrix);
-# else
- render_rgbled_status(true);
- oled_write_P(PSTR("\n"), false);
-# endif
}
-
-# ifdef SSD1306OLED
-# if OLED_UPDATE_INTERVAL > 0
+# if OLED_UPDATE_INTERVAL > 0
uint16_t oled_update_timeout;
-# endif
+# endif
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
-# if DEBUG_TO_SCREEN
+# if DEBUG_TO_SCREEN
if (debug_enable) {
return;
}
-# endif
+# endif
-#if OLED_UPDATE_INTERVAL > 0
+# if OLED_UPDATE_INTERVAL > 0
if (timer_elapsed(oled_update_timeout) < OLED_UPDATE_INTERVAL) {
return;
}
oled_update_timeout = timer_read();
-#endif
+# endif
matrix_clear(&matrix);
if (is_keyboard_master()) {
render_status(&matrix);
@@ -205,23 +281,5 @@ void iota_gfx_task_user(void) {
}
matrix_update(&display, &matrix);
}
-# else
-bool oled_task_user(void) {
-# if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-# endif
-
- if (is_keyboard_master()) {
- render_status();
- } else {
- render_helix_logo();
- render_rgbled_status(false);
- render_layer_status();
- }
- return false;
-}
-# endif
-#endif
+#endif // end of SSD1306OLED