Browse Source

Final SonyNEWS commit before sending device back

simple
Jacob Alexander 12 years ago
parent
commit
e3fc873cba
5 changed files with 38 additions and 32 deletions
  1. 7
    4
      Macro/buffer/macro.c
  2. 27
    25
      Scan/SonyNEWS/scan_loop.c
  3. 1
    0
      Scan/SonyNEWS/scan_loop.h
  4. 2
    2
      Scan/SonyNEWS/setup.cmake
  5. 1
    1
      setup.cmake

+ 7
- 4
Macro/buffer/macro.c View File



inline void macro_finishedWithBuffer(void) inline void macro_finishedWithBuffer(void)
{ {
/* BudKeypad
// Boot loader sequence state handler // Boot loader sequence state handler
switch ( KeyIndex_BufferUsed ) switch ( KeyIndex_BufferUsed )
{ {
} }


Bootloader_KeyDetected = 0; Bootloader_KeyDetected = 0;
*/
} }


void jumpToBootloader(void) void jumpToBootloader(void)
} }
return 1; return 1;
*/ */
/* BudKeypad
// Is this a bootloader sequence key? // Is this a bootloader sequence key?
if ( !Bootloader_KeyDetected if ( !Bootloader_KeyDetected
&& Bootloader_NextPositionReady && Bootloader_NextPositionReady
{ {
Bootloader_KeyDetected = 1; Bootloader_KeyDetected = 1;
} }
return 1;
*/
return 0;
} }


uint8_t sendCode = 0; uint8_t sendCode = 0;
keyPressBufferRead( MODIFIER_MASK, sizeof(MODIFIER_MASK), KEYINDEX_MASK ); keyPressBufferRead( MODIFIER_MASK, sizeof(MODIFIER_MASK), KEYINDEX_MASK );


// Check for bootloader condition // Check for bootloader condition
if ( Bootloader_ConditionState == sizeof( Bootloader_ConditionSequence ) )
jumpToBootloader();
//if ( Bootloader_ConditionState == sizeof( Bootloader_ConditionSequence ) )
// jumpToBootloader();
} }



+ 27
- 25
Scan/SonyNEWS/scan_loop.c View File

// ----- Defines ----- // ----- Defines -----


// Pinout Defines // Pinout Defines
#define RESET_PORT PORTB
#define RESET_DDR DDRD
#define RESET_PIN 0
#define SPKR_PORT PORTD
#define SPKR_DDR DDRD
#define SPKR_POS 1

#define POWR_PORT PORTC
#define POWR_DDR DDRC
#define POWR_POS 7





// ----- Macros ----- // ----- Macros -----
if ( KeyIndex_BufferUsed < KEYBOARD_BUFFER ) \ if ( KeyIndex_BufferUsed < KEYBOARD_BUFFER ) \
KeyIndex_Buffer[KeyIndex_BufferUsed++] = byte KeyIndex_Buffer[KeyIndex_BufferUsed++] = byte


#define UNSET_RESET() RESET_DDR &= ~(1 << RESET_PIN)
#define SET_RESET() RESET_DDR |= (1 << RESET_PIN)





// ----- Variables ----- // ----- Variables -----
// Asynchrounous USART mode // Asynchrounous USART mode
UCSR1C = 0x06; UCSR1C = 0x06;


// Set Speaker Pin to Pull-Up gives a low-volume click (XXX no other setting does, why?)
SPKR_DDR &= ~(1 << SPKR_POS);
SPKR_PORT |= (1 << SPKR_POS);

// Set Power Pin (I've traced this back to the "Power On" Switch, but I don't really know what it's for)
// Configured as a Pull-up Input - This pin "can" be read as well, it will go to GND when the "Power On" switch is pressed, and will read ~5V otherwise
// XXX Currently not used by the controller
POWR_DDR &= ~(1 << POWR_POS);
POWR_PORT |= (1 << POWR_POS);

// Reset the keyboard before scanning, we might be in a wierd state // Reset the keyboard before scanning, we might be in a wierd state
scan_resetKeyboard(); scan_resetKeyboard();
} }



