Formatting

master
Mark 2022-02-06 13:27:09 -08:00
parent d40756b91e
commit c7649ca758
Signed by: Mark
GPG Key ID: AD62BB059C2AAEE4
2 changed files with 487 additions and 489 deletions

View File

@ -47,173 +47,172 @@ bool i2c_initialized = 0;
i2c_status_t mcp23018_status = 0x20; i2c_status_t mcp23018_status = 0x20;
void matrix_init_kb(void) { void matrix_init_kb(void) {
// keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
TCCR1A = 0b10101001; // set and configure fast PWM TCCR1A = 0b10101001; // set and configure fast PWM
TCCR1B = 0b00001001; // set and configure fast PWM TCCR1B = 0b00001001; // set and configure fast PWM
// (tied to Vcc for hardware convenience) // (tied to Vcc for hardware convenience)
DDRB &= ~(1<<4); // set B(4) as input DDRB &= ~(1<<4); // set B(4) as input
PORTB &= ~(1<<4); // set B(4) internal pull-up disabled PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
// unused pins - C7, D4, D5, D7, E6 // unused pins - C7, D4, D5, D7, E6
// set as input with internal pull-up enabled // set as input with internal pull-up enabled
DDRC &= ~(1<<7); DDRC &= ~(1<<7);
DDRD &= ~(1<<5 | 1<<4); DDRD &= ~(1<<5 | 1<<4);
DDRE &= ~(1<<6); DDRE &= ~(1<<6);
PORTC |= (1<<7); PORTC |= (1<<7);
PORTD |= (1<<5 | 1<<4); PORTD |= (1<<5 | 1<<4);
PORTE |= (1<<6); PORTE |= (1<<6);
keyboard_config.raw = eeconfig_read_kb(); keyboard_config.raw = eeconfig_read_kb();
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 ); ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 );
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
if (keyboard_config.rgb_matrix_enable) { if (keyboard_config.rgb_matrix_enable) {
rgb_matrix_set_flags(LED_FLAG_ALL); rgb_matrix_set_flags(LED_FLAG_ALL);
} else { } else {
rgb_matrix_set_flags(LED_FLAG_NONE); rgb_matrix_set_flags(LED_FLAG_NONE);
} }
#endif #endif
ergodox_blink_all_leds(); ergodox_blink_all_leds();
matrix_init_user(); matrix_init_user();
} }
void ergodox_blink_all_leds(void) void ergodox_blink_all_leds(void) {
{ ergodox_led_all_off();
ergodox_led_all_off(); ergodox_led_all_set(LED_BRIGHTNESS_DEFAULT);
ergodox_led_all_set(LED_BRIGHTNESS_DEFAULT); ergodox_right_led_1_on();
ergodox_right_led_1_on(); _delay_ms(50);
_delay_ms(50); ergodox_right_led_2_on();
ergodox_right_led_2_on(); _delay_ms(50);
_delay_ms(50); ergodox_right_led_3_on();
ergodox_right_led_3_on(); _delay_ms(50);
_delay_ms(50);
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
ergodox_left_led_1_on(); ergodox_left_led_1_on();
_delay_ms(50); _delay_ms(50);
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
ergodox_left_led_2_on(); ergodox_left_led_2_on();
_delay_ms(50); _delay_ms(50);
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
ergodox_left_led_3_on(); ergodox_left_led_3_on();
_delay_ms(50); _delay_ms(50);
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
#endif #endif
ergodox_right_led_1_off(); ergodox_right_led_1_off();
_delay_ms(50); _delay_ms(50);
ergodox_right_led_2_off(); ergodox_right_led_2_off();
_delay_ms(50); _delay_ms(50);
ergodox_right_led_3_off(); ergodox_right_led_3_off();
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
_delay_ms(50); _delay_ms(50);
ergodox_left_led_1_off(); ergodox_left_led_1_off();
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
_delay_ms(50); _delay_ms(50);
ergodox_left_led_2_off(); ergodox_left_led_2_off();
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
_delay_ms(50); _delay_ms(50);
ergodox_left_led_3_off(); ergodox_left_led_3_off();
if (!mcp23018_status) { if (!mcp23018_status) {
mcp23018_status = ergodox_left_leds_update(); mcp23018_status = ergodox_left_leds_update();
} }
#endif #endif
//ergodox_led_all_on(); //ergodox_led_all_on();
//_delay_ms(333); //_delay_ms(333);
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 ); ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 );
ergodox_led_all_off(); ergodox_led_all_off();
} }
uint8_t init_mcp23018(void) { uint8_t init_mcp23018(void) {
mcp23018_status = 0x20; mcp23018_status = 0x20;
// I2C subsystem // I2C subsystem
// uint8_t sreg_prev; // uint8_t sreg_prev;
// sreg_prev=SREG; // sreg_prev=SREG;
// cli(); // cli();
if (i2c_initialized == 0) { if (i2c_initialized == 0) {
i2c_init(); // on pins D(1,0) i2c_init(); // on pins D(1,0)
i2c_initialized = true; i2c_initialized = true;
_delay_ms(1000); _delay_ms(1000);
} }
// i2c_init(); // on pins D(1,0) // i2c_init(); // on pins D(1,0)
// _delay_ms(1000); // _delay_ms(1000);
// set pin direction // set pin direction
// - unused : input : 1 // - unused : input : 1
// - input : input : 1 // - input : input : 1
// - driving : output : 0 // - driving : output : 0
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
i2c_stop(); i2c_stop();
// set pull-up // set pull-up
// - unused : on : 1 // - unused : on : 1
// - input : on : 1 // - input : on : 1
// - driving : off : 0 // - driving : off : 0
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out; mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
out: out:
i2c_stop(); i2c_stop();
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update(); if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
#endif // LEFT_LEDS #endif // LEFT_LEDS
// SREG=sreg_prev; // SREG=sreg_prev;
return mcp23018_status; return mcp23018_status;
} }
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
uint8_t ergodox_left_leds_update(void) { uint8_t ergodox_left_leds_update(void) {
if (mcp23018_status) { // if there was an error if (mcp23018_status) { // if there was an error
return mcp23018_status; return mcp23018_status;
} }
#define LEFT_LED_1_SHIFT 7 // in MCP23018 port B #define LEFT_LED_1_SHIFT 7 // in MCP23018 port B
#define LEFT_LED_2_SHIFT 6 // in MCP23018 port B #define LEFT_LED_2_SHIFT 6 // in MCP23018 port B
#define LEFT_LED_3_SHIFT 7 // in MCP23018 port A #define LEFT_LED_3_SHIFT 7 // in MCP23018 port A
// set logical value (doesn't matter on inputs) // set logical value (doesn't matter on inputs)
// - unused : hi-Z : 1 // - unused : hi-Z : 1
// - input : hi-Z : 1 // - input : hi-Z : 1
// - driving : hi-Z : 1 // - driving : hi-Z : 1
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);
if (mcp23018_status) goto out; if (mcp23018_status) goto out;
mcp23018_status = i2c_write(OLATA, ERGODOX_EZ_I2C_TIMEOUT); mcp23018_status = i2c_write(OLATA, ERGODOX_EZ_I2C_TIMEOUT);
if (mcp23018_status) goto out; if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b11111111 mcp23018_status = i2c_write(0b11111111
& ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT), & ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT),
ERGODOX_EZ_I2C_TIMEOUT); ERGODOX_EZ_I2C_TIMEOUT);
if (mcp23018_status) goto out; if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b11111111 mcp23018_status = i2c_write(0b11111111
& ~(ergodox_left_led_2<<LEFT_LED_2_SHIFT) & ~(ergodox_left_led_2<<LEFT_LED_2_SHIFT)
& ~(ergodox_left_led_1<<LEFT_LED_1_SHIFT), & ~(ergodox_left_led_1<<LEFT_LED_1_SHIFT),
ERGODOX_EZ_I2C_TIMEOUT); ERGODOX_EZ_I2C_TIMEOUT);
if (mcp23018_status) goto out; if (mcp23018_status) goto out;
out: out:
i2c_stop(); i2c_stop();
return mcp23018_status; return mcp23018_status;
} }
#endif #endif
@ -222,35 +221,35 @@ uint8_t ergodox_left_leds_update(void) {
__attribute__ ((weak)) __attribute__ ((weak))
// swap-hands action needs a matrix to define the swap // swap-hands action needs a matrix to define the swap
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
/* Left hand, matrix positions */ /* Left hand, matrix positions */
{{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}}, {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
{{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}}, {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
/* Right hand, matrix positions */ /* Right hand, matrix positions */
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
}; };
#endif #endif
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
void suspend_power_down_kb(void) { void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true); rgb_matrix_set_suspend_state(true);
suspend_power_down_user(); suspend_power_down_user();
} }
void suspend_wakeup_init_kb(void) { void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false); rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user(); suspend_wakeup_init_user();
} }
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
@ -259,153 +258,155 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
* | | G location * | | G location
* | | | B location * | | | B location
* | | | | */ * | | | | */
{0, C3_1, C2_1, C4_1}, // LED1 on right {0, C3_1, C2_1, C4_1}, // LED1 on right
{0, C6_1, C5_1, C7_1}, // LED2 {0, C6_1, C5_1, C7_1}, // LED2
{0, C4_2, C3_2, C5_2}, // LED3 {0, C4_2, C3_2, C5_2}, // LED3
{0, C7_2, C6_2, C8_2}, // LED4 {0, C7_2, C6_2, C8_2}, // LED4
{0, C2_3, C1_3, C3_3}, // LED5 {0, C2_3, C1_3, C3_3}, // LED5
{0, C5_3, C4_3, C6_3}, // LED6 {0, C5_3, C4_3, C6_3}, // LED6
{0, C8_3, C7_3, C9_3}, // LED7 {0, C8_3, C7_3, C9_3}, // LED7
{0, C2_4, C1_4, C3_4}, // LED8 {0, C2_4, C1_4, C3_4}, // LED8
{0, C6_4, C5_4, C7_4}, // LED9 {0, C6_4, C5_4, C7_4}, // LED9
{0, C2_5, C1_5, C3_5}, // LED10 {0, C2_5, C1_5, C3_5}, // LED10
{0, C7_5, C6_5, C8_5}, // LED11 {0, C7_5, C6_5, C8_5}, // LED11
{0, C2_6, C1_6, C3_6}, // LED12 {0, C2_6, C1_6, C3_6}, // LED12
{0, C5_6, C4_6, C6_6}, // LED13 {0, C5_6, C4_6, C6_6}, // LED13
{0, C8_6, C7_6, C9_6}, // LED14 {0, C8_6, C7_6, C9_6}, // LED14
{0, C2_7, C1_7, C3_7}, // LED15 {0, C2_7, C1_7, C3_7}, // LED15
{0, C5_7, C4_7, C6_7}, // LED16 {0, C5_7, C4_7, C6_7}, // LED16
{0, C2_8, C1_8, C3_8}, // LED17 {0, C2_8, C1_8, C3_8}, // LED17
{0, C5_8, C4_8, C6_8}, // LED18 {0, C5_8, C4_8, C6_8}, // LED18
{0, C3_9, C2_9, C4_9}, // LED19 {0, C3_9, C2_9, C4_9}, // LED19
{0, C6_9, C5_9, C7_9}, // LED20 {0, C6_9, C5_9, C7_9}, // LED20
{0, C4_10, C3_10, C5_10}, // LED21 {0, C4_10, C3_10, C5_10}, // LED21
{0, C7_10, C6_10, C8_10}, // LED22 {0, C7_10, C6_10, C8_10}, // LED22
{0, C2_11, C1_11, C3_11}, // LED23 {0, C2_11, C1_11, C3_11}, // LED23
{0, C5_11, C4_11, C6_11}, // LED24 {0, C5_11, C4_11, C6_11}, // LED24
{1, C3_1, C2_1, C4_1}, // LED1 on left {1, C3_1, C2_1, C4_1}, // LED1 on left
{1, C6_1, C5_1, C7_1}, // LED2 {1, C6_1, C5_1, C7_1}, // LED2
{1, C4_2, C3_2, C5_2}, // LED3 {1, C4_2, C3_2, C5_2}, // LED3
{1, C7_2, C6_2, C8_2}, // LED4 {1, C7_2, C6_2, C8_2}, // LED4
{1, C2_3, C1_3, C3_3}, // LED5 {1, C2_3, C1_3, C3_3}, // LED5
{1, C5_3, C4_3, C6_3}, // LED6 {1, C5_3, C4_3, C6_3}, // LED6
{1, C8_3, C7_3, C9_3}, // LED7 {1, C8_3, C7_3, C9_3}, // LED7
{1, C2_4, C1_4, C3_4}, // LED8 {1, C2_4, C1_4, C3_4}, // LED8
{1, C6_4, C5_4, C7_4}, // LED9 {1, C6_4, C5_4, C7_4}, // LED9
{1, C2_5, C1_5, C3_5}, // LED10 {1, C2_5, C1_5, C3_5}, // LED10
{1, C7_5, C6_5, C8_5}, // LED11 {1, C7_5, C6_5, C8_5}, // LED11
{1, C2_6, C1_6, C3_6}, // LED12 {1, C2_6, C1_6, C3_6}, // LED12
{1, C5_6, C4_6, C6_6}, // LED13 {1, C5_6, C4_6, C6_6}, // LED13
{1, C8_6, C7_6, C9_6}, // LED14 {1, C8_6, C7_6, C9_6}, // LED14
{1, C2_7, C1_7, C3_7}, // LED15 {1, C2_7, C1_7, C3_7}, // LED15
{1, C5_7, C4_7, C6_7}, // LED16 {1, C5_7, C4_7, C6_7}, // LED16
{1, C2_8, C1_8, C3_8}, // LED17 {1, C2_8, C1_8, C3_8}, // LED17
{1, C5_8, C4_8, C6_8}, // LED18 {1, C5_8, C4_8, C6_8}, // LED18
{1, C3_9, C2_9, C4_9}, // LED19 {1, C3_9, C2_9, C4_9}, // LED19
{1, C6_9, C5_9, C7_9}, // LED20 {1, C6_9, C5_9, C7_9}, // LED20
{1, C4_10, C3_10, C5_10}, // LED21 {1, C4_10, C3_10, C5_10}, // LED21
{1, C7_10, C6_10, C8_10}, // LED22 {1, C7_10, C6_10, C8_10}, // LED22
{1, C2_11, C1_11, C3_11}, // LED23 {1, C2_11, C1_11, C3_11}, // LED23
{1, C5_11, C4_11, C6_11} // LED24 {1, C5_11, C4_11, C6_11} // LED24
}; };
led_config_t g_led_config = { { led_config_t g_led_config = { {
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 28, 33, 38, 43, 47, NO_LED }, { 28, 33, 38, 43, 47, NO_LED },
{ 27, 32, 37, 42, 46, NO_LED }, { 27, 32, 37, 42, 46, NO_LED },
{ 26, 31, 36, 41, 45, NO_LED }, { 26, 31, 36, 41, 45, NO_LED },
{ 25, 30, 35, 40, 44, NO_LED }, { 25, 30, 35, 40, 44, NO_LED },
{ 24, 29, 34, 39, NO_LED, NO_LED }, { 24, 29, 34, 39, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 0, 5, 10, 15, NO_LED, NO_LED }, { 0, 5, 10, 15, NO_LED, NO_LED },
{ 1, 6, 11, 16, 20, NO_LED }, { 1, 6, 11, 16, 20, NO_LED },
{ 2, 7, 12, 17, 21, NO_LED }, { 2, 7, 12, 17, 21, NO_LED },
{ 3, 8, 13, 18, 22, NO_LED }, { 3, 8, 13, 18, 22, NO_LED },
{ 4, 9, 14, 19, 23, NO_LED }, { 4, 9, 14, 19, 23, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
}, { }, {
{ 137, 0 }, { 154, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 137, 12 }, { 137, 0 }, { 154, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 137, 12 },
{ 154, 12 }, { 172, 12 }, { 189, 12 }, { 206, 12 }, { 137, 25 }, { 154, 25 }, { 154, 12 }, { 172, 12 }, { 189, 12 }, { 206, 12 }, { 137, 25 }, { 154, 25 },
{ 172, 25 }, { 189, 25 }, { 206, 25 }, { 137, 38 }, { 154, 38 }, { 172, 38 }, { 172, 25 }, { 189, 25 }, { 206, 25 }, { 137, 38 }, { 154, 38 }, { 172, 38 },
{ 189, 38 }, { 206, 38 }, { 154, 51 }, { 172, 51 }, { 189, 51 }, { 206, 51 }, { 189, 38 }, { 206, 38 }, { 154, 51 }, { 172, 51 }, { 189, 51 }, { 206, 51 },
{ 86, 0 }, { 68, 0 }, { 51, 0 }, { 34, 0 }, { 17, 0 }, { 86, 12 }, { 86, 0 }, { 68, 0 }, { 51, 0 }, { 34, 0 }, { 17, 0 }, { 86, 12 },
{ 68, 12 }, { 51, 12 }, { 34, 12 }, { 17, 12 }, { 86, 25 }, { 68, 25 }, { 68, 12 }, { 51, 12 }, { 34, 12 }, { 17, 12 }, { 86, 25 }, { 68, 25 },
{ 51, 25 }, { 34, 25 }, { 17, 25 }, { 86, 38 }, { 68, 38 }, { 51, 38 }, { 51, 25 }, { 34, 25 }, { 17, 25 }, { 86, 38 }, { 68, 38 }, { 51, 38 },
{ 34, 38 }, { 17, 38 }, { 68, 51 }, { 51, 51 }, { 34, 51 }, { 17, 51 } { 34, 38 }, { 17, 38 }, { 68, 51 }, { 51, 51 }, { 34, 51 }, { 17, 51 }
}, { }, {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1 4, 4, 1, 1, 1, 1
} }; } };
void keyboard_post_init_kb(void) { void keyboard_post_init_kb(void) {
rgb_matrix_enable_noeeprom(); rgb_matrix_enable_noeeprom();
keyboard_post_init_user(); keyboard_post_init_user();
} }
#endif #endif
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case LED_LEVEL: case LED_LEVEL:
if (record->event.pressed) { if (record->event.pressed) {
keyboard_config.led_level++; keyboard_config.led_level++;
if (keyboard_config.led_level > 4) { if (keyboard_config.led_level > 4) {
keyboard_config.led_level = 0; keyboard_config.led_level = 0;
} }
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 ); ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 );
eeconfig_update_kb(keyboard_config.raw); eeconfig_update_kb(keyboard_config.raw);
layer_state_set_kb(layer_state); layer_state_set_kb(layer_state);
} }
break; break;
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
case TOGGLE_LAYER_COLOR: case TOGGLE_LAYER_COLOR:
if (record->event.pressed) { if (record->event.pressed) {
keyboard_config.disable_layer_led ^= 1; keyboard_config.disable_layer_led ^= 1;
if (keyboard_config.disable_layer_led) if (keyboard_config.disable_layer_led) {
rgb_matrix_set_color_all(0, 0, 0); rgb_matrix_set_color_all(0, 0, 0);
eeconfig_update_kb(keyboard_config.raw); }
} eeconfig_update_kb(keyboard_config.raw);
break; }
case RGB_TOG: break;
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) { case RGB_TOG:
case LED_FLAG_ALL: { if (record->event.pressed) {
rgb_matrix_set_flags(LED_FLAG_NONE); switch (rgb_matrix_get_flags()) {
keyboard_config.rgb_matrix_enable = false; case LED_FLAG_ALL: {
rgb_matrix_set_color_all(0, 0, 0); rgb_matrix_set_flags(LED_FLAG_NONE);
} keyboard_config.rgb_matrix_enable = false;
break; rgb_matrix_set_color_all(0, 0, 0);
default: { }
rgb_matrix_set_flags(LED_FLAG_ALL); break;
keyboard_config.rgb_matrix_enable = true; default: {
} rgb_matrix_set_flags(LED_FLAG_ALL);
break; keyboard_config.rgb_matrix_enable = true;
} }
eeconfig_update_kb(keyboard_config.raw); break;
} }
return false; eeconfig_update_kb(keyboard_config.raw);
}
return false;
#endif #endif
} }
return process_record_user(keycode, record); return process_record_user(keycode, record);
} }
void eeconfig_init_kb(void) { // EEPROM is getting reset! void eeconfig_init_kb(void) { // EEPROM is getting reset!
keyboard_config.raw = 0; keyboard_config.raw = 0;
keyboard_config.led_level = 4; keyboard_config.led_level = 4;
keyboard_config.rgb_matrix_enable = true; keyboard_config.rgb_matrix_enable = true;
eeconfig_update_kb(keyboard_config.raw); eeconfig_update_kb(keyboard_config.raw);
eeconfig_init_user(); eeconfig_init_user();
} }
#ifdef ORYX_ENABLE #ifdef ORYX_ENABLE
@ -418,70 +419,70 @@ static bool is_dynamic_recording = false;
static uint16_t dynamic_loop_timer; static uint16_t dynamic_loop_timer;
void dynamic_macro_record_start_user(void) { void dynamic_macro_record_start_user(void) {
is_dynamic_recording = true; is_dynamic_recording = true;
dynamic_loop_timer = timer_read(); dynamic_loop_timer = timer_read();
ergodox_right_led_1_on(); ergodox_right_led_1_on();
} }
void dynamic_macro_record_end_user(int8_t direction) { void dynamic_macro_record_end_user(int8_t direction) {
is_dynamic_recording = false; is_dynamic_recording = false;
layer_state_set_user(layer_state); layer_state_set_user(layer_state);
} }
#endif #endif
void matrix_scan_kb(void) { void matrix_scan_kb(void) {
#ifdef ORYX_ENABLE #ifdef ORYX_ENABLE
if(webusb_state.pairing == true) { if(webusb_state.pairing == true) {
if(loops == 0) { if(loops == 0) {
ergodox_right_led_1_off(); ergodox_right_led_1_off();
ergodox_right_led_2_off(); ergodox_right_led_2_off();
ergodox_right_led_3_off(); ergodox_right_led_3_off();
} }
if(loops % WEBUSB_BLINK_STEPS == 0) { if(loops % WEBUSB_BLINK_STEPS == 0) {
if(is_on) { if(is_on) {
ergodox_right_led_2_off(); ergodox_right_led_2_off();
} else { } else {
ergodox_right_led_2_on(); ergodox_right_led_2_on();
} }
is_on ^= 1; is_on ^= 1;
} }
if(loops > WEBUSB_BLINK_END) { if(loops > WEBUSB_BLINK_END) {
webusb_state.pairing = false; webusb_state.pairing = false;
layer_state_set_user(layer_state); layer_state_set_user(layer_state);
loops = 0; loops = 0;
} }
loops++; loops++;
} else if(loops > 0) { } else if(loops > 0) {
loops = 0; loops = 0;
layer_state_set_user(layer_state); layer_state_set_user(layer_state);
} }
#endif #endif
#ifdef DYNAMIC_MACRO_ENABLE #ifdef DYNAMIC_MACRO_ENABLE
if (is_dynamic_recording) { if (is_dynamic_recording) {
ergodox_right_led_1_off(); ergodox_right_led_1_off();
// if (timer_elapsed(dynamic_loop_timer) > 5) // if (timer_elapsed(dynamic_loop_timer) > 5)
{ {
static uint8_t counter; static uint8_t counter;
counter++; counter++;
if (counter > 100) ergodox_right_led_1_on(); if (counter > 100) ergodox_right_led_1_on();
dynamic_loop_timer = timer_read(); dynamic_loop_timer = timer_read();
} }
} }
#endif #endif
#ifdef CAPS_LOCK_STATUS #ifdef CAPS_LOCK_STATUS
led_t led_state = host_keyboard_led_state(); led_t led_state = host_keyboard_led_state();
if(led_state.caps_lock) { if(led_state.caps_lock) {
ergodox_right_led_3_on(); ergodox_right_led_3_on();
} }
else { else {
uint8_t layer = get_highest_layer(layer_state); uint8_t layer = get_highest_layer(layer_state);
if(layer != 3) { if(layer != 3) {
ergodox_right_led_3_off(); ergodox_right_led_3_off();
} }
} }
#endif #endif
matrix_scan_user(); matrix_scan_user();
} }

