29#if (CFG_TUD_ENABLED && CFG_TUD_DFU)
41#ifndef CFG_TUD_DFU_LOG_LEVEL
42 #define CFG_TUD_DFU_LOG_LEVEL CFG_TUD_LOG_LEVEL
45#define TU_LOG_DRV(...) TU_LOG(CFG_TUD_DFU_LOG_LEVEL, __VA_ARGS__)
62 CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE];
82#if CFG_TUSB_DEBUG >= 2
105 { .key =
DFU_IDLE , .data =
"IDLE" },
177 uint8_t alt_count = 0;
179 uint16_t drv_len = 0;
184 TU_ASSERT(max_len > drv_len, 0);
206 TU_ASSERT(transfer_size <= CFG_TUD_DFU_XFER_BUFSIZE, drv_len);
243 default:
return false;
350 default:
return false;
460 resp.
bStatus = (uint8_t) status;
@ DFU_MANIFEST_WAIT_RESET
@ DFU_STATUS_ERR_CHECK_ERASED
@ DFU_STATUS_ERR_STALLEDPKT
@ DFU_STATUS_ERR_FIRMWARE
tu_static tu_lookup_entry_t const _dfu_state_lookup[]
void dfu_moded_init(void)
tu_static tu_lookup_table_t const _dfu_state_table
tu_static tu_lookup_entry_t const _dfu_status_lookup[]
bool dfu_moded_deinit(void)
tu_static tu_lookup_table_t const _dfu_status_table
uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
void tud_dfu_finish_flashing(uint8_t status)
bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
static bool reply_getstatus(uint8_t rhport, tusb_control_request_t const *request, dfu_state_t state, dfu_status_t status, uint32_t timeout)
static void reset_state(void)
void dfu_moded_reset(uint8_t rhport)
tu_static tu_lookup_table_t const _dfu_request_table
CFG_TUD_MEM_SECTION tu_static dfu_state_ctx_t _dfu_ctx
static bool process_manifest_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
static bool process_download_get_status(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
tu_static tu_lookup_entry_t const _dfu_request_lookup[]
void tud_dfu_manifest_cb(uint8_t alt)
TU_ATTR_WEAK void tud_dfu_abort_cb(uint8_t alt)
TU_ATTR_WEAK void tud_dfu_detach_cb(void)
uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state)
TU_ATTR_WEAK uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t *data, uint16_t length)
void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const *data, uint16_t length)
AUDIO Channel Cluster Descriptor (4.1)
struct TU_ATTR_PACKED::@16::TU_ATTR_PACKED bmRequestType_bit
uint8_t bInterfaceSubClass
Subclass code (assigned by the USB-IF). These codes are qualified by the value of the bInterfaceCla...
uint8_t bRequest
Request type audio_cs_req_t.
uint8_t bInterfaceProtocol
Protocol code (assigned by the USB). These codes are qualified by the value of the bInterfaceClass ...
uint8_t bInterfaceNumber
Number of this interface. Zero-based value identifying the index in the array of concurrent interface...
uint8_t bAlternateSetting
Value used to select this alternate setting for the interface identified in the prior field.
CFG_TUSB_MEM_ALIGN uint8_t transfer_buf[CFG_TUD_DFU_XFER_BUFSIZE]
bool flashing_in_progress
static TU_ATTR_ALWAYS_INLINE uint16_t tu_unaligned_read16(const void *mem)
static const char * tu_lookup_find(tu_lookup_table_t const *p_table, uint32_t key)
static TU_ATTR_ALWAYS_INLINE uint8_t tu_desc_len(void const *desc)
@ TUSB_REQ_RCPT_INTERFACE
static TU_ATTR_ALWAYS_INLINE uint8_t tu_desc_type(void const *desc)
struct TU_ATTR_PACKED tusb_desc_dfu_functional_t
static TU_ATTR_ALWAYS_INLINE uint8_t const * tu_desc_next(void const *desc)
bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, uint16_t len)
bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request)
CFG_TUH_MEM_ALIGN tusb_control_request_t request