mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	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
This commit is contained in:
		
							parent
							
								
									1da7c8c8d0
								
							
						
					
					
						commit
						1bff37781b
					
				| @ -167,5 +167,5 @@ static void ap2_ble_extra(report_extra_t *report) { | |||||||
| static void ap2_ble_keyboard(report_keyboard_t *report) { | static void ap2_ble_keyboard(report_keyboard_t *report) { | ||||||
|     sdPut(&SD1, 0x0); |     sdPut(&SD1, 0x0); | ||||||
|     sdWrite(&SD1, ble_mcu_send_report, sizeof(ble_mcu_send_report)); |     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); | ||||||
| } | } | ||||||
|  | |||||||
| @ -86,13 +86,12 @@ void bluetooth_send_keyboard(report_keyboard_t *report) | |||||||
| 
 | 
 | ||||||
|     send_str(PSTR("AT+BLEKEYBOARDCODE=")); |     send_str(PSTR("AT+BLEKEYBOARDCODE=")); | ||||||
| 
 | 
 | ||||||
|     for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) |     send_bytes(report->mods); | ||||||
|     { |     send_str(PSTR("-")); | ||||||
|         send_bytes(report->raw[i]); |     send_bytes(0); | ||||||
|         if (i < (KEYBOARD_EPSIZE - 1)) |     for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { | ||||||
|         { |         send_str(PSTR("-")); | ||||||
|             send_str(PSTR("-")); |         send_bytes(report->keys[i]); | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     send_str(PSTR("\r\n")); |     send_str(PSTR("\r\n")); | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #define WS2812_SPI SPID1 | #define WS2812_SPI_DRIVER SPID1 | ||||||
| #define WS2812_SPI_MOSI_PAL_MODE 5 | #define WS2812_SPI_MOSI_PAL_MODE 5 | ||||||
| #define WS2812_SPI_SCK_PIN B13 | #define WS2812_SPI_SCK_PIN B13 | ||||||
| #define WS2812_SPI_SCK_PAL_MODE 5 | #define WS2812_SPI_SCK_PAL_MODE 5 | ||||||
| @ -2,7 +2,7 @@ | |||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #define WS2812_SPI SPID2 | #define WS2812_SPI_DRIVER SPID2 | ||||||
| #define WS2812_SPI_MOSI_PAL_MODE 5  | #define WS2812_SPI_MOSI_PAL_MODE 5  | ||||||
| #define WS2812_SPI_SCK_PIN B13 | #define WS2812_SPI_SCK_PIN B13 | ||||||
| #define WS2812_SPI_SCK_PAL_MODE 5 | #define WS2812_SPI_SCK_PAL_MODE 5 | ||||||
| @ -2,7 +2,7 @@ | |||||||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #define WS2812_SPI SPID1 | #define WS2812_SPI_DRIVER SPID1 | ||||||
| #define WS2812_SPI_MOSI_PAL_MODE 5 | #define WS2812_SPI_MOSI_PAL_MODE 5 | ||||||
| #define WS2812_SPI_SCK_PIN B13 | #define WS2812_SPI_SCK_PIN B13 | ||||||
| #define WS2812_SPI_SCK_PAL_MODE 5 | #define WS2812_SPI_SCK_PAL_MODE 5 | ||||||
| @ -146,7 +146,7 @@ uint32_t eeprom_read_dword(const uint32_t *addr) { | |||||||
|  * |  * | ||||||
|  * FIXME: needs doc |  * 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; |     uint32_t offset = (uint32_t)addr; | ||||||
|     uint8_t *dest   = (uint8_t *)buf; |     uint8_t *dest   = (uint8_t *)buf; | ||||||
|     uint32_t end    = offset + len; |     uint32_t end    = offset + len; | ||||||
| @ -271,7 +271,7 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) { | |||||||
|  * |  * | ||||||
|  * FIXME: needs doc |  * 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; |     uint32_t       offset = (uint32_t)addr; | ||||||
|     const uint8_t *src    = (const uint8_t *)buf; |     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); |     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; |     const uint8_t *p    = (const uint8_t *)addr; | ||||||
|     uint8_t *      dest = (uint8_t *)buf; |     uint8_t *      dest = (uint8_t *)buf; | ||||||
|     while (len--) { |     while (len--) { | ||||||
| @ -506,7 +506,7 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) { | |||||||
|     eeprom_write_byte(p, value >> 24); |     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; |     uint8_t *      p   = (uint8_t *)addr; | ||||||
|     const uint8_t *src = (const uint8_t *)buf; |     const uint8_t *src = (const uint8_t *)buf; | ||||||
|     while (len--) { |     while (len--) { | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| 
 | 
 | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdbool.h> | #include <stdbool.h> | ||||||
|  | #include "eeprom.h" | ||||||
| 
 | 
 | ||||||
| #ifndef EECONFIG_MAGIC_NUMBER | #ifndef EECONFIG_MAGIC_NUMBER | ||||||
| #    define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE6 // When changing, decrement this value to avoid future re-init issues
 | #    define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE6 // When changing, decrement this value to avoid future re-init issues
 | ||||||
|  | |||||||
| @ -56,6 +56,8 @@ | |||||||
| #include "suspend.h" | #include "suspend.h" | ||||||
| #include <stddef.h> | #include <stddef.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
| 
 | 
 | ||||||
| #ifdef DEFERRED_EXEC_ENABLE | #ifdef DEFERRED_EXEC_ENABLE | ||||||
| #    include "deferred_exec.h" | #    include "deferred_exec.h" | ||||||
|  | |||||||
| @ -59,7 +59,7 @@ uint8_t get_first_key(report_keyboard_t* keyboard_report) { | |||||||
| #ifdef NKRO_ENABLE | #ifdef NKRO_ENABLE | ||||||
|     if (keyboard_protocol && keymap_config.nkro) { |     if (keyboard_protocol && keymap_config.nkro) { | ||||||
|         uint8_t i = 0; |         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]); |         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 | #ifdef NKRO_ENABLE | ||||||
|     if (keyboard_protocol && keymap_config.nkro) { |     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); |             return keyboard_report->nkro.bits[key >> 3] & 1 << (key & 7); | ||||||
|         } else { |         } else { | ||||||
|             return false; |             return false; | ||||||
| @ -216,7 +216,7 @@ void del_key_byte(report_keyboard_t* keyboard_report, uint8_t code) { | |||||||
|  * FIXME: Needs doc |  * FIXME: Needs doc | ||||||
|  */ |  */ | ||||||
| void add_key_bit(report_keyboard_t* keyboard_report, uint8_t code) { | 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); |         keyboard_report->nkro.bits[code >> 3] |= 1 << (code & 7); | ||||||
|     } else { |     } else { | ||||||
|         dprintf("add_key_bit: can't add: %02X\n", code); |         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 |  * FIXME: Needs doc | ||||||
|  */ |  */ | ||||||
| void del_key_bit(report_keyboard_t* keyboard_report, uint8_t code) { | 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)); |         keyboard_report->nkro.bits[code >> 3] &= ~(1 << (code & 7)); | ||||||
|     } else { |     } else { | ||||||
|         dprintf("del_key_bit: can't del: %02X\n", code); |         dprintf("del_key_bit: can't del: %02X\n", code); | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | |||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdbool.h> | #include <stdbool.h> | ||||||
| #include "keycode.h" | #include "keycode.h" | ||||||
|  | #include "util.h" | ||||||
| 
 | 
 | ||||||
| // clang-format off
 | // clang-format off
 | ||||||
| 
 | 
 | ||||||
| @ -129,10 +130,10 @@ enum desktop_usages { | |||||||
| #if defined(NKRO_ENABLE) | #if defined(NKRO_ENABLE) | ||||||
| #    if defined(PROTOCOL_LUFA) || defined(PROTOCOL_CHIBIOS) | #    if defined(PROTOCOL_LUFA) || defined(PROTOCOL_CHIBIOS) | ||||||
| #        include "protocol/usb_descriptor.h" | #        include "protocol/usb_descriptor.h" | ||||||
| #        define KEYBOARD_REPORT_BITS (SHARED_EPSIZE - 2) | #        define NKRO_REPORT_BITS (SHARED_EPSIZE - 2) | ||||||
| #    elif defined(PROTOCOL_ARM_ATSAM) | #    elif defined(PROTOCOL_ARM_ATSAM) | ||||||
| #        include "protocol/arm_atsam/usb/udi_device_epsize.h" | #        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 NKRO_SHARED_EP | ||||||
| #        undef MOUSE_SHARED_EP | #        undef MOUSE_SHARED_EP | ||||||
| #    else | #    else | ||||||
| @ -188,20 +189,20 @@ typedef union { | |||||||
|         uint8_t report_id; |         uint8_t report_id; | ||||||
| #    endif | #    endif | ||||||
|         uint8_t mods; |         uint8_t mods; | ||||||
|         uint8_t bits[KEYBOARD_REPORT_BITS]; |         uint8_t bits[NKRO_REPORT_BITS]; | ||||||
|     } nkro; |     } nkro; | ||||||
| #endif | #endif | ||||||
| } __attribute__((packed)) report_keyboard_t; | } PACKED report_keyboard_t; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     uint8_t  report_id; |     uint8_t  report_id; | ||||||
|     uint16_t usage; |     uint16_t usage; | ||||||
| } __attribute__((packed)) report_extra_t; | } PACKED report_extra_t; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     uint8_t  report_id; |     uint8_t  report_id; | ||||||
|     uint32_t usage; |     uint32_t usage; | ||||||
| } __attribute__((packed)) report_programmable_button_t; | } PACKED report_programmable_button_t; | ||||||
| 
 | 
 | ||||||
| #ifdef MOUSE_EXTENDED_REPORT | #ifdef MOUSE_EXTENDED_REPORT | ||||||
| typedef int16_t mouse_xy_report_t; | typedef int16_t mouse_xy_report_t; | ||||||
| @ -222,7 +223,7 @@ typedef struct { | |||||||
|     mouse_xy_report_t y; |     mouse_xy_report_t y; | ||||||
|     int8_t            v; |     int8_t            v; | ||||||
|     int8_t            h; |     int8_t            h; | ||||||
| } __attribute__((packed)) report_mouse_t; | } PACKED report_mouse_t; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| #ifdef DIGITIZER_SHARED_EP | #ifdef DIGITIZER_SHARED_EP | ||||||
| @ -234,7 +235,7 @@ typedef struct { | |||||||
|     uint8_t  reserved : 5; |     uint8_t  reserved : 5; | ||||||
|     uint16_t x; |     uint16_t x; | ||||||
|     uint16_t y; |     uint16_t y; | ||||||
| } __attribute__((packed)) report_digitizer_t; | } PACKED report_digitizer_t; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| #ifdef JOYSTICK_SHARED_EP | #ifdef JOYSTICK_SHARED_EP | ||||||
| @ -251,7 +252,7 @@ typedef struct { | |||||||
| #if JOYSTICK_BUTTON_COUNT > 0 | #if JOYSTICK_BUTTON_COUNT > 0 | ||||||
|     uint8_t buttons[(JOYSTICK_BUTTON_COUNT - 1) / 8 + 1]; |     uint8_t buttons[(JOYSTICK_BUTTON_COUNT - 1) / 8 + 1]; | ||||||
| #endif | #endif | ||||||
| } __attribute__((packed)) report_joystick_t; | } PACKED report_joystick_t; | ||||||
| 
 | 
 | ||||||
