From 1bff37781bda1d0c285aa5aa7102d6941ad64e7d Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 14 Oct 2023 22:21:20 +1100 Subject: [PATCH] Prep work for NKRO report separation (#22268) * Clean up some keyboard/userspace code * Rename `KEYBOARD_REPORT_BITS` -> `NKRO_REPORT_BITS` * Add some missing includes * Use `PACKED` define for report types * Fix incorrect function signatures for FlexRAM EEPROM driver --- keyboards/annepro2/annepro2_ble.c | 2 +- keyboards/bioi/bluetooth_custom.c | 13 ++++++------- .../sawnsprojects/okayu/stm32f072/config.h | 2 +- .../sawnsprojects/okayu/stm32f103/config.h | 2 +- .../sawnsprojects/okayu/stm32f303/config.h | 2 +- .../drivers/eeprom/eeprom_kinetis_flexram.c | 8 ++++---- quantum/eeconfig.h | 1 + quantum/quantum.h | 2 ++ tmk_core/protocol/report.c | 8 ++++---- tmk_core/protocol/report.h | 19 ++++++++++--------- tmk_core/protocol/usb_descriptor.c | 4 ++-- users/brandonschlack/brandonschlack.c | 8 ++------ 12 files changed, 35 insertions(+), 36 deletions(-) diff --git a/keyboards/annepro2/annepro2_ble.c b/keyboards/annepro2/annepro2_ble.c index 375f551cc2..b04929e958 100644 --- a/keyboards/annepro2/annepro2_ble.c +++ b/keyboards/annepro2/annepro2_ble.c @@ -167,5 +167,5 @@ static void ap2_ble_extra(report_extra_t *report) { static void ap2_ble_keyboard(report_keyboard_t *report) { sdPut(&SD1, 0x0); sdWrite(&SD1, ble_mcu_send_report, sizeof(ble_mcu_send_report)); - sdWrite(&SD1, &report->raw[0], KEYBOARD_REPORT_SIZE); + sdWrite(&SD1, (uint8_t *)report, KEYBOARD_REPORT_SIZE); } diff --git a/keyboards/bioi/bluetooth_custom.c b/keyboards/bioi/bluetooth_custom.c index 7d88a837d1..4ea277f731 100644 --- a/keyboards/bioi/bluetooth_custom.c +++ b/keyboards/bioi/bluetooth_custom.c @@ -86,13 +86,12 @@ void bluetooth_send_keyboard(report_keyboard_t *report) send_str(PSTR("AT+BLEKEYBOARDCODE=")); - for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) - { - send_bytes(report->raw[i]); - if (i < (KEYBOARD_EPSIZE - 1)) - { - send_str(PSTR("-")); - } + send_bytes(report->mods); + send_str(PSTR("-")); + send_bytes(0); + for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { + send_str(PSTR("-")); + send_bytes(report->keys[i]); } send_str(PSTR("\r\n")); diff --git a/keyboards/sawnsprojects/okayu/stm32f072/config.h b/keyboards/sawnsprojects/okayu/stm32f072/config.h index c47f1928c8..41bb0d1fdb 100644 --- a/keyboards/sawnsprojects/okayu/stm32f072/config.h +++ b/keyboards/sawnsprojects/okayu/stm32f072/config.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define WS2812_SPI SPID1 +#define WS2812_SPI_DRIVER SPID1 #define WS2812_SPI_MOSI_PAL_MODE 5 #define WS2812_SPI_SCK_PIN B13 #define WS2812_SPI_SCK_PAL_MODE 5 \ No newline at end of file diff --git a/keyboards/sawnsprojects/okayu/stm32f103/config.h b/keyboards/sawnsprojects/okayu/stm32f103/config.h index eff3605470..9024616477 100644 --- a/keyboards/sawnsprojects/okayu/stm32f103/config.h +++ b/keyboards/sawnsprojects/okayu/stm32f103/config.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define WS2812_SPI SPID2 +#define WS2812_SPI_DRIVER SPID2 #define WS2812_SPI_MOSI_PAL_MODE 5 #define WS2812_SPI_SCK_PIN B13 #define WS2812_SPI_SCK_PAL_MODE 5 \ No newline at end of file diff --git a/keyboards/sawnsprojects/okayu/stm32f303/config.h b/keyboards/sawnsprojects/okayu/stm32f303/config.h index c47f1928c8..41bb0d1fdb 100644 --- a/keyboards/sawnsprojects/okayu/stm32f303/config.h +++ b/keyboards/sawnsprojects/okayu/stm32f303/config.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define WS2812_SPI SPID1 +#define WS2812_SPI_DRIVER SPID1 #define WS2812_SPI_MOSI_PAL_MODE 5 #define WS2812_SPI_SCK_PIN B13 #define WS2812_SPI_SCK_PAL_MODE 5 \ No newline at end of file diff --git a/platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c b/platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c index 6468cbf3fa..9cf956b2f7 100644 --- a/platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c +++ b/platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c @@ -146,7 +146,7 @@ uint32_t eeprom_read_dword(const uint32_t *addr) { * * FIXME: needs doc */ -void eeprom_read_block(void *buf, const void *addr, uint32_t len) { +void eeprom_read_block(void *buf, const void *addr, size_t len) { uint32_t offset = (uint32_t)addr; uint8_t *dest = (uint8_t *)buf; uint32_t end = offset + len; @@ -271,7 +271,7 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) { * * FIXME: needs doc */ -void eeprom_write_block(const void *buf, void *addr, uint32_t len) { +void eeprom_write_block(const void *buf, void *addr, size_t len) { uint32_t offset = (uint32_t)addr; const uint8_t *src = (const uint8_t *)buf; @@ -480,7 +480,7 @@ uint32_t eeprom_read_dword(const uint32_t *addr) { return eeprom_read_byte(p) | (eeprom_read_byte(p + 1) << 8) | (eeprom_read_byte(p + 2) << 16) | (eeprom_read_byte(p + 3) << 24); } -void eeprom_read_block(void *buf, const void *addr, uint32_t len) { +void eeprom_read_block(void *buf, const void *addr, size_t len) { const uint8_t *p = (const uint8_t *)addr; uint8_t * dest = (uint8_t *)buf; while (len--) { @@ -506,7 +506,7 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) { eeprom_write_byte(p, value >> 24); } -void eeprom_write_block(const void *buf, void *addr, uint32_t len) { +void eeprom_write_block(const void *buf, void *addr, size_t len) { uint8_t * p = (uint8_t *)addr; const uint8_t *src = (const uint8_t *)buf; while (len--) { diff --git a/quantum/eeconfig.h b/quantum/eeconfig.h index 34d85cb91e..d7cce166bd 100644 --- a/quantum/eeconfig.h +++ b/quantum/eeconfig.h @@ -19,6 +19,7 @@ along with this program. If not, see . #include #include +#include "eeprom.h" #ifndef EECONFIG_MAGIC_NUMBER # define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE6 // When changing, decrement this value to avoid future re-init issues diff --git a/quantum/quantum.h b/quantum/quantum.h index 66e4569991..e41542e4af 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -56,6 +56,8 @@ #include "suspend.h" #include #include +#include +#include #ifdef DEFERRED_EXEC_ENABLE # include "deferred_exec.h" diff --git a/tmk_core/protocol/report.c b/tmk_core/protocol/report.c index 1ba3be4604..27d267abae 100644 --- a/tmk_core/protocol/report.c +++ b/tmk_core/protocol/report.c @@ -59,7 +59,7 @@ uint8_t get_first_key(report_keyboard_t* keyboard_report) { #ifdef NKRO_ENABLE if (keyboard_protocol && keymap_config.nkro) { uint8_t i = 0; - for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++) + for (; i < NKRO_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++) ; return i << 3 | biton(keyboard_report->nkro.bits[i]); } @@ -89,7 +89,7 @@ bool is_key_pressed(report_keyboard_t* keyboard_report, uint8_t key) { } #ifdef NKRO_ENABLE if (keyboard_protocol && keymap_config.nkro) { - if ((key >> 3) < KEYBOARD_REPORT_BITS) { + if ((key >> 3) < NKRO_REPORT_BITS) { return keyboard_report->nkro.bits[key >> 3] & 1 << (key & 7); } else { return false; @@ -216,7 +216,7 @@ void del_key_byte(report_keyboard_t* keyboard_report, uint8_t code) { * FIXME: Needs doc */ void add_key_bit(report_keyboard_t* keyboard_report, uint8_t code) { - if ((code >> 3) < KEYBOARD_REPORT_BITS) { + if ((code >> 3) < NKRO_REPORT_BITS) { keyboard_report->nkro.bits[code >> 3] |= 1 << (code & 7); } else { dprintf("add_key_bit: can't add: %02X\n", code); @@ -228,7 +228,7 @@ void add_key_bit(report_keyboard_t* keyboard_report, uint8_t code) { * FIXME: Needs doc */ void del_key_bit(report_keyboard_t* keyboard_report, uint8_t code) { - if ((code >> 3) < KEYBOARD_REPORT_BITS) { + if ((code >> 3) < NKRO_REPORT_BITS) { keyboard_report->nkro.bits[code >> 3] &= ~(1 << (code & 7)); } else { dprintf("del_key_bit: can't del: %02X\n", code); diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h index 9d415a3bfd..dd3cee3df0 100644 --- a/tmk_core/protocol/report.h +++ b/tmk_core/protocol/report.h @@ -20,6 +20,7 @@ along with this program. If not, see . #include #include #include "keycode.h" +#include "util.h" // clang-format off @@ -129,10 +130,10 @@ enum desktop_usages { #if defined(NKRO_ENABLE) # if defined(PROTOCOL_LUFA) || defined(PROTOCOL_CHIBIOS) # include "protocol/usb_descriptor.h" -# define KEYBOARD_REPORT_BITS (SHARED_EPSIZE - 2) +# define NKRO_REPORT_BITS (SHARED_EPSIZE - 2) # elif defined(PROTOCOL_ARM_ATSAM) # include "protocol/arm_atsam/usb/udi_device_epsize.h" -# define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1) +# define NKRO_REPORT_BITS (NKRO_EPSIZE - 1) # undef NKRO_SHARED_EP # undef MOUSE_SHARED_EP # else @@ -188,20 +189,20 @@ typedef union { uint8_t report_id; # endif uint8_t mods; - uint8_t bits[KEYBOARD_REPORT_BITS]; + uint8_t bits[NKRO_REPORT_BITS]; } nkro; #endif -} __attribute__((packed)) report_keyboard_t; +} PACKED report_keyboard_t; typedef struct { uint8_t report_id; uint16_t usage; -} __attribute__((packed)) report_extra_t; +} PACKED report_extra_t; typedef struct { uint8_t report_id; uint32_t usage; -} __attribute__((packed)) report_programmable_button_t; +} PACKED report_programmable_button_t; #ifdef MOUSE_EXTENDED_REPORT typedef int16_t mouse_xy_report_t; @@ -222,7 +223,7 @@ typedef struct { mouse_xy_report_t y; int8_t v; int8_t h; -} __attribute__((packed)) report_mouse_t; +} PACKED report_mouse_t; typedef struct { #ifdef DIGITIZER_SHARED_EP @@ -234,7 +235,7 @@ typedef struct { uint8_t reserved : 5; uint16_t x; uint16_t y; -} __attribute__((packed)) report_digitizer_t; +} PACKED report_digitizer_t; typedef struct { #ifdef JOYSTICK_SHARED_EP @@ -251,7 +252,7 @@ typedef struct { #if JOYSTICK_BUTTON_COUNT > 0 uint8_t buttons[(JOYSTICK_BUTTON_COUNT - 1) / 8 + 1]; #endif -} __attribute__((packed)) report_joystick_t; +} PACKED report_joystick_t; /* keycode to system usage */ static inline uint16_t KEYCODE2SYSTEM(uint8_t key) { diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index e215c90900..eb214c0492 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -359,10 +359,10 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { // Keycodes HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad HID_RI_USAGE_MINIMUM(8, 0x00), - HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS * 8 - 1), + HID_RI_USAGE_MAXIMUM(8, NKRO_REPORT_BITS * 8 - 1), HID_RI_LOGICAL_MINIMUM(8, 0x00), HID_RI_LOGICAL_MAXIMUM(8, 0x01), - HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS * 8), + HID_RI_REPORT_COUNT(8, NKRO_REPORT_BITS * 8), HID_RI_REPORT_SIZE(8, 0x01), HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), diff --git a/users/brandonschlack/brandonschlack.c b/users/brandonschlack/brandonschlack.c index 1e52bd6452..6a9c04a73d 100644 --- a/users/brandonschlack/brandonschlack.c +++ b/users/brandonschlack/brandonschlack.c @@ -88,9 +88,7 @@ void suspend_power_down_keymap(void) {} */ void suspend_power_down_user(void) { #ifdef RGB_MATRIX_ENABLE - if (!g_suspend_state) { - rgb_matrix_set_suspend_state(true); - } + rgb_matrix_set_suspend_state(true); #endif //RGB_MATRIX_ENABLE suspend_power_down_keymap(); } @@ -103,9 +101,7 @@ void suspend_wakeup_init_keymap(void) {} */ void suspend_wakeup_init_user(void) { #ifdef RGB_MATRIX_ENABLE - if (g_suspend_state) { - rgb_matrix_set_suspend_state(false); - } + rgb_matrix_set_suspend_state(false); #endif //RGB_MATRIX_ENABLE suspend_wakeup_init_keymap(); }