diff options
| author | QMK Bot <hello@qmk.fm> | 2021-11-17 12:28:38 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-18 07:28:38 +1100 |
| commit | 2c5d66987da4c7d5857cab8b09c4f852b4d8e4d9 (patch) | |
| tree | 3ddc4f2cc572c632a0027d31d6e3e86af03591bc | |
| parent | b06740c933c63a8f82e0a7112f9eeab9bd93687a (diff) | |
| download | qmk_firmware-2c5d66987da4c7d5857cab8b09c4f852b4d8e4d9.tar.gz qmk_firmware-2c5d66987da4c7d5857cab8b09c4f852b4d8e4d9.zip | |
Format code according to conventions (#15193)
35 files changed, 578 insertions, 518 deletions
diff --git a/drivers/qwiic/micro_oled.c b/drivers/qwiic/micro_oled.c index 8dfff6968..d011ad225 100644 --- a/drivers/qwiic/micro_oled.c +++ b/drivers/qwiic/micro_oled.c | |||
| @@ -149,7 +149,7 @@ void micro_oled_init(void) { | |||
| 149 | #endif | 149 | #endif |
| 150 | 150 | ||
| 151 | send_command(MEMORYMODE); | 151 | send_command(MEMORYMODE); |
| 152 | send_command(0x02); // 0x02 = 10b, Page addressing mode | 152 | send_command(0x02); // 0x02 = 10b, Page addressing mode |
| 153 | 153 | ||
| 154 | send_command(SETCOMPINS); // 0xDA | 154 | send_command(SETCOMPINS); // 0xDA |
| 155 | if (LCDHEIGHT > 32) { | 155 | if (LCDHEIGHT > 32) { |
diff --git a/drivers/sensors/adns5050.c b/drivers/sensors/adns5050.c index e7273977d..254ef2ee8 100644 --- a/drivers/sensors/adns5050.c +++ b/drivers/sensors/adns5050.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 17 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | |||
| 21 | #include "adns5050.h" | 20 | #include "adns5050.h" |
| 22 | #include "wait.h" | 21 | #include "wait.h" |
| 23 | #include "debug.h" | 22 | #include "debug.h" |
| @@ -61,13 +60,9 @@ void adns_sync(void) { | |||
| 61 | writePinHigh(ADNS_CS_PIN); | 60 | writePinHigh(ADNS_CS_PIN); |
| 62 | } | 61 | } |
| 63 | 62 | ||
| 64 | void adns_cs_select(void) { | 63 | void adns_cs_select(void) { writePinLow(ADNS_CS_PIN); } |
| 65 | writePinLow(ADNS_CS_PIN); | ||
| 66 | } | ||
| 67 | 64 | ||
| 68 | void adns_cs_deselect(void) { | 65 | void adns_cs_deselect(void) { writePinHigh(ADNS_CS_PIN); } |
| 69 | writePinHigh(ADNS_CS_PIN); | ||
| 70 | } | ||
| 71 | 66 | ||
| 72 | uint8_t adns_serial_read(void) { | 67 | uint8_t adns_serial_read(void) { |
| 73 | setPinInput(ADNS_SDIO_PIN); | 68 | setPinInput(ADNS_SDIO_PIN); |
| @@ -121,7 +116,7 @@ uint8_t adns_read_reg(uint8_t reg_addr) { | |||
| 121 | // We don't need a minimum tSRAD here. That's because a 4ms wait time is | 116 | // We don't need a minimum tSRAD here. That's because a 4ms wait time is |
| 122 | // already included in adns_serial_write(), so we're good. | 117 | // already included in adns_serial_write(), so we're good. |
| 123 | // See page 10 and 15 of the ADNS spec sheet. | 118 | // See page 10 and 15 of the ADNS spec sheet. |
| 124 | //wait_us(4); | 119 | // wait_us(4); |
| 125 | 120 | ||
| 126 | uint8_t byte = adns_serial_read(); | 121 | uint8_t byte = adns_serial_read(); |
| 127 | 122 | ||
| @@ -138,7 +133,7 @@ uint8_t adns_read_reg(uint8_t reg_addr) { | |||
| 138 | 133 | ||
| 139 | void adns_write_reg(uint8_t reg_addr, uint8_t data) { | 134 | void adns_write_reg(uint8_t reg_addr, uint8_t data) { |
| 140 | adns_cs_select(); | 135 | adns_cs_select(); |
| 141 | adns_serial_write( 0b10000000 | reg_addr ); | 136 | adns_serial_write(0b10000000 | reg_addr); |
| 142 | adns_serial_write(data); | 137 | adns_serial_write(data); |
| 143 | adns_cs_deselect(); | 138 | adns_cs_deselect(); |
| 144 | } | 139 | } |
| @@ -155,7 +150,7 @@ report_adns_t adns_read_burst(void) { | |||
| 155 | // We don't need a minimum tSRAD here. That's because a 4ms wait time is | 150 | // We don't need a minimum tSRAD here. That's because a 4ms wait time is |
| 156 | // already included in adns_serial_write(), so we're good. | 151 | // already included in adns_serial_write(), so we're good. |
| 157 | // See page 10 and 15 of the ADNS spec sheet. | 152 | // See page 10 and 15 of the ADNS spec sheet. |
| 158 | //wait_us(4); | 153 | // wait_us(4); |
| 159 | 154 | ||
| 160 | uint8_t x = adns_serial_read(); | 155 | uint8_t x = adns_serial_read(); |
| 161 | uint8_t y = adns_serial_read(); | 156 | uint8_t y = adns_serial_read(); |
| @@ -180,13 +175,11 @@ int8_t convert_twoscomp(uint8_t data) { | |||
| 180 | } | 175 | } |
| 181 | 176 | ||
| 182 | // Don't forget to use the definitions for CPI in the header file. | 177 | // Don't forget to use the definitions for CPI in the header file. |
| 183 | void adns_set_cpi(uint8_t cpi) { | 178 | void adns_set_cpi(uint8_t cpi) { adns_write_reg(REG_MOUSE_CONTROL2, cpi); } |
| 184 | adns_write_reg(REG_MOUSE_CONTROL2, cpi); | ||
| 185 | } | ||
| 186 | 179 | ||
| 187 | bool adns_check_signature(void) { | 180 | bool adns_check_signature(void) { |
| 188 | uint8_t pid = adns_read_reg(REG_PRODUCT_ID); | 181 | uint8_t pid = adns_read_reg(REG_PRODUCT_ID); |
| 189 | uint8_t rid = adns_read_reg(REG_REVISION_ID); | 182 | uint8_t rid = adns_read_reg(REG_REVISION_ID); |
| 190 | uint8_t pid2 = adns_read_reg(REG_PRODUCT_ID2); | 183 | uint8_t pid2 = adns_read_reg(REG_PRODUCT_ID2); |
| 191 | 184 | ||
| 192 | return (pid == 0x12 && rid == 0x01 && pid2 == 0x26); | 185 | return (pid == 0x12 && rid == 0x01 && pid2 == 0x26); |
diff --git a/drivers/sensors/adns5050.h b/drivers/sensors/adns5050.h index ff8e8f78e..5e9edc296 100644 --- a/drivers/sensors/adns5050.h +++ b/drivers/sensors/adns5050.h | |||
| @@ -67,13 +67,13 @@ typedef struct { | |||
| 67 | // A bunch of functions to implement the ADNS5050-specific serial protocol. | 67 | // A bunch of functions to implement the ADNS5050-specific serial protocol. |
| 68 | // Note that the "serial.h" driver is insufficient, because it does not | 68 | // Note that the "serial.h" driver is insufficient, because it does not |
| 69 | // manually manipulate a serial clock signal. | 69 | // manually manipulate a serial clock signal. |
| 70 | void adns_init(void); | 70 | void adns_init(void); |
| 71 | void adns_sync(void); | 71 | void adns_sync(void); |
| 72 | uint8_t adns_serial_read(void); | 72 | uint8_t adns_serial_read(void); |
| 73 | void adns_serial_write(uint8_t data); | 73 | void adns_serial_write(uint8_t data); |
| 74 | uint8_t adns_read_reg(uint8_t reg_addr); | 74 | uint8_t adns_read_reg(uint8_t reg_addr); |
| 75 | void adns_write_reg(uint8_t reg_addr, uint8_t data); | 75 | void adns_write_reg(uint8_t reg_addr, uint8_t data); |
| 76 | report_adns_t adns_read_burst(void); | 76 | report_adns_t adns_read_burst(void); |
| 77 | int8_t convert_twoscomp(uint8_t data); | 77 | int8_t convert_twoscomp(uint8_t data); |
| 78 | void adns_set_cpi(uint8_t cpi); | 78 | void adns_set_cpi(uint8_t cpi); |
| 79 | bool adns_check_signature(void); | 79 | bool adns_check_signature(void); |
diff --git a/drivers/sensors/adns9800.c b/drivers/sensors/adns9800.c index 17966b81f..b4f683452 100644 --- a/drivers/sensors/adns9800.c +++ b/drivers/sensors/adns9800.c | |||
| @@ -20,57 +20,57 @@ | |||
| 20 | #include "adns9800.h" | 20 | #include "adns9800.h" |
| 21 | 21 | ||
| 22 | // registers | 22 | // registers |
| 23 | #define REG_Product_ID 0x00 | 23 | #define REG_Product_ID 0x00 |
| 24 | #define REG_Revision_ID 0x01 | 24 | #define REG_Revision_ID 0x01 |
| 25 | #define REG_Motion 0x02 | 25 | #define REG_Motion 0x02 |
| 26 | #define REG_Delta_X_L 0x03 | 26 | #define REG_Delta_X_L 0x03 |
| 27 | #define REG_Delta_X_H 0x04 | 27 | #define REG_Delta_X_H 0x04 |
| 28 | #define REG_Delta_Y_L 0x05 | 28 | #define REG_Delta_Y_L 0x05 |
| 29 | #define REG_Delta_Y_H 0x06 | 29 | #define REG_Delta_Y_H 0x06 |
| 30 | #define REG_SQUAL 0x07 | 30 | #define REG_SQUAL 0x07 |
| 31 | #define REG_Pixel_Sum 0x08 | 31 | #define REG_Pixel_Sum 0x08 |
| 32 | #define REG_Maximum_Pixel 0x09 | 32 | #define REG_Maximum_Pixel 0x09 |
| 33 | #define REG_Minimum_Pixel 0x0a | 33 | #define REG_Minimum_Pixel 0x0a |
| 34 | #define REG_Shutter_Lower 0x0b | 34 | #define REG_Shutter_Lower 0x0b |
| 35 | #define REG_Shutter_Upper 0x0c | 35 | #define REG_Shutter_Upper 0x0c |
| 36 | #define REG_Frame_Period_Lower 0x0d | 36 | #define REG_Frame_Period_Lower 0x0d |
| 37 | #define REG_Frame_Period_Upper 0x0e | 37 | #define REG_Frame_Period_Upper 0x0e |
| 38 | #define REG_Configuration_I 0x0f | 38 | #define REG_Configuration_I 0x0f |
| 39 | #define REG_Configuration_II 0x10 | 39 | #define REG_Configuration_II 0x10 |
| 40 | #define REG_Frame_Capture 0x12 | 40 | #define REG_Frame_Capture 0x12 |
| 41 | #define REG_SROM_Enable 0x13 | 41 | #define REG_SROM_Enable 0x13 |
| 42 | #define REG_Run_Downshift 0x14 | 42 | #define REG_Run_Downshift 0x14 |
| 43 | #define REG_Rest1_Rate 0x15 | 43 | #define REG_Rest1_Rate 0x15 |
| 44 | #define REG_Rest1_Downshift 0x16 | 44 | #define REG_Rest1_Downshift 0x16 |
| 45 | #define REG_Rest2_Rate 0x17 | 45 | #define REG_Rest2_Rate 0x17 |
| 46 | #define REG_Rest2_Downshift 0x18 | 46 | #define REG_Rest2_Downshift 0x18 |
| 47 | #define REG_Rest3_Rate 0x19 | 47 | #define REG_Rest3_Rate 0x19 |
| 48 | #define REG_Frame_Period_Max_Bound_Lower 0x1a | 48 | #define REG_Frame_Period_Max_Bound_Lower 0x1a |
| 49 | #define REG_Frame_Period_Max_Bound_Upper 0x1b | 49 | #define REG_Frame_Period_Max_Bound_Upper 0x1b |
| 50 | #define REG_Frame_Period_Min_Bound_Lower 0x1c | 50 | #define REG_Frame_Period_Min_Bound_Lower 0x1c |
| 51 | #define REG_Frame_Period_Min_Bound_Upper 0x1d | 51 | #define REG_Frame_Period_Min_Bound_Upper 0x1d |
| 52 | #define REG_Shutter_Max_Bound_Lower 0x1e | 52 | #define REG_Shutter_Max_Bound_Lower 0x1e |
| 53 | #define REG_Shutter_Max_Bound_Upper 0x1f | 53 | #define REG_Shutter_Max_Bound_Upper 0x1f |
| 54 | #define REG_LASER_CTRL0 0x20 | 54 | #define REG_LASER_CTRL0 0x20 |
| 55 | #define REG_Observation 0x24 | 55 | #define REG_Observation 0x24 |
| 56 | #define REG_Data_Out_Lower 0x25 | 56 | #define REG_Data_Out_Lower 0x25 |
| 57 | #define REG_Data_Out_Upper 0x26 | 57 | #define REG_Data_Out_Upper 0x26 |
| 58 | #define REG_SROM_ID 0x2a | 58 | #define REG_SROM_ID 0x2a |
| 59 | #define REG_Lift_Detection_Thr 0x2e | 59 | #define REG_Lift_Detection_Thr 0x2e |
| 60 | #define REG_Configuration_V 0x2f | 60 | #define REG_Configuration_V 0x2f |
| 61 | #define REG_Configuration_IV 0x39 | 61 | #define REG_Configuration_IV 0x39 |
| 62 | #define REG_Power_Up_Reset 0x3a | 62 | #define REG_Power_Up_Reset 0x3a |
| 63 | #define REG_Shutdown 0x3b | 63 | #define REG_Shutdown 0x3b |
| 64 | #define REG_Inverse_Product_ID 0x3f | 64 | #define REG_Inverse_Product_ID 0x3f |
| 65 | #define REG_Motion_Burst 0x50 | 65 | #define REG_Motion_Burst 0x50 |
| 66 | #define REG_SROM_Load_Burst 0x62 | 66 | #define REG_SROM_Load_Burst 0x62 |
| 67 | #define REG_Pixel_Burst 0x64 | 67 | #define REG_Pixel_Burst 0x64 |
| 68 | 68 | ||
| 69 | #define ADNS_CLOCK_SPEED 2000000 | 69 | #define ADNS_CLOCK_SPEED 2000000 |
| 70 | #define MIN_CPI 200 | 70 | #define MIN_CPI 200 |
| 71 | #define MAX_CPI 8200 | 71 | #define MAX_CPI 8200 |
| 72 | #define CPI_STEP 200 | 72 | #define CPI_STEP 200 |
| 73 | #define CLAMP_CPI(value) value < MIN_CPI ? MIN_CPI : value > MAX_CPI ? MAX_CPI : value | 73 | #define CLAMP_CPI(value) value<MIN_CPI ? MIN_CPI : value> MAX_CPI ? MAX_CPI : value |
| 74 | #define SPI_MODE 3 | 74 | #define SPI_MODE 3 |
| 75 | #define SPI_DIVISOR (F_CPU / ADNS_CLOCK_SPEED) | 75 | #define SPI_DIVISOR (F_CPU / ADNS_CLOCK_SPEED) |
| 76 | #define US_BETWEEN_WRITES 120 | 76 | #define US_BETWEEN_WRITES 120 |
| @@ -80,12 +80,9 @@ | |||
| 80 | 80 | ||
| 81 | extern const uint8_t firmware_data[]; | 81 | extern const uint8_t firmware_data[]; |
| 82 | 82 | ||
| 83 | void adns_spi_start(void){ | 83 | void adns_spi_start(void) { spi_start(SPI_SS_PIN, false, SPI_MODE, SPI_DIVISOR); } |
| 84 | spi_start(SPI_SS_PIN, false, SPI_MODE, SPI_DIVISOR); | ||
| 85 | } | ||
| 86 | |||
| 87 | void adns_write(uint8_t reg_addr, uint8_t data){ | ||
| 88 | 84 | ||
| 85 | void adns_write(uint8_t reg_addr, uint8_t data) { | ||
| 89 | adns_spi_start(); | 86 | adns_spi_start(); |
| 90 | spi_write(reg_addr | MSB1); | 87 | spi_write(reg_addr | MSB1); |
| 91 | spi_write(data); | 88 | spi_write(data); |
| @@ -93,10 +90,9 @@ void adns_write(uint8_t reg_addr, uint8_t data){ | |||
| 93 | wait_us(US_BETWEEN_WRITES); | 90 | wait_us(US_BETWEEN_WRITES); |
| 94 | } | 91 | } |
| 95 | 92 | ||
| 96 | uint8_t adns_read(uint8_t reg_addr){ | 93 | uint8_t adns_read(uint8_t reg_addr) { |
| 97 | |||
| 98 | adns_spi_start(); | 94 | adns_spi_start(); |
| 99 | spi_write(reg_addr & 0x7f ); | 95 | spi_write(reg_addr & 0x7f); |
| 100 | uint8_t data = spi_read(); | 96 | uint8_t data = spi_read(); |
| 101 | spi_stop(); | 97 | spi_stop(); |
| 102 | wait_us(US_BETWEEN_READS); | 98 | wait_us(US_BETWEEN_READS); |
| @@ -105,7 +101,6 @@ uint8_t adns_read(uint8_t reg_addr){ | |||
| 105 | } | 101 | } |
| 106 | 102 | ||
| 107 | void adns_init() { | 103 | void adns_init() { |
| 108 | |||
| 109 | setPinOutput(SPI_SS_PIN); | 104 | setPinOutput(SPI_SS_PIN); |
| 110 | 105 | ||
| 111 | spi_init(); | 106 | spi_init(); |
| @@ -144,7 +139,7 @@ void adns_init() { | |||
| 144 | 139 | ||
| 145 | // send all bytes of the firmware | 140 | // send all bytes of the firmware |
| 146 | unsigned char c; | 141 | unsigned char c; |
| 147 | for(int i = 0; i < FIRMWARE_LENGTH; i++){ | 142 | for (int i = 0; i < FIRMWARE_LENGTH; i++) { |
| 148 | c = (unsigned char)pgm_read_byte(firmware_data + i); | 143 | c = (unsigned char)pgm_read_byte(firmware_data + i); |
| 149 | spi_write(c); | 144 | spi_write(c); |
| 150 | wait_us(15); | 145 | wait_us(15); |
| @@ -161,7 +156,7 @@ void adns_init() { | |||
| 161 | 156 | ||
| 162 | config_adns_t adns_get_config(void) { | 157 | config_adns_t adns_get_config(void) { |
| 163 | uint8_t config_1 = adns_read(REG_Configuration_I); | 158 | uint8_t config_1 = adns_read(REG_Configuration_I); |
| 164 | return (config_adns_t){ (config_1 & 0xFF) * CPI_STEP }; | 159 | return (config_adns_t){(config_1 & 0xFF) * CPI_STEP}; |
| 165 | } | 160 | } |
| 166 | 161 | ||
| 167 | void adns_set_config(config_adns_t config) { | 162 | void adns_set_config(config_adns_t config) { |
| @@ -169,20 +164,17 @@ void adns_set_config(config_adns_t config) { | |||
| 169 | adns_write(REG_Configuration_I, config_1); | 164 | adns_write(REG_Configuration_I, config_1); |
| 170 | } | 165 | } |
| 171 | 166 | ||
| 172 | static int16_t convertDeltaToInt(uint8_t high, uint8_t low){ | 167 | static int16_t convertDeltaToInt(uint8_t high, uint8_t low) { |
| 173 | |||
| 174 | // join bytes into twos compliment | 168 | // join bytes into twos compliment |
| 175 | uint16_t twos_comp = (high << 8) | low; | 169 | uint16_t twos_comp = (high << 8) | low; |
| 176 | 170 | ||
| 177 | // convert twos comp to int | 171 | // convert twos comp to int |
| 178 | if (twos_comp & 0x8000) | 172 | if (twos_comp & 0x8000) return -1 * (~twos_comp + 1); |
| 179 | return -1 * (~twos_comp + 1); | ||
| 180 | 173 | ||
| 181 | return twos_comp; | 174 | return twos_comp; |
| 182 | } | 175 | } |
| 183 | 176 | ||
| 184 | report_adns_t adns_get_report(void) { | 177 | report_adns_t adns_get_report(void) { |
| 185 | |||
| 186 | report_adns_t report = {0, 0}; | 178 | report_adns_t report = {0, 0}; |
| 187 | 179 | ||
| 188 | adns_spi_start(); | 180 | adns_spi_start(); |
| @@ -194,8 +186,7 @@ report_adns_t adns_get_report(void) { | |||
| 194 | 186 | ||
| 195 | uint8_t motion = spi_read(); | 187 | uint8_t motion = spi_read(); |
| 196 | 188 | ||
| 197 | if(motion & 0x80) { | 189 | if (motion & 0x80) { |
| 198 | |||
| 199 | // clear observation register | 190 | // clear observation register |
| 200 | spi_read(); | 191 | spi_read(); |
| 201 | 192 | ||
diff --git a/drivers/sensors/adns9800.h b/drivers/sensors/adns9800.h index 2f50b8f1b..d19ded401 100644 --- a/drivers/sensors/adns9800.h +++ b/drivers/sensors/adns9800.h | |||
| @@ -28,8 +28,8 @@ typedef struct { | |||
| 28 | int16_t y; | 28 | int16_t y; |
| 29 | } report_adns_t; | 29 | } report_adns_t; |
| 30 | 30 | ||
| 31 | void adns_init(void); | 31 | void adns_init(void); |
| 32 | config_adns_t adns_get_config(void); | 32 | config_adns_t adns_get_config(void); |
| 33 | void adns_set_config(config_adns_t); | 33 | void adns_set_config(config_adns_t); |
| 34 | /* Reads and clears the current delta values on the ADNS sensor */ | 34 | /* Reads and clears the current delta values on the ADNS sensor */ |
| 35 | report_adns_t adns_get_report(void); | 35 | report_adns_t adns_get_report(void); |
diff --git a/drivers/sensors/pmw3360.c b/drivers/sensors/pmw3360.c index 5463bfc59..79b653e45 100644 --- a/drivers/sensors/pmw3360.c +++ b/drivers/sensors/pmw3360.c | |||
| @@ -23,55 +23,55 @@ | |||
| 23 | #include "pmw3360_firmware.h" | 23 | #include "pmw3360_firmware.h" |
| 24 | 24 | ||
| 25 | // Registers | 25 | // Registers |
| 26 | #define REG_Product_ID 0x00 | 26 | #define REG_Product_ID 0x00 |
| 27 | #define REG_Revision_ID 0x01 | 27 | #define REG_Revision_ID 0x01 |
| 28 | #define REG_Motion 0x02 | 28 | #define REG_Motion 0x02 |
| 29 | #define REG_Delta_X_L 0x03 | 29 | #define REG_Delta_X_L 0x03 |
| 30 | #define REG_Delta_X_H 0x04 | 30 | #define REG_Delta_X_H 0x04 |
| 31 | #define REG_Delta_Y_L 0x05 | 31 | #define REG_Delta_Y_L 0x05 |
| 32 | #define REG_Delta_Y_H 0x06 | 32 | #define REG_Delta_Y_H 0x06 |
| 33 | #define REG_SQUAL 0x07 | 33 | #define REG_SQUAL 0x07 |
| 34 | #define REG_Raw_Data_Sum 0x08 | 34 | #define REG_Raw_Data_Sum 0x08 |
| 35 | #define REG_Maximum_Raw_data 0x09 | 35 | #define REG_Maximum_Raw_data 0x09 |
| 36 | #define REG_Minimum_Raw_data 0x0A | 36 | #define REG_Minimum_Raw_data 0x0A |
| 37 | #define REG_Shutter_Lower 0x0B | 37 | #define REG_Shutter_Lower 0x0B |
| 38 | #define REG_Shutter_Upper 0x0C | 38 | #define REG_Shutter_Upper 0x0C |
| 39 | #define REG_Control 0x0D | 39 | #define REG_Control 0x0D |
| 40 | #define REG_Config1 0x0F | 40 | #define REG_Config1 0x0F |
| 41 | #define REG_Config2 0x10 | 41 | #define REG_Config2 0x10 |
| 42 | #define REG_Angle_Tune 0x11 | 42 | #define REG_Angle_Tune 0x11 |
| 43 | #define REG_Frame_Capture 0x12 | 43 | #define REG_Frame_Capture 0x12 |
| 44 | #define REG_SROM_Enable 0x13 | 44 | #define REG_SROM_Enable 0x13 |
| 45 | #define REG_Run_Downshift 0x14 | 45 | #define REG_Run_Downshift 0x14 |
| 46 | #define REG_Rest1_Rate_Lower 0x15 | 46 | #define REG_Rest1_Rate_Lower 0x15 |
| 47 | #define REG_Rest1_Rate_Upper 0x16 | 47 | #define REG_Rest1_Rate_Upper 0x16 |
| 48 | #define REG_Rest1_Downshift 0x17 | 48 | #define REG_Rest1_Downshift 0x17 |
| 49 | #define REG_Rest2_Rate_Lower 0x18 | 49 | #define REG_Rest2_Rate_Lower 0x18 |
| 50 | #define REG_Rest2_Rate_Upper 0x19 | 50 | #define REG_Rest2_Rate_Upper 0x19 |
| 51 | #define REG_Rest2_Downshift 0x1A | 51 | #define REG_Rest2_Downshift 0x1A |
| 52 | #define REG_Rest3_Rate_Lower 0x1B | 52 | #define REG_Rest3_Rate_Lower 0x1B |
| 53 | #define REG_Rest3_Rate_Upper 0x1C | 53 | #define REG_Rest3_Rate_Upper 0x1C |
| 54 | #define REG_Observation 0x24 | 54 | #define REG_Observation 0x24 |
| 55 | #define REG_Data_Out_Lower 0x25 | 55 | #define REG_Data_Out_Lower 0x25 |
| 56 | #define REG_Data_Out_Upper 0x26 | 56 | #define REG_Data_Out_Upper 0x26 |
| 57 | #define REG_Raw_Data_Dump 0x29 | 57 | #define REG_Raw_Data_Dump 0x29 |
| 58 | #define REG_SROM_ID 0x2A | 58 | #define REG_SROM_ID 0x2A |
| 59 | #define REG_Min_SQ_Run 0x2B | 59 | #define REG_Min_SQ_Run 0x2B |
| 60 | #define REG_Raw_Data_Threshold 0x2C | 60 | #define REG_Raw_Data_Threshold 0x2C |
| 61 | #define REG_Config5 0x2F | 61 | #define REG_Config5 0x2F |
| 62 | #define REG_Power_Up_Reset 0x3A | 62 | #define REG_Power_Up_Reset 0x3A |
| 63 | #define REG_Shutdown 0x3B | 63 | #define REG_Shutdown 0x3B |
| 64 | #define REG_Inverse_Product_ID 0x3F | 64 | #define REG_Inverse_Product_ID 0x3F |
| 65 | #define REG_LiftCutoff_Tune3 0x41 | 65 | #define REG_LiftCutoff_Tune3 0x41 |
| 66 | #define REG_Angle_Snap 0x42 | 66 | #define REG_Angle_Snap 0x42 |
| 67 | #define REG_LiftCutoff_Tune1 0x4A | 67 | #define REG_LiftCutoff_Tune1 0x4A |
| 68 | #define REG_Motion_Burst 0x50 | 68 | #define REG_Motion_Burst 0x50 |
| 69 | #define REG_LiftCutoff_Tune_Timeout 0x58 | 69 | #define REG_LiftCutoff_Tune_Timeout 0x58 |
| 70 | #define REG_LiftCutoff_Tune_Min_Length 0x5A | 70 | #define REG_LiftCutoff_Tune_Min_Length 0x5A |
| 71 | #define REG_SROM_Load_Burst 0x62 | 71 | #define REG_SROM_Load_Burst 0x62 |
| 72 | #define REG_Lift_Config 0x63 | 72 | #define REG_Lift_Config 0x63 |
| 73 | #define REG_Raw_Data_Burst 0x64 | 73 | #define REG_Raw_Data_Burst 0x64 |
| 74 | #define REG_LiftCutoff_Tune2 0x65 | 74 | #define REG_LiftCutoff_Tune2 0x65 |
| 75 | 75 | ||
| 76 | bool _inBurst = false; | 76 | bool _inBurst = false; |
| 77 | 77 | ||
diff --git a/drivers/sensors/pmw3360.h b/drivers/sensors/pmw3360.h index 124c62cf0..7429a6ba0 100644 --- a/drivers/sensors/pmw3360.h +++ b/drivers/sensors/pmw3360.h | |||
| @@ -66,20 +66,17 @@ typedef struct { | |||
| 66 | int8_t mdy; | 66 | int8_t mdy; |
| 67 | } report_pmw_t; | 67 | } report_pmw_t; |
| 68 | 68 | ||
| 69 | 69 | bool spi_start_adv(void); | |
| 70 | 70 | void spi_stop_adv(void); | |
| 71 | bool spi_start_adv(void); | ||
| 72 | void spi_stop_adv(void); | ||
| 73 | spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data); | 71 | spi_status_t spi_write_adv(uint8_t reg_addr, uint8_t data); |
| 74 | uint8_t spi_read_adv(uint8_t reg_addr); | 72 | uint8_t spi_read_adv(uint8_t reg_addr); |
| 75 | bool pmw_spi_init(void); | 73 | bool pmw_spi_init(void); |
| 76 | void pmw_set_cpi(uint16_t cpi); | 74 | void pmw_set_cpi(uint16_t cpi); |
| 77 | uint16_t pmw_get_cpi(void); | 75 | uint16_t pmw_get_cpi(void); |
| 78 | void pmw_upload_firmware(void); | 76 | void pmw_upload_firmware(void); |
| 79 | bool pmw_check_signature(void); | 77 | bool pmw_check_signature(void); |
| 80 | report_pmw_t pmw_read_burst(void); | 78 | report_pmw_t pmw_read_burst(void); |
| 81 | 79 | ||
| 82 | |||
| 83 | #define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0) | 80 | #define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0) |
| 84 | #define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI) | 81 | #define radToDeg(angleInRadians) ((angleInRadians)*180.0 / M_PI) |
| 85 | #define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) | 82 | #define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) |
diff --git a/keyboards/checkerboards/phoenix45_ortho/keymaps/via/rules.mk b/keyboards/checkerboards/phoenix45_ortho/keymaps/via/rules.mk index 69de2e4c5..1e5b99807 100644 --- a/keyboards/checkerboards/phoenix45_ortho/keymaps/via/rules.mk +++ b/keyboards/checkerboards/phoenix45_ortho/keymaps/via/rules.mk | |||
| @@ -1 +1 @@ | |||
| VIA_ENABLE = yes | VIA_ENABLE = yes | ||
diff --git a/keyboards/sneakbox/ava/info.json b/keyboards/sneakbox/ava/info.json index 55b52a5c5..276efce01 100644 --- a/keyboards/sneakbox/ava/info.json +++ b/keyboards/sneakbox/ava/info.json | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | { | 1 | { |
| 2 | "keyboard_name": "AVA", | 2 | "keyboard_name": "AVA", |
| 3 | "url": "https://sneakbox.com", | 3 | "url": "https://sneakbox.com", |
| 4 | "maintainer": "mujimanic", | 4 | "maintainer": "mujimanic", |
diff --git a/platforms/chibios/drivers/analog.c b/platforms/chibios/drivers/analog.c index 8c476fcac..b1081623d 100644 --- a/platforms/chibios/drivers/analog.c +++ b/platforms/chibios/drivers/analog.c | |||
| @@ -123,7 +123,7 @@ static ADCConversionGroup adcConversionGroup = { | |||
| 123 | .smpr = ADC_SAMPLING_RATE, | 123 | .smpr = ADC_SAMPLING_RATE, |
| 124 | #elif defined(USE_ADCV2) | 124 | #elif defined(USE_ADCV2) |
| 125 | # if !defined(STM32F1XX) | 125 | # if !defined(STM32F1XX) |
| 126 | .cr2 = ADC_CR2_SWSTART, // F103 seem very unhappy with, F401 seems very unhappy without... | 126 | .cr2 = ADC_CR2_SWSTART, // F103 seem very unhappy with, F401 seems very unhappy without... |
| 127 | # endif | 127 | # endif |
| 128 | .smpr2 = ADC_SMPR2_SMP_AN0(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN1(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN3(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN4(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN5(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN6(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN7(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN8(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN9(ADC_SAMPLING_RATE), | 128 | .smpr2 = ADC_SMPR2_SMP_AN0(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN1(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN3(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN4(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN5(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN6(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN7(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN8(ADC_SAMPLING_RATE) | ADC_SMPR2_SMP_AN9(ADC_SAMPLING_RATE), |
| 129 | .smpr1 = ADC_SMPR1_SMP_AN10(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN11(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN12(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN13(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN14(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN15(ADC_SAMPLING_RATE), | 129 | .smpr1 = ADC_SMPR1_SMP_AN10(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN11(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN12(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN13(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN14(ADC_SAMPLING_RATE) | ADC_SMPR1_SMP_AN15(ADC_SAMPLING_RATE), |
diff --git a/quantum/action.c b/quantum/action.c index be135f18f..208690f5e 100644 --- a/quantum/action.c +++ b/quantum/action.c | |||
| @@ -782,9 +782,10 @@ void register_code(uint8_t code) { | |||
| 782 | } | 782 | } |
| 783 | #endif | 783 | #endif |
| 784 | 784 | ||
| 785 | else if IS_KEY (code) { | 785 | else if |
| 786 | // TODO: should push command_proc out of this block? | 786 | IS_KEY(code) { |
| 787 | if (command_proc(code)) return; | 787 | // TODO: should push command_proc out of this block? |
| 788 | if (command_proc(code)) return; | ||
| 788 | 789 | ||
| 789 | #ifndef NO_ACTION_ONESHOT | 790 | #ifndef NO_ACTION_ONESHOT |
| 790 | /* TODO: remove | 791 | /* TODO: remove |
| @@ -801,33 +802,35 @@ void register_code(uint8_t code) { | |||
| 801 | } else | 802 | } else |
| 802 | */ | 803 | */ |
| 803 | #endif | 804 | #endif |
| 804 | { | 805 | { |
| 805 | // Force a new key press if the key is already pressed | 806 | // Force a new key press if the key is already pressed |
| 806 | // without this, keys with the same keycode, but different | 807 | // without this, keys with the same keycode, but different |
| 807 | // modifiers will be reported incorrectly, see issue #1708 | 808 | // modifiers will be reported incorrectly, see issue #1708 |
| 808 | if (is_key_pressed(keyboard_report, code)) { | 809 | if (is_key_pressed(keyboard_report, code)) { |
| 809 | del_key(code); | 810 | del_key(code); |
| 811 | send_keyboard_report(); | ||
| 812 | } | ||
| 813 | add_key(code); | ||
| 810 | send_keyboard_report(); | 814 | send_keyboard_report(); |
| 811 | } | 815 | } |
| 812 | add_key(code); | 816 | } |
| 817 | else if | ||
| 818 | IS_MOD(code) { | ||
| 819 | add_mods(MOD_BIT(code)); | ||
| 813 | send_keyboard_report(); | 820 | send_keyboard_report(); |
| 814 | } | 821 | } |
| 815 | } else if IS_MOD (code) { | ||
| 816 | add_mods(MOD_BIT(code)); | ||
| 817 | send_keyboard_report(); | ||
| 818 | } | ||
| 819 | #ifdef EXTRAKEY_ENABLE | 822 | #ifdef EXTRAKEY_ENABLE |
| 820 | else if IS_SYSTEM (code) { | 823 | else if |
| 821 | host_system_send(KEYCODE2SYSTEM(code)); | 824 | IS_SYSTEM(code) { host_system_send(KEYCODE2SYSTEM(code)); } |
| 822 | } else if IS_CONSUMER (code) { | 825 | else if |
| 823 | host_consumer_send(KEYCODE2CONSUMER(code)); | 826 | IS_CONSUMER(code) { host_consumer_send(KEYCODE2CONSUMER(code)); } |
| 824 | } | ||
| 825 | #endif | 827 | #endif |
| 826 | #ifdef MOUSEKEY_ENABLE | 828 | #ifdef MOUSEKEY_ENABLE |
| 827 | else if IS_MOUSEKEY (code) { | 829 | else if |
| 828 | mousekey_on(code); | 830 | IS_MOUSEKEY(code) { |
| 829 | mousekey_send(); | 831 | mousekey_on(code); |
| 830 | } | 832 | mousekey_send(); |
| 833 | } | ||
| 831 | #endif | 834 | #endif |
| 832 | } | 835 | } |
| 833 | 836 | ||
| @@ -872,22 +875,26 @@ void unregister_code(uint8_t code) { | |||
| 872 | } | 875 | } |
| 873 | #endif | 876 | #endif |
| 874 | 877 | ||
| 875 | else if IS_KEY (code) { | 878 | else if |
| 876 | del_key(code); | 879 | IS_KEY(code) { |
| 877 | send_keyboard_report(); | 880 | del_key(code); |
| 878 | } else if IS_MOD (code) { | 881 | send_keyboard_report(); |
| 879 | del_mods(MOD_BIT(code)); | 882 | } |
| 880 | send_keyboard_report(); | 883 | else if |
| 881 | } else if IS_SYSTEM (code) { | 884 | IS_MOD(code) { |
| 882 | host_system_send(0); | 885 | del_mods(MOD_BIT(code)); |
| 883 | } else if IS_CONSUMER (code) { | 886 | send_keyboard_report(); |
| 884 | host_consumer_send(0); | 887 | } |
| 885 | } | 888 | else if |
| 889 | IS_SYSTEM(code) { host_system_send(0); } | ||
| 890 | else if | ||
| 891 | IS_CONSUMER(code) { host_consumer_send(0); } | ||
| 886 | #ifdef MOUSEKEY_ENABLE | 892 | #ifdef MOUSEKEY_ENABLE |
| 887 | else if IS_MOUSEKEY (code) { | 893 | else if |
| 888 | mousekey_off(code); | 894 | IS_MOUSEKEY(code) { |
| 889 | mousekey_send(); | 895 | mousekey_off(code); |
| 890 | } | 896 | mousekey_send(); |
| 897 | } | ||
| 891 | #endif | 898 | #endif |
| 892 | } | 899 | } |
| 893 | 900 | ||
diff --git a/quantum/action.h b/quantum/action.h index 8a357ded8..b562f18c5 100644 --- a/quantum/action.h +++ b/quantum/action.h | |||
| @@ -88,7 +88,7 @@ extern bool disable_action_cache; | |||
| 88 | 88 | ||
| 89 | /* Code for handling one-handed key modifiers. */ | 89 | /* Code for handling one-handed key modifiers. */ |
| 90 | #ifdef SWAP_HANDS_ENABLE | 90 | #ifdef SWAP_HANDS_ENABLE |
| 91 | extern bool swap_hands; | 91 | extern bool swap_hands; |
| 92 | extern const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS]; | 92 | extern const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS]; |
| 93 | # if (MATRIX_COLS <= 8) | 93 | # if (MATRIX_COLS <= 8) |
| 94 | typedef uint8_t swap_state_row_t; | 94 | typedef uint8_t swap_state_row_t; |
diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c index 36839f9fa..60e56fb81 100644 --- a/quantum/action_tapping.c +++ b/quantum/action_tapping.c | |||
| @@ -18,11 +18,11 @@ | |||
| 18 | # define IS_TAPPING_PRESSED() (IS_TAPPING() && tapping_key.event.pressed) | 18 | # define IS_TAPPING_PRESSED() (IS_TAPPING() && tapping_key.event.pressed) |
| 19 | # define IS_TAPPING_RELEASED() (IS_TAPPING() && !tapping_key.event.pressed) | 19 | # define IS_TAPPING_RELEASED() (IS_TAPPING() && !tapping_key.event.pressed) |
| 20 | # define IS_TAPPING_KEY(k) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (k))) | 20 | # define IS_TAPPING_KEY(k) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (k))) |
| 21 | #ifndef COMBO_ENABLE | 21 | # ifndef COMBO_ENABLE |
| 22 | # define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key))) | 22 | # define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key))) |
| 23 | #else | 23 | # else |
| 24 | # define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode) | 24 | # define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode) |
| 25 | #endif | 25 | # endif |
| 26 | 26 | ||
| 27 | __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return TAPPING_TERM; } | 27 | __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return TAPPING_TERM; } |
| 28 | 28 | ||
| @@ -212,11 +212,15 @@ bool process_tapping(keyrecord_t *keyp) { | |||
| 212 | if (tapping_key.tap.count > 1) { | 212 | if (tapping_key.tap.count > 1) { |
| 213 | debug("Tapping: Start new tap with releasing last tap(>1).\n"); | 213 | debug("Tapping: Start new tap with releasing last tap(>1).\n"); |
| 214 | // unregister key | 214 | // unregister key |
| 215 | process_record(&(keyrecord_t){.tap = tapping_key.tap, .event.key = tapping_key.event.key, .event.time = event.time, .event.pressed = false, | 215 | process_record(&(keyrecord_t){ |
| 216 | #ifdef COMBO_ENABLE | 216 | .tap = tapping_key.tap, |
| 217 | .keycode = tapping_key.keycode, | 217 | .event.key = tapping_key.event.key, |
| 218 | #endif | 218 | .event.time = event.time, |
| 219 | }); | 219 | .event.pressed = false, |
| 220 | # ifdef COMBO_ENABLE | ||
| 221 | .keycode = tapping_key.keycode, | ||
| 222 | # endif | ||
| 223 | }); | ||
| 220 | } else { | 224 | } else { |
| 221 | debug("Tapping: Start while last tap(1).\n"); | 225 | debug("Tapping: Start while last tap(1).\n"); |
| 222 | } | 226 | } |
| @@ -254,11 +258,15 @@ bool process_tapping(keyrecord_t *keyp) { | |||
| 254 | if (tapping_key.tap.count > 1) { | 258 | if (tapping_key.tap.count > 1) { |
| 255 | debug("Tapping: Start new tap with releasing last timeout tap(>1).\n"); | 259 | debug("Tapping: Start new tap with releasing last timeout tap(>1).\n"); |
| 256 | // unregister key | 260 | // unregister key |
| 257 | process_record(&(keyrecord_t){.tap = tapping_key.tap, .event.key = tapping_key.event.key, .event.time = event.time, .event.pressed = false, | 261 | process_record(&(keyrecord_t){ |
| 258 | #ifdef COMBO_ENABLE | 262 | .tap = tapping_key.tap, |
| 259 | .keycode = tapping_key.keycode, | 263 | .event.key = tapping_key.event.key, |
| 260 | #endif | 264 | .event.time = event.time, |
| 261 | }); | 265 | .event.pressed = false, |
| 266 | # ifdef COMBO_ENABLE | ||
| 267 | .keycode = tapping_key.keycode, | ||
| 268 | # endif | ||
| 269 | }); | ||
| 262 | } else { | 270 | } else { |
| 263 | debug("Tapping: Start while last timeout tap(1).\n"); | 271 | debug("Tapping: Start while last timeout tap(1).\n"); |
| 264 | } | 272 | } |
diff --git a/quantum/debounce/asym_eager_defer_pk.c b/quantum/debounce/asym_eager_defer_pk.c index 24380dc5e..81f39383c 100644 --- a/quantum/debounce/asym_eager_defer_pk.c +++ b/quantum/debounce/asym_eager_defer_pk.c | |||
| @@ -46,17 +46,17 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. | |||
| 46 | #define ROW_SHIFTER ((matrix_row_t)1) | 46 | #define ROW_SHIFTER ((matrix_row_t)1) |
| 47 | 47 | ||
| 48 | typedef struct { | 48 | typedef struct { |
| 49 | bool pressed : 1; | 49 | bool pressed : 1; |
| 50 | uint8_t time : 7; | 50 | uint8_t time : 7; |
| 51 | } debounce_counter_t; | 51 | } debounce_counter_t; |
| 52 | 52 | ||
| 53 | #if DEBOUNCE > 0 | 53 | #if DEBOUNCE > 0 |
| 54 | static debounce_counter_t *debounce_counters; | 54 | static debounce_counter_t *debounce_counters; |
| 55 | static fast_timer_t last_time; | 55 | static fast_timer_t last_time; |
| 56 | static bool counters_need_update; | 56 | static bool counters_need_update; |
| 57 | static bool matrix_need_update; | 57 | static bool matrix_need_update; |
| 58 | 58 | ||
| 59 | #define DEBOUNCE_ELAPSED 0 | 59 | # define DEBOUNCE_ELAPSED 0 |
| 60 | 60 | ||
| 61 | static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); | 61 | static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); |
| 62 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); | 62 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); |
| @@ -64,7 +64,7 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui | |||
| 64 | // we use num_rows rather than MATRIX_ROWS to support split keyboards | 64 | // we use num_rows rather than MATRIX_ROWS to support split keyboards |
| 65 | void debounce_init(uint8_t num_rows) { | 65 | void debounce_init(uint8_t num_rows) { |
| 66 | debounce_counters = malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); | 66 | debounce_counters = malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); |
| 67 | int i = 0; | 67 | int i = 0; |
| 68 | for (uint8_t r = 0; r < num_rows; r++) { | 68 | for (uint8_t r = 0; r < num_rows; r++) { |
| 69 | for (uint8_t c = 0; c < MATRIX_COLS; c++) { | 69 | for (uint8_t c = 0; c < MATRIX_COLS; c++) { |
| 70 | debounce_counters[i++].time = DEBOUNCE_ELAPSED; | 70 | debounce_counters[i++].time = DEBOUNCE_ELAPSED; |
| @@ -81,10 +81,10 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool | |||
| 81 | bool updated_last = false; | 81 | bool updated_last = false; |
| 82 | 82 | ||
| 83 | if (counters_need_update) { | 83 | if (counters_need_update) { |
| 84 | fast_timer_t now = timer_read_fast(); | 84 | fast_timer_t now = timer_read_fast(); |
| 85 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); | 85 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); |
| 86 | 86 | ||
| 87 | last_time = now; | 87 | last_time = now; |
| 88 | updated_last = true; | 88 | updated_last = true; |
| 89 | if (elapsed_time > UINT8_MAX) { | 89 | if (elapsed_time > UINT8_MAX) { |
| 90 | elapsed_time = UINT8_MAX; | 90 | elapsed_time = UINT8_MAX; |
| @@ -108,7 +108,7 @@ static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], | |||
| 108 | debounce_counter_t *debounce_pointer = debounce_counters; | 108 | debounce_counter_t *debounce_pointer = debounce_counters; |
| 109 | 109 | ||
| 110 | counters_need_update = false; | 110 | counters_need_update = false; |
| 111 | matrix_need_update = false; | 111 | matrix_need_update = false; |
| 112 | 112 | ||
| 113 | for (uint8_t row = 0; row < num_rows; row++) { | 113 | for (uint8_t row = 0; row < num_rows; row++) { |
| 114 | for (uint8_t col = 0; col < MATRIX_COLS; col++) { | 114 | for (uint8_t col = 0; col < MATRIX_COLS; col++) { |
| @@ -146,8 +146,8 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui | |||
| 146 | if (delta & col_mask) { | 146 | if (delta & col_mask) { |
| 147 | if (debounce_pointer->time == DEBOUNCE_ELAPSED) { | 147 | if (debounce_pointer->time == DEBOUNCE_ELAPSED) { |
| 148 | debounce_pointer->pressed = (raw[row] & col_mask); | 148 | debounce_pointer->pressed = (raw[row] & col_mask); |
| 149 | debounce_pointer->time = DEBOUNCE; | 149 | debounce_pointer->time = DEBOUNCE; |
| 150 | counters_need_update = true; | 150 | counters_need_update = true; |
| 151 | 151 | ||
| 152 | if (debounce_pointer->pressed) { | 152 | if (debounce_pointer->pressed) { |
| 153 | // key-down: eager | 153 | // key-down: eager |
diff --git a/quantum/debounce/sym_defer_g.c b/quantum/debounce/sym_defer_g.c index fbefd55ed..9155eb914 100644 --- a/quantum/debounce/sym_defer_g.c +++ b/quantum/debounce/sym_defer_g.c | |||
| @@ -25,7 +25,7 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. | |||
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | #if DEBOUNCE > 0 | 27 | #if DEBOUNCE > 0 |
| 28 | static bool debouncing = false; | 28 | static bool debouncing = false; |
| 29 | static fast_timer_t debouncing_time; | 29 | static fast_timer_t debouncing_time; |
| 30 | 30 | ||
| 31 | void debounce_init(uint8_t num_rows) {} | 31 | void debounce_init(uint8_t num_rows) {} |
diff --git a/quantum/debounce/sym_defer_pk.c b/quantum/debounce/sym_defer_pk.c index 626a9be84..1b698ba34 100644 --- a/quantum/debounce/sym_defer_pk.c +++ b/quantum/debounce/sym_defer_pk.c | |||
| @@ -49,7 +49,7 @@ static debounce_counter_t *debounce_counters; | |||
| 49 | static fast_timer_t last_time; | 49 | static fast_timer_t last_time; |
| 50 | static bool counters_need_update; | 50 | static bool counters_need_update; |
| 51 | 51 | ||
| 52 | #define DEBOUNCE_ELAPSED 0 | 52 | # define DEBOUNCE_ELAPSED 0 |
| 53 | 53 | ||
| 54 | static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); | 54 | static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); |
| 55 | static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); | 55 | static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); |
| @@ -74,10 +74,10 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool | |||
| 74 | bool updated_last = false; | 74 | bool updated_last = false; |
| 75 | 75 | ||
| 76 | if (counters_need_update) { | 76 | if (counters_need_update) { |
| 77 | fast_timer_t now = timer_read_fast(); | 77 | fast_timer_t now = timer_read_fast(); |
| 78 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); | 78 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); |
| 79 | 79 | ||
| 80 | last_time = now; | 80 | last_time = now; |
| 81 | updated_last = true; | 81 | updated_last = true; |
| 82 | if (elapsed_time > UINT8_MAX) { | 82 | if (elapsed_time > UINT8_MAX) { |
| 83 | elapsed_time = UINT8_MAX; | 83 | elapsed_time = UINT8_MAX; |
diff --git a/quantum/debounce/sym_eager_pk.c b/quantum/debounce/sym_eager_pk.c index 15a3242e6..9da000ea9 100644 --- a/quantum/debounce/sym_eager_pk.c +++ b/quantum/debounce/sym_eager_pk.c | |||
| @@ -50,7 +50,7 @@ static fast_timer_t last_time; | |||
| 50 | static bool counters_need_update; | 50 | static bool counters_need_update; |
| 51 | static bool matrix_need_update; | 51 | static bool matrix_need_update; |
| 52 | 52 | ||
| 53 | #define DEBOUNCE_ELAPSED 0 | 53 | # define DEBOUNCE_ELAPSED 0 |
| 54 | 54 | ||
| 55 | static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); | 55 | static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); |
| 56 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); | 56 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); |
| @@ -75,10 +75,10 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool | |||
| 75 | bool updated_last = false; | 75 | bool updated_last = false; |
| 76 | 76 | ||
| 77 | if (counters_need_update) { | 77 | if (counters_need_update) { |
| 78 | fast_timer_t now = timer_read_fast(); | 78 | fast_timer_t now = timer_read_fast(); |
| 79 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); | 79 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); |
| 80 | 80 | ||
| 81 | last_time = now; | 81 | last_time = now; |
| 82 | updated_last = true; | 82 | updated_last = true; |
| 83 | if (elapsed_time > UINT8_MAX) { | 83 | if (elapsed_time > UINT8_MAX) { |
| 84 | elapsed_time = UINT8_MAX; | 84 | elapsed_time = UINT8_MAX; |
| @@ -107,7 +107,7 @@ static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { | |||
| 107 | for (uint8_t col = 0; col < MATRIX_COLS; col++) { | 107 | for (uint8_t col = 0; col < MATRIX_COLS; col++) { |
| 108 | if (*debounce_pointer != DEBOUNCE_ELAPSED) { | 108 | if (*debounce_pointer != DEBOUNCE_ELAPSED) { |
| 109 | if (*debounce_pointer <= elapsed_time) { | 109 | if (*debounce_pointer <= elapsed_time) { |
| 110 | *debounce_pointer = DEBOUNCE_ELAPSED; | 110 | *debounce_pointer = DEBOUNCE_ELAPSED; |
| 111 | matrix_need_update = true; | 111 | matrix_need_update = true; |
| 112 | } else { | 112 | } else { |
| 113 | *debounce_pointer -= elapsed_time; | 113 | *debounce_pointer -= elapsed_time; |
diff --git a/quantum/debounce/sym_eager_pr.c b/quantum/debounce/sym_eager_pr.c index 2ad592c5a..eda92a263 100644 --- a/quantum/debounce/sym_eager_pr.c +++ b/quantum/debounce/sym_eager_pr.c | |||
| @@ -49,7 +49,7 @@ static debounce_counter_t *debounce_counters; | |||
| 49 | static fast_timer_t last_time; | 49 | static fast_timer_t last_time; |
| 50 | static bool counters_need_update; | 50 | static bool counters_need_update; |
| 51 | 51 | ||
| 52 | #define DEBOUNCE_ELAPSED 0 | 52 | # define DEBOUNCE_ELAPSED 0 |
| 53 | 53 | ||
| 54 | static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); | 54 | static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); |
| 55 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); | 55 | static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); |
| @@ -71,10 +71,10 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool | |||
| 71 | bool updated_last = false; | 71 | bool updated_last = false; |
| 72 | 72 | ||
| 73 | if (counters_need_update) { | 73 | if (counters_need_update) { |
| 74 | fast_timer_t now = timer_read_fast(); | 74 | fast_timer_t now = timer_read_fast(); |
| 75 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); | 75 | fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); |
| 76 | 76 | ||
| 77 | last_time = now; | 77 | last_time = now; |
| 78 | updated_last = true; | 78 | updated_last = true; |
| 79 | if (elapsed_time > UINT8_MAX) { | 79 | if (elapsed_time > UINT8_MAX) { |
| 80 | elapsed_time = UINT8_MAX; | 80 | elapsed_time = UINT8_MAX; |
| @@ -102,7 +102,7 @@ static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { | |||
| 102 | for (uint8_t row = 0; row < num_rows; row++) { | 102 | for (uint8_t row = 0; row < num_rows; row++) { |
| 103 | if (*debounce_pointer != DEBOUNCE_ELAPSED) { | 103 | if (*debounce_pointer != DEBOUNCE_ELAPSED) { |
| 104 | if (*debounce_pointer <= elapsed_time) { | 104 | if (*debounce_pointer <= elapsed_time) { |
| 105 | *debounce_pointer = DEBOUNCE_ELAPSED; | 105 | *debounce_pointer = DEBOUNCE_ELAPSED; |
| 106 | matrix_need_update = true; | 106 | matrix_need_update = true; |
| 107 | } else { | 107 | } else { |
| 108 | *debounce_pointer -= elapsed_time; | 108 | *debounce_pointer -= elapsed_time; |
diff --git a/quantum/debounce/tests/asym_eager_defer_pk_tests.cpp b/quantum/debounce/tests/asym_eager_defer_pk_tests.cpp index fe374c3df..44b4fe195 100644 --- a/quantum/debounce/tests/asym_eager_defer_pk_tests.cpp +++ b/quantum/debounce/tests/asym_eager_defer_pk_tests.cpp | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | #include "debounce_test_common.h" | 19 | #include "debounce_test_common.h" |
| 20 | 20 | ||
| 21 | TEST_F(DebounceTest, OneKeyShort1) { | 21 | TEST_F(DebounceTest, OneKeyShort1) { |
| 22 | addEvents({ /* Time, Inputs, Outputs */ | 22 | addEvents({ |
| 23 | /* Time, Inputs, Outputs */ | ||
| 23 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 24 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 24 | /* Release key after 1ms delay */ | 25 | /* Release key after 1ms delay */ |
| 25 | {1, {{0, 1, UP}}, {}}, | 26 | {1, {{0, 1, UP}}, {}}, |
| @@ -43,7 +44,8 @@ TEST_F(DebounceTest, OneKeyShort1) { | |||
| 43 | } | 44 | } |
| 44 | 45 | ||
| 45 | TEST_F(DebounceTest, OneKeyShort2) { | 46 | TEST_F(DebounceTest, OneKeyShort2) { |
| 46 | addEvents({ /* Time, Inputs, Outputs */ | 47 | addEvents({ |
| 48 | /* Time, Inputs, Outputs */ | ||
| 47 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 49 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 48 | /* Release key after 2ms delay */ | 50 | /* Release key after 2ms delay */ |
| 49 | {2, {{0, 1, UP}}, {}}, | 51 | {2, {{0, 1, UP}}, {}}, |
| @@ -58,7 +60,8 @@ TEST_F(DebounceTest, OneKeyShort2) { | |||
| 58 | } | 60 | } |
| 59 | 61 | ||
| 60 | TEST_F(DebounceTest, OneKeyShort3) { | 62 | TEST_F(DebounceTest, OneKeyShort3) { |
| 61 | addEvents({ /* Time, Inputs, Outputs */ | 63 | addEvents({ |
| 64 | /* Time, Inputs, Outputs */ | ||
| 62 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 65 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 63 | /* Release key after 3ms delay */ | 66 | /* Release key after 3ms delay */ |
| 64 | {3, {{0, 1, UP}}, {}}, | 67 | {3, {{0, 1, UP}}, {}}, |
| @@ -73,7 +76,8 @@ TEST_F(DebounceTest, OneKeyShort3) { | |||
| 73 | } | 76 | } |
| 74 | 77 | ||
| 75 | TEST_F(DebounceTest, OneKeyShort4) { | 78 | TEST_F(DebounceTest, OneKeyShort4) { |
| 76 | addEvents({ /* Time, Inputs, Outputs */ | 79 | addEvents({ |
| 80 | /* Time, Inputs, Outputs */ | ||
| 77 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 81 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 78 | /* Release key after 4ms delay */ | 82 | /* Release key after 4ms delay */ |
| 79 | {4, {{0, 1, UP}}, {}}, | 83 | {4, {{0, 1, UP}}, {}}, |
| @@ -88,7 +92,8 @@ TEST_F(DebounceTest, OneKeyShort4) { | |||
| 88 | } | 92 | } |
| 89 | 93 | ||
| 90 | TEST_F(DebounceTest, OneKeyShort5) { | 94 | TEST_F(DebounceTest, OneKeyShort5) { |
| 91 | addEvents({ /* Time, Inputs, Outputs */ | 95 | addEvents({ |
| 96 | /* Time, Inputs, Outputs */ | ||
| 92 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 97 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 93 | 98 | ||
| 94 | /* Release key after 5ms delay */ | 99 | /* Release key after 5ms delay */ |
| @@ -102,7 +107,8 @@ TEST_F(DebounceTest, OneKeyShort5) { | |||
| 102 | } | 107 | } |
| 103 | 108 | ||
| 104 | TEST_F(DebounceTest, OneKeyShort6) { | 109 | TEST_F(DebounceTest, OneKeyShort6) { |
| 105 | addEvents({ /* Time, Inputs, Outputs */ | 110 | addEvents({ |
| 111 | /* Time, Inputs, Outputs */ | ||
| 106 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 112 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 107 | 113 | ||
| 108 | /* Release key after 6ms delay */ | 114 | /* Release key after 6ms delay */ |
| @@ -116,7 +122,8 @@ TEST_F(DebounceTest, OneKeyShort6) { | |||
| 116 | } | 122 | } |
| 117 | 123 | ||
| 118 | TEST_F(DebounceTest, OneKeyShort7) { | 124 | TEST_F(DebounceTest, OneKeyShort7) { |
| 119 | addEvents({ /* Time, Inputs, Outputs */ | 125 | addEvents({ |
| 126 | /* Time, Inputs, Outputs */ | ||
| 120 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 127 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 121 | 128 | ||
| 122 | /* Release key after 7ms delay */ | 129 | /* Release key after 7ms delay */ |
| @@ -130,7 +137,8 @@ TEST_F(DebounceTest, OneKeyShort7) { | |||
| 130 | } | 137 | } |
| 131 | 138 | ||
| 132 | TEST_F(DebounceTest, OneKeyShort8) { | 139 | TEST_F(DebounceTest, OneKeyShort8) { |
| 133 | addEvents({ /* Time, Inputs, Outputs */ | 140 | addEvents({ |
| 141 | /* Time, Inputs, Outputs */ | ||
| 134 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 142 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 135 | /* Release key after 1ms delay */ | 143 | /* Release key after 1ms delay */ |
| 136 | {1, {{0, 1, UP}}, {}}, | 144 | {1, {{0, 1, UP}}, {}}, |
| @@ -145,7 +153,8 @@ TEST_F(DebounceTest, OneKeyShort8) { | |||
| 145 | } | 153 | } |
| 146 | 154 | ||
| 147 | TEST_F(DebounceTest, OneKeyShort9) { | 155 | TEST_F(DebounceTest, OneKeyShort9) { |
| 148 | addEvents({ /* Time, Inputs, Outputs */ | 156 | addEvents({ |
| 157 | /* Time, Inputs, Outputs */ | ||
| 149 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 158 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 150 | /* Release key after 1ms delay */ | 159 | /* Release key after 1ms delay */ |
| 151 | {1, {{0, 1, UP}}, {}}, | 160 | {1, {{0, 1, UP}}, {}}, |
| @@ -159,7 +168,8 @@ TEST_F(DebounceTest, OneKeyShort9) { | |||
| 159 | } | 168 | } |
| 160 | 169 | ||
| 161 | TEST_F(DebounceTest, OneKeyBouncing1) { | 170 | TEST_F(DebounceTest, OneKeyBouncing1) { |
| 162 | addEvents({ /* Time, Inputs, Outputs */ | 171 | addEvents({ |
| 172 | /* Time, Inputs, Outputs */ | ||
| 163 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 173 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 164 | {1, {{0, 1, UP}}, {}}, | 174 | {1, {{0, 1, UP}}, {}}, |
| 165 | {2, {{0, 1, DOWN}}, {}}, | 175 | {2, {{0, 1, DOWN}}, {}}, |
| @@ -185,7 +195,8 @@ TEST_F(DebounceTest, OneKeyBouncing1) { | |||
| 185 | } | 195 | } |
| 186 | 196 | ||
| 187 | TEST_F(DebounceTest, OneKeyBouncing2) { | 197 | TEST_F(DebounceTest, OneKeyBouncing2) { |
| 188 | addEvents({ /* Time, Inputs, Outputs */ | 198 | addEvents({ |
| 199 | /* Time, Inputs, Outputs */ | ||
| 189 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 200 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 190 | /* Change twice in the same time period */ | 201 | /* Change twice in the same time period */ |
| 191 | {1, {{0, 1, UP}}, {}}, | 202 | {1, {{0, 1, UP}}, {}}, |
| @@ -217,7 +228,8 @@ TEST_F(DebounceTest, OneKeyBouncing2) { | |||
| 217 | } | 228 | } |
| 218 | 229 | ||
| 219 | TEST_F(DebounceTest, OneKeyLong) { | 230 | TEST_F(DebounceTest, OneKeyLong) { |
| 220 | addEvents({ /* Time, Inputs, Outputs */ | 231 | addEvents({ |
| 232 | /* Time, Inputs, Outputs */ | ||
| 221 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 233 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 222 | 234 | ||
| 223 | {25, {{0, 1, UP}}, {}}, | 235 | {25, {{0, 1, UP}}, {}}, |
| @@ -236,7 +248,8 @@ TEST_F(DebounceTest, OneKeyLong) { | |||
| 236 | } | 248 | } |
| 237 | 249 | ||
| 238 | TEST_F(DebounceTest, TwoKeysShort) { | 250 | TEST_F(DebounceTest, TwoKeysShort) { |
| 239 | addEvents({ /* Time, Inputs, Outputs */ | 251 | addEvents({ |
| 252 | /* Time, Inputs, Outputs */ | ||
| 240 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 253 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 241 | {1, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, | 254 | {1, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, |
| 242 | /* Release key after 2ms delay */ | 255 | /* Release key after 2ms delay */ |
| @@ -249,14 +262,14 @@ TEST_F(DebounceTest, TwoKeysShort) { | |||
| 249 | {10, {}, {{0, 1, UP}}}, /* 5ms+5ms after DOWN at time 0 */ | 262 | {10, {}, {{0, 1, UP}}}, /* 5ms+5ms after DOWN at time 0 */ |
| 250 | /* Press key again after 1ms delay */ | 263 | /* Press key again after 1ms delay */ |
| 251 | {11, {{0, 1, DOWN}}, {{0, 1, DOWN}, {0, 2, UP}}}, /* 5ms+5ms after DOWN at time 0 */ | 264 | {11, {{0, 1, DOWN}}, {{0, 1, DOWN}, {0, 2, UP}}}, /* 5ms+5ms after DOWN at time 0 */ |
| 252 | {12, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, /* 5ms+5ms after DOWN at time 0 */ | 265 | {12, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, /* 5ms+5ms after DOWN at time 0 */ |
| 253 | }); | 266 | }); |
| 254 | runEvents(); | 267 | runEvents(); |
| 255 | } | 268 | } |
| 256 | 269 | ||
| 257 | |||
| 258 | TEST_F(DebounceTest, OneKeyDelayedScan1) { | 270 | TEST_F(DebounceTest, OneKeyDelayedScan1) { |
| 259 | addEvents({ /* Time, Inputs, Outputs */ | 271 | addEvents({ |
| 272 | /* Time, Inputs, Outputs */ | ||
| 260 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 273 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 261 | 274 | ||
| 262 | /* Processing is very late, immediately release key */ | 275 | /* Processing is very late, immediately release key */ |
| @@ -269,7 +282,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan1) { | |||
| 269 | } | 282 | } |
| 270 | 283 | ||
| 271 | TEST_F(DebounceTest, OneKeyDelayedScan2) { | 284 | TEST_F(DebounceTest, OneKeyDelayedScan2) { |
| 272 | addEvents({ /* Time, Inputs, Outputs */ | 285 | addEvents({ |
| 286 | /* Time, Inputs, Outputs */ | ||
| 273 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 287 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 274 | 288 | ||
| 275 | /* Processing is very late, immediately release key */ | 289 | /* Processing is very late, immediately release key */ |
| @@ -283,7 +297,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan2) { | |||
| 283 | } | 297 | } |
| 284 | 298 | ||
| 285 | TEST_F(DebounceTest, OneKeyDelayedScan3) { | 299 | TEST_F(DebounceTest, OneKeyDelayedScan3) { |
| 286 | addEvents({ /* Time, Inputs, Outputs */ | 300 | addEvents({ |
| 301 | /* Time, Inputs, Outputs */ | ||
| 287 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 302 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 288 | 303 | ||
| 289 | /* Processing is very late */ | 304 | /* Processing is very late */ |
| @@ -298,7 +313,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan3) { | |||
| 298 | } | 313 | } |
| 299 | 314 | ||
| 300 | TEST_F(DebounceTest, OneKeyDelayedScan4) { | 315 | TEST_F(DebounceTest, OneKeyDelayedScan4) { |
| 301 | addEvents({ /* Time, Inputs, Outputs */ | 316 | addEvents({ |
| 317 | /* Time, Inputs, Outputs */ | ||
| 302 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 318 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 303 | 319 | ||
| 304 | /* Processing is very late */ | 320 | /* Processing is very late */ |
| @@ -314,7 +330,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan4) { | |||
| 314 | } | 330 | } |
| 315 | 331 | ||
| 316 | TEST_F(DebounceTest, OneKeyDelayedScan5) { | 332 | TEST_F(DebounceTest, OneKeyDelayedScan5) { |
| 317 | addEvents({ /* Time, Inputs, Outputs */ | 333 | addEvents({ |
| 334 | /* Time, Inputs, Outputs */ | ||
| 318 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 335 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 319 | 336 | ||
| 320 | {5, {{0, 1, UP}}, {}}, | 337 | {5, {{0, 1, UP}}, {}}, |
| @@ -329,7 +346,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan5) { | |||
| 329 | } | 346 | } |
| 330 | 347 | ||
| 331 | TEST_F(DebounceTest, OneKeyDelayedScan6) { | 348 | TEST_F(DebounceTest, OneKeyDelayedScan6) { |
| 332 | addEvents({ /* Time, Inputs, Outputs */ | 349 | addEvents({ |
| 350 | /* Time, Inputs, Outputs */ | ||
| 333 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 351 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 334 | 352 | ||
| 335 | {5, {{0, 1, UP}}, {}}, | 353 | {5, {{0, 1, UP}}, {}}, |
| @@ -345,7 +363,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan6) { | |||
| 345 | } | 363 | } |
| 346 | 364 | ||
| 347 | TEST_F(DebounceTest, OneKeyDelayedScan7) { | 365 | TEST_F(DebounceTest, OneKeyDelayedScan7) { |
| 348 | addEvents({ /* Time, Inputs, Outputs */ | 366 | addEvents({ |
| 367 | /* Time, Inputs, Outputs */ | ||
| 349 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 368 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 350 | 369 | ||
| 351 | {5, {{0, 1, UP}}, {}}, | 370 | {5, {{0, 1, UP}}, {}}, |
| @@ -358,7 +377,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan7) { | |||
| 358 | } | 377 | } |
| 359 | 378 | ||
| 360 | TEST_F(DebounceTest, OneKeyDelayedScan8) { | 379 | TEST_F(DebounceTest, OneKeyDelayedScan8) { |
| 361 | addEvents({ /* Time, Inputs, Outputs */ | 380 | addEvents({ |
| 381 | /* Time, Inputs, Outputs */ | ||
| 362 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 382 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 363 | 383 | ||
| 364 | /* Processing is a bit late */ | 384 | /* Processing is a bit late */ |
diff --git a/quantum/debounce/tests/debounce_test_common.cpp b/quantum/debounce/tests/debounce_test_common.cpp index 1c5e7c9f4..f9414e571 100644 --- a/quantum/debounce/tests/debounce_test_common.cpp +++ b/quantum/debounce/tests/debounce_test_common.cpp | |||
| @@ -31,9 +31,7 @@ void set_time(uint32_t t); | |||
| 31 | void advance_time(uint32_t ms); | 31 | void advance_time(uint32_t ms); |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | void DebounceTest::addEvents(std::initializer_list<DebounceTestEvent> events) { | 34 | void DebounceTest::addEvents(std::initializer_list<DebounceTestEvent> events) { events_.insert(events_.end(), events.begin(), events.end()); } |
| 35 | events_.insert(events_.end(), events.begin(), events.end()); | ||
| 36 | } | ||
| 37 | 35 | ||
| 38 | void DebounceTest::runEvents() { | 36 | void DebounceTest::runEvents() { |
| 39 | /* Run the test multiple times, from 1kHz to 10kHz scan rate */ | 37 | /* Run the test multiple times, from 1kHz to 10kHz scan rate */ |
| @@ -54,7 +52,7 @@ void DebounceTest::runEvents() { | |||
| 54 | 52 | ||
| 55 | void DebounceTest::runEventsInternal() { | 53 | void DebounceTest::runEventsInternal() { |
| 56 | fast_timer_t previous = 0; | 54 | fast_timer_t previous = 0; |
| 57 | bool first = true; | 55 | bool first = true; |
| 58 | 56 | ||
| 59 | /* Initialise keyboard with start time (offset to avoid testing at 0) and all keys UP */ | 57 | /* Initialise keyboard with start time (offset to avoid testing at 0) and all keys UP */ |
| 60 | debounce_init(MATRIX_ROWS); | 58 | debounce_init(MATRIX_ROWS); |
| @@ -80,7 +78,7 @@ void DebounceTest::runEventsInternal() { | |||
| 80 | } | 78 | } |
| 81 | } | 79 | } |
| 82 | 80 | ||
| 83 | first = false; | 81 | first = false; |
| 84 | previous = event.time_; | 82 | previous = event.time_; |
| 85 | 83 | ||
| 86 | /* Prepare input matrix */ | 84 | /* Prepare input matrix */ |
| @@ -98,12 +96,7 @@ void DebounceTest::runEventsInternal() { | |||
| 98 | 96 | ||
| 99 | /* Check output matrix has expected change events */ | 97 | /* Check output matrix has expected change events */ |
| 100 | for (auto &output : event.outputs_) { | 98 | for (auto &output : event.outputs_) { |
| 101 | EXPECT_EQ(!!(cooked_matrix_[output.row_] & (1U << output.col_)), directionValue(output.direction_)) | 99 | EXPECT_EQ(!!(cooked_matrix_[output.row_] & (1U << output.col_)), directionValue(output.direction_)) << "Missing event at " << strTime() << " expected key " << output.row_ << "," << output.col_ << " " << directionLabel(output.direction_) << "\ninput_matrix: changed=" << !event.inputs_.empty() << "\n" << strMatrix(input_matrix_) << "\nexpected_matrix:\n" << strMatrix(output_matrix_) << "\nactual_matrix:\n" << strMatrix(cooked_matrix_); |
| 102 | << "Missing event at " << strTime() | ||
| 103 | << " expected key " << output.row_ << "," << output.col_ << " " << directionLabel(output.direction_) | ||
| 104 | << "\ninput_matrix: changed=" << !event.inputs_.empty() << "\n" << strMatrix(input_matrix_) | ||
| 105 | << "\nexpected_matrix:\n" << strMatrix(output_matrix_) | ||
| 106 | << "\nactual_matrix:\n" << strMatrix(cooked_matrix_); | ||
| 107 | } | 100 | } |
| 108 | 101 | ||
| 109 | /* Check output matrix has no other changes */ | 102 | /* Check output matrix has no other changes */ |
| @@ -133,27 +126,20 @@ void DebounceTest::runDebounce(bool changed) { | |||
| 133 | debounce(raw_matrix_, cooked_matrix_, MATRIX_ROWS, changed); | 126 | debounce(raw_matrix_, cooked_matrix_, MATRIX_ROWS, changed); |
| 134 | 127 | ||
| 135 | if (!std::equal(std::begin(input_matrix_), std::end(input_matrix_), std::begin(raw_matrix_))) { | 128 | if (!std::equal(std::begin(input_matrix_), std::end(input_matrix_), std::begin(raw_matrix_))) { |
| 136 | FAIL() << "Fatal error: debounce() modified raw matrix at " << strTime() | 129 | FAIL() << "Fatal error: debounce() modified raw matrix at " << strTime() << "\ninput_matrix: changed=" << changed << "\n" << strMatrix(input_matrix_) << "\nraw_matrix:\n" << strMatrix(raw_matrix_); |
| 137 | << "\ninput_matrix: changed=" << changed << "\n" << strMatrix(input_matrix_) | ||
| 138 | << "\nraw_matrix:\n" << strMatrix(raw_matrix_); | ||
| 139 | } | 130 | } |
| 140 | } | 131 | } |
| 141 | 132 | ||
| 142 | void DebounceTest::checkCookedMatrix(bool changed, const std::string &error_message) { | 133 | void DebounceTest::checkCookedMatrix(bool changed, const std::string &error_message) { |
| 143 | if (!std::equal(std::begin(output_matrix_), std::end(output_matrix_), std::begin(cooked_matrix_))) { | 134 | if (!std::equal(std::begin(output_matrix_), std::end(output_matrix_), std::begin(cooked_matrix_))) { |
| 144 | FAIL() << "Unexpected event: " << error_message << " at " << strTime() | 135 | FAIL() << "Unexpected event: " << error_message << " at " << strTime() << "\ninput_matrix: changed=" << changed << "\n" << strMatrix(input_matrix_) << "\nexpected_matrix:\n" << strMatrix(output_matrix_) << "\nactual_matrix:\n" << strMatrix(cooked_matrix_); |
| 145 | << "\ninput_matrix: changed=" << changed << "\n" << strMatrix(input_matrix_) | ||
| 146 | << "\nexpected_matrix:\n" << strMatrix(output_matrix_) | ||
| 147 | << "\nactual_matrix:\n" << strMatrix(cooked_matrix_); | ||
| 148 | } | 136 | } |
| 149 | } | 137 | } |
| 150 | 138 | ||
| 151 | std::string DebounceTest::strTime() { | 139 | std::string DebounceTest::strTime() { |
| 152 | std::stringstream text; | 140 | std::stringstream text; |
| 153 | 141 | ||
| 154 | text << "time " << (timer_read_fast() - time_offset_) | 142 | text << "time " << (timer_read_fast() - time_offset_) << " (extra_iterations=" << extra_iterations_ << ", auto_advance_time=" << auto_advance_time_ << ")"; |
| 155 | << " (extra_iterations=" << extra_iterations_ | ||
| 156 | << ", auto_advance_time=" << auto_advance_time_ << ")"; | ||
| 157 | 143 | ||
| 158 | return text.str(); | 144 | return text.str(); |
| 159 | } | 145 | } |
| @@ -181,49 +167,39 @@ std::string DebounceTest::strMatrix(matrix_row_t matrix[]) { | |||
| 181 | 167 | ||
| 182 | bool DebounceTest::directionValue(Direction direction) { | 168 | bool DebounceTest::directionValue(Direction direction) { |
| 183 | switch (direction) { | 169 | switch (direction) { |
| 184 | case DOWN: | 170 | case DOWN: |
| 185 | return true; | 171 | return true; |
| 186 | 172 | ||
| 187 | case UP: | 173 | case UP: |
| 188 | return false; | 174 | return false; |
| 189 | } | 175 | } |
| 190 | } | 176 | } |
| 191 | 177 | ||
| 192 | std::string DebounceTest::directionLabel(Direction direction) { | 178 | std::string DebounceTest::directionLabel(Direction direction) { |
| 193 | switch (direction) { | 179 | switch (direction) { |
| 194 | case DOWN: | 180 | case DOWN: |
| 195 | return "DOWN"; | 181 | return "DOWN"; |
| 196 | 182 | ||
| 197 | case UP: | 183 | case UP: |
| 198 | return "UP"; | 184 | return "UP"; |
| 199 | } | 185 | } |
| 200 | } | 186 | } |
| 201 | 187 | ||
| 202 | /* Modify a matrix and verify that events always specify a change */ | 188 | /* Modify a matrix and verify that events always specify a change */ |
| 203 | void DebounceTest::matrixUpdate(matrix_row_t matrix[], const std::string &name, const MatrixTestEvent &event) { | 189 | void DebounceTest::matrixUpdate(matrix_row_t matrix[], const std::string &name, const MatrixTestEvent &event) { |
| 204 | ASSERT_NE(!!(matrix[event.row_] & (1U << event.col_)), directionValue(event.direction_)) | 190 | ASSERT_NE(!!(matrix[event.row_] & (1U << event.col_)), directionValue(event.direction_)) << "Test " << name << " at " << strTime() << " sets key " << event.row_ << "," << event.col_ << " " << directionLabel(event.direction_) << " but it is already " << directionLabel(event.direction_) << "\n" << name << "_matrix:\n" << strMatrix(matrix); |
| 205 | << "Test " << name << " at " << strTime() | ||
| 206 | << " sets key " << event.row_ << "," << event.col_ << " " << directionLabel(event.direction_) | ||
| 207 | << " but it is already " << directionLabel(event.direction_) | ||
| 208 | << "\n" << name << "_matrix:\n" << strMatrix(matrix); | ||
| 209 | 191 | ||
| 210 | switch (event.direction_) { | 192 | switch (event.direction_) { |
| 211 | case DOWN: | 193 | case DOWN: |
| 212 | matrix[event.row_] |= (1U << event.col_); | 194 | matrix[event.row_] |= (1U << event.col_); |
| 213 | break; | 195 | break; |
| 214 | 196 | ||
| 215 | case UP: | 197 | case UP: |
| 216 | matrix[event.row_] &= ~(1U << event.col_); | 198 | matrix[event.row_] &= ~(1U << event.col_); |
| 217 | break; | 199 | break; |
| 218 | } | 200 | } |
| 219 | } | 201 | } |
| 220 | 202 | ||
| 221 | DebounceTestEvent::DebounceTestEvent(fast_timer_t time, | 203 | DebounceTestEvent::DebounceTestEvent(fast_timer_t time, std::initializer_list<MatrixTestEvent> inputs, std::initializer_list<MatrixTestEvent> outputs) : time_(time), inputs_(inputs), outputs_(outputs) {} |
| 222 | std::initializer_list<MatrixTestEvent> inputs, | ||
| 223 | std::initializer_list<MatrixTestEvent> outputs) | ||
| 224 | : time_(time), inputs_(inputs), outputs_(outputs) { | ||
| 225 | } | ||
| 226 | 204 | ||
| 227 | MatrixTestEvent::MatrixTestEvent(int row, int col, Direction direction) | 205 | MatrixTestEvent::MatrixTestEvent(int row, int col, Direction direction) : row_(row), col_(col), direction_(direction) {} |
| 228 | : row_(row), col_(col), direction_(direction) { | ||
| 229 | } | ||
diff --git a/quantum/debounce/tests/debounce_test_common.h b/quantum/debounce/tests/debounce_test_common.h index d87e31059..b7becb378 100644 --- a/quantum/debounce/tests/debounce_test_common.h +++ b/quantum/debounce/tests/debounce_test_common.h | |||
| @@ -31,36 +31,34 @@ enum Direction { | |||
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | class MatrixTestEvent { | 33 | class MatrixTestEvent { |
| 34 | public: | 34 | public: |
| 35 | MatrixTestEvent(int row, int col, Direction direction); | 35 | MatrixTestEvent(int row, int col, Direction direction); |
| 36 | 36 | ||
| 37 | const int row_; | 37 | const int row_; |
| 38 | const int col_; | 38 | const int col_; |
| 39 | const Direction direction_; | 39 | const Direction direction_; |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | class DebounceTestEvent { | 42 | class DebounceTestEvent { |
| 43 | public: | 43 | public: |
| 44 | // 0, {{0, 1, DOWN}}, {{0, 1, DOWN}}) | 44 | // 0, {{0, 1, DOWN}}, {{0, 1, DOWN}}) |
| 45 | DebounceTestEvent(fast_timer_t time, | 45 | DebounceTestEvent(fast_timer_t time, std::initializer_list<MatrixTestEvent> inputs, std::initializer_list<MatrixTestEvent> outputs); |
| 46 | std::initializer_list<MatrixTestEvent> inputs, | ||
| 47 | std::initializer_list<MatrixTestEvent> outputs); | ||
| 48 | 46 | ||
| 49 | const fast_timer_t time_; | 47 | const fast_timer_t time_; |
| 50 | const std::list<MatrixTestEvent> inputs_; | 48 | const std::list<MatrixTestEvent> inputs_; |
| 51 | const std::list<MatrixTestEvent> outputs_; | 49 | const std::list<MatrixTestEvent> outputs_; |
| 52 | }; | 50 | }; |
| 53 | 51 | ||
| 54 | class DebounceTest : public ::testing::Test { | 52 | class DebounceTest : public ::testing::Test { |
| 55 | protected: | 53 | protected: |
| 56 | void addEvents(std::initializer_list<DebounceTestEvent> events); | 54 | void addEvents(std::initializer_list<DebounceTestEvent> events); |
| 57 | void runEvents(); | 55 | void runEvents(); |
| 58 | 56 | ||
| 59 | fast_timer_t time_offset_ = 7777; | 57 | fast_timer_t time_offset_ = 7777; |
| 60 | bool time_jumps_ = false; | 58 | bool time_jumps_ = false; |
| 61 | 59 | ||
| 62 | private: | 60 | private: |
| 63 | static bool directionValue(Direction direction); | 61 | static bool directionValue(Direction direction); |
| 64 | static std::string directionLabel(Direction direction); | 62 | static std::string directionLabel(Direction direction); |
| 65 | 63 | ||
| 66 | void runEventsInternal(); | 64 | void runEventsInternal(); |
| @@ -78,6 +76,6 @@ private: | |||
| 78 | matrix_row_t cooked_matrix_[MATRIX_ROWS]; | 76 | matrix_row_t cooked_matrix_[MATRIX_ROWS]; |
| 79 | matrix_row_t output_matrix_[MATRIX_ROWS]; | 77 | matrix_row_t output_matrix_[MATRIX_ROWS]; |
| 80 | 78 | ||
| 81 | int extra_iterations_; | 79 | int extra_iterations_; |
| 82 | bool auto_advance_time_; | 80 | bool auto_advance_time_; |
| 83 | }; | 81 | }; |
diff --git a/quantum/debounce/tests/sym_defer_g_tests.cpp b/quantum/debounce/tests/sym_defer_g_tests.cpp index a56aecd8f..73d3d45e3 100644 --- a/quantum/debounce/tests/sym_defer_g_tests.cpp +++ b/quantum/debounce/tests/sym_defer_g_tests.cpp | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | #include "debounce_test_common.h" | 19 | #include "debounce_test_common.h" |
| 20 | 20 | ||
| 21 | TEST_F(DebounceTest, OneKeyShort1) { | 21 | TEST_F(DebounceTest, OneKeyShort1) { |
| 22 | addEvents({ /* Time, Inputs, Outputs */ | 22 | addEvents({ |
| 23 | /* Time, Inputs, Outputs */ | ||
| 23 | {0, {{0, 1, DOWN}}, {}}, | 24 | {0, {{0, 1, DOWN}}, {}}, |
| 24 | 25 | ||
| 25 | {5, {}, {{0, 1, DOWN}}}, | 26 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -32,7 +33,8 @@ TEST_F(DebounceTest, OneKeyShort1) { | |||
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | TEST_F(DebounceTest, OneKeyShort2) { | 35 | TEST_F(DebounceTest, OneKeyShort2) { |
| 35 | addEvents({ /* Time, Inputs, Outputs */ | 36 | addEvents({ |
| 37 | /* Time, Inputs, Outputs */ | ||
| 36 | {0, {{0, 1, DOWN}}, {}}, | 38 | {0, {{0, 1, DOWN}}, {}}, |
| 37 | 39 | ||
| 38 | {5, {}, {{0, 1, DOWN}}}, | 40 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -45,7 +47,8 @@ TEST_F(DebounceTest, OneKeyShort2) { | |||
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | TEST_F(DebounceTest, OneKeyShort3) { | 49 | TEST_F(DebounceTest, OneKeyShort3) { |
| 48 | addEvents({ /* Time, Inputs, Outputs */ | 50 | addEvents({ |
| 51 | /* Time, Inputs, Outputs */ | ||
| 49 | {0, {{0, 1, DOWN}}, {}}, | 52 | {0, {{0, 1, DOWN}}, {}}, |
| 50 | 53 | ||
| 51 | {5, {}, {{0, 1, DOWN}}}, | 54 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -58,7 +61,8 @@ TEST_F(DebounceTest, OneKeyShort3) { | |||
| 58 | } | 61 | } |
| 59 | 62 | ||
| 60 | TEST_F(DebounceTest, OneKeyTooQuick1) { | 63 | TEST_F(DebounceTest, OneKeyTooQuick1) { |
| 61 | addEvents({ /* Time, Inputs, Outputs */ | 64 | addEvents({ |
| 65 | /* Time, Inputs, Outputs */ | ||
| 62 | {0, {{0, 1, DOWN}}, {}}, | 66 | {0, {{0, 1, DOWN}}, {}}, |
| 63 | /* Release key exactly on the debounce time */ | 67 | /* Release key exactly on the debounce time */ |
| 64 | {5, {{0, 1, UP}}, {}}, | 68 | {5, {{0, 1, UP}}, {}}, |
| @@ -67,7 +71,8 @@ TEST_F(DebounceTest, OneKeyTooQuick1) { | |||
| 67 | } | 71 | } |
| 68 | 72 | ||
| 69 | TEST_F(DebounceTest, OneKeyTooQuick2) { | 73 | TEST_F(DebounceTest, OneKeyTooQuick2) { |
| 70 | addEvents({ /* Time, Inputs, Outputs */ | 74 | addEvents({ |
| 75 | /* Time, Inputs, Outputs */ | ||
| 71 | {0, {{0, 1, DOWN}}, {}}, | 76 | {0, {{0, 1, DOWN}}, {}}, |
| 72 | 77 | ||
| 73 | {5, {}, {{0, 1, DOWN}}}, | 78 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -80,7 +85,8 @@ TEST_F(DebounceTest, OneKeyTooQuick2) { | |||
| 80 | } | 85 | } |
| 81 | 86 | ||
| 82 | TEST_F(DebounceTest, OneKeyBouncing1) { | 87 | TEST_F(DebounceTest, OneKeyBouncing1) { |
| 83 | addEvents({ /* Time, Inputs, Outputs */ | 88 | addEvents({ |
| 89 | /* Time, Inputs, Outputs */ | ||
| 84 | {0, {{0, 1, DOWN}}, {}}, | 90 | {0, {{0, 1, DOWN}}, {}}, |
| 85 | {1, {{0, 1, UP}}, {}}, | 91 | {1, {{0, 1, UP}}, {}}, |
| 86 | {2, {{0, 1, DOWN}}, {}}, | 92 | {2, {{0, 1, DOWN}}, {}}, |
| @@ -94,7 +100,8 @@ TEST_F(DebounceTest, OneKeyBouncing1) { | |||
| 94 | } | 100 | } |
| 95 | 101 | ||
| 96 | TEST_F(DebounceTest, OneKeyBouncing2) { | 102 | TEST_F(DebounceTest, OneKeyBouncing2) { |
| 97 | addEvents({ /* Time, Inputs, Outputs */ | 103 | addEvents({ |
| 104 | /* Time, Inputs, Outputs */ | ||
| 98 | {0, {{0, 1, DOWN}}, {}}, | 105 | {0, {{0, 1, DOWN}}, {}}, |
| 99 | {5, {}, {{0, 1, DOWN}}}, | 106 | {5, {}, {{0, 1, DOWN}}}, |
| 100 | {6, {{0, 1, UP}}, {}}, | 107 | {6, {{0, 1, UP}}, {}}, |
| @@ -108,7 +115,8 @@ TEST_F(DebounceTest, OneKeyBouncing2) { | |||
| 108 | } | 115 | } |
| 109 | 116 | ||
| 110 | TEST_F(DebounceTest, OneKeyLong) { | 117 | TEST_F(DebounceTest, OneKeyLong) { |
| 111 | addEvents({ /* Time, Inputs, Outputs */ | 118 | addEvents({ |
| 119 | /* Time, Inputs, Outputs */ | ||
| 112 | {0, {{0, 1, DOWN}}, {}}, | 120 | {0, {{0, 1, DOWN}}, {}}, |
| 113 | 121 | ||
| 114 | {5, {}, {{0, 1, DOWN}}}, | 122 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -125,7 +133,8 @@ TEST_F(DebounceTest, OneKeyLong) { | |||
| 125 | } | 133 | } |
| 126 | 134 | ||
| 127 | TEST_F(DebounceTest, TwoKeysShort) { | 135 | TEST_F(DebounceTest, TwoKeysShort) { |
| 128 | addEvents({ /* Time, Inputs, Outputs */ | 136 | addEvents({ |
| 137 | /* Time, Inputs, Outputs */ | ||
| 129 | {0, {{0, 1, DOWN}}, {}}, | 138 | {0, {{0, 1, DOWN}}, {}}, |
| 130 | {1, {{0, 2, DOWN}}, {}}, | 139 | {1, {{0, 2, DOWN}}, {}}, |
| 131 | 140 | ||
| @@ -140,7 +149,8 @@ TEST_F(DebounceTest, TwoKeysShort) { | |||
| 140 | } | 149 | } |
| 141 | 150 | ||
| 142 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { | 151 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { |
| 143 | addEvents({ /* Time, Inputs, Outputs */ | 152 | addEvents({ |
| 153 | /* Time, Inputs, Outputs */ | ||
| 144 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {}}, | 154 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {}}, |
| 145 | 155 | ||
| 146 | {5, {}, {{0, 1, DOWN}, {0, 2, DOWN}}}, | 156 | {5, {}, {{0, 1, DOWN}, {0, 2, DOWN}}}, |
| @@ -152,7 +162,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous1) { | |||
| 152 | } | 162 | } |
| 153 | 163 | ||
| 154 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { | 164 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { |
| 155 | addEvents({ /* Time, Inputs, Outputs */ | 165 | addEvents({ |
| 166 | /* Time, Inputs, Outputs */ | ||
| 156 | {0, {{0, 1, DOWN}}, {}}, | 167 | {0, {{0, 1, DOWN}}, {}}, |
| 157 | {1, {{0, 2, DOWN}}, {}}, | 168 | {1, {{0, 2, DOWN}}, {}}, |
| 158 | 169 | ||
| @@ -167,7 +178,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous2) { | |||
| 167 | } | 178 | } |
| 168 | 179 | ||
| 169 | TEST_F(DebounceTest, OneKeyDelayedScan1) { | 180 | TEST_F(DebounceTest, OneKeyDelayedScan1) { |
| 170 | addEvents({ /* Time, Inputs, Outputs */ | 181 | addEvents({ |
| 182 | /* Time, Inputs, Outputs */ | ||
| 171 | {0, {{0, 1, DOWN}}, {}}, | 183 | {0, {{0, 1, DOWN}}, {}}, |
| 172 | 184 | ||
| 173 | /* Processing is very late */ | 185 | /* Processing is very late */ |
| @@ -182,7 +194,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan1) { | |||
| 182 | } | 194 | } |
| 183 | 195 | ||
| 184 | TEST_F(DebounceTest, OneKeyDelayedScan2) { | 196 | TEST_F(DebounceTest, OneKeyDelayedScan2) { |
| 185 | addEvents({ /* Time, Inputs, Outputs */ | 197 | addEvents({ |
| 198 | /* Time, Inputs, Outputs */ | ||
| 186 | {0, {{0, 1, DOWN}}, {}}, | 199 | {0, {{0, 1, DOWN}}, {}}, |
| 187 | 200 | ||
| 188 | /* Processing is very late */ | 201 | /* Processing is very late */ |
| @@ -197,7 +210,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan2) { | |||
| 197 | } | 210 | } |
| 198 | 211 | ||
| 199 | TEST_F(DebounceTest, OneKeyDelayedScan3) { | 212 | TEST_F(DebounceTest, OneKeyDelayedScan3) { |
| 200 | addEvents({ /* Time, Inputs, Outputs */ | 213 | addEvents({ |
| 214 | /* Time, Inputs, Outputs */ | ||
| 201 | {0, {{0, 1, DOWN}}, {}}, | 215 | {0, {{0, 1, DOWN}}, {}}, |
| 202 | 216 | ||
| 203 | /* Release key before debounce expires */ | 217 | /* Release key before debounce expires */ |
| @@ -208,7 +222,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan3) { | |||
| 208 | } | 222 | } |
| 209 | 223 | ||
| 210 | TEST_F(DebounceTest, OneKeyDelayedScan4) { | 224 | TEST_F(DebounceTest, OneKeyDelayedScan4) { |
| 211 | addEvents({ /* Time, Inputs, Outputs */ | 225 | addEvents({ |
| 226 | /* Time, Inputs, Outputs */ | ||
| 212 | {0, {{0, 1, DOWN}}, {}}, | 227 | {0, {{0, 1, DOWN}}, {}}, |
| 213 | 228 | ||
| 214 | /* Processing is a bit late */ | 229 | /* Processing is a bit late */ |
diff --git a/quantum/debounce/tests/sym_defer_pk_tests.cpp b/quantum/debounce/tests/sym_defer_pk_tests.cpp index 1f3061e59..7542c2dad 100644 --- a/quantum/debounce/tests/sym_defer_pk_tests.cpp +++ b/quantum/debounce/tests/sym_defer_pk_tests.cpp | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | #include "debounce_test_common.h" | 19 | #include "debounce_test_common.h" |
| 20 | 20 | ||
| 21 | TEST_F(DebounceTest, OneKeyShort1) { | 21 | TEST_F(DebounceTest, OneKeyShort1) { |
| 22 | addEvents({ /* Time, Inputs, Outputs */ | 22 | addEvents({ |
| 23 | /* Time, Inputs, Outputs */ | ||
| 23 | {0, {{0, 1, DOWN}}, {}}, | 24 | {0, {{0, 1, DOWN}}, {}}, |
| 24 | 25 | ||
| 25 | {5, {}, {{0, 1, DOWN}}}, | 26 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -32,7 +33,8 @@ TEST_F(DebounceTest, OneKeyShort1) { | |||
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | TEST_F(DebounceTest, OneKeyShort2) { | 35 | TEST_F(DebounceTest, OneKeyShort2) { |
| 35 | addEvents({ /* Time, Inputs, Outputs */ | 36 | addEvents({ |
| 37 | /* Time, Inputs, Outputs */ | ||
| 36 | {0, {{0, 1, DOWN}}, {}}, | 38 | {0, {{0, 1, DOWN}}, {}}, |
| 37 | 39 | ||
| 38 | {5, {}, {{0, 1, DOWN}}}, | 40 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -45,7 +47,8 @@ TEST_F(DebounceTest, OneKeyShort2) { | |||
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | TEST_F(DebounceTest, OneKeyShort3) { | 49 | TEST_F(DebounceTest, OneKeyShort3) { |
| 48 | addEvents({ /* Time, Inputs, Outputs */ | 50 | addEvents({ |
| 51 | /* Time, Inputs, Outputs */ | ||
| 49 | {0, {{0, 1, DOWN}}, {}}, | 52 | {0, {{0, 1, DOWN}}, {}}, |
| 50 | 53 | ||
| 51 | {5, {}, {{0, 1, DOWN}}}, | 54 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -58,7 +61,8 @@ TEST_F(DebounceTest, OneKeyShort3) { | |||
| 58 | } | 61 | } |
| 59 | 62 | ||
| 60 | TEST_F(DebounceTest, OneKeyTooQuick1) { | 63 | TEST_F(DebounceTest, OneKeyTooQuick1) { |
| 61 | addEvents({ /* Time, Inputs, Outputs */ | 64 | addEvents({ |
| 65 | /* Time, Inputs, Outputs */ | ||
| 62 | {0, {{0, 1, DOWN}}, {}}, | 66 | {0, {{0, 1, DOWN}}, {}}, |
| 63 | /* Release key exactly on the debounce time */ | 67 | /* Release key exactly on the debounce time */ |
| 64 | {5, {{0, 1, UP}}, {}}, | 68 | {5, {{0, 1, UP}}, {}}, |
| @@ -67,7 +71,8 @@ TEST_F(DebounceTest, OneKeyTooQuick1) { | |||
| 67 | } | 71 | } |
| 68 | 72 | ||
| 69 | TEST_F(DebounceTest, OneKeyTooQuick2) { | 73 | TEST_F(DebounceTest, OneKeyTooQuick2) { |
| 70 | addEvents({ /* Time, Inputs, Outputs */ | 74 | addEvents({ |
| 75 | /* Time, Inputs, Outputs */ | ||
| 71 | {0, {{0, 1, DOWN}}, {}}, | 76 | {0, {{0, 1, DOWN}}, {}}, |
| 72 | 77 | ||
| 73 | {5, {}, {{0, 1, DOWN}}}, | 78 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -80,7 +85,8 @@ TEST_F(DebounceTest, OneKeyTooQuick2) { | |||
| 80 | } | 85 | } |
| 81 | 86 | ||
| 82 | TEST_F(DebounceTest, OneKeyBouncing1) { | 87 | TEST_F(DebounceTest, OneKeyBouncing1) { |
| 83 | addEvents({ /* Time, Inputs, Outputs */ | 88 | addEvents({ |
| 89 | /* Time, Inputs, Outputs */ | ||
| 84 | {0, {{0, 1, DOWN}}, {}}, | 90 | {0, {{0, 1, DOWN}}, {}}, |
| 85 | {1, {{0, 1, UP}}, {}}, | 91 | {1, {{0, 1, UP}}, {}}, |
| 86 | {2, {{0, 1, DOWN}}, {}}, | 92 | {2, {{0, 1, DOWN}}, {}}, |
| @@ -94,7 +100,8 @@ TEST_F(DebounceTest, OneKeyBouncing1) { | |||
| 94 | } | 100 | } |
| 95 | 101 | ||
| 96 | TEST_F(DebounceTest, OneKeyBouncing2) { | 102 | TEST_F(DebounceTest, OneKeyBouncing2) { |
| 97 | addEvents({ /* Time, Inputs, Outputs */ | 103 | addEvents({ |
| 104 | /* Time, Inputs, Outputs */ | ||
| 98 | {0, {{0, 1, DOWN}}, {}}, | 105 | {0, {{0, 1, DOWN}}, {}}, |
| 99 | {5, {}, {{0, 1, DOWN}}}, | 106 | {5, {}, {{0, 1, DOWN}}}, |
| 100 | {6, {{0, 1, UP}}, {}}, | 107 | {6, {{0, 1, UP}}, {}}, |
| @@ -108,7 +115,8 @@ TEST_F(DebounceTest, OneKeyBouncing2) { | |||
| 108 | } | 115 | } |
| 109 | 116 | ||
| 110 | TEST_F(DebounceTest, OneKeyLong) { | 117 | TEST_F(DebounceTest, OneKeyLong) { |
| 111 | addEvents({ /* Time, Inputs, Outputs */ | 118 | addEvents({ |
| 119 | /* Time, Inputs, Outputs */ | ||
| 112 | {0, {{0, 1, DOWN}}, {}}, | 120 | {0, {{0, 1, DOWN}}, {}}, |
| 113 | 121 | ||
| 114 | {5, {}, {{0, 1, DOWN}}}, | 122 | {5, {}, {{0, 1, DOWN}}}, |
| @@ -125,7 +133,8 @@ TEST_F(DebounceTest, OneKeyLong) { | |||
| 125 | } | 133 | } |
| 126 | 134 | ||
| 127 | TEST_F(DebounceTest, TwoKeysShort) { | 135 | TEST_F(DebounceTest, TwoKeysShort) { |
| 128 | addEvents({ /* Time, Inputs, Outputs */ | 136 | addEvents({ |
| 137 | /* Time, Inputs, Outputs */ | ||
| 129 | {0, {{0, 1, DOWN}}, {}}, | 138 | {0, {{0, 1, DOWN}}, {}}, |
| 130 | {1, {{0, 2, DOWN}}, {}}, | 139 | {1, {{0, 2, DOWN}}, {}}, |
| 131 | 140 | ||
| @@ -142,7 +151,8 @@ TEST_F(DebounceTest, TwoKeysShort) { | |||
| 142 | } | 151 | } |
| 143 | 152 | ||
| 144 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { | 153 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { |
| 145 | addEvents({ /* Time, Inputs, Outputs */ | 154 | addEvents({ |
| 155 | /* Time, Inputs, Outputs */ | ||
| 146 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {}}, | 156 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {}}, |
| 147 | 157 | ||
| 148 | {5, {}, {{0, 1, DOWN}, {0, 2, DOWN}}}, | 158 | {5, {}, {{0, 1, DOWN}, {0, 2, DOWN}}}, |
| @@ -154,7 +164,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous1) { | |||
| 154 | } | 164 | } |
| 155 | 165 | ||
| 156 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { | 166 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { |
| 157 | addEvents({ /* Time, Inputs, Outputs */ | 167 | addEvents({ |
| 168 | /* Time, Inputs, Outputs */ | ||
| 158 | {0, {{0, 1, DOWN}}, {}}, | 169 | {0, {{0, 1, DOWN}}, {}}, |
| 159 | {1, {{0, 2, DOWN}}, {}}, | 170 | {1, {{0, 2, DOWN}}, {}}, |
| 160 | 171 | ||
| @@ -169,7 +180,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous2) { | |||
| 169 | } | 180 | } |
| 170 | 181 | ||
| 171 | TEST_F(DebounceTest, OneKeyDelayedScan1) { | 182 | TEST_F(DebounceTest, OneKeyDelayedScan1) { |
| 172 | addEvents({ /* Time, Inputs, Outputs */ | 183 | addEvents({ |
| 184 | /* Time, Inputs, Outputs */ | ||
| 173 | {0, {{0, 1, DOWN}}, {}}, | 185 | {0, {{0, 1, DOWN}}, {}}, |
| 174 | 186 | ||
| 175 | /* Processing is very late */ | 187 | /* Processing is very late */ |
| @@ -184,7 +196,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan1) { | |||
| 184 | } | 196 | } |
| 185 | 197 | ||
| 186 | TEST_F(DebounceTest, OneKeyDelayedScan2) { | 198 | TEST_F(DebounceTest, OneKeyDelayedScan2) { |
| 187 | addEvents({ /* Time, Inputs, Outputs */ | 199 | addEvents({ |
| 200 | /* Time, Inputs, Outputs */ | ||
| 188 | {0, {{0, 1, DOWN}}, {}}, | 201 | {0, {{0, 1, DOWN}}, {}}, |
| 189 | 202 | ||
| 190 | /* Processing is very late */ | 203 | /* Processing is very late */ |
| @@ -199,7 +212,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan2) { | |||
| 199 | } | 212 | } |
| 200 | 213 | ||
| 201 | TEST_F(DebounceTest, OneKeyDelayedScan3) { | 214 | TEST_F(DebounceTest, OneKeyDelayedScan3) { |
| 202 | addEvents({ /* Time, Inputs, Outputs */ | 215 | addEvents({ |
| 216 | /* Time, Inputs, Outputs */ | ||
| 203 | {0, {{0, 1, DOWN}}, {}}, | 217 | {0, {{0, 1, DOWN}}, {}}, |
| 204 | 218 | ||
| 205 | /* Release key before debounce expires */ | 219 | /* Release key before debounce expires */ |
| @@ -210,7 +224,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan3) { | |||
| 210 | } | 224 | } |
| 211 | 225 | ||
| 212 | TEST_F(DebounceTest, OneKeyDelayedScan4) { | 226 | TEST_F(DebounceTest, OneKeyDelayedScan4) { |
| 213 | addEvents({ /* Time, Inputs, Outputs */ | 227 | addEvents({ |
| 228 | /* Time, Inputs, Outputs */ | ||
| 214 | {0, {{0, 1, DOWN}}, {}}, | 229 | {0, {{0, 1, DOWN}}, {}}, |
| 215 | 230 | ||
| 216 | /* Processing is a bit late */ | 231 | /* Processing is a bit late */ |
diff --git a/quantum/debounce/tests/sym_eager_pk_tests.cpp b/quantum/debounce/tests/sym_eager_pk_tests.cpp index e0fc205e3..d9a02fe33 100644 --- a/quantum/debounce/tests/sym_eager_pk_tests.cpp +++ b/quantum/debounce/tests/sym_eager_pk_tests.cpp | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | #include "debounce_test_common.h" | 19 | #include "debounce_test_common.h" |
| 20 | 20 | ||
| 21 | TEST_F(DebounceTest, OneKeyShort1) { | 21 | TEST_F(DebounceTest, OneKeyShort1) { |
| 22 | addEvents({ /* Time, Inputs, Outputs */ | 22 | addEvents({ |
| 23 | /* Time, Inputs, Outputs */ | ||
| 23 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 24 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 24 | {1, {{0, 1, UP}}, {}}, | 25 | {1, {{0, 1, UP}}, {}}, |
| 25 | 26 | ||
| @@ -32,7 +33,8 @@ TEST_F(DebounceTest, OneKeyShort1) { | |||
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | TEST_F(DebounceTest, OneKeyShort2) { | 35 | TEST_F(DebounceTest, OneKeyShort2) { |
| 35 | addEvents({ /* Time, Inputs, Outputs */ | 36 | addEvents({ |
| 37 | /* Time, Inputs, Outputs */ | ||
| 36 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 38 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 37 | {1, {{0, 1, UP}}, {}}, | 39 | {1, {{0, 1, UP}}, {}}, |
| 38 | 40 | ||
| @@ -45,7 +47,8 @@ TEST_F(DebounceTest, OneKeyShort2) { | |||
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | TEST_F(DebounceTest, OneKeyShort3) { | 49 | TEST_F(DebounceTest, OneKeyShort3) { |
| 48 | addEvents({ /* Time, Inputs, Outputs */ | 50 | addEvents({ |
| 51 | /* Time, Inputs, Outputs */ | ||
| 49 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 52 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 50 | {1, {{0, 1, UP}}, {}}, | 53 | {1, {{0, 1, UP}}, {}}, |
| 51 | 54 | ||
| @@ -58,7 +61,8 @@ TEST_F(DebounceTest, OneKeyShort3) { | |||
| 58 | } | 61 | } |
| 59 | 62 | ||
| 60 | TEST_F(DebounceTest, OneKeyShort4) { | 63 | TEST_F(DebounceTest, OneKeyShort4) { |
| 61 | addEvents({ /* Time, Inputs, Outputs */ | 64 | addEvents({ |
| 65 | /* Time, Inputs, Outputs */ | ||
| 62 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 66 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 63 | {1, {{0, 1, UP}}, {}}, | 67 | {1, {{0, 1, UP}}, {}}, |
| 64 | 68 | ||
| @@ -71,7 +75,8 @@ TEST_F(DebounceTest, OneKeyShort4) { | |||
| 71 | } | 75 | } |
| 72 | 76 | ||
| 73 | TEST_F(DebounceTest, OneKeyShort5) { | 77 | TEST_F(DebounceTest, OneKeyShort5) { |
| 74 | addEvents({ /* Time, Inputs, Outputs */ | 78 | addEvents({ |
| 79 | /* Time, Inputs, Outputs */ | ||
| 75 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 80 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 76 | {1, {{0, 1, UP}}, {}}, | 81 | {1, {{0, 1, UP}}, {}}, |
| 77 | 82 | ||
| @@ -83,7 +88,8 @@ TEST_F(DebounceTest, OneKeyShort5) { | |||
| 83 | } | 88 | } |
| 84 | 89 | ||
| 85 | TEST_F(DebounceTest, OneKeyShort6) { | 90 | TEST_F(DebounceTest, OneKeyShort6) { |
| 86 | addEvents({ /* Time, Inputs, Outputs */ | 91 | addEvents({ |
| 92 | /* Time, Inputs, Outputs */ | ||
| 87 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 93 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 88 | {1, {{0, 1, UP}}, {}}, | 94 | {1, {{0, 1, UP}}, {}}, |
| 89 | 95 | ||
| @@ -95,7 +101,8 @@ TEST_F(DebounceTest, OneKeyShort6) { | |||
| 95 | } | 101 | } |
| 96 | 102 | ||
| 97 | TEST_F(DebounceTest, OneKeyBouncing1) { | 103 | TEST_F(DebounceTest, OneKeyBouncing1) { |
| 98 | addEvents({ /* Time, Inputs, Outputs */ | 104 | addEvents({ |
| 105 | /* Time, Inputs, Outputs */ | ||
| 99 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 106 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 100 | {1, {{0, 1, UP}}, {}}, | 107 | {1, {{0, 1, UP}}, {}}, |
| 101 | {2, {{0, 1, DOWN}}, {}}, | 108 | {2, {{0, 1, DOWN}}, {}}, |
| @@ -110,7 +117,8 @@ TEST_F(DebounceTest, OneKeyBouncing1) { | |||
| 110 | } | 117 | } |
| 111 | 118 | ||
| 112 | TEST_F(DebounceTest, OneKeyBouncing2) { | 119 | TEST_F(DebounceTest, OneKeyBouncing2) { |
| 113 | addEvents({ /* Time, Inputs, Outputs */ | 120 | addEvents({ |
| 121 | /* Time, Inputs, Outputs */ | ||
| 114 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 122 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 115 | /* Change twice in the same time period */ | 123 | /* Change twice in the same time period */ |
| 116 | {1, {{0, 1, UP}}, {}}, | 124 | {1, {{0, 1, UP}}, {}}, |
| @@ -135,7 +143,8 @@ TEST_F(DebounceTest, OneKeyBouncing2) { | |||
| 135 | } | 143 | } |
| 136 | 144 | ||
| 137 | TEST_F(DebounceTest, OneKeyLong) { | 145 | TEST_F(DebounceTest, OneKeyLong) { |
| 138 | addEvents({ /* Time, Inputs, Outputs */ | 146 | addEvents({ |
| 147 | /* Time, Inputs, Outputs */ | ||
| 139 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 148 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 140 | 149 | ||
| 141 | {25, {{0, 1, UP}}, {{0, 1, UP}}}, | 150 | {25, {{0, 1, UP}}, {{0, 1, UP}}}, |
| @@ -146,7 +155,8 @@ TEST_F(DebounceTest, OneKeyLong) { | |||
| 146 | } | 155 | } |
| 147 | 156 | ||
| 148 | TEST_F(DebounceTest, TwoKeysShort) { | 157 | TEST_F(DebounceTest, TwoKeysShort) { |
| 149 | addEvents({ /* Time, Inputs, Outputs */ | 158 | addEvents({ |
| 159 | /* Time, Inputs, Outputs */ | ||
| 150 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 160 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 151 | {1, {{0, 1, UP}}, {}}, | 161 | {1, {{0, 1, UP}}, {}}, |
| 152 | {2, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, | 162 | {2, {{0, 2, DOWN}}, {{0, 2, DOWN}}}, |
| @@ -167,7 +177,8 @@ TEST_F(DebounceTest, TwoKeysShort) { | |||
| 167 | } | 177 | } |
| 168 | 178 | ||
| 169 | TEST_F(DebounceTest, OneKeyDelayedScan1) { | 179 | TEST_F(DebounceTest, OneKeyDelayedScan1) { |
| 170 | addEvents({ /* Time, Inputs, Outputs */ | 180 | addEvents({ |
| 181 | /* Time, Inputs, Outputs */ | ||
| 171 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 182 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 172 | 183 | ||
| 173 | /* Processing is very late but the change will now be accepted */ | 184 | /* Processing is very late but the change will now be accepted */ |
| @@ -178,7 +189,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan1) { | |||
| 178 | } | 189 | } |
| 179 | 190 | ||
| 180 | TEST_F(DebounceTest, OneKeyDelayedScan2) { | 191 | TEST_F(DebounceTest, OneKeyDelayedScan2) { |
| 181 | addEvents({ /* Time, Inputs, Outputs */ | 192 | addEvents({ |
| 193 | /* Time, Inputs, Outputs */ | ||
| 182 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 194 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 183 | 195 | ||
| 184 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ | 196 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ |
| @@ -190,7 +202,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan2) { | |||
| 190 | } | 202 | } |
| 191 | 203 | ||
| 192 | TEST_F(DebounceTest, OneKeyDelayedScan3) { | 204 | TEST_F(DebounceTest, OneKeyDelayedScan3) { |
| 193 | addEvents({ /* Time, Inputs, Outputs */ | 205 | addEvents({ |
| 206 | /* Time, Inputs, Outputs */ | ||
| 194 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 207 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 195 | 208 | ||
| 196 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ | 209 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ |
| @@ -202,7 +215,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan3) { | |||
| 202 | } | 215 | } |
| 203 | 216 | ||
| 204 | TEST_F(DebounceTest, OneKeyDelayedScan4) { | 217 | TEST_F(DebounceTest, OneKeyDelayedScan4) { |
| 205 | addEvents({ /* Time, Inputs, Outputs */ | 218 | addEvents({ |
| 219 | /* Time, Inputs, Outputs */ | ||
| 206 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 220 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 207 | 221 | ||
| 208 | /* Processing is a bit late but the change will now be accepted */ | 222 | /* Processing is a bit late but the change will now be accepted */ |
| @@ -213,7 +227,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan4) { | |||
| 213 | } | 227 | } |
| 214 | 228 | ||
| 215 | TEST_F(DebounceTest, OneKeyDelayedScan5) { | 229 | TEST_F(DebounceTest, OneKeyDelayedScan5) { |
| 216 | addEvents({ /* Time, Inputs, Outputs */ | 230 | addEvents({ |
| 231 | /* Time, Inputs, Outputs */ | ||
| 217 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 232 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 218 | 233 | ||
| 219 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ | 234 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ |
| @@ -225,7 +240,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan5) { | |||
| 225 | } | 240 | } |
| 226 | 241 | ||
| 227 | TEST_F(DebounceTest, OneKeyDelayedScan6) { | 242 | TEST_F(DebounceTest, OneKeyDelayedScan6) { |
| 228 | addEvents({ /* Time, Inputs, Outputs */ | 243 | addEvents({ |
| 244 | /* Time, Inputs, Outputs */ | ||
| 229 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 245 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 230 | 246 | ||
| 231 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ | 247 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ |
diff --git a/quantum/debounce/tests/sym_eager_pr_tests.cpp b/quantum/debounce/tests/sym_eager_pr_tests.cpp index 2c4bca127..e91dd9cb8 100644 --- a/quantum/debounce/tests/sym_eager_pr_tests.cpp +++ b/quantum/debounce/tests/sym_eager_pr_tests.cpp | |||
| @@ -19,7 +19,8 @@ | |||
| 19 | #include "debounce_test_common.h" | 19 | #include "debounce_test_common.h" |
| 20 | 20 | ||
| 21 | TEST_F(DebounceTest, OneKeyShort1) { | 21 | TEST_F(DebounceTest, OneKeyShort1) { |
| 22 | addEvents({ /* Time, Inputs, Outputs */ | 22 | addEvents({ |
| 23 | /* Time, Inputs, Outputs */ | ||
| 23 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 24 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 24 | {1, {{0, 1, UP}}, {}}, | 25 | {1, {{0, 1, UP}}, {}}, |
| 25 | 26 | ||
| @@ -32,7 +33,8 @@ TEST_F(DebounceTest, OneKeyShort1) { | |||
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | TEST_F(DebounceTest, OneKeyShort2) { | 35 | TEST_F(DebounceTest, OneKeyShort2) { |
| 35 | addEvents({ /* Time, Inputs, Outputs */ | 36 | addEvents({ |
| 37 | /* Time, Inputs, Outputs */ | ||
| 36 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 38 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 37 | {1, {{0, 1, UP}}, {}}, | 39 | {1, {{0, 1, UP}}, {}}, |
| 38 | 40 | ||
| @@ -45,7 +47,8 @@ TEST_F(DebounceTest, OneKeyShort2) { | |||
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | TEST_F(DebounceTest, OneKeyShort3) { | 49 | TEST_F(DebounceTest, OneKeyShort3) { |
| 48 | addEvents({ /* Time, Inputs, Outputs */ | 50 | addEvents({ |
| 51 | /* Time, Inputs, Outputs */ | ||
| 49 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 52 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 50 | {1, {{0, 1, UP}}, {}}, | 53 | {1, {{0, 1, UP}}, {}}, |
| 51 | 54 | ||
| @@ -58,7 +61,8 @@ TEST_F(DebounceTest, OneKeyShort3) { | |||
| 58 | } | 61 | } |
| 59 | 62 | ||
| 60 | TEST_F(DebounceTest, OneKeyShort4) { | 63 | TEST_F(DebounceTest, OneKeyShort4) { |
| 61 | addEvents({ /* Time, Inputs, Outputs */ | 64 | addEvents({ |
| 65 | /* Time, Inputs, Outputs */ | ||
| 62 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 66 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 63 | {1, {{0, 1, UP}}, {}}, | 67 | {1, {{0, 1, UP}}, {}}, |
| 64 | 68 | ||
| @@ -71,7 +75,8 @@ TEST_F(DebounceTest, OneKeyShort4) { | |||
| 71 | } | 75 | } |
| 72 | 76 | ||
| 73 | TEST_F(DebounceTest, OneKeyShort5) { | 77 | TEST_F(DebounceTest, OneKeyShort5) { |
| 74 | addEvents({ /* Time, Inputs, Outputs */ | 78 | addEvents({ |
| 79 | /* Time, Inputs, Outputs */ | ||
| 75 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 80 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 76 | {1, {{0, 1, UP}}, {}}, | 81 | {1, {{0, 1, UP}}, {}}, |
| 77 | 82 | ||
| @@ -83,7 +88,8 @@ TEST_F(DebounceTest, OneKeyShort5) { | |||
| 83 | } | 88 | } |
| 84 | 89 | ||
| 85 | TEST_F(DebounceTest, OneKeyShort6) { | 90 | TEST_F(DebounceTest, OneKeyShort6) { |
| 86 | addEvents({ /* Time, Inputs, Outputs */ | 91 | addEvents({ |
| 92 | /* Time, Inputs, Outputs */ | ||
| 87 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 93 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 88 | {1, {{0, 1, UP}}, {}}, | 94 | {1, {{0, 1, UP}}, {}}, |
| 89 | 95 | ||
| @@ -95,7 +101,8 @@ TEST_F(DebounceTest, OneKeyShort6) { | |||
| 95 | } | 101 | } |
| 96 | 102 | ||
| 97 | TEST_F(DebounceTest, OneKeyBouncing1) { | 103 | TEST_F(DebounceTest, OneKeyBouncing1) { |
| 98 | addEvents({ /* Time, Inputs, Outputs */ | 104 | addEvents({ |
| 105 | /* Time, Inputs, Outputs */ | ||
| 99 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 106 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 100 | {1, {{0, 1, UP}}, {}}, | 107 | {1, {{0, 1, UP}}, {}}, |
| 101 | {2, {{0, 1, DOWN}}, {}}, | 108 | {2, {{0, 1, DOWN}}, {}}, |
| @@ -110,7 +117,8 @@ TEST_F(DebounceTest, OneKeyBouncing1) { | |||
| 110 | } | 117 | } |
| 111 | 118 | ||
| 112 | TEST_F(DebounceTest, OneKeyBouncing2) { | 119 | TEST_F(DebounceTest, OneKeyBouncing2) { |
| 113 | addEvents({ /* Time, Inputs, Outputs */ | 120 | addEvents({ |
| 121 | /* Time, Inputs, Outputs */ | ||
| 114 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 122 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 115 | /* Change twice in the same time period */ | 123 | /* Change twice in the same time period */ |
| 116 | {1, {{0, 1, UP}}, {}}, | 124 | {1, {{0, 1, UP}}, {}}, |
| @@ -135,7 +143,8 @@ TEST_F(DebounceTest, OneKeyBouncing2) { | |||
| 135 | } | 143 | } |
| 136 | 144 | ||
| 137 | TEST_F(DebounceTest, OneKeyLong) { | 145 | TEST_F(DebounceTest, OneKeyLong) { |
| 138 | addEvents({ /* Time, Inputs, Outputs */ | 146 | addEvents({ |
| 147 | /* Time, Inputs, Outputs */ | ||
| 139 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 148 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 140 | 149 | ||
| 141 | {25, {{0, 1, UP}}, {{0, 1, UP}}}, | 150 | {25, {{0, 1, UP}}, {{0, 1, UP}}}, |
| @@ -146,7 +155,8 @@ TEST_F(DebounceTest, OneKeyLong) { | |||
| 146 | } | 155 | } |
| 147 | 156 | ||
| 148 | TEST_F(DebounceTest, TwoRowsShort) { | 157 | TEST_F(DebounceTest, TwoRowsShort) { |
| 149 | addEvents({ /* Time, Inputs, Outputs */ | 158 | addEvents({ |
| 159 | /* Time, Inputs, Outputs */ | ||
| 150 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 160 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 151 | {1, {{0, 1, UP}}, {}}, | 161 | {1, {{0, 1, UP}}, {}}, |
| 152 | {2, {{2, 0, DOWN}}, {{2, 0, DOWN}}}, | 162 | {2, {{2, 0, DOWN}}, {{2, 0, DOWN}}}, |
| @@ -167,7 +177,8 @@ TEST_F(DebounceTest, TwoRowsShort) { | |||
| 167 | } | 177 | } |
| 168 | 178 | ||
| 169 | TEST_F(DebounceTest, TwoKeysOverlap) { | 179 | TEST_F(DebounceTest, TwoKeysOverlap) { |
| 170 | addEvents({ /* Time, Inputs, Outputs */ | 180 | addEvents({ |
| 181 | /* Time, Inputs, Outputs */ | ||
| 171 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 182 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 172 | {1, {{0, 1, UP}}, {}}, | 183 | {1, {{0, 1, UP}}, {}}, |
| 173 | /* Press a second key during the first debounce */ | 184 | /* Press a second key during the first debounce */ |
| @@ -190,7 +201,8 @@ TEST_F(DebounceTest, TwoKeysOverlap) { | |||
| 190 | } | 201 | } |
| 191 | 202 | ||
| 192 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { | 203 | TEST_F(DebounceTest, TwoKeysSimultaneous1) { |
| 193 | addEvents({ /* Time, Inputs, Outputs */ | 204 | addEvents({ |
| 205 | /* Time, Inputs, Outputs */ | ||
| 194 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {{0, 1, DOWN}, {0, 2, DOWN}}}, | 206 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {{0, 1, DOWN}, {0, 2, DOWN}}}, |
| 195 | {20, {{0, 1, UP}}, {{0, 1, UP}}}, | 207 | {20, {{0, 1, UP}}, {{0, 1, UP}}}, |
| 196 | {21, {{0, 2, UP}}, {}}, | 208 | {21, {{0, 2, UP}}, {}}, |
| @@ -202,7 +214,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous1) { | |||
| 202 | } | 214 | } |
| 203 | 215 | ||
| 204 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { | 216 | TEST_F(DebounceTest, TwoKeysSimultaneous2) { |
| 205 | addEvents({ /* Time, Inputs, Outputs */ | 217 | addEvents({ |
| 218 | /* Time, Inputs, Outputs */ | ||
| 206 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {{0, 1, DOWN}, {0, 2, DOWN}}}, | 219 | {0, {{0, 1, DOWN}, {0, 2, DOWN}}, {{0, 1, DOWN}, {0, 2, DOWN}}}, |
| 207 | {20, {{0, 1, UP}, {0, 2, UP}}, {{0, 1, UP}, {0, 2, UP}}}, | 220 | {20, {{0, 1, UP}, {0, 2, UP}}, {{0, 1, UP}, {0, 2, UP}}}, |
| 208 | }); | 221 | }); |
| @@ -210,7 +223,8 @@ TEST_F(DebounceTest, TwoKeysSimultaneous2) { | |||
| 210 | } | 223 | } |
| 211 | 224 | ||
| 212 | TEST_F(DebounceTest, OneKeyDelayedScan1) { | 225 | TEST_F(DebounceTest, OneKeyDelayedScan1) { |
| 213 | addEvents({ /* Time, Inputs, Outputs */ | 226 | addEvents({ |
| 227 | /* Time, Inputs, Outputs */ | ||
| 214 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 228 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 215 | 229 | ||
| 216 | /* Processing is very late but the change will now be accepted */ | 230 | /* Processing is very late but the change will now be accepted */ |
| @@ -221,7 +235,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan1) { | |||
| 221 | } | 235 | } |
| 222 | 236 | ||
| 223 | TEST_F(DebounceTest, OneKeyDelayedScan2) { | 237 | TEST_F(DebounceTest, OneKeyDelayedScan2) { |
| 224 | addEvents({ /* Time, Inputs, Outputs */ | 238 | addEvents({ |
| 239 | /* Time, Inputs, Outputs */ | ||
| 225 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 240 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 226 | 241 | ||
| 227 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ | 242 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ |
| @@ -233,7 +248,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan2) { | |||
| 233 | } | 248 | } |
| 234 | 249 | ||
| 235 | TEST_F(DebounceTest, OneKeyDelayedScan3) { | 250 | TEST_F(DebounceTest, OneKeyDelayedScan3) { |
| 236 | addEvents({ /* Time, Inputs, Outputs */ | 251 | addEvents({ |
| 252 | /* Time, Inputs, Outputs */ | ||
| 237 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 253 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 238 | 254 | ||
| 239 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ | 255 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ |
| @@ -245,7 +261,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan3) { | |||
| 245 | } | 261 | } |
| 246 | 262 | ||
| 247 | TEST_F(DebounceTest, OneKeyDelayedScan4) { | 263 | TEST_F(DebounceTest, OneKeyDelayedScan4) { |
| 248 | addEvents({ /* Time, Inputs, Outputs */ | 264 | addEvents({ |
| 265 | /* Time, Inputs, Outputs */ | ||
| 249 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 266 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 250 | 267 | ||
| 251 | /* Processing is a bit late but the change will now be accepted */ | 268 | /* Processing is a bit late but the change will now be accepted */ |
| @@ -256,7 +273,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan4) { | |||
| 256 | } | 273 | } |
| 257 | 274 | ||
| 258 | TEST_F(DebounceTest, OneKeyDelayedScan5) { | 275 | TEST_F(DebounceTest, OneKeyDelayedScan5) { |
| 259 | addEvents({ /* Time, Inputs, Outputs */ | 276 | addEvents({ |
| 277 | /* Time, Inputs, Outputs */ | ||
| 260 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 278 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 261 | 279 | ||
| 262 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ | 280 | /* Processing is very late but the change will now be accepted even with a 1 scan delay */ |
| @@ -268,7 +286,8 @@ TEST_F(DebounceTest, OneKeyDelayedScan5) { | |||
| 268 | } | 286 | } |
| 269 | 287 | ||
| 270 | TEST_F(DebounceTest, OneKeyDelayedScan6) { | 288 | TEST_F(DebounceTest, OneKeyDelayedScan6) { |
| 271 | addEvents({ /* Time, Inputs, Outputs */ | 289 | addEvents({ |
| 290 | /* Time, Inputs, Outputs */ | ||
| 272 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, | 291 | {0, {{0, 1, DOWN}}, {{0, 1, DOWN}}}, |
| 273 | 292 | ||
| 274 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ | 293 | /* Processing is very late but the change will now be accepted even with a 1ms delay */ |
diff --git a/quantum/keymap_extras/keymap_steno.h b/quantum/keymap_extras/keymap_steno.h index ab95b43fd..310aa0740 100644 --- a/quantum/keymap_extras/keymap_steno.h +++ b/quantum/keymap_extras/keymap_steno.h | |||
| @@ -74,8 +74,7 @@ enum steno_keycodes { | |||
| 74 | }; | 74 | }; |
| 75 | 75 | ||
| 76 | #ifdef STENO_COMBINEDMAP | 76 | #ifdef STENO_COMBINEDMAP |
| 77 | enum steno_combined_keycodes | 77 | enum steno_combined_keycodes { |
| 78 | { | ||
| 79 | STN_S3 = QK_STENO_COMB, | 78 | STN_S3 = QK_STENO_COMB, |
| 80 | STN_TKL, | 79 | STN_TKL, |
| 81 | STN_PWL, | 80 | STN_PWL, |
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index e8661839c..a050161ed 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c | |||
| @@ -18,10 +18,9 @@ | |||
| 18 | #include "process_combo.h" | 18 | #include "process_combo.h" |
| 19 | #include "action_tapping.h" | 19 | #include "action_tapping.h" |
| 20 | 20 | ||
| 21 | |||
| 22 | #ifdef COMBO_COUNT | 21 | #ifdef COMBO_COUNT |
| 23 | __attribute__((weak)) combo_t key_combos[COMBO_COUNT]; | 22 | __attribute__((weak)) combo_t key_combos[COMBO_COUNT]; |
| 24 | uint16_t COMBO_LEN = COMBO_COUNT; | 23 | uint16_t COMBO_LEN = COMBO_COUNT; |
| 25 | #else | 24 | #else |
| 26 | extern combo_t key_combos[]; | 25 | extern combo_t key_combos[]; |
| 27 | extern uint16_t COMBO_LEN; | 26 | extern uint16_t COMBO_LEN; |
| @@ -46,64 +45,86 @@ __attribute__((weak)) bool process_combo_key_release(uint16_t combo_index, combo | |||
| 46 | #endif | 45 | #endif |
| 47 | 46 | ||
| 48 | #ifndef COMBO_NO_TIMER | 47 | #ifndef COMBO_NO_TIMER |
| 49 | static uint16_t timer = 0; | 48 | static uint16_t timer = 0; |
| 50 | #endif | 49 | #endif |
| 51 | static bool b_combo_enable = true; // defaults to enabled | 50 | static bool b_combo_enable = true; // defaults to enabled |
| 52 | static uint16_t longest_term = 0; | 51 | static uint16_t longest_term = 0; |
| 53 | 52 | ||
| 54 | typedef struct { | 53 | typedef struct { |
| 55 | keyrecord_t record; | 54 | keyrecord_t record; |
| 56 | uint16_t combo_index; | 55 | uint16_t combo_index; |
| 57 | uint16_t keycode; | 56 | uint16_t keycode; |
| 58 | } queued_record_t; | 57 | } queued_record_t; |
| 59 | static uint8_t key_buffer_size = 0; | 58 | static uint8_t key_buffer_size = 0; |
| 60 | static queued_record_t key_buffer[COMBO_KEY_BUFFER_LENGTH]; | 59 | static queued_record_t key_buffer[COMBO_KEY_BUFFER_LENGTH]; |
| 61 | 60 | ||
| 62 | typedef struct { | 61 | typedef struct { |
| 63 | uint16_t combo_index; | 62 | uint16_t combo_index; |
| 64 | } queued_combo_t; | 63 | } queued_combo_t; |
| 65 | static uint8_t combo_buffer_write= 0; | 64 | static uint8_t combo_buffer_write = 0; |
| 66 | static uint8_t combo_buffer_read = 0; | 65 | static uint8_t combo_buffer_read = 0; |
| 67 | static queued_combo_t combo_buffer[COMBO_BUFFER_LENGTH]; | 66 | static queued_combo_t combo_buffer[COMBO_BUFFER_LENGTH]; |
| 68 | 67 | ||
| 69 | #define INCREMENT_MOD(i) i = (i + 1) % COMBO_BUFFER_LENGTH | 68 | #define INCREMENT_MOD(i) i = (i + 1) % COMBO_BUFFER_LENGTH |
| 70 | 69 | ||
| 71 | #define COMBO_KEY_POS ((keypos_t){.col=254, .row=254}) | 70 | #define COMBO_KEY_POS ((keypos_t){.col = 254, .row = 254}) |
| 72 | |||
| 73 | 71 | ||
| 74 | #ifndef EXTRA_SHORT_COMBOS | 72 | #ifndef EXTRA_SHORT_COMBOS |
| 75 | /* flags are their own elements in combo_t struct. */ | 73 | /* flags are their own elements in combo_t struct. */ |
| 76 | # define COMBO_ACTIVE(combo) (combo->active) | 74 | # define COMBO_ACTIVE(combo) (combo->active) |
| 77 | # define COMBO_DISABLED(combo) (combo->disabled) | 75 | # define COMBO_DISABLED(combo) (combo->disabled) |
| 78 | # define COMBO_STATE(combo) (combo->state) | 76 | # define COMBO_STATE(combo) (combo->state) |
| 79 | 77 | ||
| 80 | # define ACTIVATE_COMBO(combo) do {combo->active = true;}while(0) | 78 | # define ACTIVATE_COMBO(combo) \ |
| 81 | # define DEACTIVATE_COMBO(combo) do {combo->active = false;}while(0) | 79 | do { \ |
| 82 | # define DISABLE_COMBO(combo) do {combo->disabled = true;}while(0) | 80 | combo->active = true; \ |
| 83 | # define RESET_COMBO_STATE(combo) do { \ | 81 | } while (0) |
| 84 | combo->disabled = false; \ | 82 | # define DEACTIVATE_COMBO(combo) \ |
| 85 | combo->state = 0; \ | 83 | do { \ |
| 86 | }while(0) | 84 | combo->active = false; \ |
| 85 | } while (0) | ||
| 86 | # define DISABLE_COMBO(combo) \ | ||
| 87 | do { \ | ||
| 88 | combo->disabled = true; \ | ||
| 89 | } while (0) | ||
| 90 | # define RESET_COMBO_STATE(combo) \ | ||
| 91 | do { \ | ||
| 92 | combo->disabled = false; \ | ||
| 93 | combo->state = 0; \ | ||
| 94 | } while (0) | ||
| 87 | #else | 95 | #else |
| 88 | /* flags are at the two high bits of state. */ | 96 | /* flags are at the two high bits of state. */ |
| 89 | # define COMBO_ACTIVE(combo) (combo->state & 0x80) | 97 | # define COMBO_ACTIVE(combo) (combo->state & 0x80) |
| 90 | # define COMBO_DISABLED(combo) (combo->state & 0x40) | 98 | # define COMBO_DISABLED(combo) (combo->state & 0x40) |
| 91 | # define COMBO_STATE(combo) (combo->state & 0x3F) | 99 | # define COMBO_STATE(combo) (combo->state & 0x3F) |
| 92 | 100 | ||
| 93 | # define ACTIVATE_COMBO(combo) do {combo->state |= 0x80;}while(0) | 101 | # define ACTIVATE_COMBO(combo) \ |
| 94 | # define DEACTIVATE_COMBO(combo) do {combo->state &= ~0x80;}while(0) | 102 | do { \ |
| 95 | # define DISABLE_COMBO(combo) do {combo->state |= 0x40;}while(0) | 103 | combo->state |= 0x80; \ |
| 96 | # define RESET_COMBO_STATE(combo) do {combo->state &= ~0x7F;}while(0) | 104 | } while (0) |
| 105 | # define DEACTIVATE_COMBO(combo) \ | ||
| 106 | do { \ | ||
| 107 | combo->state &= ~0x80; \ | ||
| 108 | } while (0) | ||
| 109 | # define DISABLE_COMBO(combo) \ | ||
| 110 | do { \ | ||
| 111 | combo->state |= 0x40; \ | ||
| 112 | } while (0) | ||
| 113 | # define RESET_COMBO_STATE(combo) \ | ||
| 114 | do { \ | ||
| 115 | combo->state &= ~0x7F; \ | ||
| 116 | } while (0) | ||
| 97 | #endif | 117 | #endif |
| 98 | 118 | ||
| 99 | static inline void release_combo(uint16_t combo_index, combo_t *combo) { | 119 | static inline void release_combo(uint16_t combo_index, combo_t *combo) { |
| 100 | if (combo->keycode) { | 120 | if (combo->keycode) { |
| 101 | keyrecord_t record = { | 121 | keyrecord_t record = { |
| 102 | .event = { | 122 | .event = |
| 103 | .key = COMBO_KEY_POS, | 123 | { |
| 104 | .time = timer_read()|1, | 124 | .key = COMBO_KEY_POS, |
| 105 | .pressed = false, | 125 | .time = timer_read() | 1, |
| 106 | }, | 126 | .pressed = false, |
| 127 | }, | ||
| 107 | .keycode = combo->keycode, | 128 | .keycode = combo->keycode, |
| 108 | }; | 129 | }; |
| 109 | #ifndef NO_ACTION_TAPPING | 130 | #ifndef NO_ACTION_TAPPING |
| @@ -123,18 +144,17 @@ static inline bool _get_combo_must_hold(uint16_t combo_index, combo_t *combo) { | |||
| 123 | #elif defined(COMBO_MUST_HOLD_PER_COMBO) | 144 | #elif defined(COMBO_MUST_HOLD_PER_COMBO) |
| 124 | return get_combo_must_hold(combo_index, combo); | 145 | return get_combo_must_hold(combo_index, combo); |
| 125 | #elif defined(COMBO_MUST_HOLD_MODS) | 146 | #elif defined(COMBO_MUST_HOLD_MODS) |
| 126 | return (KEYCODE_IS_MOD(combo->keycode) || | 147 | return (KEYCODE_IS_MOD(combo->keycode) || (combo->keycode >= QK_MOMENTARY && combo->keycode <= QK_MOMENTARY_MAX)); |
| 127 | (combo->keycode >= QK_MOMENTARY && combo->keycode <= QK_MOMENTARY_MAX)); | ||
| 128 | #endif | 148 | #endif |
| 129 | return false; | 149 | return false; |
| 130 | } | 150 | } |
| 131 | 151 | ||
| 132 | static inline uint16_t _get_wait_time(uint16_t combo_index, combo_t *combo ) { | 152 | static inline uint16_t _get_wait_time(uint16_t combo_index, combo_t *combo) { |
| 133 | if (_get_combo_must_hold(combo_index, combo) | 153 | if (_get_combo_must_hold(combo_index, combo) |
| 134 | #ifdef COMBO_MUST_TAP_PER_COMBO | 154 | #ifdef COMBO_MUST_TAP_PER_COMBO |
| 135 | || get_combo_must_tap(combo_index, combo) | 155 | || get_combo_must_tap(combo_index, combo) |
| 136 | #endif | 156 | #endif |
| 137 | ) { | 157 | ) { |
| 138 | if (longest_term < COMBO_HOLD_TERM) { | 158 | if (longest_term < COMBO_HOLD_TERM) { |
| 139 | return COMBO_HOLD_TERM; | 159 | return COMBO_HOLD_TERM; |
| 140 | } | 160 | } |
| @@ -144,9 +164,8 @@ static inline uint16_t _get_wait_time(uint16_t combo_index, combo_t *combo ) { | |||
| 144 | } | 164 | } |
| 145 | 165 | ||
| 146 | static inline uint16_t _get_combo_term(uint16_t combo_index, combo_t *combo) { | 166 | static inline uint16_t _get_combo_term(uint16_t combo_index, combo_t *combo) { |
| 147 | |||
| 148 | #if defined(COMBO_TERM_PER_COMBO) | 167 | #if defined(COMBO_TERM_PER_COMBO) |
| 149 | return get_combo_term(combo_index, combo); | 168 | return get_combo_term(combo_index, combo); |
| 150 | #endif | 169 | #endif |
| 151 | 170 | ||
| 152 | return COMBO_TERM; | 171 | return COMBO_TERM; |
| @@ -154,7 +173,7 @@ static inline uint16_t _get_combo_term(uint16_t combo_index, combo_t *combo) { | |||
| 154 | 173 | ||
| 155 | void clear_combos(void) { | 174 | void clear_combos(void) { |
| 156 | uint16_t index = 0; | 175 | uint16_t index = 0; |
| 157 | longest_term = 0; | 176 | longest_term = 0; |
| 158 | for (index = 0; index < COMBO_LEN; ++index) { | 177 | for (index = 0; index < COMBO_LEN; ++index) { |
| 159 | combo_t *combo = &key_combos[index]; | 178 | combo_t *combo = &key_combos[index]; |
| 160 | if (!COMBO_ACTIVE(combo)) { | 179 | if (!COMBO_ACTIVE(combo)) { |
| @@ -175,7 +194,7 @@ static inline void dump_key_buffer(void) { | |||
| 175 | key_buffer_next = key_buffer_i + 1; | 194 | key_buffer_next = key_buffer_i + 1; |
| 176 | 195 | ||
| 177 | queued_record_t *qrecord = &key_buffer[key_buffer_i]; | 196 | queued_record_t *qrecord = &key_buffer[key_buffer_i]; |
| 178 | keyrecord_t *record = &qrecord->record; | 197 | keyrecord_t * record = &qrecord->record; |
| 179 | 198 | ||
| 180 | if (IS_NOEVENT(record->event)) { | 199 | if (IS_NOEVENT(record->event)) { |
| 181 | continue; | 200 | continue; |
| @@ -185,9 +204,9 @@ static inline void dump_key_buffer(void) { | |||
| 185 | process_combo_event(qrecord->combo_index, true); | 204 | process_combo_event(qrecord->combo_index, true); |
| 186 | } else { | 205 | } else { |
| 187 | #ifndef NO_ACTION_TAPPING | 206 | #ifndef NO_ACTION_TAPPING |
| 188 | action_tapping_process(*record); | 207 | action_tapping_process(*record); |
| 189 | #else | 208 | #else |
| 190 | process_record(record); | 209 | process_record(record); |
| 191 | #endif | 210 | #endif |
| 192 | } | 211 | } |
| 193 | record->event.time = 0; | 212 | record->event.time = 0; |
| @@ -242,7 +261,9 @@ void apply_combo(uint16_t combo_index, combo_t *combo) { | |||
| 242 | /* Apply combo's result keycode to the last chord key of the combo and | 261 | /* Apply combo's result keycode to the last chord key of the combo and |
| 243 | * disable the other keys. */ | 262 | * disable the other keys. */ |
| 244 | 263 | ||
| 245 | if (COMBO_DISABLED(combo)) { return; } | 264 | if (COMBO_DISABLED(combo)) { |
| 265 | return; | ||
| 266 | } | ||
| 246 | 267 | ||
| 247 | // state to check against so we find the last key of the combo from the buffer | 268 | // state to check against so we find the last key of the combo from the buffer |
| 248 | #if defined(EXTRA_EXTRA_LONG_COMBOS) | 269 | #if defined(EXTRA_EXTRA_LONG_COMBOS) |
| @@ -254,12 +275,11 @@ void apply_combo(uint16_t combo_index, combo_t *combo) { | |||
| 254 | #endif | 275 | #endif |
| 255 | 276 | ||
| 256 | for (uint8_t key_buffer_i = 0; key_buffer_i < key_buffer_size; key_buffer_i++) { | 277 | for (uint8_t key_buffer_i = 0; key_buffer_i < key_buffer_size; key_buffer_i++) { |
| 257 | |||
| 258 | queued_record_t *qrecord = &key_buffer[key_buffer_i]; | 278 | queued_record_t *qrecord = &key_buffer[key_buffer_i]; |
| 259 | keyrecord_t *record = &qrecord->record; | 279 | keyrecord_t * record = &qrecord->record; |
| 260 | uint16_t keycode = qrecord->keycode; | 280 | uint16_t keycode = qrecord->keycode; |
| 261 | 281 | ||
| 262 | uint8_t key_count = 0; | 282 | uint8_t key_count = 0; |
| 263 | uint16_t key_index = -1; | 283 | uint16_t key_index = -1; |
| 264 | _find_key_index_and_count(combo->keys, keycode, &key_index, &key_count); | 284 | _find_key_index_and_count(combo->keys, keycode, &key_index, &key_count); |
| 265 | 285 | ||
| @@ -271,7 +291,7 @@ void apply_combo(uint16_t combo_index, combo_t *combo) { | |||
| 271 | KEY_STATE_DOWN(state, key_index); | 291 | KEY_STATE_DOWN(state, key_index); |
| 272 | if (ALL_COMBO_KEYS_ARE_DOWN(state, key_count)) { | 292 | if (ALL_COMBO_KEYS_ARE_DOWN(state, key_count)) { |
| 273 | // this in the end executes the combo when the key_buffer is dumped. | 293 | // this in the end executes the combo when the key_buffer is dumped. |
| 274 | record->keycode = combo->keycode; | 294 | record->keycode = combo->keycode; |
| 275 | record->event.key = COMBO_KEY_POS; | 295 | record->event.key = COMBO_KEY_POS; |
| 276 | 296 | ||
| 277 | qrecord->combo_index = combo_index; | 297 | qrecord->combo_index = combo_index; |
| @@ -283,19 +303,15 @@ void apply_combo(uint16_t combo_index, combo_t *combo) { | |||
| 283 | // by making it a TICK event. | 303 | // by making it a TICK event. |
| 284 | record->event.time = 0; | 304 | record->event.time = 0; |
| 285 | } | 305 | } |
| 286 | |||
| 287 | } | 306 | } |
| 288 | drop_combo_from_buffer(combo_index); | 307 | drop_combo_from_buffer(combo_index); |
| 289 | } | 308 | } |
| 290 | 309 | ||
| 291 | static inline void apply_combos(void) { | 310 | static inline void apply_combos(void) { |
| 292 | // Apply all buffered normal combos. | 311 | // Apply all buffered normal combos. |
| 293 | for (uint8_t i = combo_buffer_read; | 312 | for (uint8_t i = combo_buffer_read; i != combo_buffer_write; INCREMENT_MOD(i)) { |
| 294 | i != combo_buffer_write; | ||
| 295 | INCREMENT_MOD(i)) { | ||
| 296 | |||
| 297 | queued_combo_t *buffered_combo = &combo_buffer[i]; | 313 | queued_combo_t *buffered_combo = &combo_buffer[i]; |
| 298 | combo_t *combo = &key_combos[buffered_combo->combo_index]; | 314 | combo_t * combo = &key_combos[buffered_combo->combo_index]; |
| 299 | 315 | ||
| 300 | #ifdef COMBO_MUST_TAP_PER_COMBO | 316 | #ifdef COMBO_MUST_TAP_PER_COMBO |
| 301 | if (get_combo_must_tap(buffered_combo->combo_index, combo)) { | 317 | if (get_combo_must_tap(buffered_combo->combo_index, combo)) { |
| @@ -310,15 +326,15 @@ static inline void apply_combos(void) { | |||
| 310 | clear_combos(); | 326 | clear_combos(); |
| 311 | } | 327 | } |
| 312 | 328 | ||
| 313 | combo_t* overlaps(combo_t *combo1, combo_t *combo2) { | 329 | combo_t *overlaps(combo_t *combo1, combo_t *combo2) { |
| 314 | /* Checks if the combos overlap and returns the combo that should be | 330 | /* Checks if the combos overlap and returns the combo that should be |
| 315 | * dropped from the combo buffer. | 331 | * dropped from the combo buffer. |
| 316 | * The combo that has less keys will be dropped. If they have the same | 332 | * The combo that has less keys will be dropped. If they have the same |
| 317 | * amount of keys, drop combo1. */ | 333 | * amount of keys, drop combo1. */ |
| 318 | 334 | ||
| 319 | uint8_t idx1 = 0, idx2 = 0; | 335 | uint8_t idx1 = 0, idx2 = 0; |
| 320 | uint16_t key1, key2; | 336 | uint16_t key1, key2; |
| 321 | bool overlaps = false; | 337 | bool overlaps = false; |
| 322 | 338 | ||
| 323 | while ((key1 = pgm_read_word(&combo1->keys[idx1])) != COMBO_END) { | 339 | while ((key1 = pgm_read_word(&combo1->keys[idx1])) != COMBO_END) { |
| 324 | idx2 = 0; | 340 | idx2 = 0; |
| @@ -335,7 +351,7 @@ combo_t* overlaps(combo_t *combo1, combo_t *combo2) { | |||
| 335 | } | 351 | } |
| 336 | 352 | ||
| 337 | static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *record, uint16_t combo_index) { | 353 | static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *record, uint16_t combo_index) { |
| 338 | uint8_t key_count = 0; | 354 | uint8_t key_count = 0; |
| 339 | uint16_t key_index = -1; | 355 | uint16_t key_index = -1; |
| 340 | _find_key_index_and_count(combo->keys, keycode, &key_index, &key_count); | 356 | _find_key_index_and_count(combo->keys, keycode, &key_index, &key_count); |
| 341 | 357 | ||
| @@ -369,12 +385,9 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * | |||
| 369 | 385 | ||
| 370 | // disable readied combos that overlap with this combo | 386 | // disable readied combos that overlap with this combo |
| 371 | combo_t *drop = NULL; | 387 | combo_t *drop = NULL; |
| 372 | for (uint8_t combo_buffer_i = combo_buffer_read; | 388 | for (uint8_t combo_buffer_i = combo_buffer_read; combo_buffer_i != combo_buffer_write; INCREMENT_MOD(combo_buffer_i)) { |
| 373 | combo_buffer_i != combo_buffer_write; | 389 | queued_combo_t *qcombo = &combo_buffer[combo_buffer_i]; |
| 374 | INCREMENT_MOD(combo_buffer_i)) { | 390 | combo_t * buffered_combo = &key_combos[qcombo->combo_index]; |
| 375 | |||
| 376 | queued_combo_t *qcombo = &combo_buffer[combo_buffer_i]; | ||
| 377 | combo_t *buffered_combo = &key_combos[qcombo->combo_index]; | ||
| 378 | 391 | ||
| 379 | if ((drop = overlaps(buffered_combo, combo))) { | 392 | if ((drop = overlaps(buffered_combo, combo))) { |
| 380 | DISABLE_COMBO(drop); | 393 | DISABLE_COMBO(drop); |
| @@ -387,21 +400,19 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * | |||
| 387 | INCREMENT_MOD(combo_buffer_read); | 400 | INCREMENT_MOD(combo_buffer_read); |
| 388 | } | 401 | } |
| 389 | } | 402 | } |
| 390 | |||
| 391 | } | 403 | } |
| 392 | 404 | ||
| 393 | if (drop != combo) { | 405 | if (drop != combo) { |
| 394 | // save this combo to buffer | 406 | // save this combo to buffer |
| 395 | combo_buffer[combo_buffer_write] = (queued_combo_t){ | 407 | combo_buffer[combo_buffer_write] = (queued_combo_t){ |
| 396 | .combo_index=combo_index, | 408 | .combo_index = combo_index, |
| 397 | }; | 409 | }; |
| 398 | INCREMENT_MOD(combo_buffer_write); | 410 | INCREMENT_MOD(combo_buffer_write); |
| 399 | 411 | ||
| 400 | // get possible longer waiting time for tap-/hold-only combos. | 412 | // get possible longer waiting time for tap-/hold-only combos. |
| 401 | longest_term = _get_wait_time(combo_index, combo); | 413 | longest_term = _get_wait_time(combo_index, combo); |
| 402 | } | 414 | } |
| 403 | } // if timer elapsed end | 415 | } // if timer elapsed end |
| 404 | |||
| 405 | } | 416 | } |
| 406 | } else { | 417 | } else { |
| 407 | // chord releases | 418 | // chord releases |
| @@ -416,7 +427,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * | |||
| 416 | else if (get_combo_must_tap(combo_index, combo)) { | 427 | else if (get_combo_must_tap(combo_index, combo)) { |
| 417 | // immediately apply tap-only combo | 428 | // immediately apply tap-only combo |
| 418 | apply_combo(combo_index, combo); | 429 | apply_combo(combo_index, combo); |
| 419 | apply_combos(); // also apply other prepared combos and dump key buffer | 430 | apply_combos(); // also apply other prepared combos and dump key buffer |
| 420 | # ifdef COMBO_PROCESS_KEY_RELEASE | 431 | # ifdef COMBO_PROCESS_KEY_RELEASE |
| 421 | if (process_combo_key_release(combo_index, combo, key_index, keycode)) { | 432 | if (process_combo_key_release(combo_index, combo, key_index, keycode)) { |
| 422 | release_combo(combo_index, combo); | 433 | release_combo(combo_index, combo); |
| @@ -424,10 +435,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * | |||
| 424 | # endif | 435 | # endif |
| 425 | } | 436 | } |
| 426 | #endif | 437 | #endif |
| 427 | } else if (COMBO_ACTIVE(combo) | 438 | } else if (COMBO_ACTIVE(combo) && ONLY_ONE_KEY_IS_DOWN(COMBO_STATE(combo)) && KEY_NOT_YET_RELEASED(COMBO_STATE(combo), key_index)) { |
| 428 | && ONLY_ONE_KEY_IS_DOWN(COMBO_STATE(combo)) | ||
| 429 | && KEY_NOT_YET_RELEASED(COMBO_STATE(combo), key_index) | ||
| 430 | ) { | ||
| 431 | /* last key released */ | 439 | /* last key released */ |
| 432 | release_combo(combo_index, combo); | 440 | release_combo(combo_index, combo); |
| 433 | key_is_part_of_combo = true; | 441 | key_is_part_of_combo = true; |
| @@ -435,9 +443,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * | |||
| 435 | #ifdef COMBO_PROCESS_KEY_RELEASE | 443 | #ifdef COMBO_PROCESS_KEY_RELEASE |
| 436 | process_combo_key_release(combo_index, combo, key_index, keycode); | 444 | process_combo_key_release(combo_index, combo, key_index, keycode); |
| 437 | #endif | 445 | #endif |
| 438 | } else if (COMBO_ACTIVE(combo) | 446 | } else if (COMBO_ACTIVE(combo) && KEY_NOT_YET_RELEASED(COMBO_STATE(combo), key_index)) { |
| 439 | && KEY_NOT_YET_RELEASED(COMBO_STATE(combo), key_index) | ||
| 440 | ) { | ||
| 441 | /* first or middle key released */ | 447 | /* first or middle key released */ |
| 442 | key_is_part_of_combo = true; | 448 | key_is_part_of_combo = true; |
| 443 | 449 | ||
| @@ -489,21 +495,21 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) { | |||
| 489 | 495 | ||
| 490 | if (record->event.pressed && is_combo_key) { | 496 | if (record->event.pressed && is_combo_key) { |
| 491 | #ifndef COMBO_NO_TIMER | 497 | #ifndef COMBO_NO_TIMER |
| 492 | # ifdef COMBO_STRICT_TIMER | 498 | # ifdef COMBO_STRICT_TIMER |
| 493 | if (!timer) { | 499 | if (!timer) { |
| 494 | // timer is set only on the first key | 500 | // timer is set only on the first key |
| 495 | timer = timer_read(); | 501 | timer = timer_read(); |
| 496 | } | 502 | } |
| 497 | # else | 503 | # else |
| 498 | timer = timer_read(); | 504 | timer = timer_read(); |
| 499 | # endif | 505 | # endif |
| 500 | #endif | 506 | #endif |
| 501 | 507 | ||
| 502 | if (key_buffer_size < COMBO_KEY_BUFFER_LENGTH) { | 508 | if (key_buffer_size < COMBO_KEY_BUFFER_LENGTH) { |
| 503 | key_buffer[key_buffer_size++] = (queued_record_t){ | 509 | key_buffer[key_buffer_size++] = (queued_record_t){ |
| 504 | .record = *record, | 510 | .record = *record, |
| 505 | .keycode = keycode, | 511 | .keycode = keycode, |
| 506 | .combo_index = -1, // this will be set when applying combos | 512 | .combo_index = -1, // this will be set when applying combos |
| 507 | }; | 513 | }; |
| 508 | } | 514 | } |
| 509 | } else { | 515 | } else { |
| @@ -532,7 +538,7 @@ void combo_task(void) { | |||
| 532 | if (combo_buffer_read != combo_buffer_write) { | 538 | if (combo_buffer_read != combo_buffer_write) { |
| 533 | apply_combos(); | 539 | apply_combos(); |
| 534 | longest_term = 0; | 540 | longest_term = 0; |
| 535 | timer = 0; | 541 | timer = 0; |
| 536 | } else { | 542 | } else { |
| 537 | dump_key_buffer(); | 543 | dump_key_buffer(); |
| 538 | timer = 0; | 544 | timer = 0; |
| @@ -546,9 +552,9 @@ void combo_enable(void) { b_combo_enable = true; } | |||
| 546 | 552 | ||
| 547 | void combo_disable(void) { | 553 | void combo_disable(void) { |
| 548 | #ifndef COMBO_NO_TIMER | 554 | #ifndef COMBO_NO_TIMER |
| 549 | timer = 0; | 555 | timer = 0; |
| 550 | #endif | 556 | #endif |
| 551 | b_combo_enable = false; | 557 | b_combo_enable = false; |
| 552 | combo_buffer_read = combo_buffer_write; | 558 | combo_buffer_read = combo_buffer_write; |
| 553 | clear_combos(); | 559 | clear_combos(); |
| 554 | dump_key_buffer(); | 560 | dump_key_buffer(); |
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index 43c36d79e..4c4e574e3 100644 --- a/quantum/process_keycode/process_combo.h +++ b/quantum/process_keycode/process_combo.h | |||
| @@ -43,8 +43,8 @@ typedef struct { | |||
| 43 | #ifdef EXTRA_SHORT_COMBOS | 43 | #ifdef EXTRA_SHORT_COMBOS |
| 44 | uint8_t state; | 44 | uint8_t state; |
| 45 | #else | 45 | #else |
| 46 | bool disabled; | 46 | bool disabled; |
| 47 | bool active; | 47 | bool active; |
| 48 | # if defined(EXTRA_EXTRA_LONG_COMBOS) | 48 | # if defined(EXTRA_EXTRA_LONG_COMBOS) |
| 49 | uint32_t state; | 49 | uint32_t state; |
| 50 | # elif defined(EXTRA_LONG_COMBOS) | 50 | # elif defined(EXTRA_LONG_COMBOS) |
diff --git a/quantum/process_keycode/process_steno.c b/quantum/process_keycode/process_steno.c index a964aead3..5d0bb313b 100644 --- a/quantum/process_keycode/process_steno.c +++ b/quantum/process_keycode/process_steno.c | |||
| @@ -67,7 +67,7 @@ static const uint8_t boltmap[64] PROGMEM = {TXB_NUL, TXB_NUM, TXB_NUM, TXB_NUM, | |||
| 67 | 67 | ||
| 68 | #ifdef STENO_COMBINEDMAP | 68 | #ifdef STENO_COMBINEDMAP |
| 69 | /* Used to look up when pressing the middle row key to combine two consonant or vowel keys */ | 69 | /* Used to look up when pressing the middle row key to combine two consonant or vowel keys */ |
| 70 | static const uint16_t combinedmap_first[] PROGMEM = {STN_S1, STN_TL, STN_PL, STN_HL, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, STN_A, STN_E}; | 70 | static const uint16_t combinedmap_first[] PROGMEM = {STN_S1, STN_TL, STN_PL, STN_HL, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, STN_A, STN_E}; |
| 71 | static const uint16_t combinedmap_second[] PROGMEM = {STN_S2, STN_KL, STN_WL, STN_RL, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, STN_O, STN_U}; | 71 | static const uint16_t combinedmap_second[] PROGMEM = {STN_S2, STN_KL, STN_WL, STN_RL, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, STN_O, STN_U}; |
| 72 | #endif | 72 | #endif |
| 73 | 73 | ||
| @@ -174,11 +174,10 @@ bool process_steno(uint16_t keycode, keyrecord_t *record) { | |||
| 174 | return false; | 174 | return false; |
| 175 | 175 | ||
| 176 | #ifdef STENO_COMBINEDMAP | 176 | #ifdef STENO_COMBINEDMAP |
| 177 | case QK_STENO_COMB ... QK_STENO_COMB_MAX: | 177 | case QK_STENO_COMB ... QK_STENO_COMB_MAX: { |
| 178 | { | ||
| 179 | uint8_t result; | 178 | uint8_t result; |
| 180 | result = process_steno(combinedmap_first[keycode-QK_STENO_COMB], record); | 179 | result = process_steno(combinedmap_first[keycode - QK_STENO_COMB], record); |
| 181 | result &= process_steno(combinedmap_second[keycode-QK_STENO_COMB], record); | 180 | result &= process_steno(combinedmap_second[keycode - QK_STENO_COMB], record); |
| 182 | return result; | 181 | return result; |
| 183 | } | 182 | } |
| 184 | #endif | 183 | #endif |
diff --git a/quantum/quantum.c b/quantum/quantum.c index e60378afe..0ae12b583 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -145,12 +145,13 @@ void reset_keyboard(void) { | |||
| 145 | /* Convert record into usable keycode via the contained event. */ | 145 | /* Convert record into usable keycode via the contained event. */ |
| 146 | uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache) { | 146 | uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache) { |
| 147 | #ifdef COMBO_ENABLE | 147 | #ifdef COMBO_ENABLE |
| 148 | if (record->keycode) { return record->keycode; } | 148 | if (record->keycode) { |
| 149 | return record->keycode; | ||
| 150 | } | ||
| 149 | #endif | 151 | #endif |
| 150 | return get_event_keycode(record->event, update_layer_cache); | 152 | return get_event_keycode(record->event, update_layer_cache); |
| 151 | } | 153 | } |
| 152 | 154 | ||
| 153 | |||
| 154 | /* Convert event into usable keycode. Checks the layer cache to ensure that it | 155 | /* Convert event into usable keycode. Checks the layer cache to ensure that it |
| 155 | * retains the correct keycode after a layer change, if the key is still pressed. | 156 | * retains the correct keycode after a layer change, if the key is still pressed. |
| 156 | * "update_layer_cache" is to ensure that it only updates the layer cache when | 157 | * "update_layer_cache" is to ensure that it only updates the layer cache when |
| @@ -179,12 +180,12 @@ uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache) { | |||
| 179 | bool pre_process_record_quantum(keyrecord_t *record) { | 180 | bool pre_process_record_quantum(keyrecord_t *record) { |
| 180 | if (!( | 181 | if (!( |
| 181 | #ifdef COMBO_ENABLE | 182 | #ifdef COMBO_ENABLE |
| 182 | process_combo(get_record_keycode(record, true), record) && | 183 | process_combo(get_record_keycode(record, true), record) && |
| 183 | #endif | 184 | #endif |
| 184 | true)) { | 185 | true)) { |
| 185 | return false; | 186 | return false; |
| 186 | } | 187 | } |
| 187 | return true; // continue processing | 188 | return true; // continue processing |
| 188 | } | 189 | } |
| 189 | 190 | ||
| 190 | /* Get keycode, and then call keyboard function */ | 191 | /* Get keycode, and then call keyboard function */ |
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index ef4b0f457..99eade0e0 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h | |||
| @@ -775,12 +775,12 @@ enum quantum_keycodes { | |||
| 775 | #define CMD_T(kc) LCMD_T(kc) | 775 | #define CMD_T(kc) LCMD_T(kc) |
| 776 | #define WIN_T(kc) LWIN_T(kc) | 776 | #define WIN_T(kc) LWIN_T(kc) |
| 777 | 777 | ||
| 778 | #define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal | 778 | #define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal |
| 779 | #define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt | 779 | #define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt |
| 780 | #define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI | 780 | #define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI |
| 781 | #define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI | 781 | #define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI |
| 782 | #define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ | 782 | #define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ |
| 783 | #define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI | 783 | #define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI |
| 784 | #define SGUI_T(kc) LSG_T(kc) | 784 | #define SGUI_T(kc) LSG_T(kc) |
| 785 | #define SCMD_T(kc) LSG_T(kc) | 785 | #define SCMD_T(kc) LSG_T(kc) |
| 786 | #define SWIN_T(kc) LSG_T(kc) | 786 | #define SWIN_T(kc) LSG_T(kc) |
| @@ -811,7 +811,7 @@ enum quantum_keycodes { | |||
| 811 | 811 | ||
| 812 | #define UC_M_MA UNICODE_MODE_MAC | 812 | #define UC_M_MA UNICODE_MODE_MAC |
| 813 | #define UNICODE_MODE_OSX UNICODE_MODE_MAC // Deprecated alias | 813 | #define UNICODE_MODE_OSX UNICODE_MODE_MAC // Deprecated alias |
| 814 | #define UC_M_OS UNICODE_MODE_MAC // Deprecated alias | 814 | #define UC_M_OS UNICODE_MODE_MAC // Deprecated alias |
| 815 | #define UC_M_LN UNICODE_MODE_LNX | 815 | #define UC_M_LN UNICODE_MODE_LNX |
| 816 | #define UC_M_WI UNICODE_MODE_WIN | 816 | #define UC_M_WI UNICODE_MODE_WIN |
| 817 | #define UC_M_BS UNICODE_MODE_BSD | 817 | #define UC_M_BS UNICODE_MODE_BSD |
diff --git a/quantum/split_common/transactions.c b/quantum/split_common/transactions.c index fd676f072..3ff87710e 100644 --- a/quantum/split_common/transactions.c +++ b/quantum/split_common/transactions.c | |||
| @@ -42,8 +42,8 @@ | |||
| 42 | { &dummy, 0, 0, sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), cb } | 42 | { &dummy, 0, 0, sizeof_member(split_shared_memory_t, member), offsetof(split_shared_memory_t, member), cb } |
| 43 | #define trans_target2initiator_initializer(member) trans_target2initiator_initializer_cb(member, NULL) | 43 | #define trans_target2initiator_initializer(member) trans_target2initiator_initializer_cb(member, NULL) |
| 44 | 44 | ||
| 45 | #define transport_write(id, data, length) transport_execute_transaction(id, data, length, NULL, 0) | 45 | #define transport_write(id, data, length) transport_execute_transaction(id, data, length, NULL, 0) |
| 46 | #define transport_read(id, data, length) transport_execute_transaction(id, NULL, 0, data, length) | 46 | #define transport_read(id, data, length) transport_execute_transaction(id, NULL, 0, data, length) |
| 47 | 47 | ||
| 48 | #if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER) | 48 | #if defined(SPLIT_TRANSACTION_IDS_KB) || defined(SPLIT_TRANSACTION_IDS_USER) |
| 49 | // Forward-declare the RPC callback handlers | 49 | // Forward-declare the RPC callback handlers |
| @@ -157,8 +157,8 @@ static void master_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_ro | |||
| 157 | memcpy(master_matrix, split_shmem->mmatrix.matrix, sizeof(split_shmem->mmatrix.matrix)); | 157 | memcpy(master_matrix, split_shmem->mmatrix.matrix, sizeof(split_shmem->mmatrix.matrix)); |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | # define TRANSACTIONS_MASTER_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(master_matrix) | 160 | # define TRANSACTIONS_MASTER_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(master_matrix) |
| 161 | # define TRANSACTIONS_MASTER_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(master_matrix) | 161 | # define TRANSACTIONS_MASTER_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(master_matrix) |
| 162 | # define TRANSACTIONS_MASTER_MATRIX_REGISTRATIONS [PUT_MASTER_MATRIX] = trans_initiator2target_initializer(mmatrix.matrix), | 162 | # define TRANSACTIONS_MASTER_MATRIX_REGISTRATIONS [PUT_MASTER_MATRIX] = trans_initiator2target_initializer(mmatrix.matrix), |
| 163 | 163 | ||
| 164 | #else // SPLIT_TRANSPORT_MIRROR | 164 | #else // SPLIT_TRANSPORT_MIRROR |
| @@ -235,8 +235,8 @@ static void sync_timer_handlers_slave(matrix_row_t master_matrix[], matrix_row_t | |||
| 235 | } | 235 | } |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | # define TRANSACTIONS_SYNC_TIMER_MASTER() TRANSACTION_HANDLER_MASTER(sync_timer) | 238 | # define TRANSACTIONS_SYNC_TIMER_MASTER() TRANSACTION_HANDLER_MASTER(sync_timer) |
| 239 | # define TRANSACTIONS_SYNC_TIMER_SLAVE() TRANSACTION_HANDLER_SLAVE(sync_timer) | 239 | # define TRANSACTIONS_SYNC_TIMER_SLAVE() TRANSACTION_HANDLER_SLAVE(sync_timer) |
| 240 | # define TRANSACTIONS_SYNC_TIMER_REGISTRATIONS [PUT_SYNC_TIMER] = trans_initiator2target_initializer(sync_timer), | 240 | # define TRANSACTIONS_SYNC_TIMER_REGISTRATIONS [PUT_SYNC_TIMER] = trans_initiator2target_initializer(sync_timer), |
| 241 | 241 | ||
| 242 | #else // DISABLE_SYNC_TIMER | 242 | #else // DISABLE_SYNC_TIMER |
| @@ -300,8 +300,8 @@ static void led_state_handlers_slave(matrix_row_t master_matrix[], matrix_row_t | |||
| 300 | set_split_host_keyboard_leds(split_shmem->led_state); | 300 | set_split_host_keyboard_leds(split_shmem->led_state); |
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | # define TRANSACTIONS_LED_STATE_MASTER() TRANSACTION_HANDLER_MASTER(led_state) | 303 | # define TRANSACTIONS_LED_STATE_MASTER() TRANSACTION_HANDLER_MASTER(led_state) |
| 304 | # define TRANSACTIONS_LED_STATE_SLAVE() TRANSACTION_HANDLER_SLAVE(led_state) | 304 | # define TRANSACTIONS_LED_STATE_SLAVE() TRANSACTION_HANDLER_SLAVE(led_state) |
| 305 | # define TRANSACTIONS_LED_STATE_REGISTRATIONS [PUT_LED_STATE] = trans_initiator2target_initializer(led_state), | 305 | # define TRANSACTIONS_LED_STATE_REGISTRATIONS [PUT_LED_STATE] = trans_initiator2target_initializer(led_state), |
| 306 | 306 | ||
| 307 | #else // SPLIT_LED_STATE_ENABLE | 307 | #else // SPLIT_LED_STATE_ENABLE |
| @@ -357,8 +357,8 @@ static void mods_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave | |||
| 357 | # endif | 357 | # endif |
| 358 | } | 358 | } |
| 359 | 359 | ||
| 360 | # define TRANSACTIONS_MODS_MASTER() TRANSACTION_HANDLER_MASTER(mods) | 360 | # define TRANSACTIONS_MODS_MASTER() TRANSACTION_HANDLER_MASTER(mods) |
| 361 | # define TRANSACTIONS_MODS_SLAVE() TRANSACTION_HANDLER_SLAVE(mods) | 361 | # define TRANSACTIONS_MODS_SLAVE() TRANSACTION_HANDLER_SLAVE(mods) |
| 362 | # define TRANSACTIONS_MODS_REGISTRATIONS [PUT_MODS] = trans_initiator2target_initializer(mods), | 362 | # define TRANSACTIONS_MODS_REGISTRATIONS [PUT_MODS] = trans_initiator2target_initializer(mods), |
| 363 | 363 | ||
| 364 | #else // SPLIT_MODS_ENABLE | 364 | #else // SPLIT_MODS_ENABLE |
| @@ -382,8 +382,8 @@ static bool backlight_handlers_master(matrix_row_t master_matrix[], matrix_row_t | |||
| 382 | 382 | ||
| 383 | static void backlight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { backlight_set(split_shmem->backlight_level); } | 383 | static void backlight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { backlight_set(split_shmem->backlight_level); } |
| 384 | 384 | ||
| 385 | # define TRANSACTIONS_BACKLIGHT_MASTER() TRANSACTION_HANDLER_MASTER(backlight) | 385 | # define TRANSACTIONS_BACKLIGHT_MASTER() TRANSACTION_HANDLER_MASTER(backlight) |
| 386 | # define TRANSACTIONS_BACKLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(backlight) | 386 | # define TRANSACTIONS_BACKLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(backlight) |
| 387 | # define TRANSACTIONS_BACKLIGHT_REGISTRATIONS [PUT_BACKLIGHT] = trans_initiator2target_initializer(backlight_level), | 387 | # define TRANSACTIONS_BACKLIGHT_REGISTRATIONS [PUT_BACKLIGHT] = trans_initiator2target_initializer(backlight_level), |
| 388 | 388 | ||
| 389 | #else // BACKLIGHT_ENABLE | 389 | #else // BACKLIGHT_ENABLE |
| @@ -419,8 +419,8 @@ static void rgblight_handlers_slave(matrix_row_t master_matrix[], matrix_row_t s | |||
| 419 | } | 419 | } |
| 420 | } | 420 | } |
| 421 | 421 | ||
| 422 | # define TRANSACTIONS_RGBLIGHT_MASTER() TRANSACTION_HANDLER_MASTER(rgblight) | 422 | # define TRANSACTIONS_RGBLIGHT_MASTER() TRANSACTION_HANDLER_MASTER(rgblight) |
| 423 | # define TRANSACTIONS_RGBLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(rgblight) | 423 | # define TRANSACTIONS_RGBLIGHT_SLAVE() TRANSACTION_HANDLER_SLAVE(rgblight) |
| 424 | # define TRANSACTIONS_RGBLIGHT_REGISTRATIONS [PUT_RGBLIGHT] = trans_initiator2target_initializer(rgblight_sync), | 424 | # define TRANSACTIONS_RGBLIGHT_REGISTRATIONS [PUT_RGBLIGHT] = trans_initiator2target_initializer(rgblight_sync), |
| 425 | 425 | ||
| 426 | #else // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | 426 | #else // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) |
| @@ -449,8 +449,8 @@ static void led_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_row_t | |||
| 449 | led_matrix_set_suspend_state(split_shmem->led_matrix_sync.led_suspend_state); | 449 | led_matrix_set_suspend_state(split_shmem->led_matrix_sync.led_suspend_state); |
| 450 | } | 450 | } |
| 451 | 451 | ||
| 452 | # define TRANSACTIONS_LED_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(led_matrix) | 452 | # define TRANSACTIONS_LED_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(led_matrix) |
| 453 | # define TRANSACTIONS_LED_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(led_matrix) | 453 | # define TRANSACTIONS_LED_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(led_matrix) |
| 454 | # define TRANSACTIONS_LED_MATRIX_REGISTRATIONS [PUT_LED_MATRIX] = trans_initiator2target_initializer(led_matrix_sync), | 454 | # define TRANSACTIONS_LED_MATRIX_REGISTRATIONS [PUT_LED_MATRIX] = trans_initiator2target_initializer(led_matrix_sync), |
| 455 | 455 | ||
| 456 | #else // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | 456 | #else // defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) |
| @@ -479,8 +479,8 @@ static void rgb_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_row_t | |||
| 479 | rgb_matrix_set_suspend_state(split_shmem->rgb_matrix_sync.rgb_suspend_state); | 479 | rgb_matrix_set_suspend_state(split_shmem->rgb_matrix_sync.rgb_suspend_state); |
| 480 | } | 480 | } |
| 481 | 481 | ||
| 482 | # define TRANSACTIONS_RGB_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(rgb_matrix) | 482 | # define TRANSACTIONS_RGB_MATRIX_MASTER() TRANSACTION_HANDLER_MASTER(rgb_matrix) |
| 483 | # define TRANSACTIONS_RGB_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(rgb_matrix) | 483 | # define TRANSACTIONS_RGB_MATRIX_SLAVE() TRANSACTION_HANDLER_SLAVE(rgb_matrix) |
| 484 | # define TRANSACTIONS_RGB_MATRIX_REGISTRATIONS [PUT_RGB_MATRIX] = trans_initiator2target_initializer(rgb_matrix_sync), | 484 | # define TRANSACTIONS_RGB_MATRIX_REGISTRATIONS [PUT_RGB_MATRIX] = trans_initiator2target_initializer(rgb_matrix_sync), |
| 485 | 485 | ||
| 486 | #else // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | 486 | #else // defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) |
| @@ -504,8 +504,8 @@ static bool wpm_handlers_master(matrix_row_t master_matrix[], matrix_row_t slave | |||
| 504 | 504 | ||
| 505 | static void wpm_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { set_current_wpm(split_shmem->current_wpm); } | 505 | static void wpm_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { set_current_wpm(split_shmem->current_wpm); } |
| 506 | 506 | ||
| 507 | # define TRANSACTIONS_WPM_MASTER() TRANSACTION_HANDLER_MASTER(wpm) | 507 | # define TRANSACTIONS_WPM_MASTER() TRANSACTION_HANDLER_MASTER(wpm) |
| 508 | # define TRANSACTIONS_WPM_SLAVE() TRANSACTION_HANDLER_SLAVE(wpm) | 508 | # define TRANSACTIONS_WPM_SLAVE() TRANSACTION_HANDLER_SLAVE(wpm) |
| 509 | # define TRANSACTIONS_WPM_REGISTRATIONS [PUT_WPM] = trans_initiator2target_initializer(current_wpm), | 509 | # define TRANSACTIONS_WPM_REGISTRATIONS [PUT_WPM] = trans_initiator2target_initializer(current_wpm), |
| 510 | 510 | ||
| 511 | #else // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE) | 511 | #else // defined(WPM_ENABLE) && defined(SPLIT_WPM_ENABLE) |
| @@ -535,8 +535,8 @@ static void oled_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave | |||
| 535 | } | 535 | } |
| 536 | } | 536 | } |
| 537 | 537 | ||
| 538 | # define TRANSACTIONS_OLED_MASTER() TRANSACTION_HANDLER_MASTER(oled) | 538 | # define TRANSACTIONS_OLED_MASTER() TRANSACTION_HANDLER_MASTER(oled) |
| 539 | # define TRANSACTIONS_OLED_SLAVE() TRANSACTION_HANDLER_SLAVE(oled) | 539 | # define TRANSACTIONS_OLED_SLAVE() TRANSACTION_HANDLER_SLAVE(oled) |
| 540 | # define TRANSACTIONS_OLED_REGISTRATIONS [PUT_OLED] = trans_initiator2target_initializer(current_oled_state), | 540 | # define TRANSACTIONS_OLED_REGISTRATIONS [PUT_OLED] = trans_initiator2target_initializer(current_oled_state), |
| 541 | 541 | ||
| 542 | #else // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE) | 542 | #else // defined(OLED_ENABLE) && defined(SPLIT_OLED_ENABLE) |
| @@ -566,8 +566,8 @@ static void st7565_handlers_slave(matrix_row_t master_matrix[], matrix_row_t sla | |||
| 566 | } | 566 | } |
| 567 | } | 567 | } |
| 568 | 568 | ||
| 569 | # define TRANSACTIONS_ST7565_MASTER() TRANSACTION_HANDLER_MASTER(st7565) | 569 | # define TRANSACTIONS_ST7565_MASTER() TRANSACTION_HANDLER_MASTER(st7565) |
| 570 | # define TRANSACTIONS_ST7565_SLAVE() TRANSACTION_HANDLER_SLAVE(st7565) | 570 | # define TRANSACTIONS_ST7565_SLAVE() TRANSACTION_HANDLER_SLAVE(st7565) |
| 571 | # define TRANSACTIONS_ST7565_REGISTRATIONS [PUT_ST7565] = trans_initiator2target_initializer(current_st7565_state), | 571 | # define TRANSACTIONS_ST7565_REGISTRATIONS [PUT_ST7565] = trans_initiator2target_initializer(current_st7565_state), |
| 572 | 572 | ||
| 573 | #else // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE) | 573 | #else // defined(ST7565_ENABLE) && defined(SPLIT_ST7565_ENABLE) |
diff --git a/tmk_core/common/chibios/sleep_led.c b/tmk_core/common/chibios/sleep_led.c index 1c65016a4..477056a45 100644 --- a/tmk_core/common/chibios/sleep_led.c +++ b/tmk_core/common/chibios/sleep_led.c | |||
| @@ -65,7 +65,7 @@ void sleep_led_timer_callback(void) { | |||
| 65 | 65 | ||
| 66 | /* LPTMR clock options */ | 66 | /* LPTMR clock options */ |
| 67 | # define LPTMR_CLOCK_MCGIRCLK 0 /* 4MHz clock */ | 67 | # define LPTMR_CLOCK_MCGIRCLK 0 /* 4MHz clock */ |
| 68 | # define LPTMR_CLOCK_LPO 1 /* 1kHz clock */ | 68 | # define LPTMR_CLOCK_LPO 1 /* 1kHz clock */ |
| 69 | # define LPTMR_CLOCK_ERCLK32K 2 /* external 32kHz crystal */ | 69 | # define LPTMR_CLOCK_ERCLK32K 2 /* external 32kHz crystal */ |
| 70 | # define LPTMR_CLOCK_OSCERCLK 3 /* output from OSC */ | 70 | # define LPTMR_CLOCK_OSCERCLK 3 /* output from OSC */ |
| 71 | 71 | ||
| @@ -121,7 +121,7 @@ void sleep_led_init(void) { | |||
| 121 | MCG->C2 |= MCG_C2_IRCS; // fast (4MHz) internal ref clock | 121 | MCG->C2 |= MCG_C2_IRCS; // fast (4MHz) internal ref clock |
| 122 | # if defined(KL27) // divide the 8MHz IRC by 2, to have the same MCGIRCLK speed as others | 122 | # if defined(KL27) // divide the 8MHz IRC by 2, to have the same MCGIRCLK speed as others |
| 123 | MCG->MC |= MCG_MC_LIRC_DIV2_DIV2; | 123 | MCG->MC |= MCG_MC_LIRC_DIV2_DIV2; |
| 124 | # endif /* KL27 */ | 124 | # endif /* KL27 */ |
| 125 | MCG->C1 |= MCG_C1_IRCLKEN; // enable internal ref clock | 125 | MCG->C1 |= MCG_C1_IRCLKEN; // enable internal ref clock |
| 126 | // to work in stop mode, also MCG_C1_IREFSTEN | 126 | // to work in stop mode, also MCG_C1_IREFSTEN |
| 127 | // Divide 4MHz by 2^N (N=6) => 62500 irqs/sec => | 127 | // Divide 4MHz by 2^N (N=6) => 62500 irqs/sec => |
diff --git a/tmk_core/common/report.c b/tmk_core/common/report.c index 2a7fc006c..854b59ae4 100644 --- a/tmk_core/common/report.c +++ b/tmk_core/common/report.c | |||
| @@ -24,8 +24,8 @@ | |||
| 24 | #ifdef RING_BUFFERED_6KRO_REPORT_ENABLE | 24 | #ifdef RING_BUFFERED_6KRO_REPORT_ENABLE |
| 25 | # define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS) | 25 | # define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS) |
| 26 | # define RO_SUB(a, b) ((a - b + KEYBOARD_REPORT_KEYS) % KEYBOARD_REPORT_KEYS) | 26 | # define RO_SUB(a, b) ((a - b + KEYBOARD_REPORT_KEYS) % KEYBOARD_REPORT_KEYS) |
| 27 | # define RO_INC(a) RO_ADD(a, 1) | 27 | # define RO_INC(a) RO_ADD(a, 1) |
| 28 | # define RO_DEC(a) RO_SUB(a, 1) | 28 | # define RO_DEC(a) RO_SUB(a, 1) |
| 29 | static int8_t cb_head = 0; | 29 | static int8_t cb_head = 0; |
| 30 | static int8_t cb_tail = 0; | 30 | static int8_t cb_tail = 0; |
| 31 | static int8_t cb_count = 0; | 31 | static int8_t cb_count = 0; |
diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index 39251a643..43c88084d 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c | |||
| @@ -158,8 +158,8 @@ static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report) | |||
| 158 | 158 | ||
| 159 | #ifdef PS2_MOUSE_INVERT_BUTTONS | 159 | #ifdef PS2_MOUSE_INVERT_BUTTONS |
| 160 | // swap left & right buttons | 160 | // swap left & right buttons |
| 161 | uint8_t needs_left = mouse_report->buttons & PS2_MOUSE_BTN_RIGHT; | 161 | uint8_t needs_left = mouse_report->buttons & PS2_MOUSE_BTN_RIGHT; |
| 162 | uint8_t needs_right = mouse_report->buttons & PS2_MOUSE_BTN_LEFT; | 162 | uint8_t needs_right = mouse_report->buttons & PS2_MOUSE_BTN_LEFT; |
| 163 | mouse_report->buttons = (mouse_report->buttons & ~(PS2_MOUSE_BTN_MASK)) | (needs_left ? PS2_MOUSE_BTN_LEFT : 0) | (needs_right ? PS2_MOUSE_BTN_RIGHT : 0); | 163 | mouse_report->buttons = (mouse_report->buttons & ~(PS2_MOUSE_BTN_MASK)) | (needs_left ? PS2_MOUSE_BTN_LEFT : 0) | (needs_right ? PS2_MOUSE_BTN_RIGHT : 0); |
| 164 | #else | 164 | #else |
| 165 | // remove sign and overflow flags | 165 | // remove sign and overflow flags |
