Mercurial > louis > kiibohd-controller
annotate Output/pjrcUSB/arm/usb_dev.c @ 383:801e7628d977
Fixing long-standing SET_REPORT bug
- Implementation was completely wrong (has never worked properly)
- Now working in both NKRO and 6KRO modes
- Added more debugging code if things go wrong again
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Fri, 09 Oct 2015 18:18:07 -0700 |
parents | fbe55b27dc02 |
children | d8f61e15aca1 |
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. |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
4 * Modifications by Jacob Alexander (2013-2015) |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
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 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
171 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
172 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
173 // ----- Functions ----- |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
174 |
175 | 175 static void endpoint0_stall() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
176 { |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
177 #ifdef UART_DEBUG_UNKNOWN |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
178 print("STALL" NL ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
179 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
180 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
|
181 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
182 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
183 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
|
184 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
185 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
|
186 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
|
187 ep0_tx_data_toggle ^= 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
188 ep0_tx_bdt_bank ^= 1; |
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 |
175 | 191 static void usb_setup() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
192 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
193 const uint8_t *data = NULL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
194 uint32_t datalen = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
195 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
|
196 uint32_t size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
197 volatile uint8_t *reg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
198 uint8_t epconf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
199 const uint8_t *cfg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
200 int i; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
201 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
202 switch ( setup.wRequestAndType ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
203 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
204 case 0x0500: // SET_ADDRESS |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
205 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
206 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
207 case 0x0900: // SET_CONFIGURATION |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
208 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
209 print("CONFIGURE - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
210 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
211 usb_configuration = setup.wValue; |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
212 Output_Available = usb_configuration; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
213 reg = &USB0_ENDPT1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
214 cfg = usb_endpoint_config_table; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
215 // 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
|
216 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
|
217 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
218 if ( table[i].desc & BDT_OWN ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
219 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
220 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
|
221 } |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
222 } |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
223 // free all queued packets |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
224 for ( i = 0; i < NUM_ENDPOINTS; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
225 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
226 usb_packet_t *p, *n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
227 p = rx_first[i]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
228 while ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
229 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
230 n = p->next; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
231 usb_free(p); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
232 p = n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
233 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
234 rx_first[ i ] = NULL; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
235 rx_last[ i ] = NULL; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
236 p = tx_first[i]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
237 while (p) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
238 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
239 n = p->next; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
240 usb_free(p); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
241 p = n; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
242 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
243 tx_first[ i ] = NULL; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
244 tx_last[ i ] = NULL; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
245 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
|
246 |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
247 switch ( tx_state[ i ] ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
248 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
249 case TX_STATE_EVEN_FREE: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
250 case TX_STATE_NONE_FREE_EVEN_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
251 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
|
252 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
253 case TX_STATE_ODD_FREE: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
254 case TX_STATE_NONE_FREE_ODD_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
255 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
|
256 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
257 default: |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
258 break; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
259 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
260 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
261 usb_rx_memory_needed = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
262 for ( i = 1; i <= NUM_ENDPOINTS; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
263 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
264 epconf = *cfg++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
265 *reg = epconf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
266 reg += 4; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
267 if ( epconf & USB_ENDPT_EPRXEN ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
268 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
269 usb_packet_t *p; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
270 p = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
271 if ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
272 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
273 table[ index( i, RX, EVEN ) ].addr = p->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
274 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
|
275 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
276 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
277 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
278 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
|
279 usb_rx_memory_needed++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
280 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
281 p = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
282 if ( p ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
283 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
284 table[ index( i, RX, ODD ) ].addr = p->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
285 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
|
286 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
287 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
288 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
289 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
|
290 usb_rx_memory_needed++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
291 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
292 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
293 table[ index( i, TX, EVEN ) ].desc = 0; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
294 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
|
295 } |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
296 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
297 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
298 case 0x0880: // GET_CONFIGURATION |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
299 reply_buffer[0] = usb_configuration; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
300 datalen = 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
301 data = reply_buffer; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
302 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
303 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
304 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
|
305 reply_buffer[0] = 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
306 reply_buffer[1] = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
307 datalen = 2; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
308 data = reply_buffer; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
309 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
310 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
311 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
|
312 if ( setup.wIndex > NUM_ENDPOINTS ) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
313 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
314 // 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
|
315 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
316 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
317 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
318 reply_buffer[0] = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
319 reply_buffer[1] = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
320 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
|
321 reply_buffer[0] = 1; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
322 data = reply_buffer; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
323 datalen = 2; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
324 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
325 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
326 case 0x0100: // CLEAR_FEATURE (device) |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
327 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
|
328 // TODO: Currently ignoring, perhaps useful? -HaaTa |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
329 warn_print("CLEAR_FEATURE - Device/Interface"); |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
330 endpoint0_stall(); |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
331 return; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
332 |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
333 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
|
334 i = setup.wIndex & 0x7F; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
335 if ( i > NUM_ENDPOINTS || setup.wValue != 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
336 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
337 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
338 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
339 } |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
340 (*(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
|
341 // 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
|
342 goto send; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
343 |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
344 case 0x0300: // SET_FEATURE (device) |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
345 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
|
346 // TODO: Currently ignoring, perhaps useful? -HaaTa |
381
fbe55b27dc02
Cleaning up CLEAR_FEATURE (endpoint)
Jacob Alexander <haata@kiibohd.com>
parents:
376
diff
changeset
|
347 warn_print("SET_FEATURE - Device/Interface"); |
302
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
348 endpoint0_stall(); |
ac842066568a
Adding additional case statements for SET_FEATURE and CLEAR_FEATURE
Jacob Alexander <haata@kiibohd.com>
parents:
301
diff
changeset
|
349 return; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
350 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
351 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
|
352 i = setup.wIndex & 0x7F; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
353 if ( i > NUM_ENDPOINTS || setup.wValue != 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
354 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
355 // 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
|
356 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
357 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
358 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
359 (*(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
|
360 // 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
|
361 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
362 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
363 case 0x0680: // GET_DESCRIPTOR |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
364 case 0x0681: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
365 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
366 print("desc:"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
367 printHex( setup.wValue ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
368 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
369 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
370 for ( list = usb_descriptor_list; 1; list++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
371 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
372 if ( list->addr == NULL ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
373 break; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
374 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
|
375 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
376 data = list->addr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
377 if ( (setup.wValue >> 8) == 3 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
378 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
379 // 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
|
380 // length field, allowing runtime configured |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
381 // length. |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
382 datalen = *(list->addr); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
383 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
384 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
385 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
386 datalen = list->length; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
387 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
388 #if UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
389 print("Desc found, "); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
390 printHex32( (uint32_t)data ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
391 print(","); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
392 printHex( datalen ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
393 print(","); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
394 printHex_op( data[0], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
395 printHex_op( data[1], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
396 printHex_op( data[2], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
397 printHex_op( data[3], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
398 printHex_op( data[4], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
399 printHex_op( data[5], 2 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
400 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
401 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
402 goto send; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
403 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
404 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
405 #ifdef UART_DEBUG |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
406 print( "desc: not found" NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
407 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
408 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
409 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
410 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
411 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
|
412 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
|
413 //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
|
414 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
415 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
416 case 0x21A1: // CDC_GET_LINE_CODING |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
417 data = (uint8_t*)usb_cdc_line_coding; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
418 datalen = sizeof( usb_cdc_line_coding ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
419 goto send; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
420 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
421 case 0x2021: // CDC_SET_LINE_CODING |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
422 // XXX Needed? |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
423 //serial_print("set coding, waiting...\n"); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
424 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
425 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
426 case 0x0921: // HID SET_REPORT |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
427 // Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
428 switch ( setup.wIndex & 0xFF ) |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
429 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
430 // Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
431 case KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
432 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
433 // NKRO Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
434 case NKRO_KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
435 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
436 default: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
437 warn_msg("Unknown interface - "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
438 printHex( setup.wIndex ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
439 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
440 endpoint0_stall(); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
441 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
442 } |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
443 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
444 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
445 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
446 case 0x01A1: // HID GET_REPORT |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
447 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
448 print("GET_REPORT - "); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
449 printHex( setup.wIndex ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
450 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
451 #endif |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
452 // Search through descriptors returning necessary info |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
453 for ( list = usb_descriptor_list; 1; list++ ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
454 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
455 if ( list->addr == NULL ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
456 break; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
457 if ( list->wValue != 0x2200 ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
458 continue; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
459 if ( setup.wIndex == list->wIndex ) |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
460 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
461 data = list->addr; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
462 datalen = list->length; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
463 goto send; |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
464 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
465 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
466 endpoint0_stall(); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
467 return; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
468 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
469 case 0x0A21: // HID SET_IDLE |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
470 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
471 print("SET_IDLE - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
472 printHex( setup.wValue ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
473 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
474 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
475 USBKeys_Idle_Config = (setup.wValue >> 8); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
476 USBKeys_Idle_Count = 0; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
477 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
478 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
479 case 0x0B21: // HID SET_PROTOCOL |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
480 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
481 print("SET_PROTOCOL - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
482 printHex( setup.wValue ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
483 print(" - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
484 printHex( setup.wValue & 0xFF ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
485 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
486 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
487 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
|
488 goto send; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
489 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
490 // case 0xC940: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
491 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
492 #ifdef UART_DEBUG_UNKNOWN |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
493 print("UNKNOWN"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
494 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
495 endpoint0_stall(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
496 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
497 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
498 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
499 send: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
500 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
501 print("setup send "); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
502 printHex32( (uint32_t)data ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
503 print(","); |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
504 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
|
505 { |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
506 printHex( data[c] ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
507 print(" "); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
508 } |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
509 print(","); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
510 printHex( datalen ); |
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
511 print( NL ); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
512 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
513 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
514 if ( datalen > setup.wLength ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
515 datalen = setup.wLength; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
516 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
517 size = datalen; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
518 if ( size > EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
519 size = EP0_SIZE; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
520 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
521 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
522 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
523 datalen -= size; |
231
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 // See if transmit has finished |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
526 if ( datalen == 0 && size < EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
527 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
528 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
529 size = datalen; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
530 if ( size > EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
531 size = EP0_SIZE; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
532 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
533 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
534 datalen -= size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
535 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
536 // See if transmit has finished |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
537 if ( datalen == 0 && size < EP0_SIZE ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
538 return; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
539 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
540 // 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
|
541 ep0_tx_ptr = data; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
542 ep0_tx_len = datalen; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
543 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
544 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
545 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
546 //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
|
547 //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
|
548 //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
|
549 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
550 //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
|
551 //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
|
552 //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
|
553 //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
|
554 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
555 //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
|
556 //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
|
557 //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
|
558 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
559 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
|
560 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
561 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
562 print("CONTROL - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
563 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
564 bdt_t *b; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
565 uint32_t pid, size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
566 uint8_t *buf; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
567 const uint8_t *data; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
568 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
569 b = stat2bufferdescriptor( stat ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
570 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
|
571 buf = b->addr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
572 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
573 print("pid:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
574 printHex(pid); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
575 print(", count:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
576 printHex32(b->desc); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
577 print(" - "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
578 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
579 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
580 switch (pid) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
581 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
582 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
|
583 //serial_print("PID=Setup\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
584 //if (count != 8) ; // panic? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
585 // 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
|
586 setup.word1 = *(uint32_t *)(buf); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
587 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
|
588 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
589 // give the buffer back |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
590 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
|
591 //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
|
592 //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
|
593 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
594 // 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
|
595 ep0_tx_ptr = NULL; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
596 if ( ep0_tx_data_toggle ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
597 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
598 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
599 //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
|
600 //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
|
601 //} |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
602 //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
|
603 //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
|
604 //} |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
605 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
|
606 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
|
607 // 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
|
608 ep0_tx_data_toggle = 1; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
609 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
610 #ifdef UART_DEBUG_UNKNOWN |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
611 print("bmRequestType:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
612 printHex(setup.bmRequestType); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
613 print(", bRequest:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
614 printHex(setup.bRequest); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
615 print(", wValue:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
616 printHex(setup.wValue); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
617 print(", wIndex:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
618 printHex(setup.wIndex); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
619 print(", len:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
620 printHex(setup.wLength); |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
621 print(" -- "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
622 printHex32(setup.word1); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
623 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
624 printHex32(setup.word2); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
625 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
626 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
627 // 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
|
628 usb_setup(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
629 // 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
|
630 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
|
631 break; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
632 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
633 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
|
634 case 0x02: |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
635 #ifdef UART_DEBUG_UNKNOWN |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
636 print("PID=OUT wRequestAndType:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
637 printHex(setup.wRequestAndType); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
638 print(", wValue:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
639 printHex(setup.wValue); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
640 print(", wIndex:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
641 printHex(setup.wIndex); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
642 print(", len:"); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
643 printHex(setup.wLength); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
644 print(" -- "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
645 printHex32(setup.word1); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
646 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
647 printHex32(setup.word2); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
648 print(NL); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
649 #endif |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
650 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
651 // CDC Interface |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
652 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
|
653 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
654 int i; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
655 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
|
656 //serial_print("set line coding "); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
657 for ( i = 0; i < 7; i++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
658 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
659 //serial_phex(*buf); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
660 *dst++ = *buf++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
661 } |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
662 //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
|
663 //serial_print("\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
664 if ( usb_cdc_line_coding[0] == 134 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
665 usb_reboot_timer = 15; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
666 endpoint0_transmit( NULL, 0 ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
667 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
668 |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
669 // Keyboard SET_REPORT |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
670 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
|
671 { |
383
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
672 // Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
673 switch ( setup.wIndex & 0xFF ) |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
674 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
675 // Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
676 case KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
677 USBKeys_LEDs = buf[0]; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
678 endpoint0_transmit( NULL, 0 ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
679 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
680 // NKRO Keyboard Interface |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
681 case NKRO_KEYBOARD_INTERFACE: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
682 // 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
|
683 USBKeys_LEDs = buf[1]; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
684 endpoint0_transmit( NULL, 0 ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
685 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
686 default: |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
687 warn_msg("Unknown interface - "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
688 printHex( setup.wIndex ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
689 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
690 break; |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
691 } |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
692 |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
693 #ifdef UART_DEBUG |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
694 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
|
695 { |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
696 printHex( buf[ len ] ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
697 print(" "); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
698 } |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
699 print( NL ); |
801e7628d977
Fixing long-standing SET_REPORT bug
Jacob Alexander <haata@kiibohd.com>
parents:
381
diff
changeset
|
700 #endif |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
701 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
702 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
703 // give the buffer back |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
704 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
|
705 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
706 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
707 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
|
708 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
709 print("PID=IN:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
710 printHex(stat); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
711 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
712 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
713 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
714 // send remaining data, if any... |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
715 data = ep0_tx_ptr; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
716 if ( data ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
717 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
718 size = ep0_tx_len; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
719 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
|
720 endpoint0_transmit(data, size); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
721 data += size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
722 ep0_tx_len -= size; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
723 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
|
724 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
725 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
726 if ( setup.bRequest == 5 && setup.bmRequestType == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
727 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
728 setup.bRequest = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
729 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
730 print("set address: "); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
731 printHex(setup.wValue); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
732 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
733 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
734 USB0_ADDR = setup.wValue; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
735 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
736 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
737 break; |
368
06a54d582bf8
FIxing Media Keys and general USB compatibilty
Jacob Alexander <haata@kiibohd.com>
parents:
347
diff
changeset
|
738 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
739 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
740 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
741 print("PID=unknown:"); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
742 printHex(pid); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
743 print(NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
744 #endif |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
745 break; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
746 } |
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 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
749 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
750 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
|
751 { |
175 | 752 //print("USB RX"); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
753 usb_packet_t *ret; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
754 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
755 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
756 return NULL; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
757 __disable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
758 ret = rx_first[endpoint]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
759 if ( ret ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
760 rx_first[ endpoint ] = ret->next; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
761 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
|
762 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
763 //serial_print("rx, epidx="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
764 //serial_phex(endpoint); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
765 //serial_print(", packet="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
766 //serial_phex32(ret); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
767 //serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
768 return ret; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
769 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
770 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
771 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
|
772 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
773 uint32_t count=0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
774 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
775 __disable_irq(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
776 for ( ; p; p = p->next ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
777 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
778 count += p->len; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
779 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
780 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
781 return count; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
782 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
783 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
784 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
|
785 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
786 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
787 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
788 return 0; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
789 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
|
790 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
791 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
792 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
|
793 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
794 const usb_packet_t *p; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
795 uint32_t count=0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
796 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
797 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
798 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
799 return 0; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
800 __disable_irq(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
801 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
|
802 count++; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
803 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
804 return count; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
805 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
806 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
807 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
808 // 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
|
809 // 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
|
810 // 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
|
811 // 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
|
812 // 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
|
813 // 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
|
814 // first endpoint needing memory. |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
815 // |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
816 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
|
817 { |
175 | 818 //print("USB RX MEMORY"); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
819 unsigned int i; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
820 const uint8_t *cfg; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
821 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
822 cfg = usb_endpoint_config_table; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
823 //serial_print("rx_mem:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
824 __disable_irq(); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
825 for ( i = 1; i <= NUM_ENDPOINTS; i++ ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
826 { |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
827 if ( *cfg++ & USB_ENDPT_EPRXEN ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
828 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
829 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
|
830 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
831 table[ index( i, RX, EVEN ) ].addr = packet->buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
832 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
|
833 usb_rx_memory_needed--; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
834 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
835 //serial_phex(i); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
836 //serial_print(",even\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
837 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
838 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
839 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
|
840 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
841 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
|
842 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
|
843 usb_rx_memory_needed--; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
844 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
845 //serial_phex(i); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
846 //serial_print(",odd\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
847 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
848 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
849 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
850 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
851 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
852 // 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
|
853 // usb_rx_memory_needed was set greater than zero, but no memory |
175 | 854 // was actually needed. |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
855 usb_rx_memory_needed = 0; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
856 usb_free( packet ); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
857 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
858 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
859 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
860 //#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
|
861 //#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
|
862 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
863 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
|
864 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
865 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
|
866 uint8_t next; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
867 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
868 endpoint--; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
869 if ( endpoint >= NUM_ENDPOINTS ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
870 return; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
871 __disable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
872 //serial_print("txstate="); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
873 //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
|
874 //serial_print("\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
875 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
876 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
877 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
|
878 next = TX_STATE_ODD_FREE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
879 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
880 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
|
881 b++; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
882 next = TX_STATE_EVEN_FREE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
883 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
884 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
|
885 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
|
886 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
887 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
|
888 b++; |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
889 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
|
890 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
891 default: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
892 if (tx_first[ endpoint ] == NULL) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
893 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
894 tx_first[ endpoint ] = packet; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
895 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
896 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
897 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
898 tx_last[ endpoint ]->next = packet; |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
899 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
900 tx_last[ endpoint ] = packet; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
901 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
902 return; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
903 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
904 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
905 tx_state[ endpoint ] = next; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
906 b->addr = packet->buf; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
907 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
|
908 __enable_irq(); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
909 } |
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 |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
912 void usb_device_reload() |
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
913 { |
370
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
914 if ( flashModeEnabled_define == 0 ) |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
915 { |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
916 print( NL ); |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
917 warn_print("flashModeEnabled not set, cancelling firmware reload..."); |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
918 info_msg("Set flashModeEnabled to 1 in your kll configuration."); |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
919 return; |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
920 } |
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
921 |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
922 // MCHCK |
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
923 #if defined(_mk20dx128vlf5_) |
186
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
924 |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
925 // MCHCK Kiibohd Variant |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
926 // Check to see if PTA3 (has a pull-up) is connected to GND (usually via jumper) |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
927 // Only allow reload if the jumper is present (security) |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
928 GPIOA_PDDR &= ~(1<<3); // Input |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
929 PORTA_PCR3 = PORT_PCR_PFE | PORT_PCR_MUX(1); // Internal pull-up |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
930 |
186
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
931 // Check for jumper |
370
39e338a6733d
Fixing default ErgoDox layout and adding FlashMode button
Jacob Alexander <haata@kiibohd.com>
parents:
368
diff
changeset
|
932 if ( GPIOA_PDIR & (1<<3) && flashModeEnabled_define != 0 ) |
186
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
933 { |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
934 print( NL ); |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
935 warn_print("Security jumper not present, cancelling firmware reload..."); |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
936 info_msg("Replace jumper on middle 2 pins, or manually press the firmware reload button."); |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
937 } |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
938 else |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
939 { |
192
6ac92b8614c0
Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents:
186
diff
changeset
|
940 // Copies variable into the VBAT register, must be identical to the variable in the bootloader to jump to the bootloader flash mode |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
941 for ( int pos = 0; pos < sizeof(sys_reset_to_loader_magic); pos++ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
942 (&VBAT)[ pos ] = sys_reset_to_loader_magic[ pos ]; |
186
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
943 SOFTWARE_RESET(); |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
944 } |
50702debf278
Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
177
diff
changeset
|
945 |
347
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
946 // Kiibohd mk20dx256vlh7 |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
947 #elif defined(_mk20dx256vlh7_) |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
948 // 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
|
949 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
|
950 (&VBAT)[ pos ] = sys_reset_to_loader_magic[ pos ]; |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
951 SOFTWARE_RESET(); |
136e47478441
UARTConnect enumeration working!
Jacob Alexander <haata@kiibohd.com>
parents:
346
diff
changeset
|
952 |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
953 // Teensy 3.0 and 3.1 |
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
954 #else |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
955 asm volatile("bkpt"); |
177
3420e018ffbc
Adding McHCK flash reload function and some cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
175
diff
changeset
|
956 #endif |
109
2c1a9e6ae70e
Added more CLI commands.
Jacob Alexander <haata@kiibohd.com>
parents:
104
diff
changeset
|
957 } |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
958 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
959 |
175 | 960 void usb_isr() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
961 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
962 uint8_t status, stat, t; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
963 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
964 //serial_print("isr"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
965 //status = USB0_ISTAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
966 //serial_phex(status); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
967 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
968 restart: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
969 status = USB0_ISTAT; |
175 | 970 /* |
971 print("USB ISR STATUS: "); | |
972 printHex( status ); | |
973 print( NL ); | |
974 */ | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
975 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
976 if ( (status & USB_INTEN_SOFTOKEN /* 04 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
977 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
978 if ( usb_configuration ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
979 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
980 t = usb_reboot_timer; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
981 if ( t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
982 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
983 usb_reboot_timer = --t; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
984 if ( !t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
985 usb_device_reload(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
986 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
987 |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
988 // CDC Interface |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
989 t = usb_cdc_transmit_flush_timer; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
990 if ( t ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
991 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
992 usb_cdc_transmit_flush_timer = --t; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
993 if ( t == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
994 usb_serial_flush_callback(); |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
995 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
996 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
997 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
998 USB0_ISTAT = USB_INTEN_SOFTOKEN; |
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 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1001 if ( (status & USB_ISTAT_TOKDNE /* 08 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1002 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1003 uint8_t endpoint; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1004 stat = USB0_STAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1005 //serial_print("token: ep="); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1006 //serial_phex(stat >> 4); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1007 //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
|
1008 //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
|
1009 endpoint = stat >> 4; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1010 if ( endpoint == 0 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1011 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1012 usb_control( stat ); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1013 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1014 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1015 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1016 bdt_t *b = stat2bufferdescriptor(stat); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1017 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
|
1018 #if 0 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1019 serial_print("ep:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1020 serial_phex(endpoint); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1021 serial_print(", pid:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1022 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
|
1023 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
|
1024 serial_print(", count:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1025 serial_phex(b->desc >> 16); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1026 serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1027 #endif |
326
05a09eda53fb
Inital Remote Wakeup Support
Rowan Decker <Smasher816@gmail.com>
parents:
302
diff
changeset
|
1028 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
|
1029 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1030 if ( stat & 0x08 ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1031 { // transmit |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1032 usb_free( packet ); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1033 packet = tx_first[ endpoint ]; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1034 if ( packet ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1035 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1036 //serial_print("tx packet\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1037 tx_first[endpoint] = packet->next; |
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 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1040 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1041 case TX_STATE_BOTH_FREE_EVEN_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1042 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
|
1043 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1044 case TX_STATE_BOTH_FREE_ODD_FIRST: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1045 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
|
1046 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1047 case TX_STATE_EVEN_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1048 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
|
1049 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1050 case TX_STATE_ODD_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1051 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
|
1052 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1053 default: |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1054 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1055 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1056 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
|
1057 } else { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1058 //serial_print("tx no packet\n"); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1059 switch ( tx_state[ endpoint ] ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1060 { |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1061 case TX_STATE_BOTH_FREE_EVEN_FIRST: |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1062 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
|
1063 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1064 case TX_STATE_EVEN_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1065 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
|
1066 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1067 case TX_STATE_ODD_FREE: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1068 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
|
1069 break; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1070 default: |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1071 tx_state[ endpoint ] = ((uint32_t)b & 8) |
376 | 1072 ? TX_STATE_ODD_FREE |
1073 : TX_STATE_EVEN_FREE; | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1074 break; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1075 } |
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 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1078 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1079 { // receive |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1080 packet->len = b->desc >> 16; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1081 if ( packet->len > 0 ) |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1082 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1083 packet->index = 0; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1084 packet->next = NULL; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1085 if ( rx_first[ endpoint ] == NULL ) |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1086 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1087 //serial_print("rx 1st, epidx="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1088 //serial_phex(endpoint); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1089 //serial_print(", packet="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1090 //serial_phex32((uint32_t)packet); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1091 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1092 rx_first[ endpoint ] = packet; |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1093 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1094 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1095 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1096 //serial_print("rx Nth, epidx="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1097 //serial_phex(endpoint); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1098 //serial_print(", packet="); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1099 //serial_phex32((uint32_t)packet); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1100 //serial_print("\n"); |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1101 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
|
1102 } |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1103 rx_last[ endpoint ] = packet; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1104 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
|
1105 // 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
|
1106 // 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
|
1107 // 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
|
1108 packet = usb_malloc(); |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1109 if ( packet ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1110 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1111 b->addr = packet->buf; |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1112 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
|
1113 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1114 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1115 { |
117
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1116 //serial_print("starving "); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1117 //serial_phex(endpoint + 1); |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1118 //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
|
1119 b->desc = 0; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1120 usb_rx_memory_needed++; |
5ffefdf89b37
Adding in USB module updates from Teensyduino 1.18rc2.
Jacob Alexander <haata@kiibohd.com>
parents:
109
diff
changeset
|
1121 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1122 } |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1123 else |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1124 { |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1125 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
|
1126 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1127 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1128 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1129 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1130 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1131 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1132 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1133 USB0_ISTAT = USB_ISTAT_TOKDNE; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1134 goto restart; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1135 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1136 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1137 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1138 if ( status & USB_ISTAT_USBRST /* 01 */ ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1139 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1140 //serial_print("reset\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1141 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1142 // initialize BDT toggle bits |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1143 USB0_CTL = USB_CTL_ODDRST; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1144 ep0_tx_bdt_bank = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1145 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1146 // set up buffers to receive Setup and OUT packets |
250
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1147 table[index( 0, RX, EVEN ) ].desc = BDT_DESC( EP0_SIZE, 0 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1148 table[index( 0, RX, EVEN ) ].addr = ep0_rx0_buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1149 table[index( 0, RX, ODD ) ].desc = BDT_DESC( EP0_SIZE, 0 ); |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1150 table[index( 0, RX, ODD ) ].addr = ep0_rx1_buf; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1151 table[index( 0, TX, EVEN ) ].desc = 0; |
afe96322d0c5
Code formatting cleanup.
Jacob Alexander <haata@kiibohd.com>
parents:
231
diff
changeset
|
1152 table[index( 0, TX, ODD ) ].desc = 0; |
170
85d74e5e1a95
More work on mk20dx128vlf5 port.
Jacob Alexander <haata@kiibohd.com>
parents:
118
diff
changeset
|
1153 |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1154 // activate endpoint 0 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1155 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
|
1156 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1157 // clear all ending interrupts |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1158 USB0_ERRSTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1159 USB0_ISTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1160 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1161 // 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
|
1162 USB0_ADDR = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1163 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1164 // enable other interrupts |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1165 USB0_ERREN = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1166 USB0_INTEN = USB_INTEN_TOKDNEEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1167 USB_INTEN_SOFTOKEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1168 USB_INTEN_STALLEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1169 USB_INTEN_ERROREN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1170 USB_INTEN_USBRSTEN | |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1171 USB_INTEN_SLEEPEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1172 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1173 // is this necessary? |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1174 USB0_CTL = USB_CTL_USBENSOFEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1175 return; |
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 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1178 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1179 if ( (status & USB_ISTAT_STALL /* 80 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1180 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1181 //serial_print("stall:\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1182 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
|
1183 USB0_ISTAT = USB_ISTAT_STALL; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1184 } |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1185 if ( (status & USB_ISTAT_ERROR /* 02 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1186 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1187 uint8_t err = USB0_ERRSTAT; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1188 USB0_ERRSTAT = err; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1189 //serial_print("err:"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1190 //serial_phex(err); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1191 //serial_print("\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1192 USB0_ISTAT = USB_ISTAT_ERROR; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1193 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1194 |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1195 if ( (status & USB_ISTAT_SLEEP /* 10 */ ) ) |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1196 { |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1197 //serial_print("sleep\n"); |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1198 USB0_ISTAT = USB_ISTAT_SLEEP; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1199 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1200 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1201 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1202 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1203 |
275
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1204 uint8_t usb_init() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1205 { |
231
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1206 #ifdef UART_DEBUG |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1207 print("USB INIT"NL); |
4afb170978e9
More preparation for NKRO USB for arm
Jacob Alexander <haata@kiibohd.com>
parents:
192
diff
changeset
|
1208 #endif |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1209 |
175 | 1210 // Clear out endpoints table |
1211 for ( int i = 0; i <= NUM_ENDPOINTS * 4; i++ ) | |
1212 { | |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1213 table[i].desc = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1214 table[i].addr = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1215 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1216 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1217 // 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
|
1218 // 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
|
1219 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1220 // 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
|
1221 // SIM - enable clock |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1222 SIM_SCGC4 |= SIM_SCGC4_USBOTG; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1223 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1224 // reset USB module |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1225 USB0_USBTRC0 = USB_USBTRC_USBRESET; |
175 | 1226 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
|
1227 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1228 // set desc table base addr |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1229 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
|
1230 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
|
1231 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
|
1232 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1233 // clear all ISR flags |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1234 USB0_ISTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1235 USB0_ERRSTAT = 0xFF; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1236 USB0_OTGISTAT = 0xFF; |
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 USB0_USBTRC0 |= 0x40; // undocumented bit |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1239 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1240 // enable USB |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1241 USB0_CTL = USB_CTL_USBENSOFEN; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1242 USB0_USBCTRL = 0; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1243 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1244 // enable reset interrupt |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1245 USB0_INTEN = USB_INTEN_USBRSTEN; |
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 // enable interrupt in NVIC... |
175 | 1248 NVIC_SET_PRIORITY( IRQ_USBOTG, 112 ); |
1249 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
|
1250 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1251 // enable d+ pullup |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1252 USB0_CONTROL = USB_CONTROL_DPPULLUPNONOTG; |
275
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1253 |
d5bf41d7f7ef
Initial code for USB cable detection
Jacob Alexander <haata@kiibohd.com>
parents:
251
diff
changeset
|
1254 return 1; |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1255 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1256 |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1257 // 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
|
1258 // number selected by the HOST |
175 | 1259 uint8_t usb_configured() |
104
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1260 { |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1261 return usb_configuration; |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1262 } |
e84738d174bc
Moving USB to Output in preparation for additional Output types.
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1263 |