Browse Source

Adding NKRO and Boot mode capabilities.

- When changing the mode, a key buffer flush is required (might confuse the OS temporarily)
simple
Jacob Alexander 9 years ago
parent
commit
bba9a1c973
3 changed files with 84 additions and 6 deletions
  1. 7
    3
      Output/pjrcUSB/capabilities.kll
  2. 70
    3
      Output/pjrcUSB/output_com.c
  3. 7
    0
      Output/pjrcUSB/output_com.h

+ 7
- 3
Output/pjrcUSB/capabilities.kll View File

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();


+ 70
- 3
Output/pjrcUSB/output_com.c View File



// ----- 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 )
{ {


// ----- 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()
{ {
// Register USB Output CLI dictionary // Register USB Output CLI dictionary
CLI_registerDictionary( outputCLIDict, outputCLIDictName ); CLI_registerDictionary( outputCLIDict, outputCLIDictName );


// Zero out USBKeys_Keys array
for ( uint8_t c = 0; c < USB_NKRO_BITFIELD_SIZE_KEYS; c++ )
USBKeys_Keys[ c ] = 0;
// Flush key buffers
Output_flushBuffers();
} }





+ 7
- 0
Output/pjrcUSB/output_com.h View File



// ----- 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 -----
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();