Mercurial > louis > kiibohd-controller
annotate Bootloader/dfu.h @ 334:9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Mon, 27 Apr 2015 00:57:34 -0700 |
parents | ab4515606277 |
children | 795cc567b018 |
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>. |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
2 * Modifications by Jacob Alexander 2014-2015 <haata@kiibohd.com> |
193
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 // ----- Enumerations ----- |
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 enum dfu_dev_subclass { |
308 | 48 USB_DEV_SUBCLASS_APP_DFU = 0x01 |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
49 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
50 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
51 enum dfu_dev_proto { |
308 | 52 USB_DEV_PROTO_DFU_APP = 0x01, |
53 USB_DEV_PROTO_DFU_DFU = 0x02 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
54 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
55 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
56 enum dfu_ctrl_req_code { |
308 | 57 USB_CTRL_REQ_DFU_DETACH = 0, |
58 USB_CTRL_REQ_DFU_DNLOAD = 1, | |
59 USB_CTRL_REQ_DFU_UPLOAD = 2, | |
60 USB_CTRL_REQ_DFU_GETSTATUS = 3, | |
61 USB_CTRL_REQ_DFU_CLRSTATUS = 4, | |
62 USB_CTRL_REQ_DFU_GETSTATE = 5, | |
63 USB_CTRL_REQ_DFU_ABORT = 6 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
64 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
65 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
66 enum dfu_status { |
308 | 67 DFU_STATUS_async = 0xff, |
68 DFU_STATUS_OK = 0x00, | |
69 DFU_STATUS_errTARGET = 0x01, | |
70 DFU_STATUS_errFILE = 0x02, | |
71 DFU_STATUS_errWRITE = 0x03, | |
72 DFU_STATUS_errERASE = 0x04, | |
73 DFU_STATUS_errCHECK_ERASED = 0x05, | |
74 DFU_STATUS_errPROG = 0x06, | |
75 DFU_STATUS_errVERIFY = 0x07, | |
76 DFU_STATUS_errADDRESS = 0x08, | |
77 DFU_STATUS_errNOTDONE = 0x09, | |
78 DFU_STATUS_errFIRMWARE = 0x0a, | |
79 DFU_STATUS_errVENDOR = 0x0b, | |
80 DFU_STATUS_errUSBR = 0x0c, | |
81 DFU_STATUS_errPOR = 0x0d, | |
82 DFU_STATUS_errUNKNOWN = 0x0e, | |
83 DFU_STATUS_errSTALLEDPKT = 0x0f | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
84 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
85 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
86 enum dfu_state { |
308 | 87 DFU_STATE_appIDLE = 0, |
88 DFU_STATE_appDETACH = 1, | |
89 DFU_STATE_dfuIDLE = 2, | |
90 DFU_STATE_dfuDNLOAD_SYNC = 3, | |
91 DFU_STATE_dfuDNBUSY = 4, | |
92 DFU_STATE_dfuDNLOAD_IDLE = 5, | |
93 DFU_STATE_dfuMANIFEST_SYNC = 6, | |
94 DFU_STATE_dfuMANIFEST = 7, | |
95 DFU_STATE_dfuMANIFEST_WAIT_RESET = 8, | |
96 DFU_STATE_dfuUPLOAD_IDLE = 9, | |
97 DFU_STATE_dfuERROR = 10 | |
193
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 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
100 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
101 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
102 // ----- Structs ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
103 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
104 struct dfu_status_t { |
308 | 105 enum dfu_status bStatus : 8; |
106 uint32_t bwPollTimeout : 24; | |
107 enum dfu_state bState : 8; | |
108 uint8_t iString; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
109 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
110 CTASSERT_SIZE_BYTE(struct dfu_status_t, 6); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
111 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
112 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
113 typedef enum dfu_status (*dfu_setup_read_t)(size_t off, size_t *len, void **buf); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
114 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
|
115 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
|
116 typedef void (*dfu_detach_t)(void); |
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 struct dfu_ctx { |
308 | 119 struct usbd_function_ctx_header header; |
120 enum dfu_state state; | |
121 enum dfu_status status; | |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
122 dfu_setup_read_t setup_read; |
308 | 123 dfu_setup_write_t setup_write; |
124 dfu_finish_write_t finish_write; | |
125 size_t off; | |
126 size_t len; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
127 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
128 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
129 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
130 struct dfu_desc_functional { |
308 | 131 uint8_t bLength; |
132 struct usb_desc_type_t bDescriptorType; /* = class DFU/0x1 FUNCTIONAL */ | |
133 union { | |
134 struct { | |
135 uint8_t can_download : 1; | |
136 uint8_t can_upload : 1; | |
137 uint8_t manifestation_tolerant : 1; | |
138 uint8_t will_detach : 1; | |
139 uint8_t _rsvd0 : 4; | |
140 }; | |
141 uint8_t bmAttributes; | |
142 }; | |
143 uint16_t wDetachTimeOut; | |
144 uint16_t wTransferSize; | |
145 struct usb_bcd_t bcdDFUVersion; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
146 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
147 CTASSERT_SIZE_BYTE(struct dfu_desc_functional, 9); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
148 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
149 struct dfu_function_desc { |
308 | 150 struct usb_desc_iface_t iface; |
151 struct dfu_desc_functional dfu; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
152 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
153 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
154 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
155 extern const struct usbd_function dfu_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
156 extern const struct usbd_function dfu_app_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
157 |
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 // ----- Functions ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
161 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
162 void dfu_write_done( enum dfu_status, struct dfu_ctx *ctx ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
163 void dfu_init( dfu_setup_read_t setup_read, dfu_setup_write_t setup_write, dfu_finish_write_t finish_write, struct dfu_ctx *ctx ); |
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
164 void dfu_app_init( dfu_detach_t detachcb ); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
165 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
166 #endif |