// Prescaler is 1
// Twice every 1200 baud (actually 1200.1, timer isn't accurate enough)
// This is close to 820 us, but a bit slower
+ cli();
TCCR1B = 0x09;
OCR1AH = 0x1A;
OCR1AL = 0x09;
// Synchrounous USART mode
// Tx Data on Falling Edge, Rx on Rising
UCSR1C = 0x47;
+ sei();
// Reset the keyboard before scanning, we might be in a wierd state
- _delay_ms( 1 );
+ _delay_ms( 50 );
scan_resetKeyboard();
+ _delay_ms( 5000 ); // Wait for the reset command to finish enough for new settings to take hold afterwards
scan_setRepeatRate( 0x00 ); // Set the fastest repeat rate
}
// Main Detection Loop
+// Nothing is required here with the Epson QX-10 Keyboards as the interrupts take care of the inputs
inline uint8_t scan_loop()
{
return 0;
// Modifier Release Detected
else
{
+ uint8_t actualKeyValue = keyValue | 0x01;
+
// Check for the released key, and shift the other keys lower on the buffer
uint8_t c;
for ( c = 0; c < KeyIndex_BufferUsed; c++ )
{
// Key to release found
- if ( KeyIndex_Buffer[c] == keyValue )
+ if ( KeyIndex_Buffer[c] == actualKeyValue )
{
// Shift keys from c position
for ( uint8_t k = c; k < KeyIndex_BufferUsed - 1; k++ )
}
// Signal KeyIndex_Buffer that it has been properly read
+inline void scan_finishedWithBuffer( void )
+{
+ return;
+}
+
+// Signal that the keys have been properly sent over USB
// For the Epson QX-10 only the modifier keys have release signals
// Therefore, only 5 keys could possibly be assigned as a modifiers
// The rest of the keys are single press (like the Kaypro keyboards)
//
// However, this differentiation causes complications on how the key signals are discarded and used
// The single keypresses must be discarded immediately, while the modifiers must be kept
-inline void scan_finishedWithBuffer( void )
+inline void scan_finishedWithUSBBuffer( void )
{
uint8_t foundModifiers = 0;
// Adjust the size of the new Key Buffer
KeyIndex_BufferUsed = foundModifiers;
- return;
+ /* Non-working, too slow (too much traffic on the bus)
+ // Poll the modifiers using an input command
+ uint8_t oldBuffer = KeyIndex_BufferUsed;
+ KeyIndex_BufferUsed = 0;
+ if ( oldBuffer )
+ scan_readSwitchStatus();
+ */
}
// Reset/Hold keyboard