// ----- 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 -----
// 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
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
// 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();
}
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++ )
if ( c == KeyIndex_BufferUsed )
{
bufferAdd( keyValue );
+
+ // Only send data if enabled
+ if ( KeyIndex_Add_InputSignal )
+ scan_sendData( KeyIndex_Add_InputSignal );
break;
}
// 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 )
{
}
}
// 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
}