aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/common
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/common')
-rw-r--r--tmk_core/common/chibios/suspend.c4
-rw-r--r--tmk_core/common/host.c15
-rw-r--r--tmk_core/common/host.h2
-rw-r--r--tmk_core/common/host_driver.h1
-rw-r--r--tmk_core/common/report.h6
5 files changed, 26 insertions, 2 deletions
diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c
index 991fe6e08..9310a9992 100644
--- a/tmk_core/common/chibios/suspend.c
+++ b/tmk_core/common/chibios/suspend.c
@@ -7,6 +7,7 @@
7#include "action.h" 7#include "action.h"
8#include "action_util.h" 8#include "action_util.h"
9#include "mousekey.h" 9#include "mousekey.h"
10#include "programmable_button.h"
10#include "host.h" 11#include "host.h"
11#include "suspend.h" 12#include "suspend.h"
12#include "led.h" 13#include "led.h"
@@ -79,6 +80,9 @@ void suspend_wakeup_init(void) {
79#ifdef MOUSEKEY_ENABLE 80#ifdef MOUSEKEY_ENABLE
80 mousekey_clear(); 81 mousekey_clear();
81#endif /* MOUSEKEY_ENABLE */ 82#endif /* MOUSEKEY_ENABLE */
83#ifdef PROGRAMMABLE_BUTTON_ENABLE
84 programmable_button_clear();
85#endif /* PROGRAMMABLE_BUTTON_ENABLE */
82#ifdef EXTRAKEY_ENABLE 86#ifdef EXTRAKEY_ENABLE
83 host_system_send(0); 87 host_system_send(0);
84 host_consumer_send(0); 88 host_consumer_send(0);
diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c
index f0c396b18..56d4bb084 100644
--- a/tmk_core/common/host.c
+++ b/tmk_core/common/host.c
@@ -30,8 +30,9 @@ extern keymap_config_t keymap_config;
30#endif 30#endif
31 31
32static host_driver_t *driver; 32static host_driver_t *driver;
33static uint16_t last_system_report = 0; 33static uint16_t last_system_report = 0;
34static uint16_t last_consumer_report = 0; 34static uint16_t last_consumer_report = 0;
35static uint32_t last_programmable_button_report = 0;
35 36
36void host_set_driver(host_driver_t *d) { driver = d; } 37void host_set_driver(host_driver_t *d) { driver = d; }
37 38
@@ -122,6 +123,16 @@ void host_digitizer_send(digitizer_t *digitizer) {
122 123
123__attribute__((weak)) void send_digitizer(report_digitizer_t *report) {} 124__attribute__((weak)) void send_digitizer(report_digitizer_t *report) {}
124 125
126void host_programmable_button_send(uint32_t report) {
127 if (report == last_programmable_button_report) return;
128 last_programmable_button_report = report;
129
130 if (!driver) return;
131 (*driver->send_programmable_button)(report);
132}
133
125uint16_t host_last_system_report(void) { return last_system_report; } 134uint16_t host_last_system_report(void) { return last_system_report; }
126 135
127uint16_t host_last_consumer_report(void) { return last_consumer_report; } 136uint16_t host_last_consumer_report(void) { return last_consumer_report; }
137
138uint32_t host_last_programmable_button_report(void) { return last_programmable_button_report; }
diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h
index 2cffef6e1..6b15f0d0c 100644
--- a/tmk_core/common/host.h
+++ b/tmk_core/common/host.h
@@ -47,9 +47,11 @@ void host_keyboard_send(report_keyboard_t *report);
47void host_mouse_send(report_mouse_t *report); 47void host_mouse_send(report_mouse_t *report);
48void host_system_send(uint16_t data); 48void host_system_send(uint16_t data);
49void host_consumer_send(uint16_t data); 49void host_consumer_send(uint16_t data);
50void host_programmable_button_send(uint32_t data);
50 51
51uint16_t host_last_system_report(void); 52uint16_t host_last_system_report(void);
52uint16_t host_last_consumer_report(void); 53uint16_t host_last_consumer_report(void);
54uint32_t host_last_programmable_button_report(void);
53 55
54#ifdef __cplusplus 56#ifdef __cplusplus
55} 57}
diff --git a/tmk_core/common/host_driver.h b/tmk_core/common/host_driver.h
index 2aebca043..affd0dcb3 100644
--- a/tmk_core/common/host_driver.h
+++ b/tmk_core/common/host_driver.h
@@ -29,6 +29,7 @@ typedef struct {
29 void (*send_mouse)(report_mouse_t *); 29 void (*send_mouse)(report_mouse_t *);
30 void (*send_system)(uint16_t); 30 void (*send_system)(uint16_t);
31 void (*send_consumer)(uint16_t); 31 void (*send_consumer)(uint16_t);
32 void (*send_programmable_button)(uint32_t);
32} host_driver_t; 33} host_driver_t;
33 34
34void send_digitizer(report_digitizer_t *report); \ No newline at end of file 35void send_digitizer(report_digitizer_t *report); \ No newline at end of file
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h
index f2223e806..1adc892f3 100644
--- a/tmk_core/common/report.h
+++ b/tmk_core/common/report.h
@@ -29,6 +29,7 @@ enum hid_report_ids {
29 REPORT_ID_MOUSE, 29 REPORT_ID_MOUSE,
30 REPORT_ID_SYSTEM, 30 REPORT_ID_SYSTEM,
31 REPORT_ID_CONSUMER, 31 REPORT_ID_CONSUMER,
32 REPORT_ID_PROGRAMMABLE_BUTTON,
32 REPORT_ID_NKRO, 33 REPORT_ID_NKRO,
33 REPORT_ID_JOYSTICK, 34 REPORT_ID_JOYSTICK,
34 REPORT_ID_DIGITIZER 35 REPORT_ID_DIGITIZER
@@ -196,6 +197,11 @@ typedef struct {
196} __attribute__((packed)) report_extra_t; 197} __attribute__((packed)) report_extra_t;
197 198
198typedef struct { 199typedef struct {
200 uint8_t report_id;
201 uint32_t usage;
202} __attribute__((packed)) report_programmable_button_t;
203
204typedef struct {
199#ifdef MOUSE_SHARED_EP 205#ifdef MOUSE_SHARED_EP
200 uint8_t report_id; 206 uint8_t report_id;
201#endif 207#endif