Mercurial > louis > kiibohd-controller
changeset 49:37f0411655cd
Adding test macros and basic "clicker" choose support
- Better macros are still needed for the clicker
- Current macros should be separated as a sub-module
- No LEDs implement yet
- Caps Lock LED seems to be burnt out...
author | Jacob Alexander <triplehaata@gmail.com> |
---|---|
date | Tue, 27 Mar 2012 21:56:54 -0400 |
parents | 8eee22f99cae |
children | ff4ae9501930 |
files | Keymap/betkb.h Macro/buffer/macro.c Scan/BETKB/scan_loop.c Scan/BETKB/scan_loop.h |
diffstat | 4 files changed, 73 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/Keymap/betkb.h Tue Mar 27 00:04:43 2012 -0400 +++ b/Keymap/betkb.h Tue Mar 27 21:56:54 2012 -0400 @@ -92,7 +92,7 @@ 0, // 0x3C KEY_ENTER, // 0x3D KEY_RIGHT_GUI, // 0x3E - KEYPAD_1, // 0x3F + KEY_LEFT, // 0x3F (KEYPAD_1) KEY_TAB, // 0x40 KEY_Q, // 0x41 KEY_W, // 0x42 @@ -147,10 +147,10 @@ KEYPAD_7, // 0x73 KEYPAD_8, // 0x74 KEYPAD_9, // 0x75 - KEYPAD_5, // 0x76 + KEY_UP, // 0x76 (KEYPAD_5) KEYPAD_6, // 0x77 - KEYPAD_2, // 0x78 - KEYPAD_3, // 0x79 + KEY_DOWN, // 0x78 (KEYPAD_2) + KEY_RIGHT, // 0x79 (KEYPAD_3) KEYPAD_0, // 0x7A KEYPAD_00, // 0x7B KEYPAD_ENTER, // 0x7C @@ -223,7 +223,7 @@ 0, // 0x3C KEY_ENTER, // 0x3D KEY_RIGHT_GUI, // 0x3E - KEYPAD_1, // 0x3F + KEY_LEFT, // 0x3F (KEYPAD_1) KEY_TAB, // 0x40 KEY_Q, // 0x41 KEY_W, // 0x42 @@ -278,10 +278,10 @@ KEYPAD_7, // 0x73 KEYPAD_8, // 0x74 KEYPAD_9, // 0x75 - KEYPAD_5, // 0x76 + KEY_UP, // 0x76 (KEYPAD_5) KEYPAD_6, // 0x77 - KEYPAD_2, // 0x78 - KEYPAD_3, // 0x79 + KEY_DOWN, // 0x78 (KEYPAD_2) + KEY_RIGHT, // 0x79 (KEYPAD_3) KEYPAD_0, // 0x7A KEYPAD_00, // 0x7B KEYPAD_ENTER, // 0x7C
--- a/Macro/buffer/macro.c Tue Mar 27 00:04:43 2012 -0400 +++ b/Macro/buffer/macro.c Tue Mar 27 21:56:54 2012 -0400 @@ -251,37 +251,60 @@ // USBCode Macro Detection int usbcodeMacro( uint8_t usbCode ) { - /* // Keyboard Input Test Macro switch ( usbCode ) { case KEY_F1: sendCode--; - scan_sendData( 0x90 ); + //scan_sendData( 0x90 ); scan_sendData( sendCode ); _delay_ms( 200 ); break; case KEY_F2: - scan_sendData( 0x90 ); + //scan_sendData( 0x90 ); scan_sendData( sendCode ); _delay_ms( 200 ); break; case KEY_F3: sendCode++; - scan_sendData( 0x90 ); + //scan_sendData( 0x90 ); + scan_sendData( sendCode ); + _delay_ms( 200 ); + break; + + case KEY_F4: + sendCode += 0x10; + //scan_sendData( 0x90 ); scan_sendData( sendCode ); _delay_ms( 200 ); break; + case KEY_F5: + // Set 9th bit to 0 + UCSR1B &= ~(1 << 0); + _delay_ms( 200 ); + break; + + case KEY_F6: + // Set 9th bit to 1 + UCSR1B |= (1 << 0); + _delay_ms( 200 ); + break; + + case KEY_F11: + // Set click code + KeyIndex_Add_InputSignal = sendCode; + _delay_ms( 200 ); + break; + default: return 0; } return 1; - */ - return 0; + //return 0; }
--- a/Scan/BETKB/scan_loop.c Tue Mar 27 00:04:43 2012 -0400 +++ b/Scan/BETKB/scan_loop.c Tue Mar 27 21:56:54 2012 -0400 @@ -38,9 +38,9 @@ // ----- Defines ----- // Pinout Defines -#define RESET_PORT PORTB -#define RESET_DDR DDRD -#define RESET_PIN 0 +#define HOLD_PORT PORTD +#define HOLD_DDR DDRD +#define HOLD_PIN 3 // ----- Macros ----- @@ -57,6 +57,7 @@ // Buffer used to inform the macro processing module which keys have been detected as pressed volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER]; volatile uint8_t KeyIndex_BufferUsed; +volatile uint8_t KeyIndex_Add_InputSignal; // Used to pass the (click/input value) to the keyboard for the clicker // Buffer Signals @@ -133,8 +134,13 @@ UBRR1H = (uint8_t)(baud >> 8); UBRR1L = (uint8_t)baud; - // Enable the receiver, transitter, and RX Complete Interrupt as well as 9 bit data - UCSR1B = 0x9C; + // Enable the receiver, and RX Complete Interrupt as well as 9 bit data + UCSR1B = 0x94; + + // The transmitter is only to be enabled when needed + // Set the pin to be pull-up otherwise (use the lowered voltage inverter in order to sink) + HOLD_DDR &= ~(1 << HOLD_PIN); + HOLD_PORT |= (1 << HOLD_PIN); // Set frame format: 9 data, 1 stop bit, no parity // Asynchrounous USART mode @@ -143,6 +149,9 @@ // Initially buffer doesn't need to be cleared (it's empty...) BufferReadyToClear = 0; + // InputSignal is off by default + KeyIndex_Add_InputSignal = 0x00; + // Reset the keyboard before scanning, we might be in a wierd state scan_resetKeyboard(); } @@ -155,12 +164,13 @@ return 0; } -// TODO void processKeyValue( uint8_t keyValue ) { // Interpret scan code switch ( keyValue ) { + case 0x00: // Break code from input? + break; default: // Make sure the key isn't already in the buffer for ( uint8_t c = 0; c < KeyIndex_BufferUsed + 1; c++ ) @@ -169,6 +179,10 @@ if ( c == KeyIndex_BufferUsed ) { bufferAdd( keyValue ); + + // Only send data if enabled + if ( KeyIndex_Add_InputSignal ) + scan_sendData( KeyIndex_Add_InputSignal ); break; } @@ -213,19 +227,31 @@ // Send data uint8_t scan_sendData( uint8_t dataPayload ) { + // Enable the USART Transmitter + UCSR1B |= (1 << 3); + + // Debug + char tmpStr[6]; + hexToStr( dataPayload, tmpStr ); + info_dPrint( "Sending - ", tmpStr ); + UDR1 = dataPayload; + + // Wait for the payload + _delay_us( 800 ); + + // Disable the USART Transmitter + UCSR1B &= ~(1 << 3); + return 0; } // Signal KeyIndex_Buffer that it has been properly read -// TODO void scan_finishedWithBuffer( void ) { - return; } // Signal that the keys have been properly sent over USB -// TODO void scan_finishedWithUSBBuffer( void ) { } @@ -242,19 +268,9 @@ } // Reset Keyboard -// TODO? -// - Holds the input read line high to flush the buffer -// - This does not actually reset the keyboard, but always seems brings it to a sane state -// - Won't work fully if keys are being pressed done at the same time void scan_resetKeyboard( void ) { - // Initiate data request line, but don't read the incoming data - //REQUEST_DATA(); TODO - // Not a calculated valued... _delay_ms( 50 ); - - // Stop request line - //STOP_DATA(); TODO }