Mercurial > louis > kiibohd-controller
annotate Output/pjrcUSB/output_com.h @ 237:01b686cc94e8
Fixing USB NKRO key buffer bug
- Missing a byte in the array
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Thu, 02 Oct 2014 19:29:56 -0700 |
parents | d494b74d5242 |
children | 68d2e5c96e72 |
rev | line source |
---|---|
122
2bb16439e6ca
Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1 /* Copyright (C) 2013-2014 by Jacob Alexander |
2bb16439e6ca
Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents:
109
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:
109
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:
109
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 #ifndef __output_com_h |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
23 #define __output_com_h |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
24 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
25 // ----- Includes ----- |
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 // Compiler Includes |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
28 #include <stdint.h> |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
29 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
30 // Local Includes |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
31 #include <buildvars.h> // Defines USB Parameters, partially generated by CMake |
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 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
34 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
35 // ----- Defines ----- |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
36 |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
37 // Max size of key buffer needed for NKRO |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
38 // Boot mode uses only the first 6 bytes |
237
01b686cc94e8
Fixing USB NKRO key buffer bug
Jacob Alexander <haata@kiibohd.com>
parents:
236
diff
changeset
|
39 #define USB_NKRO_BITFIELD_SIZE_KEYS 27 |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
40 #define USB_BOOT_MAX_KEYS 6 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
41 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
42 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
43 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
44 // ----- Enumerations ----- |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
45 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
46 // USB NKRO state transitions (indicates which Report ID's need refreshing) |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
47 // Boot mode just checks if any keys were changed (as everything is sent every time) |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
48 typedef enum USBKeyChangeState { |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
49 USBKeyChangeState_None = 0x00, |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
50 USBKeyChangeState_Modifiers = 0x01, |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
51 USBKeyChangeState_MainKeys = 0x02, |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
52 USBKeyChangeState_SecondaryKeys = 0x04, |
236
d494b74d5242
Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents:
234
diff
changeset
|
53 USBKeyChangeState_TertiaryKeys = 0x08, |
d494b74d5242
Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents:
234
diff
changeset
|
54 USBKeyChangeState_System = 0x10, |
d494b74d5242
Fixed Linux NKRO bitmap bug.
Jacob Alexander <haata@kiibohd.com>
parents:
234
diff
changeset
|
55 USBKeyChangeState_Consumer = 0x20, |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
56 } USBKeyChangeState; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
57 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
58 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
59 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
60 // ----- Variables ----- |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
61 |
125
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
62 // Variables used to communciate to the output module |
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
63 // XXX Even if the output module is not USB, this is internally understood keymapping scheme |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
64 extern uint8_t USBKeys_Modifiers; |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
65 extern uint8_t USBKeys_Keys[USB_NKRO_BITFIELD_SIZE_KEYS]; |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
66 extern uint8_t USBKeys_Sent; |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
67 extern volatile uint8_t USBKeys_LEDs; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
68 |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
69 extern uint8_t USBKeys_SysCtrl; // 1KRO container for System Control HID table |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
70 extern uint16_t USBKeys_ConsCtrl; // 1KRO container for Consumer Control HID table |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
71 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
72 extern volatile uint8_t USBKeys_Protocol; // 0 - Boot Mode, 1 - NKRO Mode |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
73 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
74 // Misc variables (XXX Some are only properly utilized using AVR) |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
75 extern uint8_t USBKeys_Idle_Config; |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
76 extern uint8_t USBKeys_Idle_Count; |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
77 |
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
78 extern USBKeyChangeState USBKeys_Changed; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
79 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
80 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
81 |
191
3404be65670b
Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
165
diff
changeset
|
82 // ----- Capabilities ----- |
3404be65670b
Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
165
diff
changeset
|
83 |
234
aaf14110ea7b
Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
223
diff
changeset
|
84 // Output capabilities |
223
fc3b9cb190cc
Adding NKRO support to AVR/DPH.
Jacob Alexander <haata@kiibohd.com>
parents:
218
diff
changeset
|
85 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
|
86 void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); |
191
3404be65670b
Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
165
diff
changeset
|
87 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:
165
diff
changeset
|
88 |
234
aaf14110ea7b
Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
223
diff
changeset
|
89 // Configuration capabilities |
aaf14110ea7b
Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
223
diff
changeset
|
90 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:
223
diff
changeset
|
91 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:
223
diff
changeset
|
92 |
191
3404be65670b
Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
165
diff
changeset
|
93 |
3404be65670b
Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
165
diff
changeset
|
94 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
95 // ----- Functions ----- |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
96 |
125
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
97 void Output_setup(); |
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
98 void Output_send(); |
122
2bb16439e6ca
Preparing Teensy 3.1 and CLI merge for DPH controller code.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
99 |
234
aaf14110ea7b
Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
223
diff
changeset
|
100 void Output_flushBuffers(); |
aaf14110ea7b
Adding NKRO and Boot mode capabilities.
Jacob Alexander <haata@kiibohd.com>
parents:
223
diff
changeset
|
101 |
125
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
102 void Output_firmwareReload(); |
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
103 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
|
104 |
0c5d1fe99302
Adding CLI and CDC Serial support for Teensy 2.0 and Teensy 2.0++
Jacob Alexander <haata@kiibohd.com>
parents:
122
diff
changeset
|
105 // Relies on USB serial module |
125
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
106 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
|
107 |
125
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
108 int Output_getchar(); |
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
109 int Output_putchar( char c ); |
8dab4014c398
Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
123
diff
changeset
|
110 int Output_putstr( char* str ); |
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 #endif |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
113 |