| /* keycode to system usage */ | /* keycode to system usage */ | ||||||
| static inline uint16_t KEYCODE2SYSTEM(uint8_t key) { | static inline uint16_t KEYCODE2SYSTEM(uint8_t key) { | ||||||
|  | |||||||
| @ -359,10 +359,10 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | |||||||
|         // Keycodes
 |         // Keycodes
 | ||||||
|         HID_RI_USAGE_PAGE(8, 0x07),    // Keyboard/Keypad
 |         HID_RI_USAGE_PAGE(8, 0x07),    // Keyboard/Keypad
 | ||||||
|         HID_RI_USAGE_MINIMUM(8, 0x00), |         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_MINIMUM(8, 0x00), | ||||||
|         HID_RI_LOGICAL_MAXIMUM(8, 0x01), |         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_REPORT_SIZE(8, 0x01), | ||||||
|         HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |         HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -88,9 +88,7 @@ void suspend_power_down_keymap(void) {} | |||||||
|  */ |  */ | ||||||
| void suspend_power_down_user(void) { | void suspend_power_down_user(void) { | ||||||
| #ifdef RGB_MATRIX_ENABLE | #ifdef RGB_MATRIX_ENABLE | ||||||
|     if (!g_suspend_state) { |     rgb_matrix_set_suspend_state(true); | ||||||
|         rgb_matrix_set_suspend_state(true); |  | ||||||
|     } |  | ||||||
| #endif //RGB_MATRIX_ENABLE
 | #endif //RGB_MATRIX_ENABLE
 | ||||||
|     suspend_power_down_keymap(); |     suspend_power_down_keymap(); | ||||||
| } | } | ||||||
| @ -103,9 +101,7 @@ void suspend_wakeup_init_keymap(void) {} | |||||||
|  */ |  */ | ||||||
| void suspend_wakeup_init_user(void) { | void suspend_wakeup_init_user(void) { | ||||||
| #ifdef RGB_MATRIX_ENABLE | #ifdef RGB_MATRIX_ENABLE | ||||||
|     if (g_suspend_state) { |     rgb_matrix_set_suspend_state(false); | ||||||
|         rgb_matrix_set_suspend_state(false); |  | ||||||
|     } |  | ||||||
| #endif //RGB_MATRIX_ENABLE
 | #endif //RGB_MATRIX_ENABLE
 | ||||||
|     suspend_wakeup_init_keymap(); |     suspend_wakeup_init_keymap(); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ryan
						Ryan