]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding NKRO and Boot mode capabilities.
authorJacob Alexander <haata@kiibohd.com>
Thu, 2 Oct 2014 06:44:12 +0000 (23:44 -0700)
committerJacob Alexander <haata@kiibohd.com>
Thu, 2 Oct 2014 06:47:26 +0000 (23:47 -0700)
- When changing the mode, a key buffer flush is required (might confuse the OS temporarily)

Output/pjrcUSB/capabilities.kll
Output/pjrcUSB/output_com.c
Output/pjrcUSB/output_com.h

index 211d6fb0392b84773f707305e755015915e04132..13180c1cfc90ea2cd223ddbe9f4e00b464d4f880 100644 (file)
@@ -1,14 +1,18 @@
 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();
+
index 5b562e94e6cb2a07464e18da01681a0b1ec5e5f3..e29cd30b230077935d1e7146274b4180db711d15 100644 (file)
@@ -123,6 +123,60 @@ USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None;
 
 // ----- 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 )
 {
@@ -358,6 +412,20 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a
 
 // ----- 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()
 {
@@ -370,9 +438,8 @@ 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();
 }
 
 
index 30f7b54a05c30c88b278105033f61adeca7e4cf3..4146cab41f55d00118632a6b940e9658ef150c98 100644 (file)
@@ -80,10 +80,15 @@ extern USBKeyChangeState USBKeys_Changed;
 
 // ----- 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 -----
@@ -91,6 +96,8 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a
 void Output_setup();
 void Output_send();
 
+void Output_flushBuffers();
+
 void Output_firmwareReload();
 void Output_softReset();