Mercurial > louis > kiibohd-controller
annotate Output/pjrcUSB/arm/usb_keyboard.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 | 68e19d7c953e |
children | 45feb80a2ad1 |
rev | line source |
---|---|
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
1 /* Teensyduino Core Library |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
2 * http://www.pjrc.com/teensy/ |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
3 * Copyright (c) 2013 PJRC.COM, LLC. |
285
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
4 * Modifications by Jacob Alexander 2013-2015 |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
5 * |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
6 * Permission is hereby granted, free of charge, to any person obtaining |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
7 * a copy of this software and associated documentation files (the |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
8 * "Software"), to deal in the Software without restriction, including |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
9 * without limitation the rights to use, copy, modify, merge, publish, |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
10 * distribute, sublicense, and/or sell copies of the Software, and to |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
11 * permit persons to whom the Software is furnished to do so, subject to |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
12 * the following conditions: |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
13 * |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
14 * 1. The above copyright notice and this permission notice shall be |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
15 * included in all copies or substantial portions of the Software. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
16 * |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
17 * 2. If the Software is incorporated into a build system that allows |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
18 * selection among a list of target devices, then similar target |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
19 * devices manufactured by PJRC.COM must be included in the list of |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
20 * target devices and selectable in the same manner. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
21 * |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
26 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
27 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
28 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
29 * SOFTWARE. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
30 */ |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
31 |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
32 // ----- Includes ----- |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
33 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
34 // Compiler Includes |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
35 #include <string.h> // for memcpy() |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
36 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
37 // Project Includes |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
38 #include <Lib/OutputLib.h> |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
39 #include <print.h> |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
40 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
41 // Local Includes |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
42 #include "usb_dev.h" |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
43 #include "usb_keyboard.h" |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
44 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
45 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
46 |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
47 // ----- Defines ----- |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
48 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
49 // Maximum number of transmit packets to queue so we don't starve other endpoints for memory |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
50 #define TX_PACKET_LIMIT 4 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
51 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
52 // When the PC isn't listening, how long do we wait before discarding data? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
53 #define TX_TIMEOUT_MSEC 50 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
54 |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
55 #if F_CPU == 168000000 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
56 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 1100) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
57 #elif F_CPU == 144000000 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
58 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 932) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
59 #elif F_CPU == 120000000 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
60 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 764) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
61 #elif F_CPU == 96000000 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
326
diff
changeset
|
62 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 596) |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
326
diff
changeset
|
63 #elif F_CPU == 72000000 |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
64 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 512) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
65 #elif F_CPU == 48000000 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
326
diff
changeset
|
66 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 428) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
67 #elif F_CPU == 24000000 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
326
diff
changeset
|
68 #define TX_TIMEOUT (TX_TIMEOUT_MSEC * 262) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
69 #endif |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
70 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
71 |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
72 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
73 // ----- Variables ----- |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
74 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
75 static uint8_t transmit_previous_timeout = 0; |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
76 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
77 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
78 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
79 // ----- Functions ----- |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
80 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
81 // send the contents of keyboard_keys and keyboard_modifier_keys |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
82 void usb_keyboard_send() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
83 { |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
84 uint32_t wait_count = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
85 usb_packet_t *tx_packet; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
86 |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
87 // Wait till ready |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
88 while ( 1 ) |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
89 { |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
90 if ( !usb_configuration ) |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
91 { |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
92 erro_print("USB not configured..."); |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
93 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
94 } |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
95 |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
96 if ( USBKeys_Protocol == 0 ) // Boot Mode |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
97 { |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
98 if ( usb_tx_packet_count( KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT ) |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
99 { |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
100 tx_packet = usb_malloc(); |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
101 if ( tx_packet ) |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
102 break; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
103 } |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
104 } |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
105 else if ( USBKeys_Protocol == 1 ) // NKRO Mode |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
106 { |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
107 if ( usb_tx_packet_count( NKRO_KEYBOARD_ENDPOINT ) < TX_PACKET_LIMIT ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
108 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
109 tx_packet = usb_malloc(); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
110 if ( tx_packet ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
111 break; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
112 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
113 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
114 else if ( USBKeys_Changed & |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
115 ( USBKeyChangeState_System | USBKeyChangeState_Consumer ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
116 ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
117 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
118 if ( usb_tx_packet_count( SYS_CTRL_ENDPOINT ) < TX_PACKET_LIMIT ) |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
119 { |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
120 tx_packet = usb_malloc(); |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
121 if ( tx_packet ) |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
122 break; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
123 } |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
124 } |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
125 |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
126 if ( ++wait_count > TX_TIMEOUT || transmit_previous_timeout ) |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
127 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
128 transmit_previous_timeout = 1; |
447
56237ba5da6f
Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents:
439
diff
changeset
|
129 warn_print("USB Transmit Timeout...restarting device"); |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
130 USBKeys_Changed = USBKeyChangeState_None; // Indicate packet lost |
447
56237ba5da6f
Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents:
439
diff
changeset
|
131 usb_device_software_reset(); |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
132 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
133 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
134 yield(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
135 } |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
136 |
447
56237ba5da6f
Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents:
439
diff
changeset
|
137 transmit_previous_timeout = 0; |
56237ba5da6f
Adding auto-restart support whenever USB gets into an odd state
Jacob Alexander <haata@kiibohd.com>
parents:
439
diff
changeset
|
138 |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
139 // Pointer to USB tx packet buffer |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
140 uint8_t *tx_buf = tx_packet->buf; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
141 |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
142 // Check system control keys |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
143 if ( USBKeys_Changed & USBKeyChangeState_System ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
144 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
145 if ( Output_DebugMode ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
146 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
147 print("SysCtrl["); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
148 printHex_op( USBKeys_SysCtrl, 2 ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
149 print( "] " NL ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
150 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
151 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
152 *tx_buf++ = 0x02; // ID |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
153 *tx_buf = USBKeys_SysCtrl; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
154 tx_packet->len = 2; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
155 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
156 // Send USB Packet |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
157 usb_tx( SYS_CTRL_ENDPOINT, tx_packet ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
158 USBKeys_Changed &= ~USBKeyChangeState_System; // Mark sent |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
159 return; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
160 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
161 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
162 // Check consumer control keys |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
163 if ( USBKeys_Changed & USBKeyChangeState_Consumer ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
164 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
165 if ( Output_DebugMode ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
166 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
167 print("ConsCtrl["); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
168 printHex_op( USBKeys_ConsCtrl, 2 ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
169 print( "] " NL ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
170 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
171 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
172 *tx_buf++ = 0x03; // ID |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
173 *tx_buf++ = (uint8_t)(USBKeys_ConsCtrl & 0x00FF); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
174 *tx_buf = (uint8_t)(USBKeys_ConsCtrl >> 8); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
175 tx_packet->len = 3; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
176 |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
177 // Send USB Packet |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
178 usb_tx( SYS_CTRL_ENDPOINT, tx_packet ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
179 USBKeys_Changed &= ~USBKeyChangeState_Consumer; // Mark sent |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
180 return; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
181 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
182 |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
183 switch ( USBKeys_Protocol ) |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
184 { |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
185 // Send boot keyboard interrupt packet(s) |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
186 case 0: |
285
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
187 // USB Boot Mode debug output |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
188 if ( Output_DebugMode ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
189 { |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
190 dbug_msg("Boot USB: "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
191 printHex_op( USBKeys_Modifiers, 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
192 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
193 printHex( 0 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
194 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
195 printHex_op( USBKeys_Keys[0], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
196 printHex_op( USBKeys_Keys[1], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
197 printHex_op( USBKeys_Keys[2], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
198 printHex_op( USBKeys_Keys[3], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
199 printHex_op( USBKeys_Keys[4], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
200 printHex_op( USBKeys_Keys[5], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
201 print( NL ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
202 } |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
203 |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
204 // Boot Mode |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
205 *tx_buf++ = USBKeys_Modifiers; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
206 *tx_buf++ = 0; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
207 memcpy( tx_buf, USBKeys_Keys, USB_BOOT_MAX_KEYS ); |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
208 tx_packet->len = 8; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
209 |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
210 // Send USB Packet |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
211 usb_tx( KEYBOARD_ENDPOINT, tx_packet ); |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
212 USBKeys_Changed = USBKeyChangeState_None; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
213 break; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
214 |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
215 // Send NKRO keyboard interrupts packet(s) |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
216 case 1: |
285
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
217 if ( Output_DebugMode ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
218 { |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
219 dbug_msg("NKRO USB: "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
220 } |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
221 |
251
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
222 // Standard HID Keyboard |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
223 if ( USBKeys_Changed ) |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
224 { |
285
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
225 // USB NKRO Debug output |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
226 if ( Output_DebugMode ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
227 { |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
228 printHex_op( USBKeys_Modifiers, 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
229 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
230 for ( uint8_t c = 0; c < 6; c++ ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
231 printHex_op( USBKeys_Keys[ c ], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
232 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
233 for ( uint8_t c = 6; c < 20; c++ ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
234 printHex_op( USBKeys_Keys[ c ], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
235 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
236 printHex_op( USBKeys_Keys[20], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
237 print(" "); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
238 for ( uint8_t c = 21; c < 27; c++ ) |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
239 printHex_op( USBKeys_Keys[ c ], 2 ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
240 print( NL ); |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
241 } |
1495b4504a59
Adding outputDebug command
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
242 |
251
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
243 tx_packet->len = 0; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
244 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
245 // Modifiers |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
246 *tx_buf++ = 0x01; // ID |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
247 *tx_buf++ = USBKeys_Modifiers; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
248 tx_packet->len += 2; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
249 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
250 // 4-49 (first 6 bytes) |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
251 memcpy( tx_buf, USBKeys_Keys, 6 ); |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
252 tx_buf += 6; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
253 tx_packet->len += 6; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
254 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
255 // 51-155 (Middle 14 bytes) |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
256 memcpy( tx_buf, USBKeys_Keys + 6, 14 ); |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
257 tx_buf += 14; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
258 tx_packet->len += 14; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
259 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
260 // 157-164 (Next byte) |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
261 memcpy( tx_buf, USBKeys_Keys + 20, 1 ); |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
262 tx_buf += 1; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
263 tx_packet->len += 1; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
264 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
265 // 176-221 (last 6 bytes) |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
266 memcpy( tx_buf, USBKeys_Keys + 21, 6 ); |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
267 tx_packet->len += 6; |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
268 |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
269 // Send USB Packet |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
270 usb_tx( NKRO_KEYBOARD_ENDPOINT, tx_packet ); |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
271 USBKeys_Changed = USBKeyChangeState_None; // Mark sent |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
272 } |
d3ac199593d6
Fixing NKRO on Windows 8.1
Jacob Alexander <haata@kiibohd.com>
parents:
248
diff
changeset
|
273 |
232
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
274 break; |
9a3c9f6f4866
USB NKRO working for ARM!
Jacob Alexander <haata@kiibohd.com>
parents:
224
diff
changeset
|
275 } |
224
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
276 |
138e5ca7f8e4
Preparing ARM for USB NKRO
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
277 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
278 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
279 |