~ruther/qmk_firmware

b2ce2f8a34fba72e4b4ac2fba0ec11431b0acb0c — fauxpark 5 years ago 5b91c3e
Dedupe extrakey report struct, and send functions in V-USB & LUFA (#7993)

* Dedupe extrakey report struct, and send functions in V-USB & LUFA

* Doc comment for consistency

* Wrap it in ifdef to prevent unused function error

* Do the same for ATSAM
M tmk_core/common/report.h => tmk_core/common/report.h +5 -0
@@ 151,6 151,11 @@ typedef union {
} __attribute__((packed)) report_keyboard_t;

typedef struct {
    uint8_t  report_id;
    uint16_t usage;
} __attribute__((packed)) report_extra_t;

typedef struct {
#ifdef MOUSE_SHARED_EP
    uint8_t report_id;
#endif

M tmk_core/protocol/arm_atsam/main_arm_atsam.c => tmk_core/protocol/arm_atsam/main_arm_atsam.c +10 -16
@@ 110,40 110,34 @@ void send_mouse(report_mouse_t *report) {
#endif  // MOUSEKEY_ENABLE
}

void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
void send_extra(uint8_t report_id, uint16_t data) {
    uint32_t irqflags;

    irqflags = __get_PRIMASK();
    __disable_irq();
    __DMB();

    udi_hid_exk_report.desc.report_id = REPORT_ID_SYSTEM;
    if (data != 0) data = data - SYSTEM_POWER_DOWN + 1;
    udi_hid_exk_report.desc.report_id   = report_id;
    udi_hid_exk_report.desc.report_data = data;
    udi_hid_exk_b_report_valid          = 1;
    udi_hid_exk_send_report();

    __DMB();
    __set_PRIMASK(irqflags);
}
#endif  // EXTRAKEY_ENABLE

void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
    if (data != 0) data = data - SYSTEM_POWER_DOWN + 1;
    send_extra(REPORT_ID_SYSTEM,  data);
#endif  // EXTRAKEY_ENABLE
}

void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
    uint32_t irqflags;

    irqflags = __get_PRIMASK();
    __disable_irq();
    __DMB();

    udi_hid_exk_report.desc.report_id   = REPORT_ID_CONSUMER;
    udi_hid_exk_report.desc.report_data = data;
    udi_hid_exk_b_report_valid          = 1;
    udi_hid_exk_send_report();

    __DMB();
    __set_PRIMASK(irqflags);
    send_extra(REPORT_ID_CONSUMER, data);
#endif  // EXTRAKEY_ENABLE
}


M tmk_core/protocol/chibios/usb_main.h => tmk_core/protocol/chibios/usb_main.h +0 -14
@@ 72,20 72,6 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep);
/* shared IN request callback handler */
void shared_in_cb(USBDriver *usbp, usbep_t ep);

/* ---------------
 * Extrakey header
 * ---------------
 */

#ifdef EXTRAKEY_ENABLE

/* extra report structure */
typedef struct {
    uint8_t  report_id;
    uint16_t usage;
} __attribute__((packed)) report_extra_t;
#endif /* EXTRAKEY_ENABLE */

/* --------------
 * Console header
 * --------------

M tmk_core/protocol/lufa/lufa.c => tmk_core/protocol/lufa/lufa.c +14 -13
@@ 662,17 662,17 @@ static void send_mouse(report_mouse_t *report) {
#endif
}

/** \brief Send System
/** \brief Send Extra
 *
 * FIXME: Needs doc
 */
static void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
static void send_extra(uint8_t report_id, uint16_t data) {
    uint8_t timeout = 255;

    if (USB_DeviceState != DEVICE_STATE_Configured) return;

    report_extra_t r = {.report_id = REPORT_ID_SYSTEM, .usage = data - SYSTEM_POWER_DOWN + 1};
    report_extra_t r = {.report_id = report_id, .usage = data};
    Endpoint_SelectEndpoint(SHARED_IN_EPNUM);

    /* Check if write ready for a polling interval around 10ms */


@@ 681,6 681,16 @@ static void send_system(uint16_t data) {

    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
    Endpoint_ClearIN();
}
#endif

/** \brief Send System
 *
 * FIXME: Needs doc
 */
static void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
    send_extra(REPORT_ID_SYSTEM, data - SYSTEM_POWER_DOWN + 1);
#endif
}



@@ 690,7 700,6 @@ static void send_system(uint16_t data) {
 */
static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
    uint8_t timeout = 255;
    uint8_t where   = where_to_send();

#    ifdef BLUETOOTH_ENABLE


@@ 729,15 738,7 @@ static void send_consumer(uint16_t data) {
        return;
    }

    report_extra_t r = {.report_id = REPORT_ID_CONSUMER, .usage = data};
    Endpoint_SelectEndpoint(SHARED_IN_EPNUM);

    /* Check if write ready for a polling interval around 10ms */
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
    if (!Endpoint_IsReadWriteAllowed()) return;

    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
    Endpoint_ClearIN();
    send_extra(REPORT_ID_CONSUMER, data);
#endif
}


M tmk_core/protocol/lufa/lufa.h => tmk_core/protocol/lufa/lufa.h +0 -6
@@ 58,12 58,6 @@ extern host_driver_t lufa_driver;
}
#endif

/* extra report structure */
typedef struct {
    uint8_t  report_id;
    uint16_t usage;
} __attribute__((packed)) report_extra_t;

#ifdef API_ENABLE
#    include "api.h"
#endif

M tmk_core/protocol/vusb/vusb.c => tmk_core/protocol/vusb/vusb.c +10 -16
@@ 112,31 112,25 @@ static void send_mouse(report_mouse_t *report) {
    }
}

typedef struct {
    uint8_t  report_id;
    uint16_t usage;
} __attribute__((packed)) report_extra_t;

static void send_system(uint16_t data) {
static void send_extra(uint8_t report_id, uint16_t data) {
    static uint8_t last_id    = 0;
    static uint16_t last_data = 0;
    if (data == last_data) return;
    if ((report_id == last_id) && (data == last_data)) return;
    last_id = report_id;
    last_data = data;

    report_extra_t report = {.report_id = REPORT_ID_SYSTEM, .usage = data};
    report_extra_t report = {.report_id = report_id, .usage = data};
    if (usbInterruptIsReady3()) {
        usbSetInterrupt3((void *)&report, sizeof(report));
    }
}

static void send_consumer(uint16_t data) {
    static uint16_t last_data = 0;
    if (data == last_data) return;
    last_data = data;
static void send_system(uint16_t data) {
    send_extra(REPORT_ID_SYSTEM, data);
}

    report_extra_t report = {.report_id = REPORT_ID_CONSUMER, .usage = data};
    if (usbInterruptIsReady3()) {
        usbSetInterrupt3((void *)&report, sizeof(report));
    }
static void send_consumer(uint16_t data) {
    send_extra(REPORT_ID_CONSUMER, data);
}

/*------------------------------------------------------------------*