Zephyr API Documentation 4.5.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
usbd_dfu.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13
14#ifndef ZEPHYR_INCLUDE_USB_CLASS_USBD_DFU_H
15#define ZEPHYR_INCLUDE_USB_CLASS_USBD_DFU_H
16
17#include <stdint.h>
18#include <zephyr/toolchain.h>
19
20/* DFU Class Subclass */
21#define USB_DFU_SUBCLASS 0x01
22
23/* DFU Class runtime Protocol */
24#define USB_DFU_PROTOCOL_RUNTIME 0x01
25
26/* DFU Class DFU mode Protocol */
27#define USB_DFU_PROTOCOL_DFU 0x02
28
29/* DFU Class Specific Requests */
30#define USB_DFU_REQ_DETACH 0x00
31#define USB_DFU_REQ_DNLOAD 0x01
32#define USB_DFU_REQ_UPLOAD 0x02
33#define USB_DFU_REQ_GETSTATUS 0x03
34#define USB_DFU_REQ_CLRSTATUS 0x04
35#define USB_DFU_REQ_GETSTATE 0x05
36#define USB_DFU_REQ_ABORT 0x06
37
38/* Run-Time DFU Functional Descriptor */
47
48/* DFU Functional Descriptor Type */
49#define USB_DESC_DFU_FUNCTIONAL 0x21
50
51/* DFU attributes DFU Functional Descriptor */
52#define USB_DFU_ATTR_WILL_DETACH BIT(3)
53#define USB_DFU_ATTR_MANIFESTATION_TOLERANT BIT(2)
54#define USB_DFU_ATTR_CAN_UPLOAD BIT(1)
55#define USB_DFU_ATTR_CAN_DNLOAD BIT(0)
56
57/* DFU Specification release */
58#define USB_DFU_VERSION 0x0110
59
60/* DFU device status */
62 ERR_OK = 0x00,
63 ERR_TARGET = 0x01,
64 ERR_FILE = 0x02,
65 ERR_WRITE = 0x03,
66 ERR_ERASE = 0x04,
68 ERR_PROG = 0x06,
69 ERR_VERIFY = 0x07,
73 ERR_VENDOR = 0x0B,
74 ERR_USBR = 0x0C,
75 ERR_POR = 0x0D,
78};
79
80/* DFU device states */
95
97 const char *name;
99 void *const priv;
100 struct usbd_desc_node *const sd_nd;
101 bool (*next_cb)(void *const priv,
102 const enum usb_dfu_state state, const enum usb_dfu_state next);
103 int (*read_cb)(void *const priv,
104 const uint32_t block, const uint16_t size,
105 uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE]);
106 int (*write_cb)(void *const priv,
107 const uint32_t block, const uint16_t size,
108 const uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE]);
109};
110
119
156#define USBD_DFU_DEFINE_IMG(id, iname, ipriv, iread, iwrite, inext) \
157 static __noinit struct usb_if_descriptor usbd_dfu_iface_##id; \
158 \
159 USBD_DESC_STRING_DEFINE(usbd_dfu_str_##id, iname, USBD_DUT_STRING_INTERFACE); \
160 \
161 static const STRUCT_SECTION_ITERABLE(usbd_dfu_image, usbd_dfu_image_##id) = { \
162 .name = iname, \
163 .if_desc = &usbd_dfu_iface_##id, \
164 .priv = ipriv, \
165 .sd_nd = &usbd_dfu_str_##id, \
166 .next_cb = inext, \
167 .read_cb = iread, \
168 .write_cb = iwrite, \
169 }
170
174#endif /* ZEPHYR_INCLUDE_USB_CLASS_USBD_DFU_H */
state
Definition parser_state.h:29
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Definition usbd_dfu.h:39
uint8_t bDescriptorType
Definition usbd_dfu.h:41
uint8_t bmAttributes
Definition usbd_dfu.h:42
uint16_t wTransferSize
Definition usbd_dfu.h:44
uint8_t bLength
Definition usbd_dfu.h:40
uint16_t wDetachTimeOut
Definition usbd_dfu.h:43
uint16_t bcdDFUVersion
Definition usbd_dfu.h:45
USB Standard Interface Descriptor.
Definition usb_ch9.h:382
Descriptor node.
Definition usbd.h:172
Definition usbd_dfu.h:96
int(* read_cb)(void *const priv, const uint32_t block, const uint16_t size, uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE])
Definition usbd_dfu.h:103
bool(* next_cb)(void *const priv, const enum usb_dfu_state state, const enum usb_dfu_state next)
Definition usbd_dfu.h:101
void *const priv
Definition usbd_dfu.h:99
const char * name
Definition usbd_dfu.h:97
struct usb_if_descriptor *const if_desc
Definition usbd_dfu.h:98
int(* write_cb)(void *const priv, const uint32_t block, const uint16_t size, const uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE])
Definition usbd_dfu.h:106
struct usbd_desc_node *const sd_nd
Definition usbd_dfu.h:100
Macros to abstract toolchain specific capabilities.
usb_dfu_status
Definition usbd_dfu.h:61
@ ERR_FILE
Definition usbd_dfu.h:64
@ ERR_NOTDONE
Definition usbd_dfu.h:71
@ ERR_FIRMWARE
Definition usbd_dfu.h:72
@ ERR_UNKNOWN
Definition usbd_dfu.h:76
@ ERR_STALLEDPKT
Definition usbd_dfu.h:77
@ ERR_POR
Definition usbd_dfu.h:75
@ ERR_WRITE
Definition usbd_dfu.h:65
@ ERR_VERIFY
Definition usbd_dfu.h:69
@ ERR_ERASE
Definition usbd_dfu.h:66
@ ERR_TARGET
Definition usbd_dfu.h:63
@ ERR_ADDRESS
Definition usbd_dfu.h:70
@ ERR_PROG
Definition usbd_dfu.h:68
@ ERR_VENDOR
Definition usbd_dfu.h:73
@ ERR_OK
Definition usbd_dfu.h:62
@ ERR_CHECK_ERASED
Definition usbd_dfu.h:67
@ ERR_USBR
Definition usbd_dfu.h:74
usb_dfu_state
Definition usbd_dfu.h:81
@ APP_DETACH
Definition usbd_dfu.h:83
@ DFU_STATE_MAX
Definition usbd_dfu.h:93
@ DFU_MANIFEST_WAIT_RST
Definition usbd_dfu.h:90
@ DFU_IDLE
Definition usbd_dfu.h:84
@ DFU_DNBUSY
Definition usbd_dfu.h:86
@ DFU_MANIFEST
Definition usbd_dfu.h:89
@ APP_IDLE
Definition usbd_dfu.h:82
@ DFU_DNLOAD_SYNC
Definition usbd_dfu.h:85
@ DFU_MANIFEST_SYNC
Definition usbd_dfu.h:88
@ DFU_UPLOAD_IDLE
Definition usbd_dfu.h:91
@ DFU_DNLOAD_IDLE
Definition usbd_dfu.h:87
@ DFU_ERROR
Definition usbd_dfu.h:92