Add Support for USB programmable buttons (#12950)
This commit is contained in:
parent
1a68feb842
commit
83988597f4
22 changed files with 436 additions and 14 deletions
|
@ -7,6 +7,7 @@
|
|||
#include "action.h"
|
||||
#include "action_util.h"
|
||||
#include "mousekey.h"
|
||||
#include "programmable_button.h"
|
||||
#include "host.h"
|
||||
#include "suspend.h"
|
||||
#include "led.h"
|
||||
|
@ -79,6 +80,9 @@ void suspend_wakeup_init(void) {
|
|||
#ifdef MOUSEKEY_ENABLE
|
||||
mousekey_clear();
|
||||
#endif /* MOUSEKEY_ENABLE */
|
||||
#ifdef PROGRAMMABLE_BUTTON_ENABLE
|
||||
programmable_button_clear();
|
||||
#endif /* PROGRAMMABLE_BUTTON_ENABLE */
|
||||
#ifdef EXTRAKEY_ENABLE
|
||||
host_system_send(0);
|
||||
host_consumer_send(0);
|
||||
|
|
|
@ -30,8 +30,9 @@ extern keymap_config_t keymap_config;
|
|||
#endif
|
||||
|
||||
static host_driver_t *driver;
|
||||
static uint16_t last_system_report = 0;
|
||||
static uint16_t last_consumer_report = 0;
|
||||
static uint16_t last_system_report = 0;
|
||||
static uint16_t last_consumer_report = 0;
|
||||
static uint32_t last_programmable_button_report = 0;
|
||||
|
||||
void host_set_driver(host_driver_t *d) { driver = d; }
|
||||
|
||||
|
@ -122,6 +123,16 @@ void host_digitizer_send(digitizer_t *digitizer) {
|
|||
|
||||
__attribute__((weak)) void send_digitizer(report_digitizer_t *report) {}
|
||||
|
||||
void host_programmable_button_send(uint32_t report) {
|
||||
if (report == last_programmable_button_report) return;
|
||||
last_programmable_button_report = report;
|
||||
|
||||
if (!driver) return;
|
||||
(*driver->send_programmable_button)(report);
|
||||
}
|
||||
|
||||
uint16_t host_last_system_report(void) { return last_system_report; }
|
||||
|
||||
uint16_t host_last_consumer_report(void) { return last_consumer_report; }
|
||||
|
||||
uint32_t host_last_programmable_button_report(void) { return last_programmable_button_report; }
|
||||
|
|
|
@ -47,9 +47,11 @@ void host_keyboard_send(report_keyboard_t *report);
|
|||
void host_mouse_send(report_mouse_t *report);
|
||||
void host_system_send(uint16_t data);
|
||||
void host_consumer_send(uint16_t data);
|
||||
void host_programmable_button_send(uint32_t data);
|
||||
|
||||
uint16_t host_last_system_report(void);
|
||||
uint16_t host_last_consumer_report(void);
|
||||
uint32_t host_last_programmable_button_report(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ typedef struct {
|
|||
void (*send_mouse)(report_mouse_t *);
|
||||
void (*send_system)(uint16_t);
|
||||
void (*send_consumer)(uint16_t);
|
||||
void (*send_programmable_button)(uint32_t);
|
||||
} host_driver_t;
|
||||
|
||||
void send_digitizer(report_digitizer_t *report);
|
|
@ -29,6 +29,7 @@ enum hid_report_ids {
|
|||
REPORT_ID_MOUSE,
|
||||
REPORT_ID_SYSTEM,
|
||||
REPORT_ID_CONSUMER,
|
||||
REPORT_ID_PROGRAMMABLE_BUTTON,
|
||||
REPORT_ID_NKRO,
|
||||
REPORT_ID_JOYSTICK,
|
||||
REPORT_ID_DIGITIZER
|
||||
|
@ -195,6 +196,11 @@ typedef struct {
|
|||
uint16_t usage;
|
||||
} __attribute__((packed)) report_extra_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t report_id;
|
||||
uint32_t usage;
|
||||
} __attribute__((packed)) report_programmable_button_t;
|
||||
|
||||
typedef struct {
|
||||
#ifdef MOUSE_SHARED_EP
|
||||
uint8_t report_id;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue