Name = pjrcUSBCapabilities;
-Version = 0.2;
+Version = 0.3;
Author = "HaaTa (Jacob Alexander) 2014";
KLL = 0.3;
# 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 );
sysCtrlOut => Output_sysCtrlSend_capability( sysCode : 1 );
usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 );
+# Configuration capabilities
+kbdProtocolBoot => Output_kbdProtocolBoot_capability();
+kbdProtocolNKRO => Output_kbdProtocolNKRO_capability();
+
// ----- 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
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
{
// ----- 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
inline void Output_setup()
{
// Register USB Output CLI dictionary
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();
}
// ----- Capabilities -----
+// Output capabilities
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_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 -----
void Output_setup();
void Output_send();
+void Output_flushBuffers();
+
void Output_firmwareReload();
void Output_softReset();