// Send NKRO keyboard interrupts packet(s)
case 1:
- // Check modifiers
- if ( USBKeys_Changed & USBKeyChangeState_Modifiers )
+ // Check system control keys
+ if ( USBKeys_Changed & USBKeyChangeState_System )
{
- *tx_buf++ = 0x01; // ID
- *tx_buf = USBKeys_Modifiers;
+ *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_Modifiers; // Mark sent
+ USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent
}
- // Check main key section
- else if ( USBKeys_Changed & USBKeyChangeState_MainKeys )
+
+ // Check consumer control keys
+ if ( USBKeys_Changed & USBKeyChangeState_Consumer )
{
*tx_buf++ = 0x03; // ID
-
- // 4-164 (first 20 bytes)
- memcpy( tx_buf, USBKeys_Keys, 20 );
- tx_packet->len = 21;
+ *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_MainKeys; // Mark sent
+ USBKeys_Changed &= ~USBKeyChangeState_Consumer; // Mark sent
}
- // Check secondary key section
- else if ( USBKeys_Changed & USBKeyChangeState_SecondaryKeys )
+
+ // Standard HID Keyboard
+ if ( USBKeys_Changed )
{
- *tx_buf++ = 0x04; // ID
+ tx_packet->len = 0;
- // 176-221 (last 6 bytes)
- memcpy( tx_buf, USBKeys_Keys + 20, 6 );
- tx_packet->len = 7;
+ // Modifiers
+ *tx_buf++ = 0x01; // ID
+ *tx_buf++ = USBKeys_Modifiers;
+ tx_packet->len += 2;
- // Send USB Packet
- usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet );
- USBKeys_Changed &= ~USBKeyChangeState_SecondaryKeys; // Mark sent
- }
- // Check system control keys
- else if ( USBKeys_Changed & USBKeyChangeState_System )
- {
- *tx_buf++ = 0x05; // ID
- *tx_buf = USBKeys_SysCtrl;
- tx_packet->len = 2;
+ // 4-49 (first 6 bytes)
+ memcpy( tx_buf, USBKeys_Keys, 6 );
+ tx_buf += 6;
+ tx_packet->len += 6;
- // Send USB Packet
- usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet );
- USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent
- }
- // Check consumer control keys
- else if ( USBKeys_Changed & USBKeyChangeState_Consumer )
- {
- *tx_buf++ = 0x06; // ID
- *tx_buf++ = (uint8_t)(USBKeys_ConsCtrl & 0x00FF);
- *tx_buf = (uint8_t)(USBKeys_ConsCtrl >> 8);
- tx_packet->len = 3;
+ // 51-155 (Middle 14 bytes)
+ memcpy( tx_buf, USBKeys_Keys + 6, 14 );
+ tx_buf += 14;
+ tx_packet->len += 14;
+
+ // 157-164 (Next byte)
+ memcpy( tx_buf, USBKeys_Keys + 20, 1 );
+ tx_buf += 1;
+ tx_packet->len += 1;
+
+ // 176-221 (last 6 bytes)
+ memcpy( tx_buf, USBKeys_Keys + 21, 6 );
+ tx_packet->len += 6;
// Send USB Packet
usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet );
- USBKeys_Changed &= ~USBKeyChangeState_Consumer; // Mark sent
+ USBKeys_Changed = USBKeyChangeState_None; // Mark sent
}
break;