Browse Source

is31fl3737: driver naming cleanups (#21904)

Ryan 2 years ago
parent
commit
d36f73a431

+ 18 - 18
docs/feature_rgb_matrix.md

@@ -246,31 +246,31 @@ Configure the hardware via your `config.h`:
 
 | Variable | Description | Default |
 |----------|-------------|---------|
-| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
-| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
-| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3737B only | 0 |
-| `ISSI_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
-| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
-| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
+| `IS31FL3737_I2C_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
+| `IS31FL3737_I2C_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
+| `IS31FL3737_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3737B only | 0 |
+| `IS31FL3737_GLOBALCURRENT` | (Optional) Configuration for the Global Current Register | 0xFF |
+| `IS31FL3737_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
+| `IS31FL3737_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
+| `IS31FL3737_DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
 | `RGB_MATRIX_LED_COUNT` | (Required) How many RGB lights are present across all drivers | |
 | `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
 | `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
 | `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
 | `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
 
-The IS31FL3737 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`ISSI_SWPULLUP`/`ISSI_CSPULLUP` are given the value of`PUR_0R`), the values that can be set to enable de-ghosting are as follows:
+The IS31FL3737 IC's have on-chip resistors that can be enabled to allow for de-ghosting of the RGB matrix. By default these resistors are not enabled (`IS31FL3737_SWPULLUP`/`IS31FL3737_CSPULLUP` are given the value of `IS31FL3737_PUR_0R`), the values that can be set to enable de-ghosting are as follows:
 
-| `ISSI_SWPULLUP/ISSI_CSPULLUP` | Description |
+| `IS31FL3737_SWPULLUP/IS31FL3737_CSPULLUP` | Description |
 |----------------------|-------------|
-| `PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
-| `PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
-| `PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
-| `PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
-| `PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_0R` | (default) Do not use the on-chip resistors/enable de-ghosting |
+| `IS31FL3737_PUR_05KR` | The 0.5k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_1KR` | The 1k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_2KR` | The 2k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_4KR` | The 4k Ohm resistor used during blanking period (t_NOL) |
+| `IS31FL3737_PUR_8KR` | The 8k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3737_PUR_16KR` | The 16k Ohm resistor during blanking period (t_NOL) |
+| `IS31FL3737_PUR_32KR` | The 32k Ohm resistor used during blanking period (t_NOL) |
 
 Here is an example using 2 drivers.
 
@@ -287,7 +287,7 @@ Here is an example using 2 drivers.
 #define DRIVER_ADDR_1 0b1010000
 #define DRIVER_ADDR_2 0b1010001
 
-#define DRIVER_COUNT 2
+#define IS31FL3737_DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 30
 #define DRIVER_2_LED_TOTAL 36
 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

+ 59 - 58
drivers/led/issi/is31fl3737.c

@@ -18,6 +18,7 @@
  */
 
 #include "is31fl3737.h"
+#include <string.h>
 #include "i2c_master.h"
 #include "wait.h"
 
@@ -31,46 +32,46 @@
 // ADDR1 represents A1:A0 of the 7-bit address.
 // ADDR2 represents A3:A2 of the 7-bit address.
 // The result is: 0b101(ADDR2)(ADDR1)
-#define ISSI_ADDR_DEFAULT 0x50
-
-#define ISSI_COMMANDREGISTER 0xFD
-#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
-#define ISSI_INTERRUPTMASKREGISTER 0xF0
-#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
-
-#define ISSI_PAGE_LEDCONTROL 0x00 // PG0
-#define ISSI_PAGE_PWM 0x01        // PG1
-#define ISSI_PAGE_AUTOBREATH 0x02 // PG2
-#define ISSI_PAGE_FUNCTION 0x03   // PG3
-
-#define ISSI_REG_CONFIGURATION 0x00 // PG3
-#define ISSI_REG_GLOBALCURRENT 0x01 // PG3
-#define ISSI_REG_RESET 0x11         // PG3
-#define ISSI_REG_SWPULLUP 0x0F      // PG3
-#define ISSI_REG_CSPULLUP 0x10      // PG3
-
-#ifndef ISSI_TIMEOUT
-#    define ISSI_TIMEOUT 100
+#define IS31FL3737_I2C_ADDRESS_DEFAULT 0x50
+
+#define IS31FL3737_COMMANDREGISTER 0xFD
+#define IS31FL3737_COMMANDREGISTER_WRITELOCK 0xFE
+#define IS31FL3737_INTERRUPTMASKREGISTER 0xF0
+#define IS31FL3737_INTERRUPTSTATUSREGISTER 0xF1
+
+#define IS31FL3737_PAGE_LEDCONTROL 0x00 // PG0
+#define IS31FL3737_PAGE_PWM 0x01        // PG1
+#define IS31FL3737_PAGE_AUTOBREATH 0x02 // PG2
+#define IS31FL3737_PAGE_FUNCTION 0x03   // PG3
+
+#define IS31FL3737_REG_CONFIGURATION 0x00 // PG3
+#define IS31FL3737_REG_GLOBALCURRENT 0x01 // PG3
+#define IS31FL3737_REG_RESET 0x11         // PG3
+#define IS31FL3737_REG_SWPULLUP 0x0F      // PG3
+#define IS31FL3737_REG_CSPULLUP 0x10      // PG3
+
+#ifndef IS31FL3737_I2C_TIMEOUT
+#    define IS31FL3737_I2C_TIMEOUT 100
 #endif
 
-#ifndef ISSI_PERSISTENCE
-#    define ISSI_PERSISTENCE 0
+#ifndef IS31FL3737_I2C_PERSISTENCE
+#    define IS31FL3737_I2C_PERSISTENCE 0
 #endif
 
-#ifndef ISSI_PWM_FREQUENCY
-#    define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3737B only
+#ifndef IS31FL3737_PWM_FREQUENCY
+#    define IS31FL3737_PWM_FREQUENCY 0b000 // PFS - IS31FL3737B only
 #endif
 
-#ifndef ISSI_SWPULLUP
-#    define ISSI_SWPULLUP PUR_0R
+#ifndef IS31FL3737_SWPULLUP
+#    define IS31FL3737_SWPULLUP IS31FL3737_PUR_0R
 #endif
 
-#ifndef ISSI_CSPULLUP
-#    define ISSI_CSPULLUP PUR_0R
+#ifndef IS31FL3737_CSPULLUP
+#    define IS31FL3737_CSPULLUP IS31FL3737_PUR_0R
 #endif
 
-#ifndef ISSI_GLOBALCURRENT
-#    define ISSI_GLOBALCURRENT 0xFF
+#ifndef IS31FL3737_GLOBALCURRENT
+#    define IS31FL3737_GLOBALCURRENT 0xFF
 #endif
 
 // Transfer buffer for TWITransmitData()
@@ -83,22 +84,22 @@ uint8_t g_twi_transfer_buffer[20];
 // buffers and the transfers in is31fl3737_write_pwm_buffer() but it's
 // probably not worth the extra complexity.
 
-uint8_t g_pwm_buffer[DRIVER_COUNT][192];
-bool    g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
+uint8_t g_pwm_buffer[IS31FL3737_DRIVER_COUNT][192];
+bool    g_pwm_buffer_update_required[IS31FL3737_DRIVER_COUNT] = {false};
 
-uint8_t g_led_control_registers[DRIVER_COUNT][24]             = {0};
-bool    g_led_control_registers_update_required[DRIVER_COUNT] = {false};
+uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][24]             = {0};
+bool    g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false};
 
 void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
     g_twi_transfer_buffer[0] = reg;
     g_twi_transfer_buffer[1] = data;
 
-#if ISSI_PERSISTENCE > 0
-    for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
-        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3737_I2C_PERSISTENCE > 0
+    for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+        if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break;
     }
 #else
-    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+    i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT);
 #endif
 }
 
@@ -116,12 +117,12 @@ void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
         // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
         memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 16);
 
-#if ISSI_PERSISTENCE > 0
-        for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
-            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+#if IS31FL3737_I2C_PERSISTENCE > 0
+        for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) {
+            if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break;
         }
 #else
-        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+        i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT);
 #endif
     }
 }
@@ -133,20 +134,20 @@ void is31fl3737_init(uint8_t addr) {
     // then disable software shutdown.
 
     // Unlock the command register.
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER_WRITELOCK, 0xC5);
 
     // Select PG0
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER, IS31FL3737_PAGE_LEDCONTROL);
     // Turn off all LEDs.
     for (int i = 0x00; i <= 0x17; i++) {
         is31fl3737_write_register(addr, i, 0x00);
     }
 
     // Unlock the command register.
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER_WRITELOCK, 0xC5);
 
     // Select PG1
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER, IS31FL3737_PAGE_PWM);
     // Set PWM on all LEDs to 0
     // No need to setup Breath registers to PWM as that is the default.
     for (int i = 0x00; i <= 0xBF; i++) {
@@ -154,18 +155,18 @@ void is31fl3737_init(uint8_t addr) {
     }
 
     // Unlock the command register.
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER_WRITELOCK, 0xC5);
 
     // Select PG3
-    is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+    is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER, IS31FL3737_PAGE_FUNCTION);
     // Set de-ghost pull-up resistors (SWx)
-    is31fl3737_write_register(addr, ISSI_REG_SWPULLUP, ISSI_SWPULLUP);
+    is31fl3737_write_register(addr, IS31FL3737_REG_SWPULLUP, IS31FL3737_SWPULLUP);
     // Set de-ghost pull-down resistors (CSx)
-    is31fl3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
+    is31fl3737_write_register(addr, IS31FL3737_REG_CSPULLUP, IS31FL3737_CSPULLUP);
     // Set global current to maximum.
-    is31fl3737_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
+    is31fl3737_write_register(addr, IS31FL3737_REG_GLOBALCURRENT, IS31FL3737_GLOBALCURRENT);
     // Disable software shutdown.
-    is31fl3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
+    is31fl3737_write_register(addr, IS31FL3737_REG_CONFIGURATION, ((IS31FL3737_PWM_FREQUENCY & 0b111) << 3) | 0x01);
 
     // Wait 10ms to ensure the device has woken up.
     wait_ms(10);
@@ -225,22 +226,22 @@ void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bo
 void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) {
     if (g_pwm_buffer_update_required[index]) {
         // Firstly we need to unlock the command register and select PG1
-        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
-        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
+        is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER_WRITELOCK, 0xC5);
+        is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER, IS31FL3737_PAGE_PWM);
 
         is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]);
+        g_pwm_buffer_update_required[index] = false;
     }
-    g_pwm_buffer_update_required[index] = false;
 }
 
 void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) {
     if (g_led_control_registers_update_required[index]) {
         // Firstly we need to unlock the command register and select PG0
-        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
-        is31fl3737_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
+        is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER_WRITELOCK, 0xC5);
+        is31fl3737_write_register(addr, IS31FL3737_COMMANDREGISTER, IS31FL3737_PAGE_LEDCONTROL);
         for (int i = 0; i < 24; i++) {
             is31fl3737_write_register(addr, i, g_led_control_registers[index][i]);
         }
+        g_led_control_registers_update_required[index] = false;
     }
-    g_led_control_registers_update_required[index] = false;
 }

+ 41 - 9
drivers/led/issi/is31fl3737.h

@@ -19,9 +19,41 @@
 
 #pragma once
 
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef DRIVER_COUNT
+#    define IS31FL3737_DRIVER_COUNT DRIVER_COUNT
+#endif
+#ifdef ISSI_TIMEOUT
+#    define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT
+#endif
+#ifdef ISSI_PERSISTENCE
+#    define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE
+#endif
+#ifdef ISSI_PWM_FREQUENCY
+#    define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY
+#endif
+#ifdef ISSI_SWPULLUP
+#    define IS31FL3737_SWPULLUP ISSI_SWPULLUP
+#endif
+#ifdef ISSI_CSPULLUP
+#    define IS31FL3737_CSPULLUP ISSI_CSPULLUP
+#endif
+#ifdef ISSI_GLOBALCURRENT
+#    define IS31FL3737_GLOBALCURRENT ISSI_GLOBALCURRENT
+#endif
+
+#define PUR_0R IS31FL3737_PUR_0R
+#define PUR_05KR IS31FL3737_PUR_05KR
+#define PUR_1KR IS31FL3737_PUR_1KR
+#define PUR_2KR IS31FL3737_PUR_2KR
+#define PUR_4KR IS31FL3737_PUR_4KR
+#define PUR_8KR IS31FL3737_PUR_8KR
+#define PUR_16KR IS31FL3737_PUR_16KR
+#define PUR_32KR IS31FL3737_PUR_32KR
+// ========
+
 #include <stdint.h>
 #include <stdbool.h>
-#include <string.h>
 #include "progmem.h"
 
 typedef struct is31_led {
@@ -49,14 +81,14 @@ void is31fl3737_set_led_control_register(uint8_t index, bool red, bool green, bo
 void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index);
 void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index);
 
-#define PUR_0R 0x00   // No PUR resistor
-#define PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
-#define PUR_1KR 0x02  // 1.0k Ohm resistor in t_NOL
-#define PUR_2KR 0x03  // 2.0k Ohm resistor in t_NOL
-#define PUR_4KR 0x04  // 4.0k Ohm resistor in t_NOL
-#define PUR_8KR 0x05  // 8.0k Ohm resistor in t_NOL
-#define PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
-#define PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_0R 0x00   // No PUR resistor
+#define IS31FL3737_PUR_05KR 0x01 // 0.5k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_1KR 0x02  // 1.0k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_2KR 0x03  // 2.0k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_4KR 0x04  // 4.0k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_8KR 0x05  // 8.0k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_16KR 0x06 // 16k Ohm resistor in t_NOL
+#define IS31FL3737_PUR_32KR 0x07 // 32k Ohm resistor in t_NOL
 
 #define A_1 0x00
 #define A_2 0x01

+ 1 - 1
keyboards/dztech/tofu/ii/v1/config.h

@@ -81,7 +81,7 @@
 #    define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
 #    define DRIVER_ADDR_1 0b1010000
 #    define DRIVER_ADDR_2 0b1011111
-#    define DRIVER_COUNT 2
+#    define IS31FL3737_DRIVER_COUNT 2
 #    define DRIVER_1_LED_TOTAL 46
 #    define DRIVER_2_LED_TOTAL 20
 #    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

+ 1 - 1
keyboards/dztech/tofu/jr/v1/config.h

@@ -81,7 +81,7 @@
 #    define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL
 #    define DRIVER_ADDR_1 0b1010000
 #    define DRIVER_ADDR_2 0b1011111
-#    define DRIVER_COUNT 2
+#    define IS31FL3737_DRIVER_COUNT 2
 #    define DRIVER_1_LED_TOTAL 48
 #    define DRIVER_2_LED_TOTAL 20
 #    define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

+ 2 - 6
keyboards/frooastboard/walnut/config.h

@@ -3,12 +3,8 @@
 
 #pragma once
 
-#define ISSI_TIMEOUT 100
-#define ISSI_PERSISTENCE 0
-#define ISSI_PWM_FREQUENCY 0b010
-#define ISSI_SWPULLUP PUR_0R
-#define ISSI_CSPULLUP PUR_0R
-#define DRIVER_COUNT 1
+#define IS31FL3737_PWM_FREQUENCY 0b010
+#define IS31FL3737_DRIVER_COUNT 1
 #define RGB_MATRIX_LED_COUNT 48
 #define DRIVER_ADDR_1 0b1010000
 

+ 1 - 1
keyboards/mt/mt84/config.h

@@ -27,7 +27,7 @@
 
 
 
-    #define DRIVER_COUNT 2
+    #define IS31FL3737_DRIVER_COUNT 2
 	#define DRIVER_1_LED_TOTAL 44
 	#define DRIVER_2_LED_TOTAL 40
 	#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)

+ 1 - 1
keyboards/planck/ez/config.h

@@ -52,7 +52,7 @@
 
 #define DRIVER_ADDR_1 0b1010000
 
-#define DRIVER_COUNT 1
+#define IS31FL3737_DRIVER_COUNT 1
 #define RGB_MATRIX_LED_COUNT 47
 
 #define RGB_MATRIX_KEYPRESSES