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