]> git.donarmstrong.com Git - kiibohd-controller.git/blobdiff - Output/pjrcUSB/arm/usb_keyboard.c
FIxing Media Keys and general USB compatibilty
[kiibohd-controller.git] / Output / pjrcUSB / arm / usb_keyboard.c
index d3c9632c749dc139c20f4d5fe18b105f135e8c05..d362bb34ed66ed897e8e993e1a6b6e6e17a9dcd7 100644 (file)
 // When the PC isn't listening, how long do we wait before discarding data?
 #define TX_TIMEOUT_MSEC 50
 
-#if F_CPU == 96000000
+#if F_CPU == 168000000
+       #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 1100)
+#elif F_CPU == 144000000
+       #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 932)
+#elif F_CPU == 120000000
+       #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 764)
+#elif F_CPU == 96000000
        #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 596)
 #elif F_CPU == 72000000
-       #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 512) // XXX Correct?
+       #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 512)
 #elif F_CPU == 48000000
        #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 428)
 #elif F_CPU == 24000000
@@ -89,7 +95,7 @@ void usb_keyboard_send()
 
                if ( USBKeys_Protocol == 0 ) // Boot Mode
                {
-                       if ( usb_tx_packet_count( NKRO_KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT )
+                       if ( usb_tx_packet_count( KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT )
                        {
                                tx_packet = usb_malloc();
                                if ( tx_packet )
@@ -98,7 +104,18 @@ void usb_keyboard_send()
                }
                else if ( USBKeys_Protocol == 1 ) // NKRO Mode
                {
-                       if ( usb_tx_packet_count( KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT )
+                       if ( usb_tx_packet_count( NKRO_KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT )
+                       {
+                               tx_packet = usb_malloc();
+                               if ( tx_packet )
+                                       break;
+                       }
+               }
+               else if ( USBKeys_Changed &
+                       ( USBKeyChangeState_System | USBKeyChangeState_Consumer )
+               )
+               {
+                       if ( usb_tx_packet_count( SYS_CTRL_ENDPOINT ) < TX_PACKET_LIMIT )
                        {
                                tx_packet = usb_malloc();
                                if ( tx_packet )
@@ -118,6 +135,47 @@ void usb_keyboard_send()
        // Pointer to USB tx packet buffer
        uint8_t *tx_buf = tx_packet->buf;
 
+       // Check system control keys
+       if ( USBKeys_Changed & USBKeyChangeState_System )
+       {
+               if ( Output_DebugMode )
+               {
+                       print("SysCtrl[");
+                       printHex_op( USBKeys_SysCtrl, 2 );
+                       print( "] " NL );
+               }
+
+               *tx_buf++ = 0x02; // ID
+               *tx_buf   = USBKeys_SysCtrl;
+               tx_packet->len = 2;
+
+               // Send USB Packet
+               usb_tx( SYS_CTRL_ENDPOINT, tx_packet );
+               USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent
+               return;
+       }
+
+       // Check consumer control keys
+       if ( USBKeys_Changed & USBKeyChangeState_Consumer )
+       {
+               if ( Output_DebugMode )
+               {
+                       print("ConsCtrl[");
+                       printHex_op( USBKeys_ConsCtrl, 2 );
+                       print( "] " NL );
+               }
+
+               *tx_buf++ = 0x03; // ID
+               *tx_buf++ = (uint8_t)(USBKeys_ConsCtrl & 0x00FF);
+               *tx_buf   = (uint8_t)(USBKeys_ConsCtrl >> 8);
+               tx_packet->len = 3;
+
+               // Send USB Packet
+               usb_tx( SYS_CTRL_ENDPOINT, tx_packet );
+               USBKeys_Changed &= ~USBKeyChangeState_Consumer; // Mark sent
+               return;
+       }
+
        switch ( USBKeys_Protocol )
        {
        // Send boot keyboard interrupt packet(s)
@@ -157,45 +215,6 @@ void usb_keyboard_send()
                        dbug_msg("NKRO USB: ");
                }
 
-               // Check system control keys
-               if ( USBKeys_Changed & USBKeyChangeState_System )
-               {
-                       if ( Output_DebugMode )
-                       {
-                               print("SysCtrl[");
-                               printHex_op( USBKeys_SysCtrl, 2 );
-                               print( "] " NL );
-                       }
-
-                       *tx_buf++ = 0x02; // ID
-                       *tx_buf   = USBKeys_SysCtrl;
-                       tx_packet->len = 2;
-
-                       // Send USB Packet
-                       usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet );
-                       USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent
-               }
-
-               // Check consumer control keys
-               if ( USBKeys_Changed & USBKeyChangeState_Consumer )
-               {
-                       if ( Output_DebugMode )
-                       {
-                               print("ConsCtrl[");
-                               printHex_op( USBKeys_ConsCtrl, 2 );
-                               print( "] " NL );
-                       }
-
-                       *tx_buf++ = 0x03; // ID
-                       *tx_buf++ = (uint8_t)(USBKeys_ConsCtrl & 0x00FF);
-                       *tx_buf   = (uint8_t)(USBKeys_ConsCtrl >> 8);
-                       tx_packet->len = 3;
-
-                       // Send USB Packet
-                       usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet );
-                       USBKeys_Changed &= ~USBKeyChangeState_Consumer; // Mark sent
-               }
-
                // Standard HID Keyboard
                if ( USBKeys_Changed )
                {