mess around with oled

This commit is contained in:
aleksbrgt 2025-08-28 08:56:21 +02:00
commit 48a6a518e0
3 changed files with 217 additions and 29 deletions

View file

@ -6,4 +6,6 @@
#define COMBO_COUNT 1
#define TAPPING_TERM 180
#define TAPPING_TERM 180
#define OLED_BRIGHTNESS 0

View file

@ -1,6 +1,26 @@
#include QMK_KEYBOARD_H
#include <stdio.h>
#define _KC_A LGUI_T(KC_A)
#define _KC_S LALT_T(KC_S)
#define _KC_D LCTL_T(KC_D)
#define _KC_F LSFT_T(KC_F)
#define _KC_J LSFT_T(KC_J)
#define _KC_K LCTL_T(KC_K)
#define _KC_L LALT_T(KC_L)
#define _KC_QUOT LGUI_T(KC_QUOT)
#define _KC_ESC LT(MSC, KC_ESC)
#define _KC_SPC LT(NUM, KC_SPC)
#define _KC_TAB LT(MED, KC_TAB)
#define _KC_ENT LT(CUR, KC_ENT)
#define _KC_DEL LT(FUN, KC_DEL)
enum custom_keycodes {
OLED_BD = SAFE_RANGE,
OLED_BU
};
enum {
// Home
// > qwerty
@ -40,12 +60,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// |-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------|
// | Z | X | C | V | B | | N | M | , | . | / |
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// |ESC MED|SPC NUM|TAB MSC| |ENT CUR|BSP FUN| DEL |
// -------+-------+------- -------+-------+-------
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
LGUI_T(KC_A), LALT_T(KC_S), LCTL_T(KC_D), LSFT_T(KC_F), KC_G, KC_H, LSFT_T(KC_J), LCTL_T(KC_K), LALT_T(KC_L), LGUI_T(KC_QUOT),
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
LT(MED, KC_ESC), LT(NUM, KC_SPC), LT(MSC, KC_TAB), LT(CUR, KC_ENT), LT(FUN, KC_BSPC), KC_DEL
// |ESC MSC|SPC NUM|TAB MED| |ENT CUR| BSP |DEL FUN|
// ------+-------+------- -------+-------+-------
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
_KC_A, _KC_S, _KC_D, _KC_F, KC_G, KC_H, _KC_J, _KC_K, _KC_L, _KC_QUOT,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
_KC_ESC, _KC_SPC, _KC_TAB, _KC_ENT, KC_BSPC, _KC_DEL
),
[NUM] = LAYOUT_split_3x5_3(
// --------------------------------------- ---------------------------------------
@ -57,10 +77,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// | ESC | SPC | TAB | | | 0 | |
// -------+-------+------- -------+-------+-------
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, XXXXXXX, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_MINS, KC_EQL, KC_4, KC_5, KC_6, KC_SCLN,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_BSLS, KC_1, KC_2, KC_3, KC_GRV,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, KC_0, XXXXXXX
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, XXXXXXX, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_MINS, KC_EQL, KC_4, KC_5, KC_6, KC_SCLN,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_BSLS, KC_1, KC_2, KC_3, KC_GRV,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, KC_0, XXXXXXX
),
[CUR] = LAYOUT_split_3x5_3(
// --------------------------------------- ---------------------------------------
@ -72,14 +92,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// | ESC | SPC | TAB | | ENT | BSPC | DEL |
// -------+-------+------- -------+-------+-------
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
KC_ESC, KC_SPC, KC_TAB, KC_ENT, KC_BSPC, KC_DEL
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
KC_ESC, KC_SPC, KC_TAB, KC_ENT, KC_BSPC, KC_DEL
),
[MED] = LAYOUT_split_3x5_3(
// --------------------------------------- ---------------------------------------
// | | | | | | | | | | | |
// | | | | | | | | | OLED- | OLED+ | |
// |-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------|
// | GUI | ALT | CTL | SFT | | | | PREV | VOL - | VOL + | NEXT |
// |-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------|
@ -87,10 +107,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// | ESC | SPC | TAB | | | PLAY | MUTE |
// -------+-------+------- -------+-------+-------
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, KC_MPLY, KC_MUTE
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, OLED_BD, OLED_BU, XXXXXXX,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, KC_MPLY, KC_MUTE
),
[FUN] = LAYOUT_split_3x5_3(
// --------------------------------------- ---------------------------------------
@ -102,10 +122,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// | ESC | SPC | TAB | | | | |
// -------+-------+------- -------+-------+-------
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
),
[MSC] = LAYOUT_split_3x5_3(
// --------------------------------------- ---------------------------------------
@ -117,10 +137,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// -------+-------+-------+-------+-------+------- -------+-------+-------+-------+-------+-------
// | ESC | SPC | TAB | | | | |
// -------+-------+------- -------+-------+-------
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL,
XXXXXXX, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_APP,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTL,
XXXXXXX, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_APP,
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
)
};
@ -129,3 +149,168 @@ const uint16_t PROGMEM combo_ralt[] = {KC_I, KC_O, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
COMBO(combo_ralt, KC_RALT)
};
typedef struct {
bool has_brightness_change;
uint8_t brightness_step;
} state_t;
state_t state;
typedef union {
uint32_t raw;
struct {
uint8_t oled_brightness;
uint32_t press_count;
};
} user_config_t;
user_config_t user_config;
void keyboard_post_init_user(void) {
user_config.raw = eeconfig_read_user();
state.has_brightness_change = false;
state.brightness_step = 10;
oled_set_brightness(user_config.oled_brightness);
}
uint8_t get_new_brightness(int8_t change) {
if (255 < user_config.oled_brightness + change) {
return 255;
}
if (0 > user_config.oled_brightness + change) {
return 0;
}
return user_config.oled_brightness + change;
}
void register_brightness_change(int8_t change) {
uint8_t new_brightness = get_new_brightness(change);
if (new_brightness != user_config.oled_brightness) {
state.has_brightness_change = true;
user_config.oled_brightness = new_brightness;
eeconfig_update_user(user_config.raw);
}
}
int8_t _row = 0;
int8_t _col = 0;
int16_t _keycode = 0;
char _character = '?';
const char code_to_name[60] = {
'?', '?', '?', '?', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
'#', ';', '\'', '`', ',', '.', '/', '?', '?', '?'
};
void set_keycode_values(uint16_t keycode) {
_keycode = keycode;
_character = '?';
if ((_keycode >= QK_MOD_TAP && _keycode <= QK_MOD_TAP_MAX)
|| (_keycode >= QK_LAYER_TAP && _keycode <= QK_LAYER_TAP_MAX)
) {
_keycode = _keycode & 0xFF;
}
if (_keycode < 60) {
_character = code_to_name[_keycode];
}
if (_keycode > 99 && _keycode != 0) {
_keycode = 0;
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!record->event.pressed) {
return true;
}
user_config.press_count += 1;
eeconfig_update_user(user_config.raw);
_row = record->event.key.row;
_col = record->event.key.col;
set_keycode_values(keycode);
if (99 <= _keycode) {
_keycode = 99;
}
switch (keycode) {
case OLED_BU:
register_brightness_change(state.brightness_step);
break;
case OLED_BD:
register_brightness_change(state.brightness_step * -1);
break;
}
return true;
}
char* get_layer_name(void) {
switch (get_highest_layer(layer_state)) {
case HME:
return "Home";
break;
case NUM:
return "Numpad";
break;
case CUR:
return "Cursor";
break;
case MED:
return "Media";
break;
case FUN:
return "Function";
break;
case MSC:
return "Other";
break;
}
return "n/a";
}
bool is_current_layer_home(void) {
return HME == get_highest_layer(layer_state);
}
bool oled_task_user(void) {
char layer[10] = "";
sprintf(layer, "%-9s", get_layer_name());
oled_write_ln(layer, !is_current_layer_home());
led_t led_state = host_keyboard_led_state();
oled_write_ln_P(PSTR("Caps "), led_state.caps_lock);
char matrix[20] = "";
sprintf(matrix, "%dx%d %02d %c %07li", _row, _col, _keycode, _character, user_config.press_count);
oled_write(matrix, false);
oled_write_ln_P(PSTR(" "), false);
char brightness[10] = "";
sprintf(brightness, "%03d/255 ", user_config.oled_brightness);
oled_write(brightness, state.has_brightness_change);
if (state.has_brightness_change) {
oled_set_brightness(user_config.oled_brightness);
state.has_brightness_change = false;
}
return false;
}

View file

@ -1,3 +1,4 @@
RGB_MATRIX_SUPPORTED = no
COMBO_ENABLE = yes
BOOTLOADER = atmel-dfu
BOOTLOADER = atmel-dfu
OLED_ENABLE = yes