annotate Output/pjrcUSB/output_com.c @ 447:56237ba5da6f

Adding auto-restart support whenever USB gets into an odd state - Somewhat aggresive, may cause restarts if the keyboard/OS hasn't fully intialized the keyboard - Added GET_IDLE handling and correct usage of SET_IDLE - Initial implementation of idle send, commented out as it causes issues on Mac OSX for sleeping (keyboard has been working without it) - MacOSX seems to have some sort of data corruption on the USB link, not sure why (other OSs have no issues) - Cleaned up some code - Added a longer sleep after the resume sequence to prevent possible issues sending keys too soon (may need to be increased more) Ipad support now seems flaky, though Mac, Windows seems solid. Init sequence on Linux seems slow, even though there are no errors.
author Jacob Alexander <haata@kiibohd.com>
date Fri, 27 May 2016 01:21:57 -0700
parents 380e1f0123d0
children 45feb80a2ad1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
1 /* Copyright (C) 2011-2016 by Jacob Alexander
122
2bb16439e6ca Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents: 119
diff changeset
2 *
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
4 * of this software and associated documentation files (the "Software"), to deal
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
5 * in the Software without restriction, including without limitation the rights
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 * copies of the Software, and to permit persons to whom the Software is
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
8 * furnished to do so, subject to the following conditions:
122
2bb16439e6ca Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents: 119
diff changeset
9 *
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
10 * The above copyright notice and this permission notice shall be included in
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
11 * all copies or substantial portions of the Software.
122
2bb16439e6ca Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents: 119
diff changeset
12 *
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19 * THE SOFTWARE.
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 */
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
21
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22 // ----- Includes -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24 // Compiler Includes
118
b61ca96b7c24 File and macro modifications for supporting Teensy 3.1
Jacob Alexander <haata@kiibohd.com>
parents: 109
diff changeset
25 #include <Lib/OutputLib.h>
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
27 // Project Includes
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
28 #include <cli.h>
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
29 #include <led.h>
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
30 #include <print.h>
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
31 #include <scan_loop.h>
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
32
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
33 // USB Includes
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
34 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
35 #include "avr/usb_keyboard_serial.h"
263
9afed592bcb5 Preparing for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 252
diff changeset
36 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
132
e08d7b586ea3 Adding analog.c lib from teensyduino.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
37 #include "arm/usb_dev.h"
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
38 #include "arm/usb_keyboard.h"
132
e08d7b586ea3 Adding analog.c lib from teensyduino.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
39 #include "arm/usb_serial.h"
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
40 #include "arm/usb_mouse.h"
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
41 #endif
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
42
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
43 // KLL
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
44 #include <kll_defs.h>
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
45
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
46 // Local Includes
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
47 #include "output_com.h"
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
48
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
49
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
50
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
51 // ----- Macros -----
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
52
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
53 // Used to build a bitmap lookup table from a byte addressable array
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
54 #define byteLookup( byte ) \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
55 case (( byte ) * ( 8 )): bytePosition = byte; byteShift = 0; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
56 case (( byte ) * ( 8 ) + ( 1 )): bytePosition = byte; byteShift = 1; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
57 case (( byte ) * ( 8 ) + ( 2 )): bytePosition = byte; byteShift = 2; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
58 case (( byte ) * ( 8 ) + ( 3 )): bytePosition = byte; byteShift = 3; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
59 case (( byte ) * ( 8 ) + ( 4 )): bytePosition = byte; byteShift = 4; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
60 case (( byte ) * ( 8 ) + ( 5 )): bytePosition = byte; byteShift = 5; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
61 case (( byte ) * ( 8 ) + ( 6 )): bytePosition = byte; byteShift = 6; break; \
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
62 case (( byte ) * ( 8 ) + ( 7 )): bytePosition = byte; byteShift = 7; break
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
63
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
64
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
65
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
66 // ----- Function Declarations -----
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
67
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
68 void cliFunc_kbdProtocol( char* args );
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
69 void cliFunc_outputDebug( char* args );
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
70 void cliFunc_readLEDs ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
71 void cliFunc_sendKeys ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
72 void cliFunc_setKeys ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
73 void cliFunc_setMod ( char* args );
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
74
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
75
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
76
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
77 // ----- Variables -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
78
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
79 // Output Module command dictionary
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
80 CLIDict_Entry( kbdProtocol, "Keyboard Protocol Mode: 0 - Boot, 1 - OS/NKRO Mode" );
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
81 CLIDict_Entry( outputDebug, "Toggle Output Debug mode." );
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
82 CLIDict_Entry( readLEDs, "Read LED byte:" NL "\t\t1 NumLck, 2 CapsLck, 4 ScrlLck, 16 Kana, etc." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
83 CLIDict_Entry( sendKeys, "Send the prepared list of USB codes and modifier byte." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
84 CLIDict_Entry( setKeys, "Prepare a space separated list of USB codes (decimal). Waits until \033[35msendKeys\033[0m." );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
85 CLIDict_Entry( setMod, "Set the modfier byte:" NL "\t\t1 LCtrl, 2 LShft, 4 LAlt, 8 LGUI, 16 RCtrl, 32 RShft, 64 RAlt, 128 RGUI" );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
86
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
87 CLIDict_Def( outputCLIDict, "USB Module Commands" ) = {
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
88 CLIDict_Item( kbdProtocol ),
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
89 CLIDict_Item( outputDebug ),
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
90 CLIDict_Item( readLEDs ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
91 CLIDict_Item( sendKeys ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
92 CLIDict_Item( setKeys ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
93 CLIDict_Item( setMod ),
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
94 { 0, 0, 0 } // Null entry for dictionary end
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
95 };
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
96
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
97
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
98 // Which modifier keys are currently pressed
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
99 // 1=left ctrl, 2=left shift, 4=left alt, 8=left gui
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
100 // 16=right ctrl, 32=right shift, 64=right alt, 128=right gui
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
101 uint8_t USBKeys_Modifiers = 0;
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
102 uint8_t USBKeys_ModifiersCLI = 0; // Separate CLI send buffer
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
103
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
104 // Currently pressed keys, max is defined by USB_MAX_KEY_SEND
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
105 uint8_t USBKeys_Keys [USB_NKRO_BITFIELD_SIZE_KEYS];
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
106 uint8_t USBKeys_KeysCLI[USB_NKRO_BITFIELD_SIZE_KEYS]; // Separate CLI send buffer
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
107
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
108 // System Control and Consumer Control 1KRO containers
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
109 uint8_t USBKeys_SysCtrl;
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
110 uint16_t USBKeys_ConsCtrl;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
111
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
112 // The number of keys sent to the usb in the array
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
113 uint8_t USBKeys_Sent = 0;
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
114 uint8_t USBKeys_SentCLI = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
115
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
116 // 1=num lock, 2=caps lock, 4=scroll lock, 8=compose, 16=kana
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
117 volatile uint8_t USBKeys_LEDs = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
118
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
119 // Currently pressed mouse buttons, bitmask, 0 represents no buttons pressed
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
120 volatile uint16_t USBMouse_Buttons = 0;
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
121
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
122 // Relative mouse axis movement, stores pending movement
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
123 volatile uint16_t USBMouse_Relative_x = 0;
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
124 volatile uint16_t USBMouse_Relative_y = 0;
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
125
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
126 // Protocol setting from the host.
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
127 // 0 - Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
128 // 1 - NKRO Mode (Default, unless set by a BIOS or boot interface)
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
129 volatile uint8_t USBKeys_Protocol = USBProtocol_define;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
130
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
131 // Indicate if USB should send update
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
132 // OS only needs update if there has been a change in state
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
133 USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None;
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
134
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
135 // Indicate if USB should send update
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
136 USBMouseChangeState USBMouse_Changed = 0;
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
137
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
138 // the idle configuration, how often we send the report to the
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
139 // host (ms * 4) even when it hasn't changed
447
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
140 // 0 - Disables
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
141 uint8_t USBKeys_Idle_Config = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
142
447
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
143 // Count until idle timeout
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
144 uint32_t USBKeys_Idle_Expiry = 0;
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
145 uint8_t USBKeys_Idle_Count = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
146
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
147 // Indicates whether the Output module is fully functional
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
148 // 0 - Not fully functional, 1 - Fully functional
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
149 // 0 is often used to show that a USB cable is not plugged in (but has power)
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
150 volatile uint8_t Output_Available = 0;
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
151
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
152 // Debug control variable for Output modules
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
153 // 0 - Debug disabled (default)
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
154 // 1 - Debug enabled
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
155 uint8_t Output_DebugMode = 0;
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
156
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
157 // mA - Set by outside module if not using USB (i.e. Interconnect)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
158 // Generally set to 100 mA (low power) or 500 mA (high power)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
159 uint16_t Output_ExtCurrent_Available = 0;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
160
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
161 // mA - Set by USB module (if exists)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
162 // Initially 100 mA, but may be negotiated higher (e.g. 500 mA)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
163 uint16_t Output_USBCurrent_Available = 0;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
164
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
165
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
166
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
167 // ----- Capabilities -----
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
168
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
169 // Set Boot Keyboard Protocol
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
170 void Output_kbdProtocolBoot_capability( uint8_t state, uint8_t stateType, uint8_t *args )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
171 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
172 // Display capability name
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
173 if ( stateType == 0xFF && state == 0xFF )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
174 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
175 print("Output_kbdProtocolBoot()");
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
176 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
177 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
178
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
179 // Only set if necessary
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
180 if ( USBKeys_Protocol == 0 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
181 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
182
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
183 // TODO Analog inputs
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
184 // Only set on key press
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
185 if ( stateType != 0x01 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
186 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
187
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
188 // Flush the key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
189 Output_flushBuffers();
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
190
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
191 // Set the keyboard protocol to Boot Mode
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
192 USBKeys_Protocol = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
193 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
194
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
195
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
196 // Set NKRO Keyboard Protocol
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
197 void Output_kbdProtocolNKRO_capability( uint8_t state, uint8_t stateType, uint8_t *args )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
198 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
199 // Display capability name
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
200 if ( stateType == 0xFF && state == 0xFF )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
201 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
202 print("Output_kbdProtocolNKRO()");
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
203 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
204 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
205
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
206 // Only set if necessary
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
207 if ( USBKeys_Protocol == 1 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
208 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
209
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
210 // TODO Analog inputs
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
211 // Only set on key press
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
212 if ( stateType != 0x01 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
213 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
214
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
215 // Flush the key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
216 Output_flushBuffers();
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
217
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
218 // Set the keyboard protocol to NKRO Mode
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
219 USBKeys_Protocol = 1;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
220 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
221
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
222
445
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
223 // Toggle Keyboard Protocol
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
224 void Output_toggleKbdProtocol_capability( uint8_t state, uint8_t stateType, uint8_t *args )
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
225 {
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
226 // Display capability name
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
227 if ( stateType == 0xFF && state == 0xFF )
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
228 {
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
229 print("Output_toggleKbdProtocol()");
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
230 return;
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
231 }
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
232
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
233 // Only toggle protocol if release state
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
234 if ( stateType == 0x00 && state == 0x03 )
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
235 {
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
236 // Flush the key buffers
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
237 Output_flushBuffers();
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
238
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
239 // Toggle the keyboard protocol Mode
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
240 USBKeys_Protocol = !USBKeys_Protocol;
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
241 }
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
242 }
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
243
380e1f0123d0 Adding toggleKbdProtocol capability
José Luis Salvador Rufo <salvador.joseluis@gmail.com>
parents: 439
diff changeset
244
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
245 // Sends a Consumer Control code to the USB Output buffer
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
246 void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
247 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
248 // Display capability name
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
249 if ( stateType == 0xFF && state == 0xFF )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
250 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
251 print("Output_consCtrlSend(consCode)");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
252 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
253 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
254
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
255 // Not implemented in Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
256 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
257 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
258 warn_print("Consumer Control is not implemented for Boot Mode");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
259 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
260 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
261
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
262 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
263 // Only indicate USB has changed if either a press or release has occured
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
264 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
265 USBKeys_Changed |= USBKeyChangeState_Consumer;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
266
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
267 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
268 if ( stateType == 0x00 && state == 0x03 ) // Release state
290
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
269 {
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
270 USBKeys_ConsCtrl = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
271 return;
290
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
272 }
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
273
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
274 // Set consumer control code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
275 USBKeys_ConsCtrl = *(uint16_t*)(&args[0]);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
276 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
277
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
278
322
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
279 // Ignores the given key status update
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
280 // Used to prevent fall-through, this is the None keyword in KLL
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
281 void Output_noneSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
282 {
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
283 // Display capability name
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
284 if ( stateType == 0xFF && state == 0xFF )
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
285 {
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
286 print("Output_noneSend()");
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
287 return;
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
288 }
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
289
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
290 // Nothing to do, because that's the point :P
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
291 }
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
292
cc09f7e858bf Adding None capability.
Jacob Alexander <haata@kiibohd.com>
parents: 310
diff changeset
293
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
294 // Sends a System Control code to the USB Output buffer
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
295 void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
296 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
297 // Display capability name
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
298 if ( stateType == 0xFF && state == 0xFF )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
299 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
300 print("Output_sysCtrlSend(sysCode)");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
301 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
302 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
303
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
304 // Not implemented in Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
305 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
306 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
307 warn_print("System Control is not implemented for Boot Mode");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
308 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
309 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
310
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
311 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
312 // Only indicate USB has changed if either a press or release has occured
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
313 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
314 USBKeys_Changed |= USBKeyChangeState_System;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
315
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
316 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
317 if ( stateType == 0x00 && state == 0x03 ) // Release state
290
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
318 {
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
319 USBKeys_SysCtrl = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
320 return;
290
9c04b0253707 clear buffers on Consumer/System Control release
Victor Luft <victor@luft.io>
parents: 285
diff changeset
321 }
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
322
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
323 // Set system control code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
324 USBKeys_SysCtrl = args[0];
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
325 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
326
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
327
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
328 // Adds a single USB Code to the USB Output buffer
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
329 // Argument #1: USB Code
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
330 void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
331 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
332 // Display capability name
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
333 if ( stateType == 0xFF && state == 0xFF )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
334 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
335 print("Output_usbCodeSend(usbCode)");
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
336 return;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
337 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
338
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
339 // Depending on which mode the keyboard is in the USB needs Press/Hold/Release events
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
340 uint8_t keyPress = 0; // Default to key release, only used for NKRO
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
341 switch ( USBKeys_Protocol )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
342 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
343 case 0: // Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
344 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
345 // Only indicate USB has changed if either a press or release has occured
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
346 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
347 USBKeys_Changed = USBKeyChangeState_MainKeys;
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
348
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
349 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
350 if ( stateType == 0x00 && state == 0x03 ) // Release state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
351 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
352 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
353 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
354 // Only send press and release events
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
355 if ( stateType == 0x00 && state == 0x02 ) // Hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
356 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
357
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
358 // Determine if setting or unsetting the bitfield (press == set)
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
359 if ( stateType == 0x00 && state == 0x01 ) // Press state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
360 keyPress = 1;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
361 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
362 }
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 195
diff changeset
363
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
364 // Get the keycode from arguments
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
365 uint8_t key = args[0];
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
366
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
367 // Depending on which mode the keyboard is in, USBKeys_Keys array is used differently
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
368 // Boot mode - Maximum of 6 byte codes
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
369 // NKRO mode - Each bit of the 26 byte corresponds to a key
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
370 // Bits 0 - 45 (bytes 0 - 5) correspond to USB Codes 4 - 49 (Main)
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
371 // Bits 48 - 161 (bytes 6 - 20) correspond to USB Codes 51 - 164 (Secondary)
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
372 // Bits 168 - 213 (bytes 21 - 26) correspond to USB Codes 176 - 221 (Tertiary)
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
373 // Bits 214 - 216 unused
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
374 uint8_t bytePosition = 0;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
375 uint8_t byteShift = 0;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
376 switch ( USBKeys_Protocol )
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
377 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
378 case 0: // Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
379 // Set the modifier bit if this key is a modifier
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
380 if ( (key & 0xE0) == 0xE0 ) // AND with 0xE0 (Left Ctrl, first modifier)
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
381 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
382 USBKeys_Modifiers |= 1 << (key ^ 0xE0); // Left shift 1 by key XOR 0xE0
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
383 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
384 // Normal USB Code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
385 else
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
386 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
387 // USB Key limit reached
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
388 if ( USBKeys_Sent >= USB_BOOT_MAX_KEYS )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
389 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
390 warn_print("USB Key limit reached");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
391 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
392 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
393
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
394 // Make sure key is within the USB HID range
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
395 if ( key <= 104 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
396 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
397 USBKeys_Keys[USBKeys_Sent++] = key;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
398 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
399 // Invalid key
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
400 else
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
401 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
402 warn_msg("USB Code above 104/0x68 in Boot Mode: ");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
403 printHex( key );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
404 print( NL );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
405 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
406 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
407 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
408
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
409 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
410 // Set the modifier bit if this key is a modifier
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
411 if ( (key & 0xE0) == 0xE0 ) // AND with 0xE0 (Left Ctrl, first modifier)
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
412 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
413 if ( keyPress )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
414 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
415 USBKeys_Modifiers |= 1 << (key ^ 0xE0); // Left shift 1 by key XOR 0xE0
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
416 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
417 else // Release
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
418 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
419 USBKeys_Modifiers &= ~(1 << (key ^ 0xE0)); // Left shift 1 by key XOR 0xE0
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
420 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
421
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
422 USBKeys_Changed |= USBKeyChangeState_Modifiers;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
423 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
424 }
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
425 // First 6 bytes
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
426 else if ( key >= 4 && key <= 49 )
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
427 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
428 // Lookup (otherwise division or multiple checks are needed to do alignment)
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
429 // Starting at 0th position, each byte has 8 bits, starting at 4th bit
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
430 uint8_t keyPos = key + (0 * 8 - 4); // Starting position in array, Ignoring 4 keys
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
431 switch ( keyPos )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
432 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
433 byteLookup( 0 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
434 byteLookup( 1 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
435 byteLookup( 2 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
436 byteLookup( 3 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
437 byteLookup( 4 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
438 byteLookup( 5 );
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
439 }
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
440
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
441 USBKeys_Changed |= USBKeyChangeState_MainKeys;
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
442 }
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
443 // Next 14 bytes
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
444 else if ( key >= 51 && key <= 155 )
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
445 {
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
446 // Lookup (otherwise division or multiple checks are needed to do alignment)
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
447 // Starting at 6th byte position, each byte has 8 bits, starting at 51st bit
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
448 uint8_t keyPos = key + (6 * 8 - 51); // Starting position in array
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
449 switch ( keyPos )
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
450 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
451 byteLookup( 6 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
452 byteLookup( 7 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
453 byteLookup( 8 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
454 byteLookup( 9 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
455 byteLookup( 10 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
456 byteLookup( 11 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
457 byteLookup( 12 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
458 byteLookup( 13 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
459 byteLookup( 14 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
460 byteLookup( 15 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
461 byteLookup( 16 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
462 byteLookup( 17 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
463 byteLookup( 18 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
464 byteLookup( 19 );
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
465 }
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
466
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
467 USBKeys_Changed |= USBKeyChangeState_SecondaryKeys;
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
468 }
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
469 // Next byte
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
470 else if ( key >= 157 && key <= 164 )
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
471 {
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
472 // Lookup (otherwise division or multiple checks are needed to do alignment)
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
473 uint8_t keyPos = key + (20 * 8 - 157); // Starting position in array, Ignoring 6 keys
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
474 switch ( keyPos )
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
475 {
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
476 byteLookup( 20 );
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
477 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
478
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
479 USBKeys_Changed |= USBKeyChangeState_TertiaryKeys;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
480 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
481 // Last 6 bytes
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
482 else if ( key >= 176 && key <= 221 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
483 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
484 // Lookup (otherwise division or multiple checks are needed to do alignment)
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
485 uint8_t keyPos = key + (21 * 8 - 176); // Starting position in array
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
486 switch ( keyPos )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
487 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
488 byteLookup( 21 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
489 byteLookup( 22 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
490 byteLookup( 23 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
491 byteLookup( 24 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
492 byteLookup( 25 );
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
493 byteLookup( 26 );
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
494 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
495
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
496 USBKeys_Changed |= USBKeyChangeState_QuartiaryKeys;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
497 }
244
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
498 // Received 0x00
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
499 // This is a special USB Code that internally indicates a "break"
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
500 // It is used to send "nothing" in order to break up sequences of USB Codes
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
501 else if ( key == 0x00 )
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
502 {
252
627bacaeb1ea Fixing sequences (after NKRO HID descriptor re-design).
Jacob Alexander <haata@kiibohd.com>
parents: 249
diff changeset
503 USBKeys_Changed |= USBKeyChangeState_MainKeys;
244
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
504
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
505 // Also flush out buffers just in case
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
506 Output_flushBuffers();
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
507 break;
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
508 }
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
509 // Invalid key
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
510 else
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
511 {
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
512 warn_msg("USB Code not within 4-49 (0x4-0x31), 51-155 (0x33-0x9B), 157-164 (0x9D-0xA4), 176-221 (0xB0-0xDD) or 224-231 (0xE0-0xE7) NKRO Mode: ");
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
513 printHex( key );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
514 print( NL );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
515 break;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
516 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
517
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
518 // Set/Unset
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
519 if ( keyPress )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
520 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
521 USBKeys_Keys[bytePosition] |= (1 << byteShift);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
522 USBKeys_Sent++;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
523 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
524 else // Release
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
525 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
526 USBKeys_Keys[bytePosition] &= ~(1 << byteShift);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
527 USBKeys_Sent++;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
528 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
529
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
530 break;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
531 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
532 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
533
370
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
534 void Output_flashMode_capability( uint8_t state, uint8_t stateType, uint8_t *args )
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
535 {
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
536 // Display capability name
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
537 if ( stateType == 0xFF && state == 0xFF )
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
538 {
385
d8f61e15aca1 Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents: 370
diff changeset
539 print("Output_flashMode()");
370
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
540 return;
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
541 }
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
542
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
543 // Start flash mode
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
544 Output_firmwareReload();
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
545 }
39e338a6733d Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents: 347
diff changeset
546
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
547 // Sends a mouse command over the USB Output buffer
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
548 // XXX This function *will* be changing in the future
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
549 // If you use it, be prepared that your .kll files will break in the future (post KLL 0.5)
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
550 // Argument #1: USB Mouse Button (16 bit)
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
551 // Argument #2: USB X Axis (16 bit) relative
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
552 // Argument #3: USB Y Axis (16 bit) relative
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
553 void Output_usbMouse_capability( uint8_t state, uint8_t stateType, uint8_t *args )
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
554 {
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
555 // Display capability name
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
556 if ( stateType == 0xFF && state == 0xFF )
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
557 {
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
558 print("Output_usbMouse(mouseButton,relX,relY)");
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
559 return;
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
560 }
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
561
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
562 // Determine which mouse button was sent
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
563 // The USB spec defines up to a max of 0xFFFF buttons
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
564 // The usual are:
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
565 // 1 - Button 1 - (Primary)
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
566 // 2 - Button 2 - (Secondary)
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
567 // 3 - Button 3 - (Tertiary)
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
568 uint16_t mouse_button = *(uint16_t*)(&args[0]);
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
569
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
570 // X/Y Relative Axis
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
571 uint16_t mouse_x = *(uint16_t*)(&args[2]);
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
572 uint16_t mouse_y = *(uint16_t*)(&args[4]);
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
573
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
574 // Adjust for bit shift
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
575 uint16_t mouse_button_shift = mouse_button - 1;
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
576
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
577 // Only send mouse button if in press or hold state
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
578 if ( stateType == 0x00 && state == 0x03 ) // Release state
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
579 {
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
580 // Release
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
581 if ( mouse_button )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
582 USBMouse_Buttons &= ~(1 << mouse_button_shift);
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
583 }
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
584 else
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
585 {
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
586 // Press or hold
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
587 if ( mouse_button )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
588 USBMouse_Buttons |= (1 << mouse_button_shift);
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
589
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
590 if ( mouse_x )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
591 USBMouse_Relative_x = mouse_x;
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
592 if ( mouse_y )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
593 USBMouse_Relative_y = mouse_y;
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
594 }
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
595
430
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
596 // Trigger updates
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
597 if ( mouse_button )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
598 USBMouse_Changed |= USBMouseChangeState_Buttons;
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
599
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
600 if ( mouse_x || mouse_y )
d3cef419c849 Adding relative movement mouse key support
Jacob Alexander <haata@kiibohd.com>
parents: 429
diff changeset
601 USBMouse_Changed |= USBMouseChangeState_Relative;
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
602 }
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
603
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
604
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
605
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
606 // ----- Functions -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
607
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
608 // Flush Key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
609 void Output_flushBuffers()
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
610 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
611 // Zero out USBKeys_Keys array
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
612 for ( uint8_t c = 0; c < USB_NKRO_BITFIELD_SIZE_KEYS; c++ )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
613 USBKeys_Keys[ c ] = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
614
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
615 // Zero out other key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
616 USBKeys_ConsCtrl = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
617 USBKeys_Modifiers = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
618 USBKeys_SysCtrl = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
619 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
620
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
621
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
622 // USB Module Setup
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
623 inline void Output_setup()
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
624 {
347
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
625 // Initialize the USB
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
626 // If a USB connection does not exist, just ignore it
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
627 // All usb related functions will non-fatally fail if called
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
628 // If the USB initialization is delayed, then functionality will just be delayed
136e47478441 UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents: 322
diff changeset
629 usb_init();
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
630
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
631 // Register USB Output CLI dictionary
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
632 CLI_registerDictionary( outputCLIDict, outputCLIDictName );
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
633
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
634 // Flush key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
635 Output_flushBuffers();
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
636 }
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
637
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
638
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
639 // USB Data Send
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
640 inline void Output_send()
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
641 {
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
642 // USB status checks
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
643 // Non-standard USB state manipulation, usually does nothing
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
644 usb_device_check();
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
645
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
646 // Boot Mode Only, unset stale keys
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
647 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
648 for ( uint8_t c = USBKeys_Sent; c < USB_BOOT_MAX_KEYS; c++ )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
649 USBKeys_Keys[c] = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
650
447
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
651 // XXX - Behaves oddly on Mac OSX, might help with corrupted packets specific to OSX? -HaaTa
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
652 /*
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
653 // Check if idle count has been exceed, this forces usb_keyboard_send and usb_mouse_send to update
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
654 // TODO Add joystick as well (may be endpoint specific, currently not kept track of)
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
655 if ( usb_configuration && USBKeys_Idle_Config && (
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
656 USBKeys_Idle_Expiry < systick_millis_count ||
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
657 USBKeys_Idle_Expiry + USBKeys_Idle_Config * 4 >= systick_millis_count ) )
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
658 {
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
659 USBKeys_Changed = USBKeyChangeState_All;
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
660 USBMouse_Changed = USBMouseChangeState_All;
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
661 }
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
662 */
56237ba5da6f Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents: 445
diff changeset
663
429
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
664 // Process mouse actions
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
665 while ( USBMouse_Changed )
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
666 usb_mouse_send();
970dab727f47 Adding basic mouse button support
Jacob Alexander <haata@kiibohd.com>
parents: 420
diff changeset
667
224
138e5ca7f8e4 Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents: 223
diff changeset
668 // Send keypresses while there are pending changes
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
669 while ( USBKeys_Changed )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
670 usb_keyboard_send();
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
671
249
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
672 // Clear keys sent
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
673 USBKeys_Sent = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
674
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents: 177
diff changeset
675 // Signal Scan Module we are finished
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
676 switch ( USBKeys_Protocol )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
677 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
678 case 0: // Boot Mode
249
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
679 // Clear modifiers only in boot mode
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
680 USBKeys_Modifiers = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
681 Scan_finishedWithOutput( USBKeys_Sent <= USB_BOOT_MAX_KEYS ? USBKeys_Sent : USB_BOOT_MAX_KEYS );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
682 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
683 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
684 Scan_finishedWithOutput( USBKeys_Sent );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
685 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
686 }
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
687 }
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
688
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
689
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
690 // Sets the device into firmware reload mode
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
691 inline void Output_firmwareReload()
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
692 {
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
693 usb_device_reload();
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
694 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
695
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
696
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
697 // USB Input buffer available
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
698 inline unsigned int Output_availablechar()
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
699 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
700 return usb_serial_available();
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
701 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
702
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
703
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
704 // USB Get Character from input buffer
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
705 inline int Output_getchar()
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
706 {
177
3420e018ffbc Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 175
diff changeset
707 // XXX Make sure to check output_availablechar() first! Information is lost with the cast (error codes) (AVR)
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
708 return (int)usb_serial_getchar();
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
709 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
710
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
711
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
712 // USB Send Character to output buffer
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
713 inline int Output_putchar( char c )
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
714 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
715 return usb_serial_putchar( c );
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
716 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
717
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
718
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
719 // USB Send String to output buffer, null terminated
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
720 inline int Output_putstr( char* str )
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
721 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
722 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
723 uint16_t count = 0;
263
9afed592bcb5 Preparing for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 252
diff changeset
724 #elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
725 uint32_t count = 0;
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
726 #endif
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
727 // Count characters until NULL character, then send the amount counted
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
728 while ( str[count] != '\0' )
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
729 count++;
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
730
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
731 return usb_serial_write( str, count );
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
732 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
733
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
734
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
735 // Soft Chip Reset
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
736 inline void Output_softReset()
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
737 {
177
3420e018ffbc Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 175
diff changeset
738 usb_device_software_reset();
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
739 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
740
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
741
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
742 // Update USB current (mA)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
743 // Triggers power change event
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
744 void Output_update_usb_current( unsigned int current )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
745 {
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
746 // Only signal if changed
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
747 if ( current == Output_USBCurrent_Available )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
748 return;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
749
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
750 // Update USB current
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
751 Output_USBCurrent_Available = current;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
752
439
68e19d7c953e Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents: 430
diff changeset
753 /* XXX Affects sleep states due to USB messages
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
754 unsigned int total_current = Output_current_available();
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
755 info_msg("USB Available Current Changed. Total Available: ");
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
756 printInt32( total_current );
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
757 print(" mA" NL);
439
68e19d7c953e Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents: 430
diff changeset
758 */
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
759
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
760 // Send new total current to the Scan Modules
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
761 Scan_currentChange( Output_current_available() );
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
762 }
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
763
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
764
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
765 // Update external current (mA)
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
766 // Triggers power change event
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
767 void Output_update_external_current( unsigned int current )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
768 {
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
769 // Only signal if changed
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
770 if ( current == Output_ExtCurrent_Available )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
771 return;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
772
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
773 // Update external current
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
774 Output_ExtCurrent_Available = current;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
775
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
776 unsigned int total_current = Output_current_available();
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
777 info_msg("External Available Current Changed. Total Available: ");
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
778 printInt32( total_current );
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
779 print(" mA" NL);
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
780
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
781 // Send new total current to the Scan Modules
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
782 Scan_currentChange( Output_current_available() );
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
783 }
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
784
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
785
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
786 // Power/Current Available
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
787 unsigned int Output_current_available()
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
788 {
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
789 unsigned int total_current = 0;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
790
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
791 // Check for USB current source
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
792 total_current += Output_USBCurrent_Available;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
793
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
794 // Check for external current source
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
795 total_current += Output_ExtCurrent_Available;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
796
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
797 // XXX If the total available current is still 0
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
798 // Set to 100 mA, which is generally a safe assumption at startup
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
799 // before we've been able to determine actual available current
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
800 if ( total_current == 0 )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
801 {
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
802 total_current = 100;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
803 }
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
804
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
805 return total_current;
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
806 }
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
807
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
808
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 385
diff changeset
809
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
810 // ----- CLI Command Functions -----
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
811
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
812 void cliFunc_kbdProtocol( char* args )
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
813 {
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
814 print( NL );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
815 info_msg("Keyboard Protocol: ");
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
816 printInt8( USBKeys_Protocol );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
817 }
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
818
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
819
285
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
820 void cliFunc_outputDebug( char* args )
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
821 {
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
822 // Parse number from argument
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
823 // NOTE: Only first argument is used
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
824 char* arg1Ptr;
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
825 char* arg2Ptr;
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
826 CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
827
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
828 // Default to 1 if no argument is given
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
829 Output_DebugMode = 1;
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
830
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
831 if ( arg1Ptr[0] != '\0' )
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
832 {
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
833 Output_DebugMode = (uint16_t)numToInt( arg1Ptr );
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
834 }
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
835 }
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
836
1495b4504a59 Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents: 275
diff changeset
837
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
838 void cliFunc_readLEDs( char* args )
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
839 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
840 print( NL );
212
2794931a4d30 DPH controller now working with macros/layers
Jacob Alexander <haata@kiibohd.com>
parents: 201
diff changeset
841 info_msg("LED State: ");
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
842 printInt8( USBKeys_LEDs );
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
843 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
844
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
845
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
846 void cliFunc_sendKeys( char* args )
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
847 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
848 // Copy USBKeys_KeysCLI to USBKeys_Keys
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
849 for ( uint8_t key = 0; key < USBKeys_SentCLI; ++key )
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
850 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
851 // TODO
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
852 //USBKeys_Keys[key] = USBKeys_KeysCLI[key];
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
853 }
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
854 USBKeys_Sent = USBKeys_SentCLI;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
855
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
856 // Set modifier byte
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
857 USBKeys_Modifiers = USBKeys_ModifiersCLI;
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
858 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
859
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
860
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
861 void cliFunc_setKeys( char* args )
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
862 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
863 char* curArgs;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
864 char* arg1Ptr;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
865 char* arg2Ptr = args;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
866
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
867 // Parse up to USBKeys_MaxSize args (whichever is least)
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
868 for ( USBKeys_SentCLI = 0; USBKeys_SentCLI < USB_BOOT_MAX_KEYS; ++USBKeys_SentCLI )
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
869 {
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
870 curArgs = arg2Ptr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
871 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
872
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
873 // Stop processing args if no more are found
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
874 if ( *arg1Ptr == '\0' )
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
875 break;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
876
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
877 // Add the USB code to be sent
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
878 // TODO
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
879 //USBKeys_KeysCLI[USBKeys_SentCLI] = numToInt( arg1Ptr );
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
880 }
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
881 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
882
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
883
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
884 void cliFunc_setMod( char* args )
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
885 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
886 // Parse number from argument
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
887 // NOTE: Only first argument is used
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
888 char* arg1Ptr;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
889 char* arg2Ptr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
890 CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
891
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
892 USBKeys_ModifiersCLI = numToInt( arg1Ptr );
123
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
893 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
894