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 drivermaster
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_bytes(report->raw[i]);
|
|
||||||
if (i < (KEYBOARD_EPSIZE - 1))
|
|
||||||
{
|
|
||||||
send_str(PSTR("-"));
|
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"));
|
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…
Reference in New Issue