Mercurial > louis > kiibohd-controller
diff Output/pjrcUSB/output_com.c @ 248:2e098cf8f71d
Fixing Linux NKRO Delete bug
- Fixed descriptor to not include USB Code 156 (Clear)
- This USB Code affects repeating Delete
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Mon, 10 Nov 2014 21:02:25 -0800 |
parents | 68d2e5c96e72 |
children | ca9a6839e1ce |
line wrap: on
line diff
--- a/Output/pjrcUSB/output_com.c Wed Nov 05 00:09:33 2014 -0800 +++ b/Output/pjrcUSB/output_com.c Mon Nov 10 21:02:25 2014 -0800 @@ -342,10 +342,11 @@ 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 @@ 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 @@ byteLookup( 17 ); byteLookup( 18 ); byteLookup( 19 ); + } + + 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_SecondaryKeys; + 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 @@ 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 @@ // 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;