X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Output%2FpjrcUSB%2Foutput_com.c;h=aa5f5b0249468997e775e5d53d168b05f31cfe3f;hb=11fb8bd77dea03ccda9a977c0ac7938abc938f6c;hp=a0ce24d65d9aade54af9ae264b20122971d2871f;hpb=1da49038168a651a3ef239e33f7566f4d7cde83c;p=kiibohd-controller.git diff --git a/Output/pjrcUSB/output_com.c b/Output/pjrcUSB/output_com.c index a0ce24d..aa5f5b0 100644 --- a/Output/pjrcUSB/output_com.c +++ b/Output/pjrcUSB/output_com.c @@ -342,10 +342,11 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a break; } // First 6 bytes - else if ( key >= 4 && key <= 50 ) + else if ( key >= 4 && key <= 49 ) { // Lookup (otherwise division or multiple checks are needed to do alignment) - uint8_t keyPos = key - (4 - 0); // Starting position in array + // Starting at 0th position, each byte has 8 bits, starting at 4th bit + uint8_t keyPos = key + (0 * 8 - 4); // Starting position in array, Ignoring 4 keys switch ( keyPos ) { byteLookup( 0 ); @@ -358,11 +359,12 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a USBKeys_Changed |= USBKeyChangeState_MainKeys; } - // Next 15 bytes - else if ( key >= 51 && key <= 164 ) + // Next 14 bytes + else if ( key >= 51 && key <= 155 ) { // Lookup (otherwise division or multiple checks are needed to do alignment) - uint8_t keyPos = key - (51 - 48); // Starting position in array + // Starting at 6th byte position, each byte has 8 bits, starting at 51st bit + uint8_t keyPos = key + (6 * 8 - 51); // Starting position in array switch ( keyPos ) { byteLookup( 6 ); @@ -379,16 +381,27 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a byteLookup( 17 ); byteLookup( 18 ); byteLookup( 19 ); - byteLookup( 20 ); } USBKeys_Changed |= USBKeyChangeState_SecondaryKeys; } + // Next byte + else if ( key >= 157 && key <= 164 ) + { + // Lookup (otherwise division or multiple checks are needed to do alignment) + uint8_t keyPos = key + (20 * 8 - 157); // Starting position in array, Ignoring 6 keys + switch ( keyPos ) + { + byteLookup( 20 ); + } + + USBKeys_Changed |= USBKeyChangeState_TertiaryKeys; + } // Last 6 bytes else if ( key >= 176 && key <= 221 ) { // Lookup (otherwise division or multiple checks are needed to do alignment) - uint8_t keyPos = key - (176 - 168); // Starting position in array + uint8_t keyPos = key + (21 * 8 - 176); // Starting position in array switch ( keyPos ) { byteLookup( 21 ); @@ -399,7 +412,7 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a byteLookup( 26 ); } - USBKeys_Changed |= USBKeyChangeState_TertiaryKeys; + USBKeys_Changed |= USBKeyChangeState_QuartiaryKeys; } // Received 0x00 // This is a special USB Code that internally indicates a "break" @@ -415,7 +428,7 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a // Invalid key else { - warn_msg("USB Code not within 4-164 (0x4-0xA4) or 176-221 (0xB0-0xDD) NKRO Mode: "); + warn_msg("USB Code not within 4-49 (0x4-0x31), 51-155 (0x33-0x9B), 157-164 (0x9D-0xA4), 176-221 (0xB0-0xDD) or 224-231 (0xE0-0xE7) NKRO Mode: "); printHex( key ); print( NL ); break;