~ruther/qmk_firmware

1bff37781bda1d0c285aa5aa7102d6941ad64e7d — Ryan 1 year, 6 months ago 1da7c8c
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
M keyboards/annepro2/annepro2_ble.c => keyboards/annepro2/annepro2_ble.c +1 -1
@@ 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);
}

M keyboards/bioi/bluetooth_custom.c => keyboards/bioi/bluetooth_custom.c +6 -7
@@ 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"));

M keyboards/sawnsprojects/okayu/stm32f072/config.h => keyboards/sawnsprojects/okayu/stm32f072/config.h +1 -1
@@ 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

M keyboards/sawnsprojects/okayu/stm32f103/config.h => keyboards/sawnsprojects/okayu/stm32f103/config.h +1 -1
@@ 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

M keyboards/sawnsprojects/okayu/stm32f303/config.h => keyboards/sawnsprojects/okayu/stm32f303/config.h +1 -1
@@ 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

M platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c => platforms/chibios/drivers/eeprom/eeprom_kinetis_flexram.c +4 -4
@@ 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--) {

M quantum/eeconfig.h => quantum/eeconfig.h +1 -0
@@ 19,6 19,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include <stdint.h>
#include <stdbool.h>
#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

M quantum/quantum.h => quantum/quantum.h +2 -0
@@ 56,6 56,8 @@
#include "suspend.h"
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifdef DEFERRED_EXEC_ENABLE
#    include "deferred_exec.h"

M tmk_core/protocol/report.c => tmk_core/protocol/report.c +4 -4
@@ 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);

M tmk_core/protocol/report.h => tmk_core/protocol/report.h +10 -9
@@ 20,6 20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
#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) {

M tmk_core/protocol/usb_descriptor.c => tmk_core/protocol/usb_descriptor.c +2 -2
@@ 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),


M users/brandonschlack/brandonschlack.c => users/brandonschlack/brandonschlack.c +2 -6
@@ 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();
}

Do not follow this link