blob: 2e7e171caf113863feacc21eb2881ef5f4402445 [file] [log] [blame]
#ifndef _USB_DFU_H
#define _USB_DFU_H
/* USB Device Firmware Update Implementation for OpenPCD
* (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
*
* Protocol definitions for USB DFU
*
* This ought to be compliant to the USB DFU Spec 1.0 as available from
* http://www.usb.org/developers/devclass_docs/usbdfu10.pdf
*
*/
#include <stdint.h>
#define USB_DFU_CLASS 0xfe
#define USB_DT_DFU 0x21
struct usb_dfu_func_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t bmAttributes;
#define USB_DFU_CAN_DOWNLOAD (1 << 0)
#define USB_DFU_CAN_UPLOAD (1 << 1)
#define USB_DFU_MANIFEST_TOL (1 << 2)
#define USB_DFU_WILL_DETACH (1 << 3)
uint16_t wDetachTimeOut;
uint16_t wTransferSize;
uint16_t bcdDFUVersion;
} __attribute__ ((packed));
#define USB_DT_DFU_SIZE 9
/* DFU class-specific requests (Section 3, DFU Rev 1.1) */
enum usb_dfu_req {
USB_DFU_DETACH,
USB_DFU_DNLOAD,
USB_DFU_UPLOAD,
USB_DFU_GETSTATUS,
USB_DFU_CLRSTATUS,
USB_DFU_GETSTATE,
USB_DFU_ABORT,
};
struct dfu_status {
uint8_t bStatus;
uint8_t bwPollTimeout[3];
uint8_t bState;
uint8_t iString;
} __attribute__((packed));
enum usb_dfu_status {
DFU_STATUS_OK =0x00,
DFU_STATUS_errTARGET =0x01,
DFU_STATUS_errFILE =0x02,
DFU_STATUS_errWRITE =0x03,
DFU_STATUS_errERASE =0x04,
DFU_STATUS_errCHECK_ERASED =0x05,
DFU_STATUS_errPROG =0x06,
DFU_STATUS_errVERIFY =0x07,
DFU_STATUS_errADDRESS =0x08,
DFU_STATUS_errNOTDONE =0x09,
DFU_STATUS_errFIRMWARE =0x0a,
DFU_STATUS_errVENDOR =0x0b,
DFU_STATUS_errUSBR =0x0c,
DFU_STATUS_errPOR =0x0d,
DFU_STATUS_errUNKNOWN =0x0e,
DFU_STATUS_errSTALLEDPKT =0x0f,
};
enum dfu_state {
DFU_STATE_appIDLE = 0,
DFU_STATE_appDETACH = 1,
DFU_STATE_dfuIDLE = 2,
DFU_STATE_dfuDNLOAD_SYNC = 3,
DFU_STATE_dfuDNBUSY = 4,
DFU_STATE_dfuDNLOAD_IDLE = 5,
DFU_STATE_dfuMANIFEST_SYNC = 6,
DFU_STATE_dfuMANIFEST = 7,
DFU_STATE_dfuMANIFEST_WAIT_RST = 8,
DFU_STATE_dfuUPLOAD_IDLE = 9,
DFU_STATE_dfuERROR = 10,
};
#endif /* _USB_DFU_H */