View File

@ -80,29 +80,27 @@ inline void ergodox_left_led_2_off(void) { ergodox_left_led_2 = 0; }
inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; } inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; }
#endif // LEFT_LEDS #endif // LEFT_LEDS
inline void ergodox_led_all_on(void) inline void ergodox_led_all_on(void) {
{ ergodox_board_led_on();
ergodox_board_led_on(); ergodox_right_led_1_on();
ergodox_right_led_1_on(); ergodox_right_led_2_on();
ergodox_right_led_2_on(); ergodox_right_led_3_on();
ergodox_right_led_3_on();
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
ergodox_left_led_1_on(); ergodox_left_led_1_on();
ergodox_left_led_2_on(); ergodox_left_led_2_on();
ergodox_left_led_3_on(); ergodox_left_led_3_on();
#endif // LEFT_LEDS #endif // LEFT_LEDS
} }
inline void ergodox_led_all_off(void) inline void ergodox_led_all_off(void) {
{ ergodox_board_led_off();
ergodox_board_led_off(); ergodox_right_led_1_off();
ergodox_right_led_1_off(); ergodox_right_led_2_off();
ergodox_right_led_2_off(); ergodox_right_led_3_off();
ergodox_right_led_3_off();
#ifdef LEFT_LEDS #ifdef LEFT_LEDS
ergodox_left_led_1_off(); ergodox_left_led_1_off();
ergodox_left_led_2_off(); ergodox_left_led_2_off();
ergodox_left_led_3_off(); ergodox_left_led_3_off();
#endif // LEFT_LEDS #endif // LEFT_LEDS
} }
@ -110,177 +108,176 @@ inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; }
inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; }
inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; }
inline void ergodox_right_led_set(uint8_t led, uint8_t n) { inline void ergodox_right_led_set(uint8_t led, uint8_t n) {
(led == 1) ? (OCR1A = n) : (led == 1) ? (OCR1A = n) :
(led == 2) ? (OCR1B = n) : (led == 2) ? (OCR1B = n) :
(OCR1C = n); (OCR1C = n);
} }
inline void ergodox_led_all_set(uint8_t n) inline void ergodox_led_all_set(uint8_t n) {
{ ergodox_right_led_1_set(n);
ergodox_right_led_1_set(n); ergodox_right_led_2_set(n);
ergodox_right_led_2_set(n); ergodox_right_led_3_set(n);
ergodox_right_led_3_set(n);
} }
enum ergodox_ez_keycodes { enum ergodox_ez_keycodes {
LED_LEVEL = SAFE_RANGE, LED_LEVEL = SAFE_RANGE,
TOGGLE_LAYER_COLOR, TOGGLE_LAYER_COLOR,
EZ_SAFE_RANGE, EZ_SAFE_RANGE,
}; };
typedef union { typedef union {
uint32_t raw; uint32_t raw;
struct { struct {
uint8_t led_level :3; uint8_t led_level :3;
bool disable_layer_led :1; bool disable_layer_led :1;
bool rgb_matrix_enable :1; bool rgb_matrix_enable :1;
}; };
} keyboard_config_t; } keyboard_config_t;
extern keyboard_config_t keyboard_config; extern keyboard_config_t keyboard_config;
/* /*
* LEFT HAND: LINES 115-122 LEFT HAND: LINES 115-122
* RIGHT HAND: LINES 124-131 RIGHT HAND: LINES 124-131
*/ */
#define LAYOUT_ergodox( \ #define LAYOUT_ergodox( \
\ \
k00,k01,k02,k03,k04,k05,k06, \ k00,k01,k02,k03,k04,k05,k06, \
k10,k11,k12,k13,k14,k15,k16, \ k10,k11,k12,k13,k14,k15,k16, \
k20,k21,k22,k23,k24,k25, \ k20,k21,k22,k23,k24,k25, \
k30,k31,k32,k33,k34,k35,k36, \ k30,k31,k32,k33,k34,k35,k36, \
k40,k41,k42,k43,k44, \ k40,k41,k42,k43,k44, \
k55,k56, \ k55,k56, \
k54, \ k54, \
k53,k52,k51, \ k53,k52,k51, \
\ \
k07,k08,k09,k0A,k0B,k0C,k0D, \ k07,k08,k09,k0A,k0B,k0C,k0D, \
k17,k18,k19,k1A,k1B,k1C,k1D, \ k17,k18,k19,k1A,k1B,k1C,k1D, \
k28,k29,k2A,k2B,k2C,k2D, \ k28,k29,k2A,k2B,k2C,k2D, \
k37,k38,k39,k3A,k3B,k3C,k3D, \ k37,k38,k39,k3A,k3B,k3C,k3D, \
k49,k4A,k4B,k4C,k4D, \ k49,k4A,k4B,k4C,k4D, \
k57,k58, \ k57,k58, \
k59, \ k59, \
k5C,k5B,k5A ) \ k5C,k5B,k5A ) \
\ \
/* matrix positions */ \ /* matrix positions */ \
{ \ { \
{ k00, k10, k20, k30, k40, KC_NO }, \ { k00, k10, k20, k30, k40, KC_NO }, \
{ k01, k11, k21, k31, k41, k51 }, \ { k01, k11, k21, k31, k41, k51 }, \
{ k02, k12, k22, k32, k42, k52 }, \ { k02, k12, k22, k32, k42, k52 }, \
{ k03, k13, k23, k33, k43, k53 }, \ { k03, k13, k23, k33, k43, k53 }, \
{ k04, k14, k24, k34, k44, k54 }, \ { k04, k14, k24, k34, k44, k54 }, \
{ k05, k15, k25, k35, KC_NO, k55 }, \ { k05, k15, k25, k35, KC_NO, k55 }, \
{ k06, k16, KC_NO, k36, KC_NO, k56 }, \ { k06, k16, KC_NO, k36, KC_NO, k56 }, \
\ \
{ k07, k17, KC_NO, k37,KC_NO, k57 }, \ { k07, k17, KC_NO, k37,KC_NO, k57 }, \
{ k08, k18, k28, k38,KC_NO, k58 }, \ { k08, k18, k28, k38,KC_NO, k58 }, \
{ k09, k19, k29, k39, k49, k59 }, \ { k09, k19, k29, k39, k49, k59 }, \
{ k0A, k1A, k2A, k3A, k4A, k5A }, \ { k0A, k1A, k2A, k3A, k4A, k5A }, \
{ k0B, k1B, k2B, k3B, k4B, k5B }, \ { k0B, k1B, k2B, k3B, k4B, k5B }, \
{ k0C, k1C, k2C, k3C, k4C, k5C }, \ { k0C, k1C, k2C, k3C, k4C, k5C }, \
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \ { k0D, k1D, k2D, k3D, k4D, KC_NO } \
} }
/* /*
* LEFT HAND: LINES 158-165 LEFT HAND: LINES 158-165
* RIGHT HAND: LINES 167-174 RIGHT HAND: LINES 167-174
*/ */
#define LAYOUT_ergodox_80( \ #define LAYOUT_ergodox_80( \
\ \
k00,k01,k02,k03,k04,k05,k06, \ k00,k01,k02,k03,k04,k05,k06, \
k10,k11,k12,k13,k14,k15,k16, \ k10,k11,k12,k13,k14,k15,k16, \
k20,k21,k22,k23,k24,k25, \ k20,k21,k22,k23,k24,k25, \
k30,k31,k32,k33,k34,k35,k36, \ k30,k31,k32,k33,k34,k35,k36, \
k40,k41,k42,k43,k44, \ k40,k41,k42,k43,k44, \
k55,k56, \ k55,k56, \
k45,k46,k54, \ k45,k46,k54, \
k53,k52,k51, \ k53,k52,k51, \
\ \
k07,k08,k09,k0A,k0B,k0C,k0D, \ k07,k08,k09,k0A,k0B,k0C,k0D, \
k17,k18,k19,k1A,k1B,k1C,k1D, \ k17,k18,k19,k1A,k1B,k1C,k1D, \
k28,k29,k2A,k2B,k2C,k2D, \ k28,k29,k2A,k2B,k2C,k2D, \
k37,k38,k39,k3A,k3B,k3C,k3D, \ k37,k38,k39,k3A,k3B,k3C,k3D, \
k49,k4A,k4B,k4C,k4D, \ k49,k4A,k4B,k4C,k4D, \
k57,k58, \ k57,k58, \
k59,k47,k48, \ k59,k47,k48, \
k5C,k5B,k5A ) \ k5C,k5B,k5A ) \
\ \
/* matrix positions */ \ /* matrix positions */ \
{ \ { \
{ k00, k10, k20, k30, k40, KC_NO }, \ { k00, k10, k20, k30, k40, KC_NO }, \
{ k01, k11, k21, k31, k41, k51 }, \ { k01, k11, k21, k31, k41, k51 }, \
{ k02, k12, k22, k32, k42, k52 }, \ { k02, k12, k22, k32, k42, k52 }, \
{ k03, k13, k23, k33, k43, k53 }, \ { k03, k13, k23, k33, k43, k53 }, \
{ k04, k14, k24, k34, k44, k54 }, \ { k04, k14, k24, k34, k44, k54 }, \
{ k05, k15, k25, k35, k45, k55 }, \ { k05, k15, k25, k35, k45, k55 }, \
{ k06, k16, KC_NO, k36, k46, k56 }, \ { k06, k16, KC_NO, k36, k46, k56 }, \
\ \
{ k07, k17, KC_NO, k37, k47, k57 }, \ { k07, k17, KC_NO, k37, k47, k57 }, \
{ k08, k18, k28, k38, k48, k58 }, \ { k08, k18, k28, k38, k48, k58 }, \
{ k09, k19, k29, k39, k49, k59 }, \ { k09, k19, k29, k39, k49, k59 }, \
{ k0A, k1A, k2A, k3A, k4A, k5A }, \ { k0A, k1A, k2A, k3A, k4A, k5A }, \
{ k0B, k1B, k2B, k3B, k4B, k5B }, \ { k0B, k1B, k2B, k3B, k4B, k5B }, \
{ k0C, k1C, k2C, k3C, k4C, k5C }, \ { k0C, k1C, k2C, k3C, k4C, k5C }, \
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \ { k0D, k1D, k2D, k3D, k4D, KC_NO } \
} }
/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */ /* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
#define LAYOUT_ergodox_pretty( \ #define LAYOUT_ergodox_pretty( \
L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \ L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \ L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \ L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \ L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \ L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
L55,L56, R50,R51, \ L55,L56, R50,R51, \
L54, R52, \ L54, R52, \
L53,L52,L51, R55,R54,R53 ) \ L53,L52,L51, R55,R54,R53 ) \
\ \
/* matrix positions */ \ /* matrix positions */ \
{ \ { \
{ L00, L10, L20, L30, L40, KC_NO }, \ { L00, L10, L20, L30, L40, KC_NO }, \
{ L01, L11, L21, L31, L41, L51 }, \ { L01, L11, L21, L31, L41, L51 }, \
{ L02, L12, L22, L32, L42, L52 }, \ { L02, L12, L22, L32, L42, L52 }, \
{ L03, L13, L23, L33, L43, L53 }, \ { L03, L13, L23, L33, L43, L53 }, \
{ L04, L14, L24, L34, L44, L54 }, \ { L04, L14, L24, L34, L44, L54 }, \
{ L05, L15, L25, L35, KC_NO, L55 }, \ { L05, L15, L25, L35, KC_NO, L55 }, \
{ L06, L16, KC_NO, L36, KC_NO, L56 }, \ { L06, L16, KC_NO, L36, KC_NO, L56 }, \
\ \
{ R00, R10, KC_NO, R30,KC_NO, R50 }, \ { R00, R10, KC_NO, R30,KC_NO, R50 }, \
{ R01, R11, R21, R31,KC_NO, R51 }, \ { R01, R11, R21, R31,KC_NO, R51 }, \
{ R02, R12, R22, R32, R42, R52 }, \ { R02, R12, R22, R32, R42, R52 }, \
{ R03, R13, R23, R33, R43, R53 }, \ { R03, R13, R23, R33, R43, R53 }, \
{ R04, R14, R24, R34, R44, R54 }, \ { R04, R14, R24, R34, R44, R54 }, \
{ R05, R15, R25, R35, R45, R55 }, \ { R05, R15, R25, R35, R45, R55 }, \
{ R06, R16, R26, R36, R46, KC_NO } \ { R06, R16, R26, R36, R46, KC_NO } \
} }
/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */ /* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
#define LAYOUT_ergodox_pretty_80( \ #define LAYOUT_ergodox_pretty_80( \
L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \ L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \ L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \ L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \ L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \ L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
L55,L56, R50,R51, \ L55,L56, R50,R51, \
L45,L46,L54, R52,R40,R41, \ L45,L46,L54, R52,R40,R41, \
L53,L52,L51, R55,R54,R53 ) \ L53,L52,L51, R55,R54,R53 ) \
\ \
/* matrix positions */ \ /* matrix positions */ \
{ \ { \
{ L00, L10, L20, L30, L40, KC_NO }, \ { L00, L10, L20, L30, L40, KC_NO }, \
{ L01, L11, L21, L31, L41, L51 }, \ { L01, L11, L21, L31, L41, L51 }, \
{ L02, L12, L22, L32, L42, L52 }, \ { L02, L12, L22, L32, L42, L52 }, \
{ L03, L13, L23, L33, L43, L53 }, \ { L03, L13, L23, L33, L43, L53 }, \
{ L04, L14, L24, L34, L44, L54 }, \ { L04, L14, L24, L34, L44, L54 }, \
{ L05, L15, L25, L35, L45, L55 }, \ { L05, L15, L25, L35, L45, L55 }, \
{ L06, L16, KC_NO, L36, L46, L56 }, \ { L06, L16, KC_NO, L36, L46, L56 }, \
\ \
{ R00, R10, KC_NO, R30, R40, R50 }, \ { R00, R10, KC_NO, R30, R40, R50 }, \
{ R01, R11, R21, R31, R41, R51 }, \ { R01, R11, R21, R31, R41, R51 }, \
{ R02, R12, R22, R32, R42, R52 }, \ { R02, R12, R22, R32, R42, R52 }, \
{ R03, R13, R23, R33, R43, R53 }, \ { R03, R13, R23, R33, R43, R53 }, \
{ R04, R14, R24, R34, R44, R54 }, \ { R04, R14, R24, R34, R44, R54 }, \
{ R05, R15, R25, R35, R45, R55 }, \ { R05, R15, R25, R35, R45, R55 }, \
{ R06, R16, R26, R36, R46, KC_NO } \ { R06, R16, R26, R36, R46, KC_NO } \
} }