Mercurial > louis > kiibohd-controller
annotate Output/pjrcUSB/arm/usb_dev.c @ 439:68e19d7c953e
Adding proper remote wake-up support
- Maintains a sleep state variable (may be able to use as a signal in the future)
- On the first keypress, hold the RESUME signal for 10 ms (spec says between 1 and 15 ms)
- Removed some messages that were affecting sleep state
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Tue, 17 May 2016 01:18:14 -0700 |
parents | f10c2dad7f55 |
children | 56237ba5da6f |
rev | line source |
---|---|
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1 /* Teensyduino Core Library |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
2 * http://www.pjrc.com/teensy/ |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
3 * Copyright (c) 2013 PJRC.COM, LLC. |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
4 * Modifications by Jacob Alexander (2013-2016) |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
5 * |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
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:
109
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:
109
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:
109
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:
109
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:
109
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:
109
diff
changeset
|
12 * the following conditions: |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
13 * |
175 | 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:
109
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:
109
diff
changeset
|
16 * |
175 | 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:
109
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:
109
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:
109
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:
109
diff
changeset
|
21 * |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
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:
109
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:
109
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:
109
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:
109
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:
109
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:
109
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:
109
diff
changeset
|
29 * SOFTWARE. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
30 */ |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
31 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
32 // ----- Includes ----- |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
33 |
175 | 34 // Project Includes |
118
b61ca96b7c24
File and macro modifications for supporting Teensy 3.1
Jacob Alexander <haata@kiibohd.com>
parents:
117
diff
changeset
|
35 #include <Lib/OutputLib.h> |
175 | 36 #include <print.h> |
370
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
37 #include <kll_defs.h> |
175 | 38 |
39 // Local Includes | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
40 #include "usb_dev.h" |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
41 #include "usb_mem.h" |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
42 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
43 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
44 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
45 // ----- Defines ----- |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
46 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
47 // DEBUG Mode |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
48 // XXX - Only use when using usbMuxUart Module |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
49 // Delay causes issues initializing more than 1 hid device (i.e. NKRO keyboard) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
50 //#define UART_DEBUG 1 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
51 // Debug Unknown USB requests, usually what you want to debug USB issues |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
52 //#define UART_DEBUG_UNKNOWN 1 |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
53 |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
54 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
55 #define TX_STATE_BOTH_FREE_EVEN_FIRST 0 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
56 #define TX_STATE_BOTH_FREE_ODD_FIRST 1 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
57 #define TX_STATE_EVEN_FREE 2 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
58 #define TX_STATE_ODD_FREE 3 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
59 #define TX_STATE_NONE_FREE_EVEN_FIRST 4 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
60 #define TX_STATE_NONE_FREE_ODD_FIRST 5 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
61 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
62 #define BDT_OWN 0x80 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
63 #define BDT_DATA1 0x40 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
64 #define BDT_DATA0 0x00 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
65 #define BDT_DTS 0x08 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
66 #define BDT_STALL 0x04 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
67 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
68 #define TX 1 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
69 #define RX 0 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
70 #define ODD 1 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
71 #define EVEN 0 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
72 #define DATA0 0 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
73 #define DATA1 1 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
74 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
75 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
76 #define GET_STATUS 0 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
77 #define CLEAR_FEATURE 1 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
78 #define SET_FEATURE 3 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
79 #define SET_ADDRESS 5 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
80 #define GET_DESCRIPTOR 6 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
81 #define SET_DESCRIPTOR 7 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
82 #define GET_CONFIGURATION 8 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
83 #define SET_CONFIGURATION 9 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
84 #define GET_INTERFACE 10 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
85 #define SET_INTERFACE 11 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
86 #define SYNCH_FRAME 12 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
87 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
88 #define TX_STATE_BOTH_FREE_EVEN_FIRST 0 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
89 #define TX_STATE_BOTH_FREE_ODD_FIRST 1 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
90 #define TX_STATE_EVEN_FREE 2 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
91 #define TX_STATE_ODD_FREE 3 |
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
92 #define TX_STATE_NONE_FREE 4 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
93 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
94 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
95 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
96 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
97 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
98 // ----- Macros ----- |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
99 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
100 #define BDT_PID(n) (((n) >> 2) & 15) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
101 |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
102 #define BDT_DESC(count, data) (BDT_OWN | BDT_DTS \ |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
103 | ((data) ? BDT_DATA1 : BDT_DATA0) \ |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
104 | ((count) << 16)) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
105 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
106 #define index(endpoint, tx, odd) (((endpoint) << 2) | ((tx) << 1) | (odd)) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
107 #define stat2bufferdescriptor(stat) (table + ((stat) >> 2)) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
108 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
109 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
110 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
111 // ----- Structs ----- |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
112 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
113 // buffer descriptor table |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
114 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
115 typedef struct { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
116 uint32_t desc; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
117 void * addr; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
118 } bdt_t; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
119 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
120 static union { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
121 struct { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
122 union { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
123 struct { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
124 uint8_t bmRequestType; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
125 uint8_t bRequest; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
126 }; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
127 uint16_t wRequestAndType; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
128 }; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
129 uint16_t wValue; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
130 uint16_t wIndex; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
131 uint16_t wLength; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
132 }; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
133 struct { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
134 uint32_t word1; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
135 uint32_t word2; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
136 }; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
137 } setup; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
138 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
139 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
140 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
141 // ----- Variables ----- |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
142 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
143 __attribute__ ((section(".usbdescriptortable"), used)) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
144 static bdt_t table[ (NUM_ENDPOINTS + 1) * 4 ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
145 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
146 static usb_packet_t *rx_first [ NUM_ENDPOINTS ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
147 static usb_packet_t *rx_last [ NUM_ENDPOINTS ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
148 static usb_packet_t *tx_first [ NUM_ENDPOINTS ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
149 static usb_packet_t *tx_last [ NUM_ENDPOINTS ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
150 uint16_t usb_rx_byte_count_data[ NUM_ENDPOINTS ]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
151 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
152 static uint8_t tx_state[NUM_ENDPOINTS]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
153 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
154 // SETUP always uses a DATA0 PID for the data field of the SETUP transaction. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
155 // transactions in the data phase start with DATA1 and toggle (figure 8-12, USB1.1) |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
156 // Status stage uses a DATA1 PID. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
157 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
158 static uint8_t ep0_rx0_buf[EP0_SIZE] __attribute__ ((aligned (4))); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
159 static uint8_t ep0_rx1_buf[EP0_SIZE] __attribute__ ((aligned (4))); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
160 static const uint8_t *ep0_tx_ptr = NULL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
161 static uint16_t ep0_tx_len; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
162 static uint8_t ep0_tx_bdt_bank = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
163 static uint8_t ep0_tx_data_toggle = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
164 uint8_t usb_rx_memory_needed = 0; |
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 volatile uint8_t usb_configuration = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
167 volatile uint8_t usb_reboot_timer = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
168 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
169 static uint8_t reply_buffer[8]; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
170 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
171 static uint8_t power_neg_delay; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
172 static uint32_t power_neg_time; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
173 |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
174 static uint8_t usb_dev_sleep = 0; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
175 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
176 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
177 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
178 // ----- Functions ----- |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
179 |
175 | 180 static void endpoint0_stall() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
181 { |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
182 #ifdef UART_DEBUG_UNKNOWN |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
183 print("STALL" NL ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
184 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
185 USB0_ENDPT0 = USB_ENDPT_EPSTALL | USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
186 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
187 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
188 static void endpoint0_transmit( const void *data, uint32_t len ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
189 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
190 table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
191 table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
192 ep0_tx_data_toggle ^= 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
193 ep0_tx_bdt_bank ^= 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
194 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
195 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
196 // Used to check any USB state changes that may not have a proper interrupt |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
197 // Called once per scan loop, should take minimal processing time or it may affect other modules |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
198 void usb_device_check() |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
199 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
200 // Check to see if we're still waiting for the next USB request after Get Configuration Descriptor |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
201 // If still waiting, restart the USB initialization with a lower power requirement |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
202 if ( power_neg_delay ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
203 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
204 // Check if 100 ms has elapsed |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
205 if ( systick_millis_count - power_neg_time > 100 ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
206 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
207 // Update bMaxPower |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
208 // The value set is in increments of 2 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
209 // So 50 * 2 mA = 100 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
210 // XXX Currently only transitions to 100 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
211 // It may be possible to transition down again to 20 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
212 *usb_bMaxPower = 50; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
213 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
214 // Re-initialize USB |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
215 power_neg_delay = 0; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
216 usb_configuration = 0; // Clear USB configuration if we have one |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
217 USB0_CONTROL = 0; // Disable D+ Pullup to simulate disconnect |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
218 delay(10); // Delay is necessary to simulate disconnect |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
219 usb_init(); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
220 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
221 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
222 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
223 |
175 | 224 static void usb_setup() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
225 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
226 const uint8_t *data = NULL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
227 uint32_t datalen = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
228 const usb_descriptor_list_t *list; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
229 uint32_t size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
230 volatile uint8_t *reg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
231 uint8_t epconf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
232 const uint8_t *cfg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
233 int i; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
234 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
235 // If another request is made, disable the power negotiation check |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
236 // See GET_DESCRIPTOR - Configuration |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
237 if ( power_neg_delay ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
238 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
239 power_neg_delay = 0; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
240 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
241 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
242 switch ( setup.wRequestAndType ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
243 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
244 case 0x0500: // SET_ADDRESS |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
245 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
246 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
247 case 0x0900: // SET_CONFIGURATION |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
248 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
249 print("CONFIGURE - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
250 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
251 usb_configuration = setup.wValue; |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
252 Output_Available = usb_configuration; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
253 reg = &USB0_ENDPT1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
254 cfg = usb_endpoint_config_table; |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
255 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
256 // Now configured so we can utilize bMaxPower now |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
257 Output_update_usb_current( *usb_bMaxPower * 2 ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
258 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
259 // clear all BDT entries, free any allocated memory... |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
260 for ( i = 4; i < ( NUM_ENDPOINTS + 1) * 4; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
261 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
262 if ( table[i].desc & BDT_OWN ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
263 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
264 usb_free( (usb_packet_t *)((uint8_t *)(table[ i ].addr) - 8) ); |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
265 } |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
266 } |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
267 // free all queued packets |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
268 for ( i = 0; i < NUM_ENDPOINTS; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
269 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
270 usb_packet_t *p, *n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
271 p = rx_first[i]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
272 while ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
273 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
274 n = p->next; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
275 usb_free(p); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
276 p = n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
277 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
278 rx_first[ i ] = NULL; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
279 rx_last[ i ] = NULL; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
280 p = tx_first[i]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
281 while (p) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
282 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
283 n = p->next; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
284 usb_free(p); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
285 p = n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
286 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
287 tx_first[ i ] = NULL; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
288 tx_last[ i ] = NULL; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
289 usb_rx_byte_count_data[i] = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
290 |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
291 switch ( tx_state[ i ] ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
292 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
293 case TX_STATE_EVEN_FREE: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
294 case TX_STATE_NONE_FREE_EVEN_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
295 tx_state[ i ] = TX_STATE_BOTH_FREE_EVEN_FIRST; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
296 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
297 case TX_STATE_ODD_FREE: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
298 case TX_STATE_NONE_FREE_ODD_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
299 tx_state[ i ] = TX_STATE_BOTH_FREE_ODD_FIRST; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
300 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
301 default: |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
302 break; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
303 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
304 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
305 usb_rx_memory_needed = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
306 for ( i = 1; i <= NUM_ENDPOINTS; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
307 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
308 epconf = *cfg++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
309 *reg = epconf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
310 reg += 4; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
311 if ( epconf & USB_ENDPT_EPRXEN ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
312 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
313 usb_packet_t *p; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
314 p = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
315 if ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
316 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
317 table[ index( i, RX, EVEN ) ].addr = p->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
318 table[ index( i, RX, EVEN ) ].desc = BDT_DESC( 64, 0 ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
319 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
320 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
321 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
322 table[ index( i, RX, EVEN ) ].desc = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
323 usb_rx_memory_needed++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
324 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
325 p = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
326 if ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
327 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
328 table[ index( i, RX, ODD ) ].addr = p->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
329 table[ index( i, RX, ODD ) ].desc = BDT_DESC( 64, 1 ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
330 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
331 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
332 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
333 table[ index( i, RX, ODD ) ].desc = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
334 usb_rx_memory_needed++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
335 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
336 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
337 table[ index( i, TX, EVEN ) ].desc = 0; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
338 table[ index( i, TX, ODD ) ].desc = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
339 } |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
340 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
341 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
342 case 0x0880: // GET_CONFIGURATION |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
343 reply_buffer[0] = usb_configuration; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
344 datalen = 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
345 data = reply_buffer; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
346 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
347 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
348 case 0x0080: // GET_STATUS (device) |
346
1beec5f17e64
Revert "Merge pull request #27 from smasher816/wakeup-devel"
Jacob Alexander <haata@kiibohd.com>
parents:
327
diff
changeset
|
349 reply_buffer[0] = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
350 reply_buffer[1] = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
351 datalen = 2; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
352 data = reply_buffer; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
353 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
354 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
355 case 0x0082: // GET_STATUS (endpoint) |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
356 if ( setup.wIndex > NUM_ENDPOINTS ) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
357 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
358 // TODO: do we need to handle IN vs OUT here? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
359 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
360 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
361 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
362 reply_buffer[0] = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
363 reply_buffer[1] = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
364 if ( *(uint8_t *)(&USB0_ENDPT0 + setup.wIndex * 4) & 0x02 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
365 reply_buffer[0] = 1; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
366 data = reply_buffer; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
367 datalen = 2; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
368 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
369 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
370 case 0x0100: // CLEAR_FEATURE (device) |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
371 switch ( setup.wValue ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
372 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
373 // CLEAR_FEATURE(DEVICE_REMOTE_WAKEUP) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
374 // See SET_FEATURE(DEVICE_REMOTE_WAKEUP) for details |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
375 case 0x1: |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
376 goto send; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
377 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
378 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
379 warn_msg("SET_FEATURE - Device wValue("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
380 printHex( setup.wValue ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
381 print( ")" NL ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
382 endpoint0_stall(); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
383 return; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
384 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
385 case 0x0101: // CLEAR_FEATURE (interface) |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
386 // TODO: Currently ignoring, perhaps useful? -HaaTa |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
387 warn_msg("CLEAR_FEATURE - Interface wValue("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
388 printHex( setup.wValue ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
389 print(") wIndex("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
390 printHex( setup.wIndex ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
391 print( ")" NL ); |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
392 endpoint0_stall(); |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
393 return; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
394 |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
395 case 0x0102: // CLEAR_FEATURE (endpoint) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
396 i = setup.wIndex & 0x7F; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
397 if ( i > NUM_ENDPOINTS || setup.wValue != 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
398 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
399 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
400 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
401 } |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
402 (*(uint8_t *)(&USB0_ENDPT0 + setup.wIndex * 4)) &= ~0x02; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
403 // TODO: do we need to clear the data toggle here? |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
404 goto send; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
405 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
406 case 0x0300: // SET_FEATURE (device) |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
407 switch ( setup.wValue ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
408 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
409 // SET_FEATURE(DEVICE_REMOTE_WAKEUP) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
410 // XXX: Only used to confirm Remote Wake |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
411 // Used on Mac OSX and Windows not on Linux |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
412 // Good post on the behaviour: |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
413 // http://community.silabs.com/t5/8-bit-MCU/Remote-wakeup-HID/m-p/74957#M30802 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
414 case 0x1: |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
415 goto send; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
416 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
417 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
418 warn_msg("SET_FEATURE - Device wValue("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
419 printHex( setup.wValue ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
420 print( ")" NL ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
421 endpoint0_stall(); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
422 return; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
423 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
424 case 0x0301: // SET_FEATURE (interface) |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
425 // TODO: Currently ignoring, perhaps useful? -HaaTa |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
426 warn_msg("SET_FEATURE - Interface wValue("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
427 printHex( setup.wValue ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
428 print(") wIndex("); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
429 printHex( setup.wIndex ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
430 print( ")" NL ); |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
431 endpoint0_stall(); |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
432 return; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
433 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
434 case 0x0302: // SET_FEATURE (endpoint) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
435 i = setup.wIndex & 0x7F; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
436 if ( i > NUM_ENDPOINTS || setup.wValue != 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
437 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
438 // TODO: do we need to handle IN vs OUT here? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
439 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
440 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
441 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
442 (*(uint8_t *)(&USB0_ENDPT0 + setup.wIndex * 4)) |= 0x02; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
443 // TODO: do we need to clear the data toggle here? |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
444 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
445 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
446 case 0x0680: // GET_DESCRIPTOR |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
447 case 0x0681: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
448 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
449 print("desc:"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
450 printHex( setup.wValue ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
451 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
452 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
453 for ( list = usb_descriptor_list; 1; list++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
454 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
455 if ( list->addr == NULL ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
456 break; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
457 if ( setup.wValue == list->wValue && setup.wIndex == list->wIndex ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
458 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
459 data = list->addr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
460 if ( (setup.wValue >> 8) == 3 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
461 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
462 // for string descriptors, use the descriptor's |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
463 // length field, allowing runtime configured |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
464 // length. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
465 datalen = *(list->addr); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
466 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
467 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
468 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
469 datalen = list->length; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
470 } |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
471 |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
472 // XXX Power negotiation hack -HaaTa |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
473 // Some devices such as the Apple Ipad do not support bMaxPower greater than 100 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
474 // However, there is no provision in the basic USB 2.0 stack for power negotiation |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
475 // To get around this: |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
476 // * Attempt to set bMaxPower to 500 mA first |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
477 // * If more than 100 ms passes since retrieving a Get Configuration Descriptor |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
478 // (Descriptor with bMaxPower in it) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
479 // * Change usb_bMaxPower to 50 (100 mA) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
480 // * Restart the USB init process |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
481 // According to notes online, it says that some Apple devices can only do 20 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
482 // However, in my testing this hasn't been the case |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
483 // (you can also draw as much current as you want if you just lie in the descriptor :P) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
484 // If this becomes an issue we can use this hack a second time to negotiate down to 20 mA |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
485 // (which should be fine for just the mcu) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
486 if ( setup.wValue == 0x0200 && setup.wIndex == 0x0 ) |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
487 { |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
488 power_neg_delay = 1; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
489 power_neg_time = systick_millis_count; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
490 } |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
491 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
492 #if UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
493 print("Desc found, "); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
494 printHex32( (uint32_t)data ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
495 print(","); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
496 printHex( datalen ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
497 print(","); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
498 printHex_op( data[0], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
499 printHex_op( data[1], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
500 printHex_op( data[2], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
501 printHex_op( data[3], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
502 printHex_op( data[4], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
503 printHex_op( data[5], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
504 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
505 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
506 goto send; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
507 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
508 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
509 #ifdef UART_DEBUG |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
510 print( "desc: not found" NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
511 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
512 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
513 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
514 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
515 case 0x2221: // CDC_SET_CONTROL_LINE_STATE |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
516 usb_cdc_line_rtsdtr = setup.wValue; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
517 //serial_print("set control line state\n"); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
518 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
519 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
520 case 0x21A1: // CDC_GET_LINE_CODING |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
521 data = (uint8_t*)usb_cdc_line_coding; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
522 datalen = sizeof( usb_cdc_line_coding ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
523 goto send; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
524 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
525 case 0x2021: // CDC_SET_LINE_CODING |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
526 // XXX Needed? |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
527 //serial_print("set coding, waiting...\n"); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
528 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
529 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
530 case 0x0921: // HID SET_REPORT |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
531 // Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
532 switch ( setup.wIndex & 0xFF ) |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
533 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
534 // Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
535 case KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
536 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
537 // NKRO Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
538 case NKRO_KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
539 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
540 default: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
541 warn_msg("Unknown interface - "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
542 printHex( setup.wIndex ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
543 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
544 endpoint0_stall(); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
545 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
546 } |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
547 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
548 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
549 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
550 case 0x01A1: // HID GET_REPORT |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
551 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
552 print("GET_REPORT - "); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
553 printHex( setup.wIndex ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
554 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
555 #endif |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
556 // Search through descriptors returning necessary info |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
557 for ( list = usb_descriptor_list; 1; list++ ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
558 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
559 if ( list->addr == NULL ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
560 break; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
561 if ( list->wValue != 0x2200 ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
562 continue; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
563 if ( setup.wIndex == list->wIndex ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
564 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
565 data = list->addr; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
566 datalen = list->length; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
567 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
568 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
569 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
570 endpoint0_stall(); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
571 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
572 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
573 case 0x0A21: // HID SET_IDLE |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
574 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
575 print("SET_IDLE - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
576 printHex( setup.wValue ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
577 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
578 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
579 USBKeys_Idle_Config = (setup.wValue >> 8); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
580 USBKeys_Idle_Count = 0; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
581 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
582 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
583 case 0x0B21: // HID SET_PROTOCOL |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
584 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
585 print("SET_PROTOCOL - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
586 printHex( setup.wValue ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
587 print(" - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
588 printHex( setup.wValue & 0xFF ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
589 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
590 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
591 USBKeys_Protocol = setup.wValue & 0xFF; // 0 - Boot Mode, 1 - NKRO Mode |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
592 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
593 |
438
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
594 case 0x03A1: /// HID GET_PROTOCOL |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
595 #ifdef UART_DEBUG |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
596 print("GET_PROTOCOL - "); |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
597 printHex( setup.wValue ); |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
598 print(" - "); |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
599 printHex( USBKeys_Protocol ); |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
600 print(NL); |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
601 #endif |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
602 reply_buffer[0] = USBKeys_Protocol; |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
603 datalen = 1; |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
604 goto send; |
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
605 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
606 // case 0xC940: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
607 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
608 #ifdef UART_DEBUG_UNKNOWN |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
609 print("UNKNOWN"); |
438
f10c2dad7f55
Adding missing GET_PROTOCOL handling
Jacob Alexander <haata@kiibohd.com>
parents:
420
diff
changeset
|
610 print(NL); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
611 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
612 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
613 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
614 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
615 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
616 send: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
617 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
618 print("setup send "); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
619 printHex32( (uint32_t)data ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
620 print(","); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
621 for ( uint8_t c = 0; c < datalen; c++ ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
622 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
623 printHex( data[c] ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
624 print(" "); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
625 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
626 print(","); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
627 printHex( datalen ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
628 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
629 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
630 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
631 if ( datalen > setup.wLength ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
632 datalen = setup.wLength; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
633 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
634 size = datalen; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
635 if ( size > EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
636 size = EP0_SIZE; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
637 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
638 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
639 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
640 datalen -= size; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
641 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
642 // See if transmit has finished |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
643 if ( datalen == 0 && size < EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
644 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
645 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
646 size = datalen; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
647 if ( size > EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
648 size = EP0_SIZE; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
649 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
650 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
651 datalen -= size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
652 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
653 // See if transmit has finished |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
654 if ( datalen == 0 && size < EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
655 return; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
656 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
657 // Save rest of transfer for later? XXX |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
658 ep0_tx_ptr = data; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
659 ep0_tx_len = datalen; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
660 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
661 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
662 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
663 //A bulk endpoint's toggle sequence is initialized to DATA0 when the endpoint |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
664 //experiences any configuration event (configuration events are explained in |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
665 //Sections 9.1.1.5 and 9.4.5). |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
666 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
667 //Configuring a device or changing an alternate setting causes all of the status |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
668 //and configuration values associated with endpoints in the affected interfaces |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
669 //to be set to their default values. This includes setting the data toggle of |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
670 //any endpoint using data toggles to the value DATA0. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
671 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
672 //For endpoints using data toggle, regardless of whether an endpoint has the |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
673 //Halt feature set, a ClearFeature(ENDPOINT_HALT) request always results in the |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
674 //data toggle being reinitialized to DATA0. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
675 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
676 static void usb_control( uint32_t stat ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
677 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
678 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
679 print("CONTROL - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
680 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
681 bdt_t *b; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
682 uint32_t pid, size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
683 uint8_t *buf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
684 const uint8_t *data; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
685 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
686 b = stat2bufferdescriptor( stat ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
687 pid = BDT_PID( b->desc ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
688 buf = b->addr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
689 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
690 print("pid:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
691 printHex(pid); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
692 print(", count:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
693 printHex32(b->desc); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
694 print(" - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
695 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
696 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
697 switch (pid) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
698 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
699 case 0x0D: // Setup received from host |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
700 //serial_print("PID=Setup\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
701 //if (count != 8) ; // panic? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
702 // grab the 8 byte setup info |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
703 setup.word1 = *(uint32_t *)(buf); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
704 setup.word2 = *(uint32_t *)(buf + 4); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
705 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
706 // give the buffer back |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
707 b->desc = BDT_DESC( EP0_SIZE, DATA1 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
708 //table[index(0, RX, EVEN)].desc = BDT_DESC(EP0_SIZE, 1); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
709 //table[index(0, RX, ODD)].desc = BDT_DESC(EP0_SIZE, 1); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
710 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
711 // clear any leftover pending IN transactions |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
712 ep0_tx_ptr = NULL; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
713 if ( ep0_tx_data_toggle ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
714 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
715 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
716 //if (table[index(0, TX, EVEN)].desc & 0x80) { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
717 //serial_print("leftover tx even\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
718 //} |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
719 //if (table[index(0, TX, ODD)].desc & 0x80) { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
720 //serial_print("leftover tx odd\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
721 //} |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
722 table[index(0, TX, EVEN)].desc = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
723 table[index(0, TX, ODD)].desc = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
724 // first IN after Setup is always DATA1 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
725 ep0_tx_data_toggle = 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
726 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
727 #ifdef UART_DEBUG_UNKNOWN |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
728 print("bmRequestType:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
729 printHex(setup.bmRequestType); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
730 print(", bRequest:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
731 printHex(setup.bRequest); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
732 print(", wValue:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
733 printHex(setup.wValue); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
734 print(", wIndex:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
735 printHex(setup.wIndex); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
736 print(", len:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
737 printHex(setup.wLength); |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
738 print(" -- "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
739 printHex32(setup.word1); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
740 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
741 printHex32(setup.word2); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
742 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
743 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
744 // actually "do" the setup request |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
745 usb_setup(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
746 // unfreeze the USB, now that we're ready |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
747 USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
748 break; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
749 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
750 case 0x01: // OUT transaction received from host |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
751 case 0x02: |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
752 #ifdef UART_DEBUG_UNKNOWN |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
753 print("PID=OUT wRequestAndType:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
754 printHex(setup.wRequestAndType); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
755 print(", wValue:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
756 printHex(setup.wValue); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
757 print(", wIndex:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
758 printHex(setup.wIndex); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
759 print(", len:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
760 printHex(setup.wLength); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
761 print(" -- "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
762 printHex32(setup.word1); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
763 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
764 printHex32(setup.word2); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
765 print(NL); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
766 #endif |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
767 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
768 // CDC Interface |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
769 if ( setup.wRequestAndType == 0x2021 /*CDC_SET_LINE_CODING*/ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
770 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
771 int i; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
772 uint8_t *dst = (uint8_t *)usb_cdc_line_coding; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
773 //serial_print("set line coding "); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
774 for ( i = 0; i < 7; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
775 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
776 //serial_phex(*buf); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
777 *dst++ = *buf++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
778 } |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
779 //serial_phex32(usb_cdc_line_coding[0]); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
780 //serial_print("\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
781 if ( usb_cdc_line_coding[0] == 134 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
782 usb_reboot_timer = 15; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
783 endpoint0_transmit( NULL, 0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
784 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
785 |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
786 // Keyboard SET_REPORT |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
787 if ( setup.wRequestAndType == 0x921 && setup.wValue & 0x200 ) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
788 { |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
789 // Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
790 switch ( setup.wIndex & 0xFF ) |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
791 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
792 // Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
793 case KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
794 USBKeys_LEDs = buf[0]; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
795 endpoint0_transmit( NULL, 0 ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
796 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
797 // NKRO Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
798 case NKRO_KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
799 // Only use 2nd byte, first byte is the report id |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
800 USBKeys_LEDs = buf[1]; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
801 endpoint0_transmit( NULL, 0 ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
802 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
803 default: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
804 warn_msg("Unknown interface - "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
805 printHex( setup.wIndex ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
806 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
807 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
808 } |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
809 |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
810 #ifdef UART_DEBUG |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
811 for ( size_t len = 0; len < setup.wLength; len++ ) |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
812 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
813 printHex( buf[ len ] ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
814 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
815 } |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
816 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
817 #endif |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
818 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
819 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
820 // give the buffer back |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
821 b->desc = BDT_DESC( EP0_SIZE, DATA1 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
822 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
823 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
824 case 0x09: // IN transaction completed to host |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
825 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
826 print("PID=IN:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
827 printHex(stat); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
828 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
829 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
830 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
831 // send remaining data, if any... |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
832 data = ep0_tx_ptr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
833 if ( data ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
834 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
835 size = ep0_tx_len; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
836 if (size > EP0_SIZE) size = EP0_SIZE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
837 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
838 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
839 ep0_tx_len -= size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
840 ep0_tx_ptr = (ep0_tx_len > 0 || size == EP0_SIZE) ? data : NULL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
841 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
842 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
843 if ( setup.bRequest == 5 && setup.bmRequestType == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
844 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
845 setup.bRequest = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
846 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
847 print("set address: "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
848 printHex(setup.wValue); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
849 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
850 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
851 USB0_ADDR = setup.wValue; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
852 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
853 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
854 break; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
855 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
856 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
857 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
858 print("PID=unknown:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
859 printHex(pid); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
860 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
861 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
862 break; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
863 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
864 USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
865 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
866 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
867 usb_packet_t *usb_rx( uint32_t endpoint ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
868 { |
175 | 869 //print("USB RX"); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
870 usb_packet_t *ret; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
871 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
872 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
873 return NULL; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
874 __disable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
875 ret = rx_first[endpoint]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
876 if ( ret ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
877 rx_first[ endpoint ] = ret->next; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
878 usb_rx_byte_count_data[ endpoint ] -= ret->len; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
879 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
880 //serial_print("rx, epidx="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
881 //serial_phex(endpoint); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
882 //serial_print(", packet="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
883 //serial_phex32(ret); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
884 //serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
885 return ret; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
886 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
887 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
888 static uint32_t usb_queue_byte_count( const usb_packet_t *p ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
889 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
890 uint32_t count=0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
891 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
892 __disable_irq(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
893 for ( ; p; p = p->next ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
894 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
895 count += p->len; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
896 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
897 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
898 return count; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
899 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
900 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
901 uint32_t usb_tx_byte_count( uint32_t endpoint ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
902 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
903 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
904 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
905 return 0; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
906 return usb_queue_byte_count( tx_first[ endpoint ] ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
907 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
908 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
909 uint32_t usb_tx_packet_count( uint32_t endpoint ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
910 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
911 const usb_packet_t *p; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
912 uint32_t count=0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
913 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
914 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
915 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
916 return 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
917 __disable_irq(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
918 for ( p = tx_first[ endpoint ]; p; p = p->next ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
919 count++; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
920 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
921 return count; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
922 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
923 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
924 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
925 // Called from usb_free, but only when usb_rx_memory_needed > 0, indicating |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
926 // receive endpoints are starving for memory. The intention is to give |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
927 // endpoints needing receive memory priority over the user's code, which is |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
928 // likely calling usb_malloc to obtain memory for transmitting. When the |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
929 // user is creating data very quickly, their consumption could starve reception |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
930 // without this prioritization. The packet buffer (input) is assigned to the |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
931 // first endpoint needing memory. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
932 // |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
933 void usb_rx_memory( usb_packet_t *packet ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
934 { |
175 | 935 //print("USB RX MEMORY"); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
936 unsigned int i; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
937 const uint8_t *cfg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
938 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
939 cfg = usb_endpoint_config_table; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
940 //serial_print("rx_mem:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
941 __disable_irq(); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
942 for ( i = 1; i <= NUM_ENDPOINTS; i++ ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
943 { |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
944 if ( *cfg++ & USB_ENDPT_EPRXEN ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
945 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
946 if ( table[ index( i, RX, EVEN ) ].desc == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
947 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
948 table[ index( i, RX, EVEN ) ].addr = packet->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
949 table[ index( i, RX, EVEN ) ].desc = BDT_DESC( 64, 0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
950 usb_rx_memory_needed--; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
951 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
952 //serial_phex(i); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
953 //serial_print(",even\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
954 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
955 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
956 if ( table[ index( i, RX, ODD ) ].desc == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
957 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
958 table[ index( i, RX, ODD ) ].addr = packet->buf; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
959 table[ index( i, RX, ODD ) ].desc = BDT_DESC( 64, 1 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
960 usb_rx_memory_needed--; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
961 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
962 //serial_phex(i); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
963 //serial_print(",odd\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
964 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
965 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
966 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
967 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
968 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
969 // we should never reach this point. If we get here, it means |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
970 // usb_rx_memory_needed was set greater than zero, but no memory |
175 | 971 // was actually needed. |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
972 usb_rx_memory_needed = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
973 usb_free( packet ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
974 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
975 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
976 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
977 //#define index(endpoint, tx, odd) (((endpoint) << 2) | ((tx) << 1) | (odd)) |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
978 //#define stat2bufferdescriptor(stat) (table + ((stat) >> 2)) |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
979 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
980 void usb_tx( uint32_t endpoint, usb_packet_t *packet ) |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
981 { |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
982 // If we have been sleeping, try to wake up host |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
983 if ( usb_dev_sleep ) |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
984 { |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
985 // Force wake-up for 10 ms |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
986 // According to the USB Spec a device must hold resume for at least 1 ms but no more than 15 ms |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
987 USB0_CTL |= USB_CTL_RESUME; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
988 delay(10); |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
989 USB0_CTL &= ~(USB_CTL_RESUME); |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
990 } |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
991 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
992 // Since we are transmitting data, USB will be brought out of sleep/suspend |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
993 // if it's in that state |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
994 // Use the currently set descriptor value |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
995 Output_update_usb_current( *usb_bMaxPower * 2 ); |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
996 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
997 bdt_t *b = &table[ index( endpoint, TX, EVEN ) ]; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
998 uint8_t next; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
999 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1000 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1001 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1002 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1003 __disable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1004 //serial_print("txstate="); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1005 //serial_phex(tx_state[ endpoint ]); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1006 //serial_print("\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1007 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1008 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1009 case TX_STATE_BOTH_FREE_EVEN_FIRST: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1010 next = TX_STATE_ODD_FREE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1011 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1012 case TX_STATE_BOTH_FREE_ODD_FIRST: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1013 b++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1014 next = TX_STATE_EVEN_FREE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1015 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1016 case TX_STATE_EVEN_FREE: |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1017 next = TX_STATE_NONE_FREE_ODD_FIRST; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1018 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1019 case TX_STATE_ODD_FREE: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1020 b++; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1021 next = TX_STATE_NONE_FREE_EVEN_FIRST; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1022 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1023 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1024 if (tx_first[ endpoint ] == NULL) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1025 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1026 tx_first[ endpoint ] = packet; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1027 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1028 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1029 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1030 tx_last[ endpoint ]->next = packet; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1031 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1032 tx_last[ endpoint ] = packet; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1033 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1034 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1035 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1036 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1037 tx_state[ endpoint ] = next; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1038 b->addr = packet->buf; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1039 b->desc = BDT_DESC( packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1040 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1041 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1042 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1043 |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
1044 void usb_device_reload() |
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
1045 { |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
1046 // MCHCK |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1047 // Kiibohd mk20dx256vlh7 |
385
d8f61e15aca1
Adding jump to bootloader key
Jacob Alexander <haata@kiibohd.com>
parents:
383
diff
changeset
|
1048 #if defined(_mk20dx128vlf5_) || defined(_mk20dx256vlh7_) |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1049 // Copies variable into the VBAT register, must be identical to the variable in the bootloader to jump to the bootloader flash mode |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1050 for ( int pos = 0; pos < sizeof(sys_reset_to_loader_magic); pos++ ) |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1051 (&VBAT)[ pos ] = sys_reset_to_loader_magic[ pos ]; |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1052 SOFTWARE_RESET(); |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
1053 |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
1054 // Teensy 3.0 and 3.1 |
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
1055 #else |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
1056 asm volatile("bkpt"); |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
1057 #endif |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
1058 } |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1059 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1060 |
175 | 1061 void usb_isr() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1062 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1063 uint8_t status, stat, t; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1064 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1065 //serial_print("isr"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1066 //status = USB0_ISTAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1067 //serial_phex(status); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1068 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1069 restart: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1070 status = USB0_ISTAT; |
175 | 1071 /* |
1072 print("USB ISR STATUS: "); | |
1073 printHex( status ); | |
1074 print( NL ); | |
1075 */ | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1076 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1077 if ( (status & USB_INTEN_SOFTOKEN /* 04 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1078 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1079 if ( usb_configuration ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1080 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1081 t = usb_reboot_timer; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1082 if ( t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1083 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1084 usb_reboot_timer = --t; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1085 if ( !t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1086 usb_device_reload(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1087 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1088 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1089 // CDC Interface |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1090 t = usb_cdc_transmit_flush_timer; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1091 if ( t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1092 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1093 usb_cdc_transmit_flush_timer = --t; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1094 if ( t == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1095 usb_serial_flush_callback(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1096 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1097 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1098 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1099 USB0_ISTAT = USB_INTEN_SOFTOKEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1100 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1101 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1102 if ( (status & USB_ISTAT_TOKDNE /* 08 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1103 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1104 uint8_t endpoint; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1105 stat = USB0_STAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1106 //serial_print("token: ep="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1107 //serial_phex(stat >> 4); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1108 //serial_print(stat & 0x08 ? ",tx" : ",rx"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1109 //serial_print(stat & 0x04 ? ",odd\n" : ",even\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1110 endpoint = stat >> 4; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1111 if ( endpoint == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1112 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1113 usb_control( stat ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1114 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1115 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1116 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1117 bdt_t *b = stat2bufferdescriptor(stat); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1118 usb_packet_t *packet = (usb_packet_t *)((uint8_t *)(b->addr) - 8); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1119 #if 0 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1120 serial_print("ep:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1121 serial_phex(endpoint); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1122 serial_print(", pid:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1123 serial_phex(BDT_PID(b->desc)); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1124 serial_print(((uint32_t)b & 8) ? ", odd" : ", even"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1125 serial_print(", count:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1126 serial_phex(b->desc >> 16); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1127 serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1128 #endif |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
1129 endpoint--; // endpoint is index to zero-based arrays |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1130 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1131 if ( stat & 0x08 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1132 { // transmit |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1133 usb_free( packet ); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1134 packet = tx_first[ endpoint ]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1135 if ( packet ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1136 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1137 //serial_print("tx packet\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1138 tx_first[endpoint] = packet->next; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1139 b->addr = packet->buf; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1140 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1141 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1142 case TX_STATE_BOTH_FREE_EVEN_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1143 tx_state[ endpoint ] = TX_STATE_ODD_FREE; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1144 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1145 case TX_STATE_BOTH_FREE_ODD_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1146 tx_state[ endpoint ] = TX_STATE_EVEN_FREE; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1147 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1148 case TX_STATE_EVEN_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1149 tx_state[ endpoint ] = TX_STATE_NONE_FREE_ODD_FIRST; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1150 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1151 case TX_STATE_ODD_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1152 tx_state[ endpoint ] = TX_STATE_NONE_FREE_EVEN_FIRST; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1153 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1154 default: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1155 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1156 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1157 b->desc = BDT_DESC( packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1158 } else { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1159 //serial_print("tx no packet\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1160 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1161 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1162 case TX_STATE_BOTH_FREE_EVEN_FIRST: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1163 case TX_STATE_BOTH_FREE_ODD_FIRST: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1164 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1165 case TX_STATE_EVEN_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1166 tx_state[ endpoint ] = TX_STATE_BOTH_FREE_EVEN_FIRST; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1167 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1168 case TX_STATE_ODD_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1169 tx_state[ endpoint ] = TX_STATE_BOTH_FREE_ODD_FIRST; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1170 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1171 default: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1172 tx_state[ endpoint ] = ((uint32_t)b & 8) |
376 | 1173 ? TX_STATE_ODD_FREE |
1174 : TX_STATE_EVEN_FREE; | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1175 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1176 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1177 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1178 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1179 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1180 { // receive |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1181 packet->len = b->desc >> 16; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1182 if ( packet->len > 0 ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1183 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1184 packet->index = 0; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1185 packet->next = NULL; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1186 if ( rx_first[ endpoint ] == NULL ) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1187 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1188 //serial_print("rx 1st, epidx="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1189 //serial_phex(endpoint); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1190 //serial_print(", packet="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1191 //serial_phex32((uint32_t)packet); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1192 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1193 rx_first[ endpoint ] = packet; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1194 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1195 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1196 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1197 //serial_print("rx Nth, epidx="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1198 //serial_phex(endpoint); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1199 //serial_print(", packet="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1200 //serial_phex32((uint32_t)packet); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1201 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1202 rx_last[ endpoint ]->next = packet; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1203 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1204 rx_last[ endpoint ] = packet; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1205 usb_rx_byte_count_data[ endpoint ] += packet->len; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1206 // TODO: implement a per-endpoint maximum # of allocated packets |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1207 // so a flood of incoming data on 1 endpoint doesn't starve |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1208 // the others if the user isn't reading it regularly |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1209 packet = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1210 if ( packet ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1211 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1212 b->addr = packet->buf; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1213 b->desc = BDT_DESC( 64, ((uint32_t)b & 8) ? DATA1 : DATA0 ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1214 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1215 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1216 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1217 //serial_print("starving "); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1218 //serial_phex(endpoint + 1); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1219 //serial_print(((uint32_t)b & 8) ? ",odd\n" : ",even\n"); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1220 b->desc = 0; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1221 usb_rx_memory_needed++; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1222 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1223 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1224 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1225 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1226 b->desc = BDT_DESC( 64, ((uint32_t)b & 8) ? DATA1 : DATA0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1227 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1228 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1229 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1230 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1231 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1232 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1233 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1234 USB0_ISTAT = USB_ISTAT_TOKDNE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1235 goto restart; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1236 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1237 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1238 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1239 if ( status & USB_ISTAT_USBRST /* 01 */ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1240 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1241 //serial_print("reset\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1242 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1243 // initialize BDT toggle bits |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1244 USB0_CTL = USB_CTL_ODDRST; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1245 ep0_tx_bdt_bank = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1246 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1247 // set up buffers to receive Setup and OUT packets |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1248 table[index( 0, RX, EVEN ) ].desc = BDT_DESC( EP0_SIZE, 0 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1249 table[index( 0, RX, EVEN ) ].addr = ep0_rx0_buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1250 table[index( 0, RX, ODD ) ].desc = BDT_DESC( EP0_SIZE, 0 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1251 table[index( 0, RX, ODD ) ].addr = ep0_rx1_buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1252 table[index( 0, TX, EVEN ) ].desc = 0; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1253 table[index( 0, TX, ODD ) ].desc = 0; |
170
85d74e5e1a95
More work on mk20dx128vlf5 port.
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
1254 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1255 // activate endpoint 0 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1256 USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1257 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1258 // clear all ending interrupts |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1259 USB0_ERRSTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1260 USB0_ISTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1261 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1262 // set the address to zero during enumeration |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1263 USB0_ADDR = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1264 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1265 // enable other interrupts |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1266 USB0_ERREN = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1267 USB0_INTEN = USB_INTEN_TOKDNEEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1268 USB_INTEN_SOFTOKEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1269 USB_INTEN_STALLEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1270 USB_INTEN_ERROREN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1271 USB_INTEN_USBRSTEN | |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1272 USB_INTEN_RESUMEEN | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1273 USB_INTEN_SLEEPEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1274 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1275 // is this necessary? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1276 USB0_CTL = USB_CTL_USBENSOFEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1277 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1278 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1279 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1280 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1281 if ( (status & USB_ISTAT_STALL /* 80 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1282 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1283 //serial_print("stall:\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1284 USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1285 USB0_ISTAT = USB_ISTAT_STALL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1286 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1287 if ( (status & USB_ISTAT_ERROR /* 02 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1288 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1289 uint8_t err = USB0_ERRSTAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1290 USB0_ERRSTAT = err; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1291 //serial_print("err:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1292 //serial_phex(err); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1293 //serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1294 USB0_ISTAT = USB_ISTAT_ERROR; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1295 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1296 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1297 // USB Host signalling device to enter 'sleep' state |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1298 // The USB Module triggers this interrupt when it detects the bus has been idle for 3 ms |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1299 if ( (status & USB_ISTAT_SLEEP /* 10 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1300 { |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1301 //info_print("Host has requested USB sleep/suspend state"); |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1302 Output_update_usb_current( 100 ); // Set to 100 mA |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1303 usb_dev_sleep = 1; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1304 USB0_ISTAT |= USB_ISTAT_SLEEP; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1305 } |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1306 |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1307 // On USB Resume, unset the usb_dev_sleep so we don't keep sending resume signals |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1308 if ( (status & USB_ISTAT_RESUME /* 20 */ ) ) |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1309 { |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1310 //info_print("Host has woken-up/resumed from sleep/suspend state"); |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1311 Output_update_usb_current( *usb_bMaxPower * 2 ); |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1312 usb_dev_sleep = 0; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1313 USB0_ISTAT |= USB_ISTAT_RESUME; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1314 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1315 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1316 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1317 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1318 |
275
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1319 uint8_t usb_init() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1320 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1321 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1322 print("USB INIT"NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1323 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1324 |
175 | 1325 // Clear out endpoints table |
1326 for ( int i = 0; i <= NUM_ENDPOINTS * 4; i++ ) | |
1327 { | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1328 table[i].desc = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1329 table[i].addr = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1330 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1331 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1332 // this basically follows the flowchart in the Kinetis |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1333 // Quick Reference User Guide, Rev. 1, 03/2012, page 141 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1334 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1335 // assume 48 MHz clock already running |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1336 // SIM - enable clock |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1337 SIM_SCGC4 |= SIM_SCGC4_USBOTG; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1338 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1339 // reset USB module |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1340 USB0_USBTRC0 = USB_USBTRC_USBRESET; |
175 | 1341 while ( (USB0_USBTRC0 & USB_USBTRC_USBRESET) != 0 ); // wait for reset to end |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1342 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1343 // set desc table base addr |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1344 USB0_BDTPAGE1 = ((uint32_t)table) >> 8; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1345 USB0_BDTPAGE2 = ((uint32_t)table) >> 16; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1346 USB0_BDTPAGE3 = ((uint32_t)table) >> 24; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1347 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1348 // clear all ISR flags |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1349 USB0_ISTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1350 USB0_ERRSTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1351 USB0_OTGISTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1352 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1353 USB0_USBTRC0 |= 0x40; // undocumented bit |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1354 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1355 // enable USB |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1356 USB0_CTL = USB_CTL_USBENSOFEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1357 USB0_USBCTRL = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1358 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1359 // enable reset interrupt |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1360 USB0_INTEN = USB_INTEN_USBRSTEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1361 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1362 // enable interrupt in NVIC... |
175 | 1363 NVIC_SET_PRIORITY( IRQ_USBOTG, 112 ); |
1364 NVIC_ENABLE_IRQ( IRQ_USBOTG ); | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1365 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1366 // enable d+ pullup |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1367 USB0_CONTROL = USB_CONTROL_DPPULLUPNONOTG; |
275
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1368 |
420
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1369 // Do not check for power negotiation delay until Get Configuration Descriptor |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1370 power_neg_delay = 0; |
23a1868b4ac2
Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents:
385
diff
changeset
|
1371 |
439
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1372 // During initialization host isn't sleeping |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1373 usb_dev_sleep = 0; |
68e19d7c953e
Adding proper remote wake-up support
Jacob Alexander <haata@kiibohd.com>
parents:
438
diff
changeset
|
1374 |
275
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1375 return 1; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1376 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1377 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1378 // return 0 if the USB is not configured, or the configuration |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1379 // number selected by the HOST |
175 | 1380 uint8_t usb_configured() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1381 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1382 return usb_configuration; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1383 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1384 |