Line data Source code
1 1 : /* SPDX-License-Identifier: BSD-3-Clause */
2 :
3 : /***************************************************************************
4 : *
5 : * Copyright(c) 2015,2016 Intel Corporation.
6 : * Copyright(c) 2017 PHYTEC Messtechnik GmbH
7 : *
8 : * Redistribution and use in source and binary forms, with or without
9 : * modification, are permitted provided that the following conditions
10 : * are met:
11 : *
12 : * * Redistributions of source code must retain the above copyright
13 : * notice, this list of conditions and the following disclaimer.
14 : * * Redistributions in binary form must reproduce the above copyright
15 : * notice, this list of conditions and the following disclaimer in
16 : * the documentation and/or other materials provided with the
17 : * distribution.
18 : * * Neither the name of Intel Corporation nor the names of its
19 : * contributors may be used to endorse or promote products derived
20 : * from this software without specific prior written permission.
21 : *
22 : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 : * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 : * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 : * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 : * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 : * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 : * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 : * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 : * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 : * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 : *
34 : ***************************************************************************/
35 :
36 : /**
37 : * @file
38 : * @brief USB Device Firmware Upgrade (DFU) public header
39 : *
40 : * Header follows the Device Class Specification for
41 : * Device Firmware Upgrade Version 1.1
42 : */
43 :
44 : #ifndef ZEPHYR_INCLUDE_USB_CLASS_USB_DFU_H_
45 : #define ZEPHYR_INCLUDE_USB_CLASS_USB_DFU_H_
46 :
47 : #include <zephyr/sys_clock.h>
48 :
49 : /** DFU Class Subclass */
50 1 : #define DFU_SUBCLASS 0x01
51 :
52 : /** DFU Class runtime Protocol */
53 1 : #define DFU_RT_PROTOCOL 0x01
54 :
55 : /** DFU Class DFU mode Protocol */
56 1 : #define DFU_MODE_PROTOCOL 0x02
57 :
58 : /**
59 : * @brief DFU Class Specific Requests
60 : */
61 1 : #define DFU_DETACH 0x00
62 0 : #define DFU_DNLOAD 0x01
63 0 : #define DFU_UPLOAD 0x02
64 0 : #define DFU_GETSTATUS 0x03
65 0 : #define DFU_CLRSTATUS 0x04
66 0 : #define DFU_GETSTATE 0x05
67 0 : #define DFU_ABORT 0x06
68 :
69 : /** DFU FUNCTIONAL descriptor type */
70 1 : #define DFU_FUNC_DESC 0x21
71 :
72 : /** DFU attributes DFU Functional Descriptor */
73 1 : #define DFU_ATTR_WILL_DETACH 0x08
74 0 : #define DFU_ATTR_MANIFESTATION_TOLERANT 0x04
75 0 : #define DFU_ATTR_CAN_UPLOAD 0x02
76 0 : #define DFU_ATTR_CAN_DNLOAD 0x01
77 :
78 : /** DFU Specification release */
79 1 : #define DFU_VERSION 0x0110
80 :
81 : /** Run-Time Functional Descriptor */
82 1 : struct dfu_runtime_descriptor {
83 0 : uint8_t bLength;
84 0 : uint8_t bDescriptorType;
85 0 : uint8_t bmAttributes;
86 0 : uint16_t wDetachTimeOut;
87 0 : uint16_t wTransferSize;
88 0 : uint16_t bcdDFUVersion;
89 : } __packed;
90 :
91 : /** bStatus values for the DFU_GETSTATUS response */
92 0 : enum dfu_status {
93 : statusOK,
94 : errTARGET,
95 : errFILE,
96 : errWRITE,
97 : errERASE,
98 : errCHECK_ERASED,
99 : errPROG,
100 : errVERIFY,
101 : errADDRESS,
102 : errNOTDONE,
103 : errFIRMWARE,
104 : errVENDOR,
105 : errUSB,
106 : errPOR,
107 : errUNKNOWN,
108 : errSTALLEDPKT
109 : };
110 :
111 : /** bState values for the DFU_GETSTATUS response */
112 0 : enum dfu_state {
113 : appIDLE,
114 : appDETACH,
115 : dfuIDLE,
116 : dfuDNLOAD_SYNC,
117 : dfuDNBUSY,
118 : dfuDNLOAD_IDLE,
119 : dfuMANIFEST_SYNC,
120 : dfuMANIFEST,
121 : dfuMANIFEST_WAIT_RST,
122 : dfuUPLOAD_IDLE,
123 : dfuERROR,
124 : };
125 :
126 0 : void wait_for_usb_dfu(k_timeout_t delay);
127 :
128 : #endif /* ZEPHYR_INCLUDE_USB_CLASS_USB_DFU_H_ */
|