diff options
author | Kosuke Adachi <ks@fstn.jp> | 2020-11-17 14:18:45 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-16 21:18:45 -0800 |
commit | 503b76253891a9820ad2d21a89617654dc4414fb (patch) | |
tree | dd5e29cb2584a86486e9c779ccb6f125771365fa /keyboards/crkbd/rev1/common | |
parent | 88c09aa89232ad9581f5e2313f377443ee6dd0dc (diff) |
Refactor the crkbd/via keymap and fix OLED bugs (#10354)
* Refactor the crkbd/via keymap and fix OLED bugs
* Revert "Refactor the crkbd/via keymap and fix OLED bugs"
This reverts commit dc9db029fc6b077fc7600b49e920b755c522d100.
* Fix OLED display bugs
* Remove unused functions
* Remove uncessary the key logger
* Add new lines at end of file
* Remove unnecesary extern for is_master
* Remove extern is_master from rev1.h
* Remove ssd1306 from common dir because its the legacy lib
* Update default keymap based the via keymap
* Remove foostan keymap because it will be legacy
* Revert Remove unnecesary extern for is_master
* Remove unnecessary backslashes.
Diffstat (limited to 'keyboards/crkbd/rev1/common')
-rw-r--r-- | keyboards/crkbd/rev1/common/common.c | 2 | ||||
-rw-r--r-- | keyboards/crkbd/rev1/common/common.h | 2 | ||||
-rw-r--r-- | keyboards/crkbd/rev1/common/keymaps/via/keymap.c | 47 | ||||
-rw-r--r-- | keyboards/crkbd/rev1/common/ssd1306.c | 360 |
4 files changed, 15 insertions, 396 deletions
diff --git a/keyboards/crkbd/rev1/common/common.c b/keyboards/crkbd/rev1/common/common.c index 5ea7347de8..ddc0b5fe91 100644 --- a/keyboards/crkbd/rev1/common/common.c +++ b/keyboards/crkbd/rev1/common/common.c @@ -17,5 +17,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "common.h" - -uint8_t is_master; diff --git a/keyboards/crkbd/rev1/common/common.h b/keyboards/crkbd/rev1/common/common.h index af1795f480..71779e2e0f 100644 --- a/keyboards/crkbd/rev1/common/common.h +++ b/keyboards/crkbd/rev1/common/common.h @@ -21,4 +21,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "rev1.h" #define has_usb() is_keyboard_master() -extern uint8_t is_master; +#define is_master is_keyboard_master() diff --git a/keyboards/crkbd/rev1/common/keymaps/via/keymap.c b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c index a3b2e52ce5..ecd1f17a5c 100644 --- a/keyboards/crkbd/rev1/common/keymaps/via/keymap.c +++ b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c @@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_split_3x6_3( \ + [0] = LAYOUT_split_3x6_3( //,-----------------------------------------------------. ,-----------------------------------------------------. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), - [1] = LAYOUT_split_3x6_3( \ + [1] = LAYOUT_split_3x6_3( //,-----------------------------------------------------. ,-----------------------------------------------------. KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -40,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\ + KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT //`--------------------------' `--------------------------' ), - [2] = LAYOUT_split_3x6_3( \ + [2] = LAYOUT_split_3x6_3( //,-----------------------------------------------------. ,-----------------------------------------------------. KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -56,15 +56,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //`--------------------------' `--------------------------' ), - [3] = LAYOUT_split_3x6_3( \ + [3] = LAYOUT_split_3x6_3( //,-----------------------------------------------------. ,-----------------------------------------------------. - RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ + RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ + RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\ + RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\ + KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT //`--------------------------' `--------------------------' ) }; @@ -83,30 +83,28 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { #define L_ADJUST 8 void oled_render_layer_state(void) { - oled_write_P("Layer: ", false); + oled_write_P(PSTR("Layer: "), false); switch (layer_state) { case L_BASE: - oled_write_ln_P("Default", false); + oled_write_ln_P(PSTR("Default"), false); break; case L_LOWER: - oled_write_ln_P("Lower", false); + oled_write_ln_P(PSTR("Lower"), false); break; case L_RAISE: - oled_write_ln_P("Raise", false); + oled_write_ln_P(PSTR("Raise"), false); break; case L_ADJUST: case L_ADJUST|L_LOWER: case L_ADJUST|L_RAISE: case L_ADJUST|L_LOWER|L_RAISE: - oled_write_ln_P("Adjust", false); + oled_write_ln_P(PSTR("Adjust"), false); break; } } char keylog_str[24] = {}; -char keylogs_str[21] = {}; -int keylogs_str_idx = 0; const char code_to_name[60] = { ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', @@ -128,25 +126,11 @@ void set_keylog(uint16_t keycode, keyrecord_t *record) { snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c", record->event.key.row, record->event.key.col, keycode, name); - - // update keylogs - if (keylogs_str_idx == sizeof(keylogs_str) - 1) { - keylogs_str_idx = 0; - for (int i = 0; i < sizeof(keylogs_str) - 1; i++) { - keylogs_str[i] = ' '; - } - } - - keylogs_str[keylogs_str_idx] = name; - keylogs_str_idx++; } void oled_render_keylog(void) { oled_write(keylog_str, false); } -void oled_render_keylogs(void) { - oled_write(keylogs_str, false); -} void render_bootmagic_status(bool status) { /* Show Ctrl-Gui Swap options */ @@ -176,8 +160,6 @@ void oled_task_user(void) { if (is_master) { oled_render_layer_state(); oled_render_keylog(); - // oled_render_keylogs(); - // oled_renger_bootmagic_icon(keymap_config.swap_lalt_lgui); } else { oled_render_logo(); } @@ -186,7 +168,6 @@ void oled_task_user(void) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { set_keylog(keycode, record); - // set_timelog(); } return true; } diff --git a/keyboards/crkbd/rev1/common/ssd1306.c b/keyboards/crkbd/rev1/common/ssd1306.c deleted file mode 100644 index 4a889da673..0000000000 --- a/keyboards/crkbd/rev1/common/ssd1306.c +++ /dev/null @@ -1,360 +0,0 @@ -#ifdef SSD1306OLED - -#include "ssd1306.h" -#include "i2c_master.h" -#include <string.h> -#include "print.h" -#ifdef ADAFRUIT_BLE_ENABLE -#include "adafruit_ble.h" -#endif -#ifdef PROTOCOL_LUFA -#include "lufa.h" -#endif -#include "sendchar.h" -#include "timer.h" - -struct CharacterMatrix display; - -extern const unsigned char font[] PROGMEM; - -#ifndef OLED_BLANK_CHAR -#define OLED_BLANK_CHAR ' ' -#endif - -#ifndef OLED_BITS_FILTER -#define OLED_BITS_FILTER -#endif - -// Set this to 1 to help diagnose early startup problems -// when testing power-on with ble. Turn it off otherwise, -// as the latency of printing most of the debug info messes -// with the matrix scan, causing keys to drop. -#define DEBUG_TO_SCREEN 0 - -//static uint16_t last_battery_update; -//static uint32_t vbat; -//#define BatteryUpdateInterval 10000 /* milliseconds */ - -// 'last_flush' is declared as uint16_t, -// so this must be less than 65535 -#ifndef ScreenOffInterval -#define ScreenOffInterval 60000 /* milliseconds */ -#endif - -#if DEBUG_TO_SCREEN -static uint8_t displaying; -#endif -static uint16_t last_flush; - -static bool force_dirty = true; - -// Write command sequence. -// Returns true on success. -static inline bool _send_cmd1(uint8_t cmd) { - bool res = false; - - if (i2c_start(SSD1306_ADDRESS, 100)) { - xprintf("failed to start write to %d\n", SSD1306_ADDRESS); - goto done; - } - - if (i2c_write(0x0 /* command byte follows */, 100)) { - print("failed to write control byte\n"); - - goto done; - } - - if (i2c_write(cmd, 100)) { - xprintf("failed to write command %d\n", cmd); - goto done; - } - res = true; -done: - i2c_stop(); - return res; -} - -#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;} -#define send_cmds(c) if (!_send_cmds(c,sizeof(c))) {goto done;} -#define cmd1(X) X -#define cmd2(X,Y) X,Y -#define cmd3(X,Y,Z) X,Y,Z - -static bool _send_cmds(const uint8_t* p,uint8_t sz) { - for(uint8_t i=sz;i;i--) { - send_cmd1( pgm_read_byte(p++) ); - } - return true; -done: - return false; -} - -#define SEND_CMDS(...) {static const uint8_t _cmds[] PROGMEM = { __VA_ARGS__,0 };send_cmds(_cmds);} - -static void clear_display(void) { - matrix_clear(&display); - - // Clear all of the display bits (there can be random noise - // in the RAM on startup) - SEND_CMDS( - cmd3(PageAddr, 0, (DisplayHeight / 8) - 1), - cmd3(ColumnAddr, 0, DisplayWidth - 1) - ); - - if (i2c_start(SSD1306_ADDRESS, 100)) { - goto done; - } - if (i2c_write(0x40, 100)) { - // Data mode - goto done; - } - for (uint8_t row = MatrixRows;row; row--) { - for (uint8_t col = DisplayWidth; col; col--) { - i2c_write(0, 100); - } - } - - display.dirty = false; - -done: - i2c_stop(); -} - -#if DEBUG_TO_SCREEN -#undef sendchar -static int8_t capture_sendchar(uint8_t c) { - sendchar(c); - iota_gfx_write_char(c); - - if (!displaying) { - iota_gfx_flush(); - } - return 0; -} -#endif - -bool iota_gfx_init(bool rotate) { - bool success = false; - - i2c_init(); - SEND_CMDS( - cmd1(DisplayOff), - cmd2(SetDisplayClockDiv, 0x80), - cmd2(SetMultiPlex, DisplayHeight - 1), - cmd2(SetDisplayOffset, 0), - cmd1(SetStartLine | 0x0), - cmd2(SetChargePump, 0x14 /* Enable */), - cmd2(SetMemoryMode, 0 /* horizontal addressing */) - ); - - if(rotate){ - // the following Flip the display orientation 180 degrees - SEND_CMDS( - cmd1(SegRemap), - cmd1(ComScanInc) - ); - }else{ - // Flips the display orientation 0 degrees - SEND_CMDS( - cmd1(SegRemap | 0x1), - cmd1(ComScanDec) - ); - } - - SEND_CMDS( -#ifdef SSD1306_128X64 - cmd2(SetComPins, 0x12), -#else - cmd2(SetComPins, 0x2), -#endif - cmd2(SetContrast, 0x8f), - cmd2(SetPreCharge, 0xf1), - cmd2(SetVComDetect, 0x40), - cmd1(DisplayAllOnResume), - cmd1(NormalDisplay), - cmd1(DeActivateScroll), - cmd1(DisplayOn), - - cmd2(SetContrast, 0) // Dim - ); - - clear_display(); - - success = true; - - iota_gfx_flush(); - -#if DEBUG_TO_SCREEN - print_set_sendchar(capture_sendchar); -#endif - -done: - return success; -} - -bool iota_gfx_off(void) { - bool success = false; - - send_cmd1(DisplayOff); - success = true; - -done: - return success; -} - -bool iota_gfx_on(void) { - bool success = false; - - send_cmd1(DisplayOn); - success = true; - -done: - return success; -} - -void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) { - *matrix->cursor = c; - ++matrix->cursor; - - if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) { - // We went off the end; scroll the display upwards by one line - memmove(&matrix->display[0], &matrix->display[1], - MatrixCols * (MatrixRows - 1)); - matrix->cursor = &matrix->display[MatrixRows - 1][0]; - memset(matrix->cursor, OLED_BLANK_CHAR, MatrixCols); - } -} - -void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) { - matrix->dirty = true; - - if (c == '\n') { - // Clear to end of line from the cursor and then move to the - // start of the next line - uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols; - - while (cursor_col++ < MatrixCols) { - matrix_write_char_inner(matrix, OLED_BLANK_CHAR); - } - return; - } - - matrix_write_char_inner(matrix, c); -} - -void iota_gfx_write_char(uint8_t c) { - matrix_write_char(&display, c); -} - -void matrix_write(struct CharacterMatrix *matrix, const char *data) { - while (*data) { - matrix_write_char(matrix, *data); - ++data; - } -} - -void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) { - matrix_write(matrix, data); - matrix_write(matrix, "\n"); -} - -void iota_gfx_write(const char *data) { - matrix_write(&display, data); -} - -void matrix_write_P(struct CharacterMatrix *matrix, const char *data) { - while (true) { - uint8_t c = pgm_read_byte(data); - if (c == 0) { - return; - } - matrix_write_char(matrix, c); - ++data; - } -} - -void iota_gfx_write_P(const char *data) { - matrix_write_P(&display, data); -} - -void matrix_clear(struct CharacterMatrix *matrix) { - memset(matrix->display, OLED_BLANK_CHAR, sizeof(matrix->display)); - matrix->cursor = &matrix->display[0][0]; - matrix->dirty = true; -} - -void iota_gfx_clear_screen(void) { - matrix_clear(&display); -} - -void matrix_render(struct CharacterMatrix *matrix) { - last_flush = timer_read(); - iota_gfx_on(); -#if DEBUG_TO_SCREEN - ++displaying; -#endif - - // Move to the home position - SEND_CMDS( - cmd3(PageAddr, 0, MatrixRows - 1), - cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1) - ); - - if (i2c_write(SSD1306_ADDRESS, 100)) { - goto done; - } - if (i2c_write(0x40, 100)) { - // Data mode - goto done; - } - - for (uint8_t row = 0; row < MatrixRows; ++row) { - for (uint8_t col = 0; col < MatrixCols; ++col) { - const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth); - - for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) { - uint8_t colBits = pgm_read_byte(glyph + glyphCol); - i2c_write(colBits OLED_BITS_FILTER, 100); - } - - // 1 column of space between chars (it's not included in the glyph) - //i2c_master_write(0); - } - } - - matrix->dirty = false; - -done: - i2c_stop(); -#if DEBUG_TO_SCREEN - --displaying; -#endif -} - -void iota_gfx_flush(void) { - matrix_render(&display); -} - -__attribute__ ((weak)) -void iota_gfx_task_user(void) { -} - -void iota_gfx_task(void) { - iota_gfx_task_user(); - - if (display.dirty|| force_dirty) { - iota_gfx_flush(); - force_dirty = false; - } - - if (ScreenOffInterval !=0 && timer_elapsed(last_flush) > ScreenOffInterval) { - iota_gfx_off(); - } -} - -bool process_record_gfx(uint16_t keycode, keyrecord_t *record) { - force_dirty = true; - return true; -} - -#endif |