From 0bf81a4723a977adc0cb09b4272ee5c9b4f2bbbb Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Wed, 20 Mar 2019 06:31:34 +0900 Subject: [PATCH] Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c . --- .../helix/rev2/keymaps/five_rows/config.h | 8 +-- .../helix/rev2/keymaps/five_rows/keymap.c | 38 ++++++++-- .../helix/rev2/keymaps/five_rows/rules.mk | 18 +++++ keyboards/helix/rev2/matrix.c | 21 ++++-- keyboards/helix/rev2/split_scomm.c | 69 ++++++++++++++++--- keyboards/helix/rev2/split_scomm.h | 9 ++- keyboards/helix/rev2/split_util.c | 6 ++ 7 files changed, 143 insertions(+), 26 deletions(-) diff --git a/keyboards/helix/rev2/keymaps/five_rows/config.h b/keyboards/helix/rev2/keymaps/five_rows/config.h index 538859bc3c..0b3a6dd8f2 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/config.h +++ b/keyboards/helix/rev2/keymaps/five_rows/config.h @@ -36,12 +36,12 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - //#define RGBLIGHT_EFFECT_SNAKE - //#define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT #define RGBLIGHT_EFFECT_CHRISTMAS #define RGBLIGHT_EFFECT_STATIC_GRADIENT - //#define RGBLIGHT_EFFECT_RGB_TEST - //#define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING #endif #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/five_rows/keymap.c b/keyboards/helix/rev2/keymaps/five_rows/keymap.c index 7b7d573d6a..6c09893913 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/keymap.c +++ b/keyboards/helix/rev2/keymaps/five_rows/keymap.c @@ -29,10 +29,12 @@ extern uint8_t is_master; // entirely and just use numbers. enum layer_number { _QWERTY = 0, +#if 0 _COLEMAK, _DVORAK, _EUCALYN, _KEYPAD, +#endif _AUX, _KAUX, _LOWER, @@ -91,6 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ ), +#if 0 /* Colemak * ,-----------------------------------------. ,-----------------------------------------. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | @@ -111,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LSFT, Z, X, C, V, B, GRV, QUOT, K, M, COMM, DOT, SLSH, RSFT, \ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ ), - +#endif /* Dvorak * ,-----------------------------------------. ,-----------------------------------------. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | @@ -125,6 +128,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | * `-------------------------------------------------------------------------------------------------' */ +#if 0 [_DVORAK] = LAYOUT_kc( \ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, BSLS, \ @@ -132,7 +136,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LSFT, SCLN, Q, J, K, X, GRV, SLSH, B, M, W, V, Z, RSFT, \ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ ), - +#endif /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout) * ,-----------------------------------------. ,-----------------------------------------. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | @@ -146,6 +150,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower | * `-------------------------------------------------------------------------------------------------' */ +#if 0 [_EUCALYN] = LAYOUT_kc( \ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \ TAB, Q, W, COMM, DOT, SCLN, M, R, D, Y, P, BSLS, \ @@ -153,7 +158,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LSFT, Z, X, C, V, F, GRV, QUOT, B, H, J, L, SLSH, RSFT, \ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \ ), - +#endif /* Keypad * ,-----------------------------------------. ,-----------------------------------------. * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * | @@ -167,6 +172,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | 0 | , | . | Enter| F5 | F10 | F12 | F12 | F5 | F10 | Enter| 0 | , | . | * `-------------------------------------------------------------------------------------------------' */ +#if 0 [_KEYPAD] = LAYOUT_kc( \ TAB, PSLS, PAST, DEL, F1, F6, F1, F6, DEL, TAB, PSLS, PAST, \ KP_7, KP_8, KP_9, BSPC, F2, F7, F2, F7, BSPC, KP_7, KP_8, KP_9, \ @@ -174,7 +180,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KP_1, KP_2, KP_3, PPLS, F4, F9, F11, F11, F4, F9, PPLS, KP_1, KP_2, KP_3, \ KP_0, COMM, PDOT, PENT, F5, F10, FF12, FF12, F5, F10, PENT, KP_0, COMM, PDOT \ ), - +#endif /* AUX modifier key layer * ,-----------------------------------------. ,-----------------------------------------. * | | | | | | | | | | | | | | @@ -188,6 +194,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | 00 | | | | | | | | | | | 00 | | * `-------------------------------------------------------------------------------------------------' */ +#if 0 [_KAUX] = LAYOUT_kc( \ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ @@ -195,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ZERO2,____ \ ), - +#endif /* Keypad function layer * ,-----------------------------------------. ,-----------------------------------------. * | | | | Pause| ScrLk| PtrSc| | PtrSc| ScrLk| Pause| | | | @@ -293,6 +300,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | BS | Enter| | | | | | | | * `-------------------------------------------------------------------------------------------------' */ +#if 0 [_AUX] = LAYOUT_kc( \ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ @@ -300,6 +308,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ ____, ____, ____, ____, ____, BSPC, RAEN, ____, ____, ____, ____, ____, ____, ____ \ ) +#endif }; #else @@ -337,14 +346,19 @@ void update_base_layer(int base) if( current_default_layer != base ) { eeconfig_update_default_layer(1UL<event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_colemak); @@ -366,8 +381,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { update_base_layer(_COLEMAK); } return false; +#endif break; case DVORAK: +#if 0 if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_dvorak); @@ -375,8 +392,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { update_base_layer(_DVORAK); } return false; +#endif break; case EUCALYN: +#if 0 if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_dvorak); @@ -384,8 +403,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { update_base_layer(_EUCALYN); } return false; +#endif break; case KEYPAD: +#if 0 if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_dvorak); @@ -393,6 +414,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { update_base_layer(_KEYPAD); } return false; +#endif break; case KC_ZERO2: if (record->event.pressed) { @@ -511,6 +533,7 @@ static void render_logo(struct CharacterMatrix *matrix) { } static const char Qwerty_name[] PROGMEM = " Qwerty"; +#if 0 static const char Colemak_name[] PROGMEM = " Colemak"; static const char Dvorak_name[] PROGMEM = " Dvorak"; static const char Eucalyn_name[] PROGMEM = " Eucalyn"; @@ -518,6 +541,7 @@ static const char Keypad_name[] PROGMEM = " Keypad"; static const char AUX_name[] PROGMEM = ":AUX"; static const char KAUX_name[] PROGMEM = ":00"; +#endif static const char Padfunc_name[] PROGMEM = ":PadFunc"; static const char Lower_name[] PROGMEM = ":Func"; static const char Raise_name[] PROGMEM = ":Extra"; @@ -525,12 +549,14 @@ static const char Adjust_name[] PROGMEM = ":Adjust"; static const char *layer_names[] = { [_QWERTY] = Qwerty_name, +#if 0 [_COLEMAK] = Colemak_name, [_DVORAK] = Dvorak_name, [_EUCALYN]= Eucalyn_name, [_KEYPAD] = Keypad_name, [_AUX] = AUX_name, [_KAUX] = KAUX_name, +#endif [_LOWER] = Lower_name, [_RAISE] = Raise_name, [_PADFUNC]= Padfunc_name, diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk index a0bf21917b..728b83fcd5 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk @@ -20,6 +20,8 @@ UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. SWAP_HANDS_ENABLE = no # Enable one-hand typing +RGBLIGHT_SPLIT = no +RGBLIGHT_SPLIT_XA = no define HELIX_CUSTOMISE_MSG $(info Helix customize) @@ -28,6 +30,8 @@ define HELIX_CUSTOMISE_MSG $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE)) $(info - LED_ANIMATION=$(LED_ANIMATIONS)) $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE)) + $(info - RGBLIGHT_SPLIT=$(RGBLIGHT_SPLIT)) + $(info - RGBLIGHT_SPLIT_XA=$(RGBLIGHT_SPLIT_XA)) endef # Helix keyboard customize @@ -56,6 +60,12 @@ Link_Time_Optimization = no # if firmware size over limit, try this option ## make HELIX=oled,back,ios helix:five_rows ## ifneq ($(strip $(HELIX)),) + ifeq ($(findstring split,$(HELIX)), split) + RGBLIGHT_SPLIT = yes + endif + ifeq ($(findstring splitxa,$(HELIX)), splitxa) + RGBLIGHT_SPLIT_XA = yes + endif ifeq ($(findstring oled,$(HELIX)), oled) OLED_ENABLE = yes endif @@ -114,6 +124,14 @@ ifeq ($(strip $(OLED_ENABLE)), yes) OPT_DEFS += -DOLED_ENABLE endif +ifeq ($(strip $(RGBLIGHT_SPLIT)), yes) + OPT_DEFS += -DRGBLIGHT_SPLIT +endif + +ifeq ($(strip $(RGBLIGHT_SPLIT_XA)), yes) + OPT_DEFS += -DRGBLIGHT_SPLIT_NO_ANIMATION_SYNC +endif + ifeq ($(strip $(LOCAL_GLCDFONT)), yes) OPT_DEFS += -DLOCAL_GLCDFONT endif diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c index 322959dbbb..39d3127b9f 100644 --- a/keyboards/helix/rev2/matrix.c +++ b/keyboards/helix/rev2/matrix.c @@ -203,12 +203,16 @@ uint8_t matrix_scan(void) { if (is_master) { matrix_master_scan(); + serial_update_rgb(); }else{ matrix_slave_scan(); +#ifndef RGBLIGHT_SPLIT int offset = (isLeftHand) ? ROWS_PER_HAND : 0; memcpy(&matrix[offset], (void *)serial_master_buffer, sizeof(serial_master_buffer)); +#endif matrix_scan_quantum(); + serial_sync_rgb(); } return 1; } @@ -220,22 +224,25 @@ uint8_t matrix_master_scan(void) { int mchanged = 1; #ifndef KEYBOARD_helix_rev1 + #ifndef RGBLIGHT_SPLIT int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; - -#ifdef USE_MATRIX_I2C + #endif + #ifdef USE_MATRIX_I2C // for (int i = 0; i < ROWS_PER_HAND; ++i) { /* i2c_slave_buffer[i] = matrix[offset+i]; */ // i2c_slave_buffer[i] = matrix[offset+i]; // } -#else // USE_SERIAL - #ifdef SERIAL_USE_MULTI_TRANSACTION + #else // USE_SERIAL + #ifndef RGBLIGHT_SPLIT + #ifdef SERIAL_USE_MULTI_TRANSACTION mchanged = memcmp((void *)serial_master_buffer, &matrix[offset], sizeof(serial_master_buffer)); - #endif + #endif memcpy((void *)serial_master_buffer, &matrix[offset], sizeof(serial_master_buffer)); -#endif -#endif + #endif /* RGBLIGHT_SPLIT */ + #endif /*USE_MATRIX_I2C*/ +#endif /*KEYBOARD_helix_rev1*/ #ifdef USE_MATRIX_I2C if( i2c_transaction() ) { diff --git a/keyboards/helix/rev2/split_scomm.c b/keyboards/helix/rev2/split_scomm.c index ada7867960..56ed96be33 100644 --- a/keyboards/helix/rev2/split_scomm.c +++ b/keyboards/helix/rev2/split_scomm.c @@ -12,8 +12,14 @@ #endif uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +#ifndef RGBLIGHT_SPLIT uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; +#endif +#ifdef RGBLIGHT_SPLIT +rgblight_syncinfo_t volatile serial_master_rgb = {}; +#endif uint8_t volatile status_com = 0; +uint8_t volatile status_rgb = 0; uint8_t volatile status1 = 0; uint8_t slave_buffer_change_count = 0; uint8_t s_change_old = 0xff; @@ -26,18 +32,28 @@ SSTD_t transactions[] = { 0, NULL, sizeof(slave_buffer_change_count), &slave_buffer_change_count, }, -#define PUT_MASTER_GET_SLAVE_STATUS 1 - /* master buffer changed need send, and recive slave_buffer_change_count */ - { (uint8_t *)&status_com, - sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer, - sizeof(slave_buffer_change_count), &slave_buffer_change_count, - }, -#define GET_SLAVE_BUFFER 2 +#define GET_SLAVE_BUFFER 1 /* recive serial_slave_buffer */ { (uint8_t *)&status1, 0, NULL, sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer + }, +#ifndef RGBLIGHT_SPLIT +#define PUT_MASTER_GET_SLAVE_STATUS 2 + /* master buffer changed need send, and recive slave_buffer_change_count */ + { (uint8_t *)&status_com, + sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer, + sizeof(slave_buffer_change_count), &slave_buffer_change_count, + } +#endif +#ifdef RGBLIGHT_SPLIT +#define PUT_MASTER_RGB_STATUS 2 + /* master rgb status changed need send */ + { (uint8_t *)&status_rgb, + sizeof(serial_master_rgb), (uint8_t *)&serial_master_rgb, + 0, NULL } +#endif }; void serial_master_init(void) @@ -56,8 +72,9 @@ void serial_slave_init(void) int serial_update_buffers(int master_update) { int status, smatstatus; +#ifndef RGBLIGHT_SPLIT static int need_retry = 0; - +#endif if( s_change_old != s_change_new ) { smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER); if( smatstatus == TRANSACTION_END ) { @@ -74,6 +91,7 @@ int serial_update_buffers(int master_update) smatstatus = TRANSACTION_END; // dummy status } +#ifndef RGBLIGHT_SPLIT if( !master_update && !need_retry) { status = soft_serial_transaction(GET_SLAVE_STATUS); } else { @@ -85,8 +103,43 @@ int serial_update_buffers(int master_update) } else { need_retry = 1; } +#else + status = soft_serial_transaction(GET_SLAVE_STATUS); + if( status == TRANSACTION_END ) { + s_change_new = slave_buffer_change_count; + } +#endif return smatstatus; } +int serial_update_rgb(void) +{ +#ifdef RGBLIGHT_SPLIT + int status; + if (rgblight_get_change_flags()) { + rgblight_get_syncinfo((rgblight_syncinfo_t *)&serial_master_rgb); + status = soft_serial_transaction(PUT_MASTER_RGB_STATUS); + if (status == TRANSACTION_END) { + rgblight_clear_change_flags(); + } + return status; + } else { + return TRANSACTION_END; + } +#else + return TRANSACTION_END; +#endif +} + +void serial_sync_rgb(void) +{ +#ifdef RGBLIGHT_SPLIT + if( status_rgb == TRANSACTION_ACCEPTED ) { + rgblight_update_sync((rgblight_syncinfo_t *)&serial_master_rgb, false); + status_rgb = TRANSACTION_END; + } +#endif +} + #endif // SERIAL_USE_MULTI_TRANSACTION #endif /* USE_SERIAL */ diff --git a/keyboards/helix/rev2/split_scomm.h b/keyboards/helix/rev2/split_scomm.h index 873d8939d8..4261e5a279 100644 --- a/keyboards/helix/rev2/split_scomm.h +++ b/keyboards/helix/rev2/split_scomm.h @@ -1,6 +1,10 @@ #ifndef SPLIT_COMM_H #define SPLIT_COMM_H +#ifdef RGBLIGHT_SPLIT +#include +#endif + #ifndef SERIAL_USE_MULTI_TRANSACTION /* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */ #include "serial.h" @@ -12,13 +16,16 @@ #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2 extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +#ifndef RGBLIGHT_SPLIT extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; +#endif extern uint8_t slave_buffer_change_count; void serial_master_init(void); void serial_slave_init(void); int serial_update_buffers(int master_changed); - +int serial_update_rgb(void); +void serial_sync_rgb(void); #endif #endif /* SPLIT_COMM_H */ diff --git a/keyboards/helix/rev2/split_util.c b/keyboards/helix/rev2/split_util.c index e1ff8b4379..c4ad7e8cd3 100644 --- a/keyboards/helix/rev2/split_util.c +++ b/keyboards/helix/rev2/split_util.c @@ -68,3 +68,9 @@ void split_keyboard_setup(void) { void matrix_setup(void) { split_keyboard_setup(); } + +#ifdef RGBLIGHT_SPLIT +bool is_keyboard_master(void) { + return isLeftHand; +} +#endif