diff options
| author | fauxpark <fauxpark@gmail.com> | 2020-02-03 07:17:05 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-02 12:17:05 -0800 |
| commit | b2ce2f8a34fba72e4b4ac2fba0ec11431b0acb0c (patch) | |
| tree | 58494d6dd519ac3b87b431188bd9b0e1b14befae | |
| parent | 5b91c3e0a0dc8152f69130cf047f3df0d0f94421 (diff) | |
| download | qmk_firmware-b2ce2f8a34fba72e4b4ac2fba0ec11431b0acb0c.tar.gz qmk_firmware-b2ce2f8a34fba72e4b4ac2fba0ec11431b0acb0c.zip | |
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
| -rw-r--r-- | tmk_core/common/report.h | 5 | ||||
| -rw-r--r-- | tmk_core/protocol/arm_atsam/main_arm_atsam.c | 26 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/usb_main.h | 14 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 27 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.h | 6 | ||||
| -rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 26 |
6 files changed, 39 insertions, 65 deletions
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index ccc6d599b..2a9dad881 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h | |||
| @@ -151,6 +151,11 @@ typedef union { | |||
| 151 | } __attribute__((packed)) report_keyboard_t; | 151 | } __attribute__((packed)) report_keyboard_t; |
| 152 | 152 | ||
| 153 | typedef struct { | 153 | typedef struct { |
| 154 | uint8_t report_id; | ||
| 155 | uint16_t usage; | ||
| 156 | } __attribute__((packed)) report_extra_t; | ||
| 157 | |||
| 158 | typedef struct { | ||
| 154 | #ifdef MOUSE_SHARED_EP | 159 | #ifdef MOUSE_SHARED_EP |
| 155 | uint8_t report_id; | 160 | uint8_t report_id; |
| 156 | #endif | 161 | #endif |
diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index a42d9daf3..e15d51a26 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c | |||
| @@ -110,40 +110,34 @@ void send_mouse(report_mouse_t *report) { | |||
| 110 | #endif // MOUSEKEY_ENABLE | 110 | #endif // MOUSEKEY_ENABLE |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | void send_system(uint16_t data) { | ||
| 114 | #ifdef EXTRAKEY_ENABLE | 113 | #ifdef EXTRAKEY_ENABLE |
| 114 | void send_extra(uint8_t report_id, uint16_t data) { | ||
| 115 | uint32_t irqflags; | 115 | uint32_t irqflags; |
| 116 | 116 | ||
| 117 | irqflags = __get_PRIMASK(); | 117 | irqflags = __get_PRIMASK(); |
| 118 | __disable_irq(); | 118 | __disable_irq(); |
| 119 | __DMB(); | 119 | __DMB(); |
| 120 | 120 | ||
| 121 | udi_hid_exk_report.desc.report_id = REPORT_ID_SYSTEM; | 121 | udi_hid_exk_report.desc.report_id = report_id; |
| 122 | if (data != 0) data = data - SYSTEM_POWER_DOWN + 1; | ||
| 123 | udi_hid_exk_report.desc.report_data = data; | 122 | udi_hid_exk_report.desc.report_data = data; |
| 124 | udi_hid_exk_b_report_valid = 1; | 123 | udi_hid_exk_b_report_valid = 1; |
| 125 | udi_hid_exk_send_report(); | 124 | udi_hid_exk_send_report(); |
| 126 | 125 | ||
| 127 | __DMB(); | 126 | __DMB(); |
| 128 | __set_PRIMASK(irqflags); | 127 | __set_PRIMASK(irqflags); |
| 128 | } | ||
| 129 | #endif // EXTRAKEY_ENABLE | ||
| 130 | |||
| 131 | void send_system(uint16_t data) { | ||
| 132 | #ifdef EXTRAKEY_ENABLE | ||
| 133 | if (data != 0) data = data - SYSTEM_POWER_DOWN + 1; | ||
| 134 | send_extra(REPORT_ID_SYSTEM, data); | ||
| 129 | #endif // EXTRAKEY_ENABLE | 135 | #endif // EXTRAKEY_ENABLE |
| 130 | } | 136 | } |
| 131 | 137 | ||
| 132 | void send_consumer(uint16_t data) { | 138 | void send_consumer(uint16_t data) { |
| 133 | #ifdef EXTRAKEY_ENABLE | 139 | #ifdef EXTRAKEY_ENABLE |
| 134 | uint32_t irqflags; | 140 | send_extra(REPORT_ID_CONSUMER, data); |
| 135 | |||
| 136 | irqflags = __get_PRIMASK(); | ||
| 137 | __disable_irq(); | ||
| 138 | __DMB(); | ||
| 139 | |||
| 140 | udi_hid_exk_report.desc.report_id = REPORT_ID_CONSUMER; | ||
| 141 | udi_hid_exk_report.desc.report_data = data; | ||
| 142 | udi_hid_exk_b_report_valid = 1; | ||
| 143 | udi_hid_exk_send_report(); | ||
| 144 | |||
| 145 | __DMB(); | ||
| 146 | __set_PRIMASK(irqflags); | ||
| 147 | #endif // EXTRAKEY_ENABLE | 141 | #endif // EXTRAKEY_ENABLE |
| 148 | } | 142 | } |
| 149 | 143 | ||
diff --git a/tmk_core/protocol/chibios/usb_main.h b/tmk_core/protocol/chibios/usb_main.h index cd2bb695b..17041b4f2 100644 --- a/tmk_core/protocol/chibios/usb_main.h +++ b/tmk_core/protocol/chibios/usb_main.h | |||
| @@ -72,20 +72,6 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep); | |||
| 72 | /* shared IN request callback handler */ | 72 | /* shared IN request callback handler */ |
| 73 | void shared_in_cb(USBDriver *usbp, usbep_t ep); | 73 | void shared_in_cb(USBDriver *usbp, usbep_t ep); |
| 74 | 74 | ||
| 75 | /* --------------- | ||
| 76 | * Extrakey header | ||
| 77 | * --------------- | ||
| 78 | */ | ||
| 79 | |||
| 80 | #ifdef EXTRAKEY_ENABLE | ||
| 81 | |||
| 82 | /* extra report structure */ | ||
| 83 | typedef struct { | ||
| 84 | uint8_t report_id; | ||
| 85 | uint16_t usage; | ||
| 86 | } __attribute__((packed)) report_extra_t; | ||
| 87 | #endif /* EXTRAKEY_ENABLE */ | ||
| 88 | |||
| 89 | /* -------------- | 75 | /* -------------- |
| 90 | * Console header | 76 | * Console header |
| 91 | * -------------- | 77 | * -------------- |
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index db66a0722..792db4340 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c | |||
| @@ -662,17 +662,17 @@ static void send_mouse(report_mouse_t *report) { | |||
| 662 | #endif | 662 | #endif |
| 663 | } | 663 | } |
| 664 | 664 | ||
| 665 | /** \brief Send System | 665 | /** \brief Send Extra |
| 666 | * | 666 | * |
| 667 | * FIXME: Needs doc | 667 | * FIXME: Needs doc |
| 668 | */ | 668 | */ |
| 669 | static void send_system(uint16_t data) { | ||
| 670 | #ifdef EXTRAKEY_ENABLE | 669 | #ifdef EXTRAKEY_ENABLE |
| 670 | static void send_extra(uint8_t report_id, uint16_t data) { | ||
| 671 | uint8_t timeout = 255; | 671 | uint8_t timeout = 255; |
| 672 | 672 | ||
| 673 | if (USB_DeviceState != DEVICE_STATE_Configured) return; | 673 | if (USB_DeviceState != DEVICE_STATE_Configured) return; |
| 674 | 674 | ||
| 675 | report_extra_t r = {.report_id = REPORT_ID_SYSTEM, .usage = data - SYSTEM_POWER_DOWN + 1}; | 675 | report_extra_t r = {.report_id = report_id, .usage = data}; |
| 676 | Endpoint_SelectEndpoint(SHARED_IN_EPNUM); | 676 | Endpoint_SelectEndpoint(SHARED_IN_EPNUM); |
| 677 | 677 | ||
| 678 | /* Check if write ready for a polling interval around 10ms */ | 678 | /* Check if write ready for a polling interval around 10ms */ |
| @@ -681,6 +681,16 @@ static void send_system(uint16_t data) { | |||
| 681 | 681 | ||
| 682 | Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL); | 682 | Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL); |
| 683 | Endpoint_ClearIN(); | 683 | Endpoint_ClearIN(); |
| 684 | } | ||
| 685 | #endif | ||
| 686 | |||
| 687 | /** \brief Send System | ||
| 688 | * | ||
| 689 | * FIXME: Needs doc | ||
| 690 | */ | ||
| 691 | static void send_system(uint16_t data) { | ||
| 692 | #ifdef EXTRAKEY_ENABLE | ||
| 693 | send_extra(REPORT_ID_SYSTEM, data - SYSTEM_POWER_DOWN + 1); | ||
| 684 | #endif | 694 | #endif |
| 685 | } | 695 | } |
| 686 | 696 | ||
| @@ -690,7 +700,6 @@ static void send_system(uint16_t data) { | |||
| 690 | */ | 700 | */ |
| 691 | static void send_consumer(uint16_t data) { | 701 | static void send_consumer(uint16_t data) { |
| 692 | #ifdef EXTRAKEY_ENABLE | 702 | #ifdef EXTRAKEY_ENABLE |
| 693 | uint8_t timeout = 255; | ||
| 694 | uint8_t where = where_to_send(); | 703 | uint8_t where = where_to_send(); |
| 695 | 704 | ||
| 696 | # ifdef BLUETOOTH_ENABLE | 705 | # ifdef BLUETOOTH_ENABLE |
| @@ -729,15 +738,7 @@ static void send_consumer(uint16_t data) { | |||
| 729 | return; | 738 | return; |
| 730 | } | 739 | } |
| 731 | 740 | ||
| 732 | report_extra_t r = {.report_id = REPORT_ID_CONSUMER, .usage = data}; | 741 | send_extra(REPORT_ID_CONSUMER, data); |
| 733 | Endpoint_SelectEndpoint(SHARED_IN_EPNUM); | ||
| 734 | |||
| 735 | /* Check if write ready for a polling interval around 10ms */ | ||
| 736 | while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); | ||
| 737 | if (!Endpoint_IsReadWriteAllowed()) return; | ||
| 738 | |||
| 739 | Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL); | ||
| 740 | Endpoint_ClearIN(); | ||
| 741 | #endif | 742 | #endif |
| 742 | } | 743 | } |
| 743 | 744 | ||
diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h index 652e4e79b..1b88060f1 100644 --- a/tmk_core/protocol/lufa/lufa.h +++ b/tmk_core/protocol/lufa/lufa.h | |||
| @@ -58,12 +58,6 @@ extern host_driver_t lufa_driver; | |||
| 58 | } | 58 | } |
| 59 | #endif | 59 | #endif |
| 60 | 60 | ||
| 61 | /* extra report structure */ | ||
| 62 | typedef struct { | ||
| 63 | uint8_t report_id; | ||
| 64 | uint16_t usage; | ||
| 65 | } __attribute__((packed)) report_extra_t; | ||
| 66 | |||
| 67 | #ifdef API_ENABLE | 61 | #ifdef API_ENABLE |
| 68 | # include "api.h" | 62 | # include "api.h" |
| 69 | #endif | 63 | #endif |
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index e66938445..71263344f 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c | |||
| @@ -112,31 +112,25 @@ static void send_mouse(report_mouse_t *report) { | |||
| 112 | } | 112 | } |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | typedef struct { | 115 | static void send_extra(uint8_t report_id, uint16_t data) { |
| 116 | uint8_t report_id; | 116 | static uint8_t last_id = 0; |
| 117 | uint16_t usage; | ||
| 118 | } __attribute__((packed)) report_extra_t; | ||
| 119 | |||
| 120 | static void send_system(uint16_t data) { | ||
| 121 | static uint16_t last_data = 0; | 117 | static uint16_t last_data = 0; |
| 122 | if (data == last_data) return; | 118 | if ((report_id == last_id) && (data == last_data)) return; |
| 119 | last_id = report_id; | ||
| 123 | last_data = data; | 120 | last_data = data; |
| 124 | 121 | ||
| 125 | report_extra_t report = {.report_id = REPORT_ID_SYSTEM, .usage = data}; | 122 | report_extra_t report = {.report_id = report_id, .usage = data}; |
| 126 | if (usbInterruptIsReady3()) { | 123 | if (usbInterruptIsReady3()) { |
| 127 | usbSetInterrupt3((void *)&report, sizeof(report)); | 124 | usbSetInterrupt3((void *)&report, sizeof(report)); |
| 128 | } | 125 | } |
| 129 | } | 126 | } |
| 130 | 127 | ||
| 131 | static void send_consumer(uint16_t data) { | 128 | static void send_system(uint16_t data) { |
| 132 | static uint16_t last_data = 0; | 129 | send_extra(REPORT_ID_SYSTEM, data); |
| 133 | if (data == last_data) return; | 130 | } |
| 134 | last_data = data; | ||
| 135 | 131 | ||
| 136 | report_extra_t report = {.report_id = REPORT_ID_CONSUMER, .usage = data}; | 132 | static void send_consumer(uint16_t data) { |
| 137 | if (usbInterruptIsReady3()) { | 133 | send_extra(REPORT_ID_CONSUMER, data); |
| 138 | usbSetInterrupt3((void *)&report, sizeof(report)); | ||
| 139 | } | ||
| 140 | } | 134 | } |
| 141 | 135 | ||
| 142 | /*------------------------------------------------------------------* | 136 | /*------------------------------------------------------------------* |
