Mercurial > louis > kiibohd-controller
annotate Bootloader/dfu.h @ 308:ab4515606277
Fix whitespace
Use a consistent standard - Tabs in front for indenting, spaces after for anything else. This way everything stays nice and lined up while also letting users change there prefered indent level. Most of the new files from Haata where already in this format.
author | Rowan Decker <Smasher816@gmail.com> |
---|---|
date | Sun, 08 Mar 2015 18:40:01 -0700 |
parents | b091bb09c55f |
children | 9ac304aa1ab5 |
rev | line source |
---|---|
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
1 /* Copyright (c) 2011,2012 Simon Schubert <2@0x2c.org>. |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
2 * Modifications by Jacob Alexander 2014 <haata@kiibohd.com> |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
3 * |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
4 * This program is free software: you can redistribute it and/or modify |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
6 * the Free Software Foundation, either version 3 of the License, or |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
7 * (at your option) any later version. |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
8 * |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
9 * This program is distributed in the hope that it will be useful, |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
12 * GNU General Public License for more details. |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
13 * |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
14 * You should have received a copy of the GNU General Public License |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
15 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
16 */ |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
17 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
18 #ifndef _USB_DFU_H |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
19 #define _USB_DFU_H |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
20 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
21 // ----- Compiler Includes ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
22 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
23 #include <sys/types.h> |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
24 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
25 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
26 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
27 // ----- Defines ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
28 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
29 #define USB_FUNCTION_DFU_IFACE_COUNT 1 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
30 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
31 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
32 #ifndef USB_DFU_TRANSFER_SIZE |
308 | 33 #define USB_DFU_TRANSFER_SIZE FLASH_SECTOR_SIZE |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
34 #endif |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
35 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
36 #define USB_FUNCTION_DESC_DFU_DECL \ |
308 | 37 struct dfu_function_desc |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
38 |
308 | 39 #define USB_FUNCTION_DFU_IFACE_COUNT 1 |
40 #define USB_FUNCTION_DFU_RX_EP_COUNT 0 | |
41 #define USB_FUNCTION_DFU_TX_EP_COUNT 0 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
42 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
43 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
44 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
45 // ----- Macros ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
46 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
47 #define USB_FUNCTION_DESC_DFU(state...) \ |
308 | 48 { \ |
49 .iface = { \ | |
50 .bLength = sizeof(struct usb_desc_iface_t), \ | |
51 .bDescriptorType = USB_DESC_IFACE, \ | |
52 .bInterfaceNumber = USB_FUNCTION_IFACE(0, state), \ | |
53 .bAlternateSetting = 0, \ | |
54 .bNumEndpoints = 0, \ | |
55 .bInterfaceClass = USB_DEV_CLASS_APP, \ | |
56 .bInterfaceSubClass = USB_DEV_SUBCLASS_APP_DFU, \ | |
57 .bInterfaceProtocol = USB_DEV_PROTO_DFU_DFU, \ | |
58 .iInterface = 0, \ | |
59 }, \ | |
60 .dfu = { \ | |
61 .bLength = sizeof(struct dfu_desc_functional), \ | |
62 .bDescriptorType = { \ | |
63 .id = 0x1, \ | |
64 .type_type = USB_DESC_TYPE_CLASS \ | |
65 }, \ | |
66 .will_detach = 1, \ | |
67 .manifestation_tolerant = 0, \ | |
68 .can_upload = 0, \ | |
69 .can_download = 1, \ | |
70 .wDetachTimeOut = 0, \ | |
71 .wTransferSize = USB_DFU_TRANSFER_SIZE, \ | |
72 .bcdDFUVersion = { .maj = 1, .min = 1 } \ | |
73 } \ | |
74 } | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
75 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
76 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
77 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
78 // ----- Enumerations ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
79 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
80 enum dfu_dev_subclass { |
308 | 81 USB_DEV_SUBCLASS_APP_DFU = 0x01 |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
82 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
83 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
84 enum dfu_dev_proto { |
308 | 85 USB_DEV_PROTO_DFU_APP = 0x01, |
86 USB_DEV_PROTO_DFU_DFU = 0x02 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
87 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
88 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
89 enum dfu_ctrl_req_code { |
308 | 90 USB_CTRL_REQ_DFU_DETACH = 0, |
91 USB_CTRL_REQ_DFU_DNLOAD = 1, | |
92 USB_CTRL_REQ_DFU_UPLOAD = 2, | |
93 USB_CTRL_REQ_DFU_GETSTATUS = 3, | |
94 USB_CTRL_REQ_DFU_CLRSTATUS = 4, | |
95 USB_CTRL_REQ_DFU_GETSTATE = 5, | |
96 USB_CTRL_REQ_DFU_ABORT = 6 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
97 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
98 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
99 enum dfu_status { |
308 | 100 DFU_STATUS_async = 0xff, |
101 DFU_STATUS_OK = 0x00, | |
102 DFU_STATUS_errTARGET = 0x01, | |
103 DFU_STATUS_errFILE = 0x02, | |
104 DFU_STATUS_errWRITE = 0x03, | |
105 DFU_STATUS_errERASE = 0x04, | |
106 DFU_STATUS_errCHECK_ERASED = 0x05, | |
107 DFU_STATUS_errPROG = 0x06, | |
108 DFU_STATUS_errVERIFY = 0x07, | |
109 DFU_STATUS_errADDRESS = 0x08, | |
110 DFU_STATUS_errNOTDONE = 0x09, | |
111 DFU_STATUS_errFIRMWARE = 0x0a, | |
112 DFU_STATUS_errVENDOR = 0x0b, | |
113 DFU_STATUS_errUSBR = 0x0c, | |
114 DFU_STATUS_errPOR = 0x0d, | |
115 DFU_STATUS_errUNKNOWN = 0x0e, | |
116 DFU_STATUS_errSTALLEDPKT = 0x0f | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
117 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
118 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
119 enum dfu_state { |
308 | 120 DFU_STATE_appIDLE = 0, |
121 DFU_STATE_appDETACH = 1, | |
122 DFU_STATE_dfuIDLE = 2, | |
123 DFU_STATE_dfuDNLOAD_SYNC = 3, | |
124 DFU_STATE_dfuDNBUSY = 4, | |
125 DFU_STATE_dfuDNLOAD_IDLE = 5, | |
126 DFU_STATE_dfuMANIFEST_SYNC = 6, | |
127 DFU_STATE_dfuMANIFEST = 7, | |
128 DFU_STATE_dfuMANIFEST_WAIT_RESET = 8, | |
129 DFU_STATE_dfuUPLOAD_IDLE = 9, | |
130 DFU_STATE_dfuERROR = 10 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
131 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
132 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
133 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
134 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
135 // ----- Structs ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
136 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
137 struct dfu_status_t { |
308 | 138 enum dfu_status bStatus : 8; |
139 uint32_t bwPollTimeout : 24; | |
140 enum dfu_state bState : 8; | |
141 uint8_t iString; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
142 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
143 CTASSERT_SIZE_BYTE(struct dfu_status_t, 6); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
144 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
145 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
146 typedef enum dfu_status (*dfu_setup_write_t)(size_t off, size_t len, void **buf); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
147 typedef enum dfu_status (*dfu_finish_write_t)(void *, size_t off, size_t len); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
148 typedef void (*dfu_detach_t)(void); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
149 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
150 struct dfu_ctx { |
308 | 151 struct usbd_function_ctx_header header; |
152 enum dfu_state state; | |
153 enum dfu_status status; | |
154 dfu_setup_write_t setup_write; | |
155 dfu_finish_write_t finish_write; | |
156 size_t off; | |
157 size_t len; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
158 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
159 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
160 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
161 struct dfu_desc_functional { |
308 | 162 uint8_t bLength; |
163 struct usb_desc_type_t bDescriptorType; /* = class DFU/0x1 FUNCTIONAL */ | |
164 union { | |
165 struct { | |
166 uint8_t can_download : 1; | |
167 uint8_t can_upload : 1; | |
168 uint8_t manifestation_tolerant : 1; | |
169 uint8_t will_detach : 1; | |
170 uint8_t _rsvd0 : 4; | |
171 }; | |
172 uint8_t bmAttributes; | |
173 }; | |
174 uint16_t wDetachTimeOut; | |
175 uint16_t wTransferSize; | |
176 struct usb_bcd_t bcdDFUVersion; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
177 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
178 CTASSERT_SIZE_BYTE(struct dfu_desc_functional, 9); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
179 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
180 struct dfu_function_desc { |
308 | 181 struct usb_desc_iface_t iface; |
182 struct dfu_desc_functional dfu; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
183 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
184 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
185 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
186 extern const struct usbd_function dfu_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
187 extern const struct usbd_function dfu_app_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
188 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
189 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
190 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
191 // ----- Functions ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
192 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
193 void dfu_write_done(enum dfu_status, struct dfu_ctx *ctx); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
194 void dfu_init(dfu_setup_write_t setup_write, dfu_finish_write_t finish_write, struct dfu_ctx *ctx); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
195 void dfu_app_init(dfu_detach_t detachcb); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
196 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
197 #endif |