changeset 40:d4552f24e4ad

Finishing up the Epson QX-10 module - Typing and modifiers fully working - Still some features left to implement * Stop input * Diagnostic test * Setting interval before starting repeat rate * More comments * Handling LED stats
author Jacob Alexander <triplehaata@gmail.com>
date Sun, 11 Dec 2011 00:06:49 -0800
parents 8e11cdc1aee4
children 86c4b91e9077
files Keymap/epsonqx10.h Scan/EpsonQX-10/scan_loop.c Scan/EpsonQX-10/scan_loop.h USB/pjrc/usb_com.c main.c
diffstat 5 files changed, 28 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/Keymap/epsonqx10.h	Sat Dec 10 22:48:53 2011 -0800
+++ b/Keymap/epsonqx10.h	Sun Dec 11 00:06:49 2011 -0800
@@ -322,7 +322,7 @@
 				0, // 0x8C
 				KEY_GUI, // 0x8D
 				0, // 0x8E
-				KEY_RIGHT_CTRL, // 0x8F
+				KEY_ALT, // 0x8F
 };
 
 
--- a/Scan/EpsonQX-10/scan_loop.c	Sat Dec 10 22:48:53 2011 -0800
+++ b/Scan/EpsonQX-10/scan_loop.c	Sun Dec 11 00:06:49 2011 -0800
@@ -147,6 +147,7 @@
 	// 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;
@@ -171,16 +172,19 @@
 	// 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;
@@ -251,12 +255,14 @@
 		// 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++ )
@@ -376,13 +382,19 @@
 }
 
 // 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;
 
@@ -401,7 +413,13 @@
 	// 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
--- a/Scan/EpsonQX-10/scan_loop.h	Sat Dec 10 22:48:53 2011 -0800
+++ b/Scan/EpsonQX-10/scan_loop.h	Sun Dec 11 00:06:49 2011 -0800
@@ -56,6 +56,7 @@
 uint8_t scan_sendData( uint8_t dataPayload );
 
 void scan_finishedWithBuffer( void );
+void scan_finishedWithUSBBuffer( void );
 void scan_lockKeyboard( void );
 void scan_unlockKeyboard( void );
 void scan_resetKeyboard( void );
--- a/USB/pjrc/usb_com.c	Sat Dec 10 22:48:53 2011 -0800
+++ b/USB/pjrc/usb_com.c	Sun Dec 11 00:06:49 2011 -0800
@@ -27,6 +27,7 @@
 // AVR Includes
 
 // Project Includes
+#include <scan_loop.h>
 #include "usb_keyboard_debug.h"
 
 // Local Includes
@@ -82,5 +83,8 @@
 		// Clear modifiers and keys
 		USBKeys_Modifiers = 0;
 		USBKeys_Sent      = 0;
+
+		// Signal Scan Module we are finishedA
+		scan_finishedWithUSBBuffer();
 }
 
--- a/main.c	Sat Dec 10 22:48:53 2011 -0800
+++ b/main.c	Sun Dec 11 00:06:49 2011 -0800
@@ -108,9 +108,7 @@
 	while ( 1 )
 	{
 		// Setup the scanning module
-		cli();
 		scan_setup();
-		sei();
 
 		while ( 1 )
 		{