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
This commit is contained in:
		
							parent
							
								
									8f8de985c5
								
							
						
					
					
						commit
						2519ea00e7
					
				
					 5 changed files with 28 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -322,7 +322,7 @@ static uint8_t epsonqx10_ColemakMap[] = {
 | 
			
		|||
				0, // 0x8C
 | 
			
		||||
				KEY_GUI, // 0x8D
 | 
			
		||||
				0, // 0x8E
 | 
			
		||||
				KEY_RIGHT_CTRL, // 0x8F
 | 
			
		||||
				KEY_ALT, // 0x8F
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -147,6 +147,7 @@ inline void scan_setup()
 | 
			
		|||
	// 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 @@ inline void scan_setup()
 | 
			
		|||
	// 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 @@ void processKeyValue( uint8_t keyValue )
 | 
			
		|||
		// 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 @@ uint8_t scan_sendData( uint8_t dataPayload )
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// 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 @@ inline void scan_finishedWithBuffer( void )
 | 
			
		|||
	// 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,6 +56,7 @@ uint8_t scan_loop( void );
 | 
			
		|||
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 );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,7 @@
 | 
			
		|||
// AVR Includes
 | 
			
		||||
 | 
			
		||||
// Project Includes
 | 
			
		||||
#include <scan_loop.h>
 | 
			
		||||
#include "usb_keyboard_debug.h"
 | 
			
		||||
 | 
			
		||||
// Local Includes
 | 
			
		||||
| 
						 | 
				
			
			@ -82,5 +83,8 @@ inline void usb_send(void)
 | 
			
		|||
		// Clear modifiers and keys
 | 
			
		||||
		USBKeys_Modifiers = 0;
 | 
			
		||||
		USBKeys_Sent      = 0;
 | 
			
		||||
 | 
			
		||||
		// Signal Scan Module we are finishedA
 | 
			
		||||
		scan_finishedWithUSBBuffer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								main.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								main.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -108,9 +108,7 @@ int main(void)
 | 
			
		|||
	while ( 1 )
 | 
			
		||||
	{
 | 
			
		||||
		// Setup the scanning module
 | 
			
		||||
		cli();
 | 
			
		||||
		scan_setup();
 | 
			
		||||
		sei();
 | 
			
		||||
 | 
			
		||||
		while ( 1 )
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue