Adding NKRO and Boot mode capabilities.
- When changing the mode, a key buffer flush is required (might confuse the OS temporarily)
This commit is contained in:
parent
5782af5541
commit
bba9a1c973
@ -1,14 +1,18 @@
|
|||||||
Name = pjrcUSBCapabilities;
|
Name = pjrcUSBCapabilities;
|
||||||
Version = 0.2;
|
Version = 0.3;
|
||||||
Author = "HaaTa (Jacob Alexander) 2014";
|
Author = "HaaTa (Jacob Alexander) 2014";
|
||||||
KLL = 0.3;
|
KLL = 0.3;
|
||||||
|
|
||||||
# Modified Date
|
# Modified Date
|
||||||
Date = 2014-09-20;
|
Date = 2014-10-01;
|
||||||
|
|
||||||
|
|
||||||
# Capabilties available to the pjrcUSB output module
|
# Output capabilities
|
||||||
consCtrlOut => Output_consCtrlSend_capability( consCode : 2 );
|
consCtrlOut => Output_consCtrlSend_capability( consCode : 2 );
|
||||||
sysCtrlOut => Output_sysCtrlSend_capability( sysCode : 1 );
|
sysCtrlOut => Output_sysCtrlSend_capability( sysCode : 1 );
|
||||||
usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 );
|
usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 );
|
||||||
|
|
||||||
|
# Configuration capabilities
|
||||||
|
kbdProtocolBoot => Output_kbdProtocolBoot_capability();
|
||||||
|
kbdProtocolNKRO => Output_kbdProtocolNKRO_capability();
|
||||||
|
|
||||||
|
@ -123,6 +123,60 @@ USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None;
|
|||||||
|
|
||||||
// ----- Capabilities -----
|
// ----- Capabilities -----
|
||||||
|
|
||||||
|
// Set Boot Keyboard Protocol
|
||||||
|
void Output_kbdProtocolBoot_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
||||||
|
{
|
||||||
|
// Display capability name
|
||||||
|
if ( stateType == 0xFF && state == 0xFF )
|
||||||
|
{
|
||||||
|
print("Output_kbdProtocolBoot()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only set if necessary
|
||||||
|
if ( USBKeys_Protocol == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// TODO Analog inputs
|
||||||
|
// Only set on key press
|
||||||
|
if ( stateType != 0x01 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Flush the key buffers
|
||||||
|
Output_flushBuffers();
|
||||||
|
|
||||||
|
// Set the keyboard protocol to Boot Mode
|
||||||
|
USBKeys_Protocol = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set NKRO Keyboard Protocol
|
||||||
|
void Output_kbdProtocolNKRO_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
||||||
|
{
|
||||||
|
// Display capability name
|
||||||
|
if ( stateType == 0xFF && state == 0xFF )
|
||||||
|
{
|
||||||
|
print("Output_kbdProtocolNKRO()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only set if necessary
|
||||||
|
if ( USBKeys_Protocol == 1 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// TODO Analog inputs
|
||||||
|
// Only set on key press
|
||||||
|
if ( stateType != 0x01 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Flush the key buffers
|
||||||
|
Output_flushBuffers();
|
||||||
|
|
||||||
|
// Set the keyboard protocol to NKRO Mode
|
||||||
|
USBKeys_Protocol = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Sends a Consumer Control code to the USB Output buffer
|
// Sends a Consumer Control code to the USB Output buffer
|
||||||
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
||||||
{
|
{
|
||||||
@ -358,6 +412,20 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a
|
|||||||
|
|
||||||
// ----- Functions -----
|
// ----- Functions -----
|
||||||
|
|
||||||
|
// Flush Key buffers
|
||||||
|
void Output_flushBuffers()
|
||||||
|
{
|
||||||
|
// Zero out USBKeys_Keys array
|
||||||
|
for ( uint8_t c = 0; c < USB_NKRO_BITFIELD_SIZE_KEYS; c++ )
|
||||||
|
USBKeys_Keys[ c ] = 0;
|
||||||
|
|
||||||
|
// Zero out other key buffers
|
||||||
|
USBKeys_ConsCtrl = 0;
|
||||||
|
USBKeys_Modifiers = 0;
|
||||||
|
USBKeys_SysCtrl = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// USB Module Setup
|
// USB Module Setup
|
||||||
inline void Output_setup()
|
inline void Output_setup()
|
||||||
{
|
{
|
||||||
@ -370,9 +438,8 @@ inline void Output_setup()
|
|||||||
// Register USB Output CLI dictionary
|
// Register USB Output CLI dictionary
|
||||||
CLI_registerDictionary( outputCLIDict, outputCLIDictName );
|
CLI_registerDictionary( outputCLIDict, outputCLIDictName );
|
||||||
|
|
||||||
// Zero out USBKeys_Keys array
|
// Flush key buffers
|
||||||
for ( uint8_t c = 0; c < USB_NKRO_BITFIELD_SIZE_KEYS; c++ )
|
Output_flushBuffers();
|
||||||
USBKeys_Keys[ c ] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,10 +80,15 @@ extern USBKeyChangeState USBKeys_Changed;
|
|||||||
|
|
||||||
// ----- Capabilities -----
|
// ----- Capabilities -----
|
||||||
|
|
||||||
|
// Output capabilities
|
||||||
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
|
|
||||||
|
// Configuration capabilities
|
||||||
|
void Output_kbdProtocolBoot_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
|
void Output_kbdProtocolNKRO_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----- Functions -----
|
// ----- Functions -----
|
||||||
@ -91,6 +96,8 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a
|
|||||||
void Output_setup();
|
void Output_setup();
|
||||||
void Output_send();
|
void Output_send();
|
||||||
|
|
||||||
|
void Output_flushBuffers();
|
||||||
|
|
||||||
void Output_firmwareReload();
|
void Output_firmwareReload();
|
||||||
void Output_softReset();
|
void Output_softReset();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user