]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
NKRO fixes.
authorflabbergast <s3+flabbergast@sdfeu.org>
Thu, 10 Sep 2015 11:48:44 +0000 (12:48 +0100)
committerflabbergast <s3+flabbergast@sdfeu.org>
Thu, 10 Sep 2015 11:48:44 +0000 (12:48 +0100)
tmk_core/common/report.h
tmk_core/protocol/chibios/main.c
tmk_core/protocol/chibios/usb_main.c
tmk_core/protocol/chibios/usb_main.h

index f6c0a315de9307de6c62ac6e2489e3ce2e62e750..0c799eca39af5581cb22912f24ea749524afc11a 100644 (file)
@@ -84,6 +84,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #   define KEYBOARD_REPORT_SIZE NKRO_EPSIZE
 #   define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2)
 #   define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1)
+#elif defined(PROTOCOL_CHIBIOS) && defined(NKRO_ENABLE)
+#   include "protocol/chibios/usb_main.h"
+#   define KEYBOARD_REPORT_SIZE NKRO_EPSIZE
+#   define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2)
+#   define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1)
 
 #else
 #   define KEYBOARD_REPORT_SIZE 8
index 7aec7e3e107f8ba1e82cf572ebd1557c10018c92..589675aa125e81568a338270beb247b97b79bf6c 100644 (file)
  * -------------------------
  */
 
