39
39
#define MICROPY_HW_USB_STR_MANUF ("MicroPython")
40
40
#endif
41
41
42
- #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN)
43
- #define USBD_MAX_POWER_MA (250)
42
+ enum
43
+ {
44
+ ITF_NUM_CDC , // needs 2 interfaces
45
+ ITF_NUM_CDC_DUMMY ,
46
+ ITF_NUM_DFU_RT ,
47
+ ITF_NUM_TOTAL
48
+ };
44
49
45
- #define USBD_ITF_CDC (0) // needs 2 interfaces
46
- #define USBD_ITF_MAX (2 )
50
+ #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_DFU_RT_DESC_LEN)
51
+ #define USBD_MAX_POWER_MA (250 )
47
52
48
53
#define USBD_CDC_EP_CMD (0x81)
49
54
#define USBD_CDC_EP_OUT (0x02)
50
55
#define USBD_CDC_EP_IN (0x82)
51
56
#define USBD_CDC_CMD_MAX_SIZE (8)
52
57
#define USBD_CDC_IN_OUT_MAX_SIZE (512)
53
58
54
- #define USBD_STR_0 (0x00)
55
- #define USBD_STR_MANUF (0x01)
56
- #define USBD_STR_PRODUCT (0x02)
57
- #define USBD_STR_SERIAL (0x03)
58
- #define USBD_STR_CDC (0x04)
59
+ enum {
60
+ USBD_STR_0 ,
61
+ USBD_STR_MANUF ,
62
+ USBD_STR_PRODUCT ,
63
+ USBD_STR_SERIAL ,
64
+ USBD_STR_CDC ,
65
+ USBD_STR_DFU ,
66
+ };
67
+
68
+ extern void reset_boot (void );
59
69
60
70
// Note: descriptors returned from callbacks must exist long enough for transfer to complete
61
71
@@ -77,18 +87,22 @@ static const tusb_desc_device_t usbd_desc_device = {
77
87
};
78
88
79
89
static const uint8_t usbd_desc_cfg [USBD_DESC_LEN ] = {
80
- TUD_CONFIG_DESCRIPTOR (1 , USBD_ITF_MAX , USBD_STR_0 , USBD_DESC_LEN ,
90
+ TUD_CONFIG_DESCRIPTOR (1 , ITF_NUM_TOTAL , USBD_STR_0 , USBD_DESC_LEN ,
81
91
TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP , USBD_MAX_POWER_MA ),
82
92
83
- TUD_CDC_DESCRIPTOR (USBD_ITF_CDC , USBD_STR_CDC , USBD_CDC_EP_CMD ,
93
+ TUD_CDC_DESCRIPTOR (ITF_NUM_CDC , USBD_STR_CDC , USBD_CDC_EP_CMD ,
84
94
USBD_CDC_CMD_MAX_SIZE , USBD_CDC_EP_OUT , USBD_CDC_EP_IN , USBD_CDC_IN_OUT_MAX_SIZE ),
95
+
96
+ // Interface number, string index, attributes, detach timeout, transfer size */
97
+ TUD_DFU_RT_DESCRIPTOR (ITF_NUM_DFU_RT , USBD_STR_DFU , 0x0d , 1000 , 4096 ),
85
98
};
86
99
87
100
static const char * const usbd_desc_str [] = {
88
101
[USBD_STR_MANUF ] = MICROPY_HW_USB_STR_MANUF ,
89
102
[USBD_STR_PRODUCT ] = MICROPY_HW_BOARD_NAME ,
90
103
[USBD_STR_SERIAL ] = "00000000000000000000" ,
91
104
[USBD_STR_CDC ] = "Board CDC" ,
105
+ [USBD_STR_DFU ] = "Board DFU Runtime"
92
106
};
93
107
94
108
const uint8_t * tud_descriptor_device_cb (void ) {
@@ -136,3 +150,7 @@ const uint16_t *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
136
150
137
151
return desc_str ;
138
152
}
153
+
154
+ void tud_dfu_runtime_reboot_to_dfu_cb () {
155
+ reset_boot ();
156
+ }
0 commit comments