# HG changeset patch # User Jacob Alexander # Date 1324263776 28800 # Node ID 86c4b91e90770426e30deba52b0976cd2b7669ae # Parent d4552f24e4ad3b963feb6a2b8e3d70fa7162df07 Cleaning up the BudKeypad module for the Buffered Macro Module - Fixed key repeat rate issues - Added the recent function additions to the scan module API diff -r d4552f24e4ad -r 86c4b91e9077 CMakeLists.txt --- a/CMakeLists.txt Sun Dec 11 00:06:49 2011 -0800 +++ b/CMakeLists.txt Sun Dec 18 19:02:56 2011 -0800 @@ -64,8 +64,8 @@ #| "atmega32u4" # Teensy 2.0 #| "at90usb646" # Teensy++ 1.0 #| "at90usb1286" # Teensy++ 2.0 -#set( MCU "atmega32u4" ) -set( MCU "at90usb1286" ) +set( MCU "atmega32u4" ) +#set( MCU "at90usb1286" ) #| Compiler flag to set the C Standard level. diff -r d4552f24e4ad -r 86c4b91e9077 Scan/matrix/matrix_scan.c --- a/Scan/matrix/matrix_scan.c Sun Dec 11 00:06:49 2011 -0800 +++ b/Scan/matrix/matrix_scan.c Sun Dec 18 19:02:56 2011 -0800 @@ -76,7 +76,6 @@ scanCode = matrix[row*(MAX_ROW_SIZE+1)+col]; \ if ( scanCode && !( pin & ( 1 << ( matrix[0*(MAX_ROW_SIZE+1)+col] % 10 ) ) ) ) \ { \ - warn_print("YAY!"); \ detectArray[scanCode]++; \ } \ break @@ -243,7 +242,6 @@ // Scan over the pins for each of the columns, and using the pin alias to determine which pin to set // (e.g. / 10 is for the pin name (A,B,C,etc.) and % 10 is for the position of the pin (A1,A2,etc.)) switch ( matrix[0*(MAX_ROW_SIZE+1)+col] / 10 ) - REG_SET(port##pin); break; \ { #if defined(__AVR_AT90USB1286__) case 0: // PINA diff -r d4552f24e4ad -r 86c4b91e9077 Scan/matrix/scan_loop.c --- a/Scan/matrix/scan_loop.c Sun Dec 11 00:06:49 2011 -0800 +++ b/Scan/matrix/scan_loop.c Sun Dec 18 19:02:56 2011 -0800 @@ -103,11 +103,51 @@ // This should be resetting VERY quickly, cutting off a potentially valid keypress is not an issue for ( uint8_t key = 1; key < KeyIndex_Size + 1; key++ ) if ( ( KeyIndex_Array[key] & ~(1 << 7) ) > SAMPLE_THRESHOLD ) { - bufferAdd( key ); + // Debug output (keypress detected) + char tmpStr[6]; + hexToStr( key, tmpStr ); + dPrintStrs( tmpStr, " " ); + + // Add the key to the buffer, if it isn't already in the current Key Buffer + for ( uint8_t c = 0; c < KeyIndex_BufferUsed + 1; c++ ) + { + // Key isn't in the buffer yet + if ( c == KeyIndex_BufferUsed ) + { + bufferAdd( key ); + break; + } + + // Key already in the buffer + if ( KeyIndex_Buffer[c] == key ) + break; + } + KeyIndex_Array[key] = (1 << 7); } else { + // Remove the key from the buffer only if it was previously known to be pressed + if ( KeyIndex_Array[key] & (1 << 7 ) ) + { + // 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--; + + break; + } + } + } + KeyIndex_Array[key] = 0x00; } @@ -115,3 +155,17 @@ return 1; } + +// Signal that the keys have been properly sent over USB +inline void scan_finishedWithUSBBuffer( void ) +{ + return; +} + + +// Signal KeyIndex_Buffer that it has been fully scanned using the macro module +inline void scan_finishedWithBuffer( void ) +{ + return; +} + diff -r d4552f24e4ad -r 86c4b91e9077 Scan/matrix/scan_loop.h --- a/Scan/matrix/scan_loop.h Sun Dec 11 00:06:49 2011 -0800 +++ b/Scan/matrix/scan_loop.h Sun Dec 18 19:02:56 2011 -0800 @@ -58,5 +58,16 @@ void scan_setup( void ); uint8_t scan_loop( void ); + +// Functions available to macro.c +uint8_t scan_sendData( uint8_t dataPayload ); + +void scan_finishedWithBuffer( void ); +void scan_finishedWithUSBBuffer( void ); +void scan_lockKeyboard( void ); +void scan_unlockKeyboard( void ); +void scan_resetKeyboard( void ); + + #endif // __SCAN_LOOP_H diff -r d4552f24e4ad -r 86c4b91e9077 USB/pjrc/usb_keyboard_debug.c --- a/USB/pjrc/usb_keyboard_debug.c Sun Dec 11 00:06:49 2011 -0800 +++ b/USB/pjrc/usb_keyboard_debug.c Sun Dec 18 19:02:56 2011 -0800 @@ -135,8 +135,8 @@ }; static const uint8_t PROGMEM debug_hid_report_desc[] = { - //0x06, 0x30, 0xFF, // Usage Page 0xFF31 (vendor defined) - 0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined) + 0x06, 0x30, 0xFF, // Usage Page 0xFF31 (vendor defined) + //0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined) 0x09, 0x74, // Usage 0x74 0xA1, 0x53, // Collection 0x53 0x75, 0x08, // report size = 8 bits diff -r d4552f24e4ad -r 86c4b91e9077 setup.cmake --- a/setup.cmake Sun Dec 11 00:06:49 2011 -0800 +++ b/setup.cmake Sun Dec 18 19:02:56 2011 -0800 @@ -20,7 +20,7 @@ #| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones ##| Deals with acquiring the keypress information and turning it into a key index -set( ScanModule "EpsonQX-10" ) +set( ScanModule "BudKeypad" ) ##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code set( MacroModule "buffer" )