Mercurial > louis > kiibohd-controller
changeset 218:78e89528487f
Fixing USB send rate.
- Only send USB events when something changes (rather than every ms)
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Fri, 19 Sep 2014 19:11:37 -0700 |
parents | 8ceb1a0582ee |
children | 3a7d978b800e |
files | Macro/PartialMap/kll.h Output/pjrcUSB/output_com.c Output/pjrcUSB/output_com.h |
diffstat | 3 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Macro/PartialMap/kll.h Tue Sep 16 23:29:21 2014 -0700 +++ b/Macro/PartialMap/kll.h Fri Sep 19 19:11:37 2014 -0700 @@ -64,7 +64,7 @@ // Default Args (always sent): key state/analog of last key // Combo Length of 0 signifies end of sequence // -// ResultMacro.guide -> [<combo length>|<capability index>|<arg1>|<argn>|<capability index>|...|<combo length>|...|0] +// ResultMacro.guide -> [<combo length>|<capability index>|<arg1>|<argn>|<capability index>|...|<combo length>|...|0] // // ResultMacroRecord.pos -> <current combo position> // ResultMacroRecord.state -> <last key state>
--- a/Output/pjrcUSB/output_com.c Tue Sep 16 23:29:21 2014 -0700 +++ b/Output/pjrcUSB/output_com.c Fri Sep 19 19:11:37 2014 -0700 @@ -89,6 +89,10 @@ // 1 - NKRO Mode volatile uint8_t USBKeys_Protocol = 1; +// Indicate if USB should send update +// OS only needs update if there has been a change in state + uint8_t USBKeys_Changed = 0; + // the idle configuration, how often we send the report to the // host (ms * 4) even when it hasn't changed uint8_t USBKeys_Idle_Config = 125; @@ -111,6 +115,10 @@ } // TODO Analog inputs + // Only indicate USB has changed if either a press or release has occured + if ( state == 0x01 || state == 0x03 ) + USBKeys_Changed = 1; + // Only send keypresses if press or hold state if ( stateType == 0x00 && state == 0x03 ) // Release state return; @@ -164,6 +172,17 @@ // USB Data Send inline void Output_send(void) { + // Don't send update if USB has not changed + if ( !USBKeys_Changed ) + { + // Clear modifiers and keys + USBKeys_Modifiers = 0; + USBKeys_Sent = 0; + + return; + } + USBKeys_Changed = 0; + // TODO undo potentially old keys for ( uint8_t c = USBKeys_Sent; c < USBKeys_MaxSize; c++ ) USBKeys_Array[c] = 0;
--- a/Output/pjrcUSB/output_com.h Tue Sep 16 23:29:21 2014 -0700 +++ b/Output/pjrcUSB/output_com.h Fri Sep 19 19:11:37 2014 -0700 @@ -47,6 +47,7 @@ extern uint8_t USBKeys_Array[USB_MAX_KEY_SEND]; extern uint8_t USBKeys_Sent; extern volatile uint8_t USBKeys_LEDs; +extern uint8_t USBKeys_Changed; static const uint8_t USBKeys_MaxSize = USB_MAX_KEY_SEND; extern volatile uint8_t USBKeys_Protocol; // 0 - Boot Mode, 1 - NKRO Mode