From ec4ecfa817d6af9d35cf814d6d8d57e8bf71c605 Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Thu, 24 Oct 2019 00:42:42 +0200 Subject: 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 --- src/device/usbd.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/device/usbd.h') 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 } -- cgit v1.3.1 From a0002cc709bd39049d3effbe9a59b62dc198f79d Mon Sep 17 00:00:00 2001 From: hathach Date: Wed, 30 Oct 2019 23:26:34 +0700 Subject: rename usbd_init() to tud_init() --- src/device/usbd.c | 2 +- src/device/usbd.h | 3 +++ src/device/usbd_pvt.h | 2 -- src/tusb.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src/device/usbd.h') diff --git a/src/device/usbd.c b/src/device/usbd.c index 3e6bf68c9..62f6e9922 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -276,7 +276,7 @@ bool tud_remote_wakeup(void) //--------------------------------------------------------------------+ // USBD Task //--------------------------------------------------------------------+ -bool usbd_init (void) +bool tud_init (void) { TU_LOG2("USBD init\r\n"); diff --git a/src/device/usbd.h b/src/device/usbd.h index f0887f0db..e340215fe 100644 --- a/src/device/usbd.h +++ b/src/device/usbd.h @@ -41,6 +41,9 @@ // Application API //--------------------------------------------------------------------+ +// Init device stack +bool tud_init (void); + // Task function should be called in main/rtos loop void tud_task (void); diff --git a/src/device/usbd_pvt.h b/src/device/usbd_pvt.h index 892680142..b9947044b 100644 --- a/src/device/usbd_pvt.h +++ b/src/device/usbd_pvt.h @@ -33,8 +33,6 @@ extern "C" { #endif -bool usbd_init (void); - //--------------------------------------------------------------------+ // USBD Endpoint API //--------------------------------------------------------------------+ diff --git a/src/tusb.c b/src/tusb.c index 271b35f1e..7a1e73ec7 100644 --- a/src/tusb.c +++ b/src/tusb.c @@ -47,7 +47,7 @@ bool tusb_init(void) #endif #if TUSB_OPT_DEVICE_ENABLED - TU_ASSERT ( usbd_init() ); // init device stack + TU_ASSERT ( tud_init() ); // init device stack #endif _initialized = true; -- cgit v1.3.1