diff options
| author | Sylvain Munaut <[email protected]> | 2019-10-24 00:42:42 +0200 |
|---|---|---|
| committer | Sylvain Munaut <[email protected]> | 2019-10-28 16:11:08 +0100 |
| commit | ec4ecfa817d6af9d35cf814d6d8d57e8bf71c605 (patch) | |
| tree | 24b3b2399d2afb3498f6141cf646fc1fa290e558 /src/device | |
| parent | e413c9efa303d70de019a91aa415384fe80ca78f (diff) | |
Add support for DFU Runtime class for devices
This is really just a few descriptors and then answering to the
request from the host to reboot into DFU mode.
That latter part is delegated to the app since this is platform
specific.
Signed-off-by: Sylvain Munaut <[email protected]>
Diffstat (limited to 'src/device')
| -rw-r--r-- | src/device/usbd.c | 14 | ||||
| -rw-r--r-- | src/device/usbd.h | 15 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index 14e56a9b7..49f28da87 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -167,6 +167,20 @@ static usbd_class_driver_t const usbd_class_drivers[] = .sof = NULL
},
#endif
+
+ #if CFG_TUD_DFU_RT
+ {
+ .class_code = TUD_DFU_APP_CLASS,
+ //.subclass_code = TUD_DFU_APP_SUBCLASS
+ .init = dfu_rtd_init,
+ .reset = dfu_rtd_reset,
+ .open = dfu_rtd_open,
+ .control_request = dfu_rtd_control_request,
+ .control_complete = dfu_rtd_control_complete,
+ .xfer_cb = dfu_rtd_xfer_cb,
+ .sof = NULL
+ },
+ #endif
};
enum { USBD_CLASS_DRIVER_COUNT = TU_ARRAY_SIZE(usbd_class_drivers) };
diff --git a/src/device/usbd.h b/src/device/usbd.h index f0887f0db..0ad126e94 100644 --- a/src/device/usbd.h +++ b/src/device/usbd.h @@ -304,6 +304,21 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re /* Endpoint In */\
7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0
+//------------- DFU Runtime -------------//
+#define TUD_DFU_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC)
+#define TUD_DFU_APP_SUBCLASS 0x01u
+
+// Length of template descriptr: 18 bytes
+#define TUD_DFU_RT_DESC_LEN (9 + 9)
+
+// DFU runtime descriptor
+// Interface number, string index, attributes, detach timeout, transfer size
+#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \
+ /* Interface */ \
+ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_RT, _stridx, \
+ /* Function */ \
+ 9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101)
+
#ifdef __cplusplus
}
|
