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

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