+/* declarations */
+uint8_t keyboard_leds(void);
+void send_keyboard(report_keyboard_t *report);
+void send_mouse(report_mouse_t *report);
+void send_system(uint16_t data);
+void send_consumer(uint16_t data);
+
+/* host struct */
 host_driver_t chibios_driver = {
   keyboard_leds,
   send_keyboard,
@@ -52,14 +60,15 @@ host_driver_t chibios_driver = {
 /* TESTING
  * Amber LED blinker thread, times are in milliseconds.
  */
-// uint8_t blinkLedState = 0;
-// static THD_WORKING_AREA(waThread1, 128);
-// static THD_FUNCTION(Thread1, arg) {
+/* set this variable to non-zero anywhere to blink once */
+// uint8_t blinkLed = 0;
+// static THD_WORKING_AREA(waBlinkerThread, 128);
+// static THD_FUNCTION(blinkerThread, arg) {
 //   (void)arg;
-//   chRegSetThreadName("blinker1");
+//   chRegSetThreadName("blinkOrange");
 //   while(true) {
-//     if(blinkLedState) {
-//       blinkLedState = 0;
+//     if(blinkLed) {
+//       blinkLed = 0;
 //       palSetPad(GPIOC, GPIOC_LED_ORANGE);
 //       chThdSleepMilliseconds(100);
 //       palClearPad(GPIOC, GPIOC_LED_ORANGE);
@@ -82,7 +91,7 @@ int main(void) {
   palClearPad(GPIOC, GPIOC_LED_BLUE);
 
   // TESTING
-  // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
+  // chThdCreateStatic(waBlinkerThread, sizeof(waBlinkerThread), NORMALPRIO, blinkerThread, NULL);
 
   /* Init USB */
   init_usb_driver(&USB_DRIVER);
index daefc49036fc5ca1756985fba2f9fa77c52cf0f3..f5f2dad76f944fa62c57120d70a73c7f2d007c51 100644 (file)
 
 #include "usb_main.h"
 
+#include "host.h"
 #include "debug.h"
 #ifdef SLEEP_LED_ENABLE
 #include "sleep_led.h"
 #include "led.h"
-#include "host.h"
 #endif
 
 /* ---------------------------------------------------------
@@ -39,7 +39,7 @@ volatile uint16_t keyboard_idle_count = 0;
 static virtual_timer_t keyboard_idle_timer;
 static void keyboard_idle_timer_cb(void *arg);
 #ifdef NKRO_ENABLE
-bool keyboard_nkro = true;
+extern bool keyboard_nkro;
 #endif /* NKRO_ENABLE */
 
 report_keyboard_t keyboard_report_sent = {{0}};
@@ -250,7 +250,7 @@ static const uint8_t console_hid_report_desc_data[] = {
   0x75, 0x08,       // report size = 8 bits
   0x15, 0x00,       // logical minimum = 0
   0x26, 0xFF, 0x00, // logical maximum = 255
-  0x95, CONSOLE_SIZE, // report count
+  0x95, CONSOLE_EPSIZE, // report count
   0x09, 0x75,       // usage
   0x81, 0x02,       // Input (array)
   0xC0              // end collection
@@ -374,7 +374,7 @@ static const uint8_t hid_configuration_descriptor_data[] = {
   /* Endpoint Descriptor (7 bytes) USB spec 9.6.6, page 269-271, Table 9-13 */
   USB_DESC_ENDPOINT(KBD_ENDPOINT | 0x80,  // bEndpointAddress
                     0x03,      // bmAttributes (Interrupt)
-                    KBD_SIZE,  // wMaxPacketSize
+                    KBD_EPSIZE,// wMaxPacketSize
                     10),       // bInterval
 
   #ifdef MOUSE_ENABLE
@@ -404,7 +404,7 @@ static const uint8_t hid_configuration_descriptor_data[] = {
   /* Endpoint Descriptor (7 bytes) USB spec 9.6.6, page 269-271, Table 9-13 */
   USB_DESC_ENDPOINT(MOUSE_ENDPOINT | 0x80,  // bEndpointAddress
                     0x03,      // bmAttributes (Interrupt)
-                    MOUSE_SIZE,  // wMaxPacketSize
+                    MOUSE_EPSIZE,  // wMaxPacketSize
                     1),        // bInterval
   #endif /* MOUSE_ENABLE */
 
@@ -430,7 +430,7 @@ static const uint8_t hid_configuration_descriptor_data[] = {
   /* Endpoint Descriptor (7 bytes) USB spec 9.6.6, page 269-271, Table 9-13 */
   USB_DESC_ENDPOINT(CONSOLE_ENDPOINT | 0x80,  // bEndpointAddress
                     0x03,      // bmAttributes (Interrupt)
-                    CONSOLE_SIZE, // wMaxPacketSize
+                    CONSOLE_EPSIZE, // wMaxPacketSize
                     1),        // bInterval
   #endif /* CONSOLE_ENABLE */
 
@@ -456,7 +456,7 @@ static const uint8_t hid_configuration_descriptor_data[] = {
   /* Endpoint Descriptor (7 bytes) USB spec 9.6.6, page 269-271, Table 9-13 */
   USB_DESC_ENDPOINT(EXTRA_ENDPOINT | 0x80,  // bEndpointAddress
                     0x03,      // bmAttributes (Interrupt)
-                    EXTRA_SIZE, // wMaxPacketSize
+                    EXTRA_EPSIZE, // wMaxPacketSize
                     10),       // bInterval
   #endif /* EXTRAKEY_ENABLE */
 
@@ -482,7 +482,7 @@ static const uint8_t hid_configuration_descriptor_data[] = {
   /* Endpoint Descriptor (7 bytes) USB spec 9.6.6, page 269-271, Table 9-13 */
   USB_DESC_ENDPOINT(NKRO_ENDPOINT | 0x80,  // bEndpointAddress
                     0x03,      // bmAttributes (Interrupt)
-                    NKRO_SIZE, // wMaxPacketSize
+                    NKRO_EPSIZE, // wMaxPacketSize
                     1),       // bInterval
   #endif /* NKRO_ENABLE */
 };
@@ -665,7 +665,7 @@ static const USBEndpointConfig kbd_ep_config = {
   NULL,                         /* SETUP packet notification callback */
   kbd_in_cb,                    /* IN notification callback */
   NULL,                         /* OUT notification callback */
-  KBD_SIZE,                     /* IN maximum packet size */
+  KBD_EPSIZE,                   /* IN maximum packet size */
   0,                            /* OUT maximum packet size */
   &kbd_ep_state,                /* IN Endpoint state */
   NULL,                         /* OUT endpoint state */
@@ -683,7 +683,7 @@ static const USBEndpointConfig mouse_ep_config = {
   NULL,                         /* SETUP packet notification callback */
   mouse_in_cb,                  /* IN notification callback */
   NULL,                         /* OUT notification callback */
-  MOUSE_SIZE,                   /* IN maximum packet size */
+  MOUSE_EPSIZE,                 /* IN maximum packet size */
   0,                            /* OUT maximum packet size */
   &mouse_ep_state,              /* IN Endpoint state */
   NULL,                         /* OUT endpoint state */
@@ -702,7 +702,7 @@ static const USBEndpointConfig console_ep_config = {
   NULL,                         /* SETUP packet notification callback */
   console_in_cb,                /* IN notification callback */
   NULL,                         /* OUT notification callback */
-  CONSOLE_SIZE,                 /* IN maximum packet size */
+  CONSOLE_EPSIZE,               /* IN maximum packet size */
   0,                            /* OUT maximum packet size */
   &console_ep_state,            /* IN Endpoint state */
   NULL,                         /* OUT endpoint state */
@@ -721,7 +721,7 @@ static const USBEndpointConfig extra_ep_config = {
   NULL,                         /* SETUP packet notification callback */
   extra_in_cb,                  /* IN notification callback */
   NULL,                         /* OUT notification callback */
-  EXTRA_SIZE,                   /* IN maximum packet size */
+  EXTRA_EPSIZE,                 /* IN maximum packet size */
   0,                            /* OUT maximum packet size */
   &extra_ep_state,              /* IN Endpoint state */
   NULL,                         /* OUT endpoint state */
@@ -740,7 +740,7 @@ static const USBEndpointConfig nkro_ep_config = {
   NULL,                         /* SETUP packet notification callback */
   nkro_in_cb,                   /* IN notification callback */
   NULL,                         /* OUT notification callback */
-  NKRO_SIZE,                    /* IN maximum packet size */
+  NKRO_EPSIZE,                  /* IN maximum packet size */
   0,                            /* OUT maximum packet size */
   &nkro_ep_state,               /* IN Endpoint state */
   NULL,                         /* OUT endpoint state */
@@ -1178,9 +1178,9 @@ void console_in_cb(USBDriver *usbp, usbep_t ep) {
   chVTSetI(&console_flush_timer, MS2ST(CONSOLE_FLUSH_MS), console_flush_cb, (void *)usbp);
 
   /* Check if there is data to send left in the output queue */
-  if(chOQGetFullI(&console_queue) >= CONSOLE_SIZE) {
+  if(chOQGetFullI(&console_queue) >= CONSOLE_EPSIZE) {
     osalSysUnlockFromISR();
-    usbPrepareQueuedTransmit(usbp, CONSOLE_ENDPOINT, &console_queue, CONSOLE_SIZE);
+    usbPrepareQueuedTransmit(usbp, CONSOLE_ENDPOINT, &console_queue, CONSOLE_EPSIZE);
     osalSysLockFromISR();
     usbStartTransmitI(usbp, CONSOLE_ENDPOINT);
   }
@@ -1197,9 +1197,9 @@ void console_queue_onotify(io_queue_t *qp) {
     return;
 
   if(!usbGetTransmitStatusI(usbp, CONSOLE_ENDPOINT)
-     && (chOQGetFullI(&console_queue) >= CONSOLE_SIZE)) {
+     && (chOQGetFullI(&console_queue) >= CONSOLE_EPSIZE)) {
     osalSysUnlock();
-    usbPrepareQueuedTransmit(usbp, CONSOLE_ENDPOINT, &console_queue, CONSOLE_SIZE);
+    usbPrepareQueuedTransmit(usbp, CONSOLE_ENDPOINT, &console_queue, CONSOLE_EPSIZE);
     osalSysLock();
     usbStartTransmitI(usbp, CONSOLE_ENDPOINT);
   }
@@ -1210,7 +1210,7 @@ void console_queue_onotify(io_queue_t *qp) {
 static void console_flush_cb(void *arg) {
   USBDriver *usbp = (USBDriver *)arg;
   size_t i, n;
-  uint8_t buf[CONSOLE_SIZE]; /* TODO: a solution without extra buffer? */
+  uint8_t buf[CONSOLE_EPSIZE]; /* TODO: a solution without extra buffer? */
   osalSysLockFromISR();
 
   /* check that the states of things are as they're supposed to */
@@ -1222,7 +1222,7 @@ static void console_flush_cb(void *arg) {
   }
 
   /* don't do anything if the queue is empty or has enough stuff in it */
-  if(((n = oqGetFullI(&console_queue)) == 0) || (n >= CONSOLE_SIZE)) {
+  if(((n = oqGetFullI(&console_queue)) == 0) || (n >= CONSOLE_EPSIZE)) {
     /* rearm the timer */
     chVTSetI(&console_flush_timer, MS2ST(CONSOLE_FLUSH_MS), console_flush_cb, (void *)usbp);
     osalSysUnlockFromISR();
@@ -1232,10 +1232,10 @@ static void console_flush_cb(void *arg) {
   /* there's stuff hanging in the queue - so dequeue and send */
   for(i = 0; i < n; i++)
     buf[i] = (uint8_t)oqGetI(&console_queue);
-  for(i = n; i < CONSOLE_SIZE; i++)
+  for(i = n; i < CONSOLE_EPSIZE; i++)
     buf[i] = 0;
   osalSysUnlockFromISR();
-  usbPrepareTransmit(usbp, CONSOLE_ENDPOINT, buf, CONSOLE_SIZE);
+  usbPrepareTransmit(usbp, CONSOLE_ENDPOINT, buf, CONSOLE_EPSIZE);
   osalSysLockFromISR();
   (void)usbStartTransmitI(usbp, CONSOLE_ENDPOINT);
 
index 5897375b55ece3f032ad1ae27bc33072e378820a..3a7e76fc1da6dd0bac4618d2d2d88faf2ad00099 100644 (file)
@@ -20,7 +20,7 @@
 #define _USB_MAIN_H_
 
 // TESTING
-// extern uint8_t blinkLedState;
+// extern uint8_t blinkLed;
 
 #include "ch.h"
 #include "hal.h"
@@ -44,19 +44,19 @@ void init_usb_driver(USBDriver *usbp);
 /* main keyboard (6kro) */
 #define KBD_INTERFACE   0
 #define KBD_ENDPOINT    1
-#define KBD_SIZE        8
-#define KBD_REPORT_KEYS   (KBD_SIZE - 2)
+#define KBD_EPSIZE      8
+#define KBD_REPORT_KEYS (KBD_EPSIZE - 2)
 
 /* secondary keyboard */
 #ifdef NKRO_ENABLE
 #define NKRO_INTERFACE    4
 #define NKRO_ENDPOINT     5
-#define NKRO_SIZE         16
-#define NKRO_REPORT_KEYS  (NKRO_SIZE - 1)
+#define NKRO_EPSIZE       16
+#define NKRO_REPORT_KEYS  (NKRO_EPSIZE - 1)
 #endif
 
 /* this defines report_keyboard_t and computes REPORT_SIZE defines */
-#include "report.h"
+// #include "report.h"
 
 /* extern report_keyboard_t keyboard_report_sent; */
 
@@ -80,7 +80,7 @@ void nkro_in_cb(USBDriver *usbp, usbep_t ep);
 
 #define MOUSE_INTERFACE         1
 #define MOUSE_ENDPOINT          2
-#define MOUSE_SIZE              8
+#define MOUSE_EPSIZE            8
 
 /* mouse IN request callback handler */
 void mouse_in_cb(USBDriver *usbp, usbep_t ep);
@@ -95,7 +95,7 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep);
 
 #define EXTRA_INTERFACE         3
 #define EXTRA_ENDPOINT          4
-#define EXTRA_SIZE              8
+#define EXTRA_EPSIZE            8
 
 /* extrakey IN request callback handler */
 void extra_in_cb(USBDriver *usbp, usbep_t ep);
@@ -116,11 +116,11 @@ typedef struct {
 
 #define CONSOLE_INTERFACE      2
 #define CONSOLE_ENDPOINT       3
-#define CONSOLE_SIZE           16
+#define CONSOLE_EPSIZE         16
 
 /* Number of IN reports that can be stored inside the output queue */
 #define CONSOLE_QUEUE_CAPACITY 2
-#define CONSOLE_QUEUE_BUFFER_SIZE (CONSOLE_QUEUE_CAPACITY * CONSOLE_SIZE)
+#define CONSOLE_QUEUE_BUFFER_SIZE (CONSOLE_QUEUE_CAPACITY * CONSOLE_EPSIZE)
 
 /* Console flush time */
 #define CONSOLE_FLUSH_MS 50
@@ -138,15 +138,4 @@ void console_in_cb(USBDriver *usbp, usbep_t ep);
 
 void sendchar_pf(void *p, char c);
 
-/* ---------------------------
- * Host driver functions (TMK)
- * ---------------------------
- */
-
-uint8_t keyboard_leds(void);
-void send_keyboard(report_keyboard_t *report);
-void send_mouse(report_mouse_t *report);
-void send_system(uint16_t data);
-void send_consumer(uint16_t data);
-
 #endif /* _USB_MAIN_H_ */