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...
This commit is contained in:
Jacob Alexander 2012-03-27 21:56:54 -04:00
parent 1877dcfa01
commit 0ac4251e16
4 changed files with 73 additions and 33 deletions

View file

@ -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 @@ inline void scan_setup()
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 @@ inline void scan_setup()
// 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 @@ inline uint8_t scan_loop()
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 @@ void processKeyValue( uint8_t keyValue )
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 @@ void removeKeyValue( uint8_t keyValue )
// 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 @@ void scan_unlockKeyboard( void )
}
// 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
}

View file

@ -42,6 +42,7 @@
extern volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
extern volatile uint8_t KeyIndex_BufferUsed;
extern volatile uint8_t KeyIndex_Add_InputSignal;