Mercurial > louis > kiibohd-controller
annotate Bootloader/dfu.h @ 412:e7a3be42ae1e
Debug code for interconnect cable debugging
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sat, 20 Feb 2016 13:27:49 -0800 |
parents | 66eccdd9ced5 |
children |
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 |
341 | 18 #pragma once |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
19 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
20 // ----- Compiler Includes ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
21 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
22 #include <sys/types.h> |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
23 |
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 // ----- Defines ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
27 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
28 #define USB_FUNCTION_DFU_IFACE_COUNT 1 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
29 |
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 #ifndef USB_DFU_TRANSFER_SIZE |
335
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
32 // Sector size is the same as the program flash size |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
33 #if defined(_mk20dx128vlf5_) |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
34 #define USB_DFU_TRANSFER_SIZE FLASH_SECTOR_SIZE |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
35 |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
36 // Sector size is double the program flash size |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
37 #elif defined(_mk20dx256vlh7_ ) |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
38 #define USB_DFU_TRANSFER_SIZE FLASH_SECTOR_SIZE / 2 |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
39 |
795cc567b018
Basic code for mk20dx256vlh7 flashing
Jacob Alexander <haata@kiibohd.com>
parents:
334
diff
changeset
|
40 #endif |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
41 #endif |
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 #define USB_FUNCTION_DESC_DFU_DECL \ |
308 | 44 struct dfu_function_desc |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
45 |
308 | 46 #define USB_FUNCTION_DFU_IFACE_COUNT 1 |
47 #define USB_FUNCTION_DFU_RX_EP_COUNT 0 | |
48 #define USB_FUNCTION_DFU_TX_EP_COUNT 0 | |
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 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
52 // ----- Enumerations ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
53 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
54 enum dfu_dev_subclass { |
308 | 55 USB_DEV_SUBCLASS_APP_DFU = 0x01 |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
56 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
57 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
58 enum dfu_dev_proto { |
308 | 59 USB_DEV_PROTO_DFU_APP = 0x01, |
60 USB_DEV_PROTO_DFU_DFU = 0x02 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
61 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
62 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
63 enum dfu_ctrl_req_code { |
308 | 64 USB_CTRL_REQ_DFU_DETACH = 0, |
65 USB_CTRL_REQ_DFU_DNLOAD = 1, | |
66 USB_CTRL_REQ_DFU_UPLOAD = 2, | |
67 USB_CTRL_REQ_DFU_GETSTATUS = 3, | |
68 USB_CTRL_REQ_DFU_CLRSTATUS = 4, | |
69 USB_CTRL_REQ_DFU_GETSTATE = 5, | |
70 USB_CTRL_REQ_DFU_ABORT = 6 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
71 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
72 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
73 enum dfu_status { |
308 | 74 DFU_STATUS_async = 0xff, |
75 DFU_STATUS_OK = 0x00, | |
76 DFU_STATUS_errTARGET = 0x01, | |
77 DFU_STATUS_errFILE = 0x02, | |
78 DFU_STATUS_errWRITE = 0x03, | |
79 DFU_STATUS_errERASE = 0x04, | |
80 DFU_STATUS_errCHECK_ERASED = 0x05, | |
81 DFU_STATUS_errPROG = 0x06, | |
82 DFU_STATUS_errVERIFY = 0x07, | |
83 DFU_STATUS_errADDRESS = 0x08, | |
84 DFU_STATUS_errNOTDONE = 0x09, | |
85 DFU_STATUS_errFIRMWARE = 0x0a, | |
86 DFU_STATUS_errVENDOR = 0x0b, | |
87 DFU_STATUS_errUSBR = 0x0c, | |
88 DFU_STATUS_errPOR = 0x0d, | |
89 DFU_STATUS_errUNKNOWN = 0x0e, | |
90 DFU_STATUS_errSTALLEDPKT = 0x0f | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
91 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
92 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
93 enum dfu_state { |
308 | 94 DFU_STATE_appIDLE = 0, |
95 DFU_STATE_appDETACH = 1, | |
96 DFU_STATE_dfuIDLE = 2, | |
97 DFU_STATE_dfuDNLOAD_SYNC = 3, | |
98 DFU_STATE_dfuDNBUSY = 4, | |
99 DFU_STATE_dfuDNLOAD_IDLE = 5, | |
100 DFU_STATE_dfuMANIFEST_SYNC = 6, | |
101 DFU_STATE_dfuMANIFEST = 7, | |
102 DFU_STATE_dfuMANIFEST_WAIT_RESET = 8, | |
103 DFU_STATE_dfuUPLOAD_IDLE = 9, | |
104 DFU_STATE_dfuERROR = 10 | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
105 }; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
106 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
107 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
108 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
109 // ----- Structs ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
110 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
111 struct dfu_status_t { |
308 | 112 enum dfu_status bStatus : 8; |
113 uint32_t bwPollTimeout : 24; | |
114 enum dfu_state bState : 8; | |
115 uint8_t iString; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
116 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
117 CTASSERT_SIZE_BYTE(struct dfu_status_t, 6); |
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 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 typedef void (*dfu_detach_t)(void); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
124 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
125 struct dfu_ctx { |
308 | 126 struct usbd_function_ctx_header header; |
127 enum dfu_state state; | |
128 enum dfu_status status; | |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
129 dfu_setup_read_t setup_read; |
308 | 130 dfu_setup_write_t setup_write; |
131 dfu_finish_write_t finish_write; | |
132 size_t off; | |
133 size_t len; | |
193
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 |
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_desc_functional { |
308 | 138 uint8_t bLength; |
139 struct usb_desc_type_t bDescriptorType; /* = class DFU/0x1 FUNCTIONAL */ | |
140 union { | |
141 struct { | |
142 uint8_t can_download : 1; | |
143 uint8_t can_upload : 1; | |
144 uint8_t manifestation_tolerant : 1; | |
145 uint8_t will_detach : 1; | |
146 uint8_t _rsvd0 : 4; | |
147 }; | |
148 uint8_t bmAttributes; | |
149 }; | |
150 uint16_t wDetachTimeOut; | |
151 uint16_t wTransferSize; | |
152 struct usb_bcd_t bcdDFUVersion; | |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
153 } __packed; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
154 CTASSERT_SIZE_BYTE(struct dfu_desc_functional, 9); |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
155 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
156 struct dfu_function_desc { |
308 | 157 struct usb_desc_iface_t iface; |
158 struct dfu_desc_functional dfu; | |
193
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 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
162 extern const struct usbd_function dfu_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
163 extern const struct usbd_function dfu_app_function; |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
164 |
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 |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
167 // ----- Functions ----- |
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
168 |
334
9ac304aa1ab5
Adding initial dfu-upload code and debugging for Bootloader.
Jacob Alexander <haata@kiibohd.com>
parents:
308
diff
changeset
|
169 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
|
170 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
|
171 void dfu_app_init( dfu_detach_t detachcb ); |
193
b091bb09c55f
Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff
changeset
|
172 |