Zephyr Project API 4.0.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
14#ifndef ZEPHYR_INCLUDE_USB_CLASS_USBD_DFU_H
15#define ZEPHYR_INCLUDE_USB_CLASS_USBD_DFU_H
16
17#include <stdint.h>
18
19/* DFU Class Subclass */
20#define USB_DFU_SUBCLASS 0x01
21
22/* DFU Class runtime Protocol */
23#define USB_DFU_PROTOCOL_RUNTIME 0x01
24
25/* DFU Class DFU mode Protocol */
26#define USB_DFU_PROTOCOL_DFU 0x02
27
28/* DFU Class Specific Requests */
29#define USB_DFU_REQ_DETACH 0x00
30#define USB_DFU_REQ_DNLOAD 0x01
31#define USB_DFU_REQ_UPLOAD 0x02
32#define USB_DFU_REQ_GETSTATUS 0x03
33#define USB_DFU_REQ_CLRSTATUS 0x04
34#define USB_DFU_REQ_GETSTATE 0x05
35#define USB_DFU_REQ_ABORT 0x06
36
37/* Run-Time DFU Functional Descriptor */
46
47/* DFU Functional Descriptor Type */
48#define USB_DESC_DFU_FUNCTIONAL 0x21
49
50/* DFU attributes DFU Functional Descriptor */
51#define USB_DFU_ATTR_WILL_DETACH BIT(3)
52#define USB_DFU_ATTR_MANIFESTATION_TOLERANT BIT(2)
53#define USB_DFU_ATTR_CAN_UPLOAD BIT(1)
54#define USB_DFU_ATTR_CAN_DNLOAD BIT(0)
55
56/* DFU Specification release */
57#define USB_DFU_VERSION 0x0110
58
59/* DFU device status */
61 ERR_OK = 0x00,
62 ERR_TARGET = 0x01,
63 ERR_FILE = 0x02,
64 ERR_WRITE = 0x03,
65 ERR_ERASE = 0x04,
67 ERR_PROG = 0x06,
68 ERR_VERIFY = 0x07,
72 ERR_VENDOR = 0x0B,
73 ERR_USBR = 0x0C,
74 ERR_POR = 0x0D,
77};
78
79/* DFU device states */
94
96 const char *name;
98 void *const priv;
99 struct usbd_desc_node *const sd_nd;
100 bool (*next_cb)(void *const priv,
101 const enum usb_dfu_state state, const enum usb_dfu_state next);
102 int (*read_cb)(void *const priv,
103 const uint32_t block, const uint16_t size,
104 uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE]);
105 int (*write_cb)(void *const priv,
106 const uint32_t block, const uint16_t size,
107 const uint8_t buf[static CONFIG_USBD_DFU_TRANSFER_SIZE]);
108};
109
152#define USBD_DFU_DEFINE_IMG(id, iname, ipriv, iread, iwrite, inext) \
153 static __noinit struct usb_if_descriptor usbd_dfu_iface_##id; \
154 \
155 USBD_DESC_STRING_DEFINE(usbd_dfu_str_##id, iname, USBD_DUT_STRING_INTERFACE); \
156 \
157 static const STRUCT_SECTION_ITERABLE(usbd_dfu_image, usbd_dfu_image_##id) = { \
158 .name = iname, \
159 .if_desc = &usbd_dfu_iface_##id, \
160 .priv = ipriv, \
161 .sd_nd = &usbd_dfu_str_##id, \
162 .read_cb = iread, \
163 .write_cb = iwrite, \
164 .next_cb = inext, \
165 }
166
170#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:38
uint8_t bDescriptorType
Definition usbd_dfu.h:40
uint8_t bmAttributes
Definition usbd_dfu.h:41
uint16_t wTransferSize
Definition usbd_dfu.h:43
uint8_t bLength
Definition usbd_dfu.h:39
uint16_t wDetachTimeOut
Definition usbd_dfu.h:42
uint16_t bcdDFUVersion
Definition usbd_dfu.h:44
USB Standard Interface Descriptor defined in spec.
Definition usb_ch9.h:193
Descriptor node.
Definition usbd.h:163
Definition usbd_dfu.h:95
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:102
bool(* next_cb)(void *const priv, const enum usb_dfu_state state, const enum usb_dfu_state next)
Definition usbd_dfu.h:100
void *const priv
Definition usbd_dfu.h:98
const char * name
Definition usbd_dfu.h:96
struct usb_if_descriptor *const if_desc
Definition usbd_dfu.h:97
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:105
struct usbd_desc_node *const sd_nd
Definition usbd_dfu.h:99
usb_dfu_status
Definition usbd_dfu.h:60
@ ERR_FILE
Definition usbd_dfu.h:63
@ ERR_NOTDONE
Definition usbd_dfu.h:70
@ ERR_FIRMWARE
Definition usbd_dfu.h:71
@ ERR_UNKNOWN
Definition usbd_dfu.h:75
@ ERR_STALLEDPKT
Definition usbd_dfu.h:76
@ ERR_POR
Definition usbd_dfu.h:74
@ ERR_WRITE
Definition usbd_dfu.h:64
@ ERR_VERIFY
Definition usbd_dfu.h:68
@ ERR_ERASE
Definition usbd_dfu.h:65
@ ERR_TARGET
Definition usbd_dfu.h:62
@ ERR_ADDRESS
Definition usbd_dfu.h:69
@ ERR_PROG
Definition usbd_dfu.h:67
@ ERR_VENDOR
Definition usbd_dfu.h:72
@ ERR_OK
Definition usbd_dfu.h:61
@ ERR_CHECK_ERASED
Definition usbd_dfu.h:66
@ ERR_USBR
Definition usbd_dfu.h:73
usb_dfu_state
Definition usbd_dfu.h:80
@ APP_DETACH
Definition usbd_dfu.h:82
@ DFU_STATE_MAX
Definition usbd_dfu.h:92
@ DFU_MANIFEST_WAIT_RST
Definition usbd_dfu.h:89
@ DFU_IDLE
Definition usbd_dfu.h:83
@ DFU_DNBUSY
Definition usbd_dfu.h:85
@ DFU_MANIFEST
Definition usbd_dfu.h:88
@ APP_IDLE
Definition usbd_dfu.h:81
@ DFU_DNLOAD_SYNC
Definition usbd_dfu.h:84
@ DFU_MANIFEST_SYNC
Definition usbd_dfu.h:87
@ DFU_UPLOAD_IDLE
Definition usbd_dfu.h:90
@ DFU_DNLOAD_IDLE
Definition usbd_dfu.h:86
@ DFU_ERROR
Definition usbd_dfu.h:91