1 /*********************************************************************** 2 * $Id:: mw_usbd_dfu.h 331 2012-08-09 18:54:34Z usb10131 $ 3 * 4 * Project: USB device ROM Stack 5 * 6 * Description: 7 * Device Firmware Upgrade (DFU) module. 8 * 9 *********************************************************************** 10 * Copyright(C) 2011, NXP Semiconductor 11 * All rights reserved. 12 * 13 * Software that is described herein is for illustrative purposes only 14 * which provides customers with programming information regarding the 15 * products. This software is supplied "AS IS" without any warranties. 16 * NXP Semiconductors assumes no responsibility or liability for the 17 * use of the software, conveys no license or title under any patent, 18 * copyright, or mask work right to the product. NXP Semiconductors 19 * reserves the right to make changes in the software without 20 * notification. NXP Semiconductors also make no representation or 21 * warranty that such application will be suitable for the specified 22 * use without further testing or modification. 23 **********************************************************************/ 24 #ifndef __MW_USBD_DFU_H__ 25 #define __MW_USBD_DFU_H__ 26 27 #include "usbd.h" 28 29 /** \file 30 * \brief Device Firmware Upgrade (DFU) class descriptors. 31 * 32 * Definition of DFU class descriptors and their bit defines. 33 * 34 */ 35 36 /** 37 * If USB device is only DFU capable, DFU Interface number is always 0. 38 * if USB device is (DFU + Other Class (Audio/Mass Storage/HID), DFU 39 * Interface number should also be 0 in this implementation. 40 */ 41 #define USB_DFU_IF_NUM 0x0 42 43 #define USB_DFU_DESCRIPTOR_TYPE 0x21 44 #define USB_DFU_DESCRIPTOR_SIZE 9 45 #define USB_DFU_SUBCLASS 0x01 46 47 /* DFU class-specific requests (Section 3, DFU Rev 1.1) */ 48 #define USB_REQ_DFU_DETACH 0x00 49 #define USB_REQ_DFU_DNLOAD 0x01 50 #define USB_REQ_DFU_UPLOAD 0x02 51 #define USB_REQ_DFU_GETSTATUS 0x03 52 #define USB_REQ_DFU_CLRSTATUS 0x04 53 #define USB_REQ_DFU_GETSTATE 0x05 54 #define USB_REQ_DFU_ABORT 0x06 55 56 #define DFU_STATUS_OK 0x00 57 #define DFU_STATUS_errTARGET 0x01 58 #define DFU_STATUS_errFILE 0x02 59 #define DFU_STATUS_errWRITE 0x03 60 #define DFU_STATUS_errERASE 0x04 61 #define DFU_STATUS_errCHECK_ERASED 0x05 62 #define DFU_STATUS_errPROG 0x06 63 #define DFU_STATUS_errVERIFY 0x07 64 #define DFU_STATUS_errADDRESS 0x08 65 #define DFU_STATUS_errNOTDONE 0x09 66 #define DFU_STATUS_errFIRMWARE 0x0a 67 #define DFU_STATUS_errVENDOR 0x0b 68 #define DFU_STATUS_errUSBR 0x0c 69 #define DFU_STATUS_errPOR 0x0d 70 #define DFU_STATUS_errUNKNOWN 0x0e 71 #define DFU_STATUS_errSTALLEDPKT 0x0f 72 73 enum dfu_state { 74 DFU_STATE_appIDLE = 0, 75 DFU_STATE_appDETACH = 1, 76 DFU_STATE_dfuIDLE = 2, 77 DFU_STATE_dfuDNLOAD_SYNC = 3, 78 DFU_STATE_dfuDNBUSY = 4, 79 DFU_STATE_dfuDNLOAD_IDLE = 5, 80 DFU_STATE_dfuMANIFEST_SYNC = 6, 81 DFU_STATE_dfuMANIFEST = 7, 82 DFU_STATE_dfuMANIFEST_WAIT_RST= 8, 83 DFU_STATE_dfuUPLOAD_IDLE = 9, 84 DFU_STATE_dfuERROR = 10 85 }; 86 87 #define DFU_EP0_NONE 0 88 #define DFU_EP0_UNHANDLED 1 89 #define DFU_EP0_STALL 2 90 #define DFU_EP0_ZLP 3 91 #define DFU_EP0_DATA 4 92 93 #define USB_DFU_CAN_DOWNLOAD (1 << 0) 94 #define USB_DFU_CAN_UPLOAD (1 << 1) 95 #define USB_DFU_MANIFEST_TOL (1 << 2) 96 #define USB_DFU_WILL_DETACH (1 << 3) 97 98 PRE_PACK struct POST_PACK _USB_DFU_FUNC_DESCRIPTOR { 99 uint8_t bLength; 100 uint8_t bDescriptorType; 101 uint8_t bmAttributes; 102 uint16_t wDetachTimeOut; 103 uint16_t wTransferSize; 104 uint16_t bcdDFUVersion; 105 }; 106 typedef struct _USB_DFU_FUNC_DESCRIPTOR USB_DFU_FUNC_DESCRIPTOR; 107 108 PRE_PACK struct POST_PACK _DFU_STATUS { 109 uint8_t bStatus; 110 uint8_t bwPollTimeout[3]; 111 uint8_t bState; 112 uint8_t iString; 113 }; 114 typedef struct _DFU_STATUS DFU_STATUS_T; 115 116 #define DFU_FUNC_DESC_SIZE sizeof(USB_DFU_FUNC_DESCRIPTOR) 117 #define DFU_GET_STATUS_SIZE 0x6 118 119 120 #endif /* __MW_USBD_DFU_H__ */ 121