]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Cleaning up the BudKeypad module for the Buffered Macro Module
authorJacob Alexander <triplehaata@gmail.com>
Mon, 19 Dec 2011 03:02:56 +0000 (19:02 -0800)
committerJacob Alexander <triplehaata@gmail.com>
Mon, 19 Dec 2011 03:02:56 +0000 (19:02 -0800)
- Fixed key repeat rate issues
- Added the recent function additions to the scan module API

CMakeLists.txt
Scan/matrix/matrix_scan.c
Scan/matrix/scan_loop.c
Scan/matrix/scan_loop.h
USB/pjrc/usb_keyboard_debug.c
setup.cmake

index 44b914121d507cfc581458ca7d12e5668f015477..9b4e935b2efa776ca3bc56a2f842a84474c7792c 100644 (file)
@@ -64,8 +64,8 @@ set( SRCS
 #| "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.
index 5071cceb55ad7ce65a0dc9eeb4dd6ba233c77d88..605d9e943c84f086d4825744c9bfde8a6cef8c6c 100644 (file)
@@ -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 @@ inline void matrix_scan( uint8_t *matrix, uint8_t *detectArray )
                // 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
index a7389a6699baf8e4374552945a0ddcb59d2a2e45..ead13755984d1a741f931365a6c5af62d84ae7fd 100644 (file)
@@ -103,11 +103,51 @@ inline uint8_t scan_loop()
        // 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 @@ inline uint8_t scan_loop()
        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;
+}
+
index 3897c9cab935cf267bf61e2697aa91f4a5008148..f78e71c4910fe2a36c4d75311dc524dc3bdf8f9a 100644 (file)
@@ -58,5 +58,16 @@ extern volatile              uint8_t KeyIndex_BufferUsed;
 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
 
index 1043e6ac1ebcb7369e0347d9d5215b4a3b670f10..6aec93f98ea3197aac0d5857148bc3c9f436320b 100644 (file)
@@ -135,8 +135,8 @@ static const uint8_t PROGMEM keyboard_hid_report_desc[] = {
 };
 
 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
index c3c1567019bc765f099f75714c03961ad1830d70..c3eb2a25c06d88048833bebe0e775db06cab1b73 100644 (file)
@@ -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"  )