annotate Output/pjrcUSB/output_com.c @ 308:ab4515606277

Fix whitespace Use a consistent standard - Tabs in front for indenting, spaces after for anything else. This way everything stays nice and lined up while also letting users change there prefered indent level. Most of the new files from Haata where already in this format.
author Rowan Decker <Smasher816@gmail.com>
date Sun, 08 Mar 2015 18:40:01 -0700
parents d5bf41d7f7ef
children 4f47971c45c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
1 /* Copyright (C) 2011-2015 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"
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
40 #endif
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
41
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
42 // Local Includes
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
43 #include "output_com.h"
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
44
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
45
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
46
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
47 // ----- Macros -----
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
48
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
49 // Used to build a bitmap lookup table from a byte addressable array
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
50 #define byteLookup( byte ) case (( byte ) * ( 8 )): bytePosition = byte; byteShift = 0; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
51 case (( byte ) * ( 8 ) + ( 1 )): bytePosition = byte; byteShift = 1; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
52 case (( byte ) * ( 8 ) + ( 2 )): bytePosition = byte; byteShift = 2; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
53 case (( byte ) * ( 8 ) + ( 3 )): bytePosition = byte; byteShift = 3; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
54 case (( byte ) * ( 8 ) + ( 4 )): bytePosition = byte; byteShift = 4; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
55 case (( byte ) * ( 8 ) + ( 5 )): bytePosition = byte; byteShift = 5; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
56 case (( byte ) * ( 8 ) + ( 6 )): bytePosition = byte; byteShift = 6; break; \
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
57 case (( byte ) * ( 8 ) + ( 7 )): bytePosition = byte; byteShift = 7; break
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
58
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
59
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
60
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
61 // ----- 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
62
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
63 void cliFunc_kbdProtocol( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
64 void cliFunc_readLEDs ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
65 void cliFunc_sendKeys ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
66 void cliFunc_setKeys ( char* args );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
67 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
68
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
69
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
70
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
71 // ----- Variables -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
72
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
73 // Output Module command dictionary
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
74 CLIDict_Entry( kbdProtocol, "Keyboard Protocol Mode: 0 - Boot, 1 - OS/NKRO Mode" );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
75 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
76 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
77 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
78 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
79
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
80 CLIDict_Def( outputCLIDict, "USB Module Commands" ) = {
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
81 CLIDict_Item( kbdProtocol ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
82 CLIDict_Item( readLEDs ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
83 CLIDict_Item( sendKeys ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
84 CLIDict_Item( setKeys ),
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 236
diff changeset
85 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
86 { 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
87 };
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
88
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
89
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
90 // 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
91 // 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
92 // 16=right ctrl, 32=right shift, 64=right alt, 128=right gui
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
93 uint8_t USBKeys_Modifiers = 0;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
94 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
95
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
96 // Currently pressed keys, max is defined by USB_MAX_KEY_SEND
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
97 uint8_t USBKeys_Keys [USB_NKRO_BITFIELD_SIZE_KEYS];
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
98 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
99
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
100 // System Control and Consumer Control 1KRO containers
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
101 uint8_t USBKeys_SysCtrl;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
102 uint16_t USBKeys_ConsCtrl;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
103
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
104 // The number of keys sent to the usb in the array
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
105 uint8_t USBKeys_Sent = 0;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
106 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
107
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
108 // 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
109 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
110
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
111 // Protocol setting from the host.
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
112 // 0 - Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
113 // 1 - NKRO Mode (Default, unless set by a BIOS or boot interface)
232
9a3c9f6f4866 USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents: 224
diff changeset
114 volatile uint8_t USBKeys_Protocol = 1;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
115
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
116 // Indicate if USB should send update
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
117 // 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
118 USBKeyChangeState USBKeys_Changed = USBKeyChangeState_None;
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
119
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
120 // 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
121 // host (ms * 4) even when it hasn't changed
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
122 uint8_t USBKeys_Idle_Config = 125;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
123
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
124 // count until idle timeout
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
125 uint8_t USBKeys_Idle_Count = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
126
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
127 // Indicates whether the Output module is fully functional
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
128 // 0 - Not fully functional, 1 - Fully functional
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
129 // 0 is often used to show that a USB cable is not plugged in (but has power)
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 275
diff changeset
130 uint8_t Output_Available = 0;
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
131
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
132
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
133
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
134 // ----- Capabilities -----
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
135
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
136 // Set Boot Keyboard Protocol
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
137 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
138 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
139 // Display capability name
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
140 if ( stateType == 0xFF && state == 0xFF )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
141 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
142 print("Output_kbdProtocolBoot()");
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
143 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
144 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
145
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
146 // Only set if necessary
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
147 if ( USBKeys_Protocol == 0 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
148 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
149
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
150 // TODO Analog inputs
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
151 // Only set on key press
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
152 if ( stateType != 0x01 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
153 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
154
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
155 // Flush the key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
156 Output_flushBuffers();
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
157
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
158 // Set the keyboard protocol to Boot Mode
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
159 USBKeys_Protocol = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
160 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
161
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
162
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
163 // Set NKRO Keyboard Protocol
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
164 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
165 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
166 // Display capability name
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
167 if ( stateType == 0xFF && state == 0xFF )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
168 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
169 print("Output_kbdProtocolNKRO()");
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
170 return;
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
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
173 // Only set if necessary
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
174 if ( USBKeys_Protocol == 1 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
175 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
176
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
177 // TODO Analog inputs
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
178 // Only set on key press
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
179 if ( stateType != 0x01 )
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
180 return;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
181
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
182 // Flush the key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
183 Output_flushBuffers();
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
184
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
185 // Set the keyboard protocol to NKRO Mode
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
186 USBKeys_Protocol = 1;
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
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
189
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
190 // 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
191 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
192 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
193 // Display capability name
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
194 if ( stateType == 0xFF && state == 0xFF )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
195 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
196 print("Output_consCtrlSend(consCode)");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
197 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
198 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
199
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
200 // Not implemented in Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
201 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
202 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
203 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
204 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
205 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
206
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
207 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
208 // 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
209 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
210 USBKeys_Changed |= USBKeyChangeState_Consumer;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
211
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
212 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
213 if ( stateType == 0x00 && state == 0x03 ) // Release state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
214 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
215
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
216 // Set consumer control code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
217 USBKeys_ConsCtrl = *(uint16_t*)(&args[0]);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
218 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
219
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
220
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
221 // 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
222 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
223 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
224 // Display capability name
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
225 if ( stateType == 0xFF && state == 0xFF )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
226 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
227 print("Output_sysCtrlSend(sysCode)");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
228 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
229 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
230
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
231 // Not implemented in Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
232 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
233 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
234 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
235 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
236 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
237
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
238 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
239 // 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
240 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
241 USBKeys_Changed |= USBKeyChangeState_System;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
242
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
243 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
244 if ( stateType == 0x00 && state == 0x03 ) // Release state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
245 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
246
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
247 // Set system control code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
248 USBKeys_SysCtrl = args[0];
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
249 }
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
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
252 // 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
253 // Argument #1: USB Code
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
254 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
255 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
256 // Display capability name
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
257 if ( stateType == 0xFF && state == 0xFF )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
258 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
259 print("Output_usbCodeSend(usbCode)");
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
260 return;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
261 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
262
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
263 // 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
264 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
265 switch ( USBKeys_Protocol )
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 case 0: // Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
268 // TODO Analog inputs
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
269 // 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
270 if ( state == 0x01 || state == 0x03 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
271 USBKeys_Changed = USBKeyChangeState_MainKeys;
218
78e89528487f Fixing USB send rate.
Jacob Alexander <haata@kiibohd.com>
parents: 212
diff changeset
272
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
273 // Only send keypresses if press or hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
274 if ( stateType == 0x00 && state == 0x03 ) // Release state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
275 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
276 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
277 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
278 // Only send press and release events
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
279 if ( stateType == 0x00 && state == 0x02 ) // Hold state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
280 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
281
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
282 // 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
283 if ( stateType == 0x00 && state == 0x01 ) // Press state
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
284 keyPress = 1;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
285 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
286 }
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 195
diff changeset
287
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
288 // Get the keycode from arguments
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
289 uint8_t key = args[0];
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
290
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
291 // 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
292 // Boot mode - Maximum of 6 byte codes
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
293 // 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
294 // 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
295 // 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
296 // 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
297 // Bits 214 - 216 unused
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
298 uint8_t bytePosition = 0;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
299 uint8_t byteShift = 0;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
300 switch ( USBKeys_Protocol )
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
301 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
302 case 0: // Boot Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
303 // 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
304 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
305 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
306 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
307 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
308 // Normal USB Code
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
309 else
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 // USB Key limit reached
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
312 if ( USBKeys_Sent >= USB_BOOT_MAX_KEYS )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
313 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
314 warn_print("USB Key limit reached");
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
315 return;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
316 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
317
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
318 // 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
319 if ( key <= 104 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
320 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
321 USBKeys_Keys[USBKeys_Sent++] = key;
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 // Invalid key
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
324 else
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 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
327 printHex( key );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
328 print( NL );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
329 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
330 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
331 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
332
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
333 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
334 // 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
335 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
336 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
337 if ( keyPress )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
338 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
339 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
340 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
341 else // Release
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 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
344 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
345
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
346 USBKeys_Changed |= USBKeyChangeState_Modifiers;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
347 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
348 }
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
349 // First 6 bytes
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
350 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
351 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
352 // 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
353 // 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
354 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
355 switch ( keyPos )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
356 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
357 byteLookup( 0 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
358 byteLookup( 1 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
359 byteLookup( 2 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
360 byteLookup( 3 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
361 byteLookup( 4 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
362 byteLookup( 5 );
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
363 }
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
364
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
365 USBKeys_Changed |= USBKeyChangeState_MainKeys;
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
366 }
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
367 // Next 14 bytes
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
368 else if ( key >= 51 && key <= 155 )
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
369 {
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
370 // 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
371 // 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
372 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
373 switch ( keyPos )
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
374 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
375 byteLookup( 6 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
376 byteLookup( 7 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
377 byteLookup( 8 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
378 byteLookup( 9 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
379 byteLookup( 10 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
380 byteLookup( 11 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
381 byteLookup( 12 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
382 byteLookup( 13 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
383 byteLookup( 14 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
384 byteLookup( 15 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
385 byteLookup( 16 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
386 byteLookup( 17 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
387 byteLookup( 18 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
388 byteLookup( 19 );
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
389 }
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
390
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
391 USBKeys_Changed |= USBKeyChangeState_SecondaryKeys;
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
392 }
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
393 // Next byte
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
394 else if ( key >= 157 && key <= 164 )
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
395 {
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
396 // 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
397 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
398 switch ( keyPos )
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
399 {
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
400 byteLookup( 20 );
223
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
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
403 USBKeys_Changed |= USBKeyChangeState_TertiaryKeys;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
404 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
405 // Last 6 bytes
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
406 else if ( key >= 176 && key <= 221 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
407 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
408 // 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
409 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
410 switch ( keyPos )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
411 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
412 byteLookup( 21 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
413 byteLookup( 22 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
414 byteLookup( 23 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
415 byteLookup( 24 );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
416 byteLookup( 25 );
236
d494b74d5242 Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents: 234
diff changeset
417 byteLookup( 26 );
223
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
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
420 USBKeys_Changed |= USBKeyChangeState_QuartiaryKeys;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
421 }
244
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
422 // Received 0x00
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
423 // 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
424 // 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
425 else if ( key == 0x00 )
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
426 {
252
627bacaeb1ea Fixing sequences (after NKRO HID descriptor re-design).
Jacob Alexander <haata@kiibohd.com>
parents: 249
diff changeset
427 USBKeys_Changed |= USBKeyChangeState_MainKeys;
244
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
428
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
429 // Also flush out buffers just in case
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
430 Output_flushBuffers();
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
431 break;
68d2e5c96e72 USB Macro Output sequences now working!
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
432 }
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
433 // Invalid key
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
434 else
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
435 {
248
2e098cf8f71d Fixing Linux NKRO Delete bug
Jacob Alexander <haata@kiibohd.com>
parents: 244
diff changeset
436 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
437 printHex( key );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
438 print( NL );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
439 break;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
440 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
441
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
442 // Set/Unset
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
443 if ( keyPress )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
444 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
445 USBKeys_Keys[bytePosition] |= (1 << byteShift);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
446 USBKeys_Sent++;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
447 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
448 else // Release
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
449 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
450 USBKeys_Keys[bytePosition] &= ~(1 << byteShift);
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
451 USBKeys_Sent++;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
452 }
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
453
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
454 break;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
455 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
456 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
457
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
458
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
459
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
460 // ----- Functions -----
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
461
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
462 // Flush Key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
463 void Output_flushBuffers()
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
464 {
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
465 // Zero out USBKeys_Keys array
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
466 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
467 USBKeys_Keys[ c ] = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
468
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
469 // Zero out other key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
470 USBKeys_ConsCtrl = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
471 USBKeys_Modifiers = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
472 USBKeys_SysCtrl = 0;
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
473 }
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
474
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
475
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
476 // USB Module Setup
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
477 inline void Output_setup()
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
478 {
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
479 // Initialize the USB, and then wait for the host to set configuration.
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
480 // This will hang forever if USB does not initialize
275
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
481 // If no USB cable is attached, does not try and initialize USB
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
482 if ( usb_init() )
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
483 {
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
484 while ( !usb_configured() );
d5bf41d7f7ef Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents: 263
diff changeset
485 }
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
486
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
487 // Register USB Output CLI dictionary
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
488 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
489
234
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
490 // Flush key buffers
aaf14110ea7b Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 232
diff changeset
491 Output_flushBuffers();
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
492 }
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
493
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
494
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
495 // USB Data Send
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
496 inline void Output_send()
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
497 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
498 // Boot Mode Only, unset stale keys
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
499 if ( USBKeys_Protocol == 0 )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
500 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
501 USBKeys_Keys[c] = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
502
224
138e5ca7f8e4 Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents: 223
diff changeset
503 // Send keypresses while there are pending changes
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
504 while ( USBKeys_Changed )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
505 usb_keyboard_send();
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
506
249
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
507 // Clear keys sent
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
508 USBKeys_Sent = 0;
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
509
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents: 177
diff changeset
510 // Signal Scan Module we are finished
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
511 switch ( USBKeys_Protocol )
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
512 {
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
513 case 0: // Boot Mode
249
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
514 // Clear modifiers only in boot mode
ca9a6839e1ce Fixing NKRO modifier bug
Jacob Alexander <haata@kiibohd.com>
parents: 248
diff changeset
515 USBKeys_Modifiers = 0;
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
516 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
517 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
518 case 1: // NKRO Mode
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
519 Scan_finishedWithOutput( USBKeys_Sent );
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
520 break;
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
521 }
104
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
522 }
e84738d174bc Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
523
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
524
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
525 // 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
526 inline void Output_firmwareReload()
109
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
527 {
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
528 usb_device_reload();
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
529 }
2c1a9e6ae70e Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents: 105
diff changeset
530
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
531
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
532 // USB Input buffer available
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
533 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
534 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
535 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
536 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
537
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
538
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
539 // 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
540 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
541 {
177
3420e018ffbc Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 175
diff changeset
542 // 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
543 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
544 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
545
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
546
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
547 // 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
548 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
549 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
550 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
551 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
552
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
553
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
554 // 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
555 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
556 {
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
557 #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
558 uint16_t count = 0;
263
9afed592bcb5 Preparing for mk20dx256vlh7
Jacob Alexander <haata@kiibohd.com>
parents: 252
diff changeset
559 #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
560 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
561 #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
562 // 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
563 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
564 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
565
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
566 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
567 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
568
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
569
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
570 // Soft Chip Reset
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
571 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
572 {
177
3420e018ffbc Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 175
diff changeset
573 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
574 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
575
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
576
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
577 // ----- 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
578
165
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
579 void cliFunc_kbdProtocol( char* args )
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
580 {
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
581 print( NL );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
582 info_msg("Keyboard Protocol: ");
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
583 printInt8( USBKeys_Protocol );
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
584 }
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
585
0d992d26114f Preparing from initial AVR USB NKRO support.
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
586
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
587 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
588 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
589 print( NL );
212
2794931a4d30 DPH controller now working with macros/layers
Jacob Alexander <haata@kiibohd.com>
parents: 201
diff changeset
590 info_msg("LED State: ");
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
591 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
592 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
593
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
594
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
595 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
596 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
597 // 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
598 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
599 {
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
600 // TODO
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
601 //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
602 }
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
603 USBKeys_Sent = USBKeys_SentCLI;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
604
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
605 // Set modifier byte
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
606 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
607 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
608
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
609
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
610 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
611 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
612 char* curArgs;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
613 char* arg1Ptr;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
614 char* arg2Ptr = args;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
615
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
616 // 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
617 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
618 {
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
619 curArgs = arg2Ptr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
620 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
621
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
622 // 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
623 if ( *arg1Ptr == '\0' )
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
624 break;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
625
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
626 // Add the USB code to be sent
223
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
627 // TODO
fc3b9cb190cc Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents: 218
diff changeset
628 //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
629 }
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
630 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
631
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
632
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 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
634 {
124
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
635 // Parse number from argument
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
636 // 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
637 char* arg1Ptr;
2b81083dcaef Adding the CLI commands to the USB output module.
Jacob Alexander <haata@kiibohd.com>
parents: 123
diff changeset
638 char* arg2Ptr;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents: 124
diff changeset
639 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
640
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
641 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
642 }
0c5d1fe99302 Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents: 122
diff changeset
643