Mercurial > louis > kiibohd-controller
changeset 159:84beeecd2c94
Kishsaver is fully working with DPH!
- More keyboard layouts and enhancements to come :D
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sat, 26 Apr 2014 01:29:09 -0700 |
parents | 0e3038f30819 |
children | 68441d606782 |
files | Macro/PartialMap/macro.c Macro/PartialMap/macro.h Scan/DPH/scan_loop.c |
diffstat | 3 files changed, 45 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/Macro/PartialMap/macro.c Fri Apr 25 23:53:46 2014 -0700 +++ b/Macro/PartialMap/macro.c Sat Apr 26 01:29:09 2014 -0700 @@ -79,10 +79,45 @@ // Default function for adding keys to the KeyIndex_Buffer, does a DefaultMap_Lookup if ( KeyIndex_BufferUsed < KEYBOARD_BUFFER ) { - KeyIndex_Buffer[KeyIndex_BufferUsed++] = DefaultMap_Lookup[byte]; + uint8_t key = DefaultMap_Lookup[byte]; + for ( uint8_t c = 0; c < KeyIndex_BufferUsed; c++ ) + { + // Key already in the buffer + if ( KeyIndex_Buffer[c] == key ) + return; + } + + // Add to the buffer + KeyIndex_Buffer[KeyIndex_BufferUsed++] = key; } } +inline void Macro_bufferRemove( uint8_t byte ) +{ + uint8_t key = DefaultMap_Lookup[byte]; + + // Check for the released key, and shift the other keys lower on the buffer + for ( uint8_t c = 0; c < KeyIndex_BufferUsed; c++ ) + { + // Key to release found + if ( KeyIndex_Buffer[c] == key ) + { + // Shift keys from c position + for ( uint8_t k = c; k < KeyIndex_BufferUsed - 1; k++ ) + KeyIndex_Buffer[k] = KeyIndex_Buffer[k + 1]; + + // Decrement Buffer + KeyIndex_BufferUsed--; + + return; + } + } + + // Error case (no key to release) + erro_msg("Could not find key to release: "); + printHex( key ); +} + inline void Macro_finishWithUSBBuffer( uint8_t sentKeys ) { } @@ -96,11 +131,13 @@ // Loop through input buffer for ( uint8_t index = 0; index < KeyIndex_BufferUsed; index++ ) { + //print(" KEYS: "); + //printInt8( KeyIndex_BufferUsed ); // Get the keycode from the buffer uint8_t key = KeyIndex_Buffer[index]; // Set the modifier bit if this key is a modifier - if ( key & KEY_LCTRL ) // AND with 0xE0 + if ( (key & KEY_LCTRL) == KEY_LCTRL ) // AND with 0xE0 { USBKeys_Modifiers |= 1 << (key ^ KEY_LCTRL); // Left shift 1 by key XOR 0xE0
--- a/Macro/PartialMap/macro.h Fri Apr 25 23:53:46 2014 -0700 +++ b/Macro/PartialMap/macro.h Sat Apr 26 01:29:09 2014 -0700 @@ -40,6 +40,7 @@ // ----- Functions ----- void Macro_bufferAdd( uint8_t byte ); +void Macro_bufferRemove( uint8_t byte ); void Macro_finishWithUSBBuffer( uint8_t sentKeys ); void Macro_process(); void Macro_setup();
--- a/Scan/DPH/scan_loop.c Fri Apr 25 23:53:46 2014 -0700 +++ b/Scan/DPH/scan_loop.c Sat Apr 26 01:29:09 2014 -0700 @@ -324,8 +324,6 @@ // NOTE: Only really required for implementing "tricks" in converters for odd protocols void Scan_finishedWithBuffer( uint8_t sentKeys ) { - // Convenient place to clear the KeyIndex_Buffer - KeyIndex_BufferUsed = 0; return; } @@ -821,7 +819,7 @@ // Debug message // <key> [<strobe>:<mux>] : <sense val> : <delta + threshold> : <margin> dbug_msg("0x"); - printHex_op( key, 2 ); + printHex_op( key, 1 ); print(" ["); printInt8( strobe ); print(":"); @@ -843,22 +841,10 @@ else { // If the key was previously pressed, remove from the buffer - for ( uint8_t c = 0; c < KeyIndex_BufferUsed; c++ ) - { - // Key to release found - if ( KeyIndex_Buffer[c] == key ) - { - // Shift keys from c position - for ( uint8_t k = c; k < KeyIndex_BufferUsed - 1; k++ ) - KeyIndex_Buffer[k] = KeyIndex_Buffer[k + 1]; - - // Decrement Buffer - KeyIndex_BufferUsed--; - - break; - } - } - + if ( KeyIndex_BufferUsed > 0 && keys_debounce[key] >= DEBOUNCE_THRESHOLD ) + { + Macro_bufferRemove( key ); + } // Clear debounce entry keys_debounce[key] = 0;