// Main Detection Loop // Main Detection Loop
// Not needed for the Sony NEWS, this is just a busy loop // Not needed for the Sony NEWS, this is just a busy loop
inline uint8_t scan_loop() inline uint8_t scan_loop()
erro_dPrint( "Could not find key to release: ", tmpStr ); erro_dPrint( "Could not find key to release: ", tmpStr );
} }
} }
// Press or Repeat Rate
// Press or Repeated Key
else else
{ {
// Make sure the key isn't already in the buffer // Make sure the key isn't already in the buffer


// Process the scancode // Process the scancode
if ( keyValue != 0x00 ) if ( keyValue != 0x00 )
processKeyValue( keyValue );
processKeyValue( keyValue );


sei(); // Re-enable Interrupts sei(); // Re-enable Interrupts
} }


// Send data TODO
//
// Keyboard Input Guide for Micro Switch 8304
// 0xBX is for LED F1,F2,Over Type,Lock
// 0xAX is for LED F3,F8,F9,F10
// 0x92 resets keyboard (LED off, echo scancode mode off)
// 0x9E sets echo scancode mode from (0x81 to 0xFF; translates to 0x01 to 0x7F)
// Other echos: 0x15~0x19 send 0x15~0x19, 0x40 sends 0x40 (as well as 0x44,0x45, 0x80)
// 0x8C Acks the keyboard and gets 0x70 sent back (delayed)
// Send data to keyboard
uint8_t scan_sendData( uint8_t dataPayload ) uint8_t scan_sendData( uint8_t dataPayload )
{ {
// Debug // Debug


// Reset/Hold keyboard TODO // Reset/Hold keyboard TODO
// Warning! This will cause the keyboard to not send any data, so you can't disable with a keypress // Warning! This will cause the keyboard to not send any data, so you can't disable with a keypress
// The Micro Switch 8304 has a dedicated reset line
void scan_lockKeyboard( void ) void scan_lockKeyboard( void )
{ {
//UNSET_RESET();
} }


void scan_unlockKeyboard( void ) void scan_unlockKeyboard( void )
{ {
//SET_RESET();
} }


// Reset Keyboard TODO
// Reset Keyboard
void scan_resetKeyboard( void ) void scan_resetKeyboard( void )
{ {
// Reset command for the 8304
//scan_sendData( 0x92 );

// Empty buffer, now that keyboard has been reset // Empty buffer, now that keyboard has been reset
KeyIndex_BufferUsed = 0; KeyIndex_BufferUsed = 0;
} }


void scan_finishedWithUSBBuffer( void )
{
return;
}


+ 1
- 0
Scan/SonyNEWS/scan_loop.h View File

// Functions available to macro.c // Functions available to macro.c
uint8_t scan_sendData( uint8_t dataPayload ); uint8_t scan_sendData( uint8_t dataPayload );


void scan_finishedWithUSBBuffer( void );
void scan_finishedWithBuffer( void ); void scan_finishedWithBuffer( void );
void scan_lockKeyboard( void ); void scan_lockKeyboard( void );
void scan_unlockKeyboard( void ); void scan_unlockKeyboard( void );

+ 2
- 2
Scan/SonyNEWS/setup.cmake View File

#| Keymap Settings #| Keymap Settings
add_definitions( add_definitions(
-DMODIFIER_MASK=sonynews_ModifierMask -DMODIFIER_MASK=sonynews_ModifierMask
-DKEYINDEX_MASK=sonynews_ColemakMap
#-DKEYINDEX_MASK=sonynews_DefaultMap
#-DKEYINDEX_MASK=sonynews_ColemakMap
-DKEYINDEX_MASK=sonynews_DefaultMap
) )



+ 1
- 1
setup.cmake View File

#| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones #| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones


##| Deals with acquiring the keypress information and turning it into a key index ##| Deals with acquiring the keypress information and turning it into a key index
set( ScanModule "BudKeypad" )
set( ScanModule "SonyNEWS" )


##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code ##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code
set( MacroModule "buffer" ) set( MacroModule "buffer" )