From 6bf260787221c064f33cc2de0c613bf2a64ee96d Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Tue, 6 Dec 2011 23:49:56 -0800 Subject: [PATCH] Small macro update for debugging the Sony NEWS --- CMakeLists.txt | 3 +- Macro/buffer/macro.c | 65 +++++++++++++++++++++++++++++++++++++++ Scan/SonyNEWS/scan_loop.c | 6 ++++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6719d93..9b4e935 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,8 @@ set( SRCS #| "atmega32u4" # Teensy 2.0 #| "at90usb646" # Teensy++ 1.0 #| "at90usb1286" # Teensy++ 2.0 -set( MCU "at90usb1286" ) +set( MCU "atmega32u4" ) +#set( MCU "at90usb1286" ) #| Compiler flag to set the C Standard level. diff --git a/Macro/buffer/macro.c b/Macro/buffer/macro.c index cef5814..657ab91 100644 --- a/Macro/buffer/macro.c +++ b/Macro/buffer/macro.c @@ -174,6 +174,61 @@ inline void keyPressDetection( uint8_t *keys, uint8_t numberOfKeys, uint8_t *mod } */ +// Scancode Macro Detection +int scancodeMacro( uint8_t scanCode ) +{ + /* + if ( scanCode == 0x7A ) + { + scan_resetKeyboard(); + } + else + { + scan_sendData( scanCode ); + _delay_ms( 200 ); + scan_sendData( 0x80 | scanCode ); + } + return 1; + */ + return 0; +} + +uint8_t sendCode = 0; + +// USBCode Macro Detection +int usbcodeMacro( uint8_t usbCode ) +{ + // Keyboard Input Test Macro + switch ( usbCode ) + { + case KEY_F1: + sendCode--; + scan_sendData( 0x90 ); + scan_sendData( sendCode ); + _delay_ms( 200 ); + break; + + case KEY_F2: + scan_sendData( 0x90 ); + scan_sendData( sendCode ); + _delay_ms( 200 ); + break; + + case KEY_F3: + sendCode++; + scan_sendData( 0x90 ); + scan_sendData( sendCode ); + _delay_ms( 200 ); + break; + + default: + return 0; + } + + return 1; +} + + // Given a list of keypresses, translate into the USB key codes // The buffer is cleared after running // If the buffer doesn't fit into the USB send array, the extra keys are dropped @@ -185,6 +240,16 @@ void keyPressBufferRead( uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t // Get the keycode from the buffer uint8_t key = KeyIndex_Buffer[index]; + // Check key for special usages using the scancode + // If non-zero return, ignore normal processing of the scancode + if ( scancodeMacro( key ) ) + continue; + + // Check key for special usages using the usbcode + // If non-zero return, ignore normal processing of the usbcode + if ( usbcodeMacro( map[key] ) ) + continue; + // Determine if the key is a modifier uint8_t modFound = 0; for ( uint8_t mod = 0; mod < numberOfModifiers; mod++ ) { diff --git a/Scan/SonyNEWS/scan_loop.c b/Scan/SonyNEWS/scan_loop.c index f2291ee..71f3545 100644 --- a/Scan/SonyNEWS/scan_loop.c +++ b/Scan/SonyNEWS/scan_loop.c @@ -177,6 +177,7 @@ ISR(USART1_RX_vect) dPrintStrs( tmpStr, " " ); // Process the scancode + if ( keyValue != 0x00 ) processKeyValue( keyValue ); sei(); // Re-enable Interrupts @@ -193,6 +194,11 @@ ISR(USART1_RX_vect) // 0x8C Acks the keyboard and gets 0x70 sent back (delayed) uint8_t scan_sendData( uint8_t dataPayload ) { + // Debug + char tmpStr[6]; + hexToStr( dataPayload, tmpStr ); + info_dPrint( tmpStr, " " ); + UDR1 = dataPayload; return 0; }