121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /***********************************************************************
 | |
| * $Id:: mw_usbd_dfu.h 216 2011-07-13 21:52:14Z usb06052                       $
 | |
| *
 | |
| * Project: USB device ROM Stack
 | |
| *
 | |
| * Description:
 | |
| *     Device Firmware Upgrade (DFU) module.
 | |
| *
 | |
| ***********************************************************************
 | |
| *   Copyright(C) 2011, NXP Semiconductor
 | |
| *   All rights reserved.
 | |
| *
 | |
| * Software that is described herein is for illustrative purposes only
 | |
| * which provides customers with programming information regarding the
 | |
| * products. This software is supplied "AS IS" without any warranties.
 | |
| * NXP Semiconductors assumes no responsibility or liability for the
 | |
| * use of the software, conveys no license or title under any patent,
 | |
| * copyright, or mask work right to the product. NXP Semiconductors
 | |
| * reserves the right to make changes in the software without
 | |
| * notification. NXP Semiconductors also make no representation or
 | |
| * warranty that such application will be suitable for the specified
 | |
| * use without further testing or modification.
 | |
| **********************************************************************/
 | |
| #ifndef __MW_USBD_DFU_H__
 | |
| #define __MW_USBD_DFU_H__
 | |
| 
 | |
| #include "mw_usbd.h"
 | |
| 
 | |
| /** \file
 | |
|  *  \brief Device Firmware Upgrade (DFU) calss descriptors.
 | |
|  *
 | |
|  *  Definition of DFU class descriptors and their bit defines.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * If USB device is only DFU capable, DFU Interface number is always 0.
 | |
|  * if USB device is (DFU + Other Class (Audio/Mass Storage/HID), DFU 
 | |
|  * Interface number should also be 0 in this implementation.
 | |
|  */ 
 | |
| #define USB_DFU_IF_NUM	0x0
 | |
| 
 | |
| #define USB_DFU_DESCRIPTOR_TYPE     0x21
 | |
| #define USB_DFU_DESCRIPTOR_SIZE     9
 | |
| #define USB_DFU_SUBCLASS            0x01
 | |
| 
 | |
| /* DFU class-specific requests (Section 3, DFU Rev 1.1) */
 | |
| #define USB_REQ_DFU_DETACH          0x00
 | |
| #define USB_REQ_DFU_DNLOAD          0x01
 | |
| #define USB_REQ_DFU_UPLOAD          0x02
 | |
| #define USB_REQ_DFU_GETSTATUS       0x03
 | |
| #define USB_REQ_DFU_CLRSTATUS       0x04
 | |
| #define USB_REQ_DFU_GETSTATE        0x05
 | |
| #define USB_REQ_DFU_ABORT           0x06
 | |
| 
 | |
| #define DFU_STATUS_OK               0x00
 | |
| #define DFU_STATUS_errTARGET        0x01
 | |
| #define DFU_STATUS_errFILE          0x02
 | |
| #define DFU_STATUS_errWRITE         0x03
 | |
| #define DFU_STATUS_errERASE         0x04
 | |
| #define DFU_STATUS_errCHECK_ERASED  0x05
 | |
| #define DFU_STATUS_errPROG          0x06
 | |
| #define DFU_STATUS_errVERIFY        0x07
 | |
| #define DFU_STATUS_errADDRESS       0x08
 | |
| #define DFU_STATUS_errNOTDONE       0x09
 | |
| #define DFU_STATUS_errFIRMWARE      0x0a
 | |
| #define DFU_STATUS_errVENDOR        0x0b
 | |
| #define DFU_STATUS_errUSBR          0x0c
 | |
| #define DFU_STATUS_errPOR           0x0d
 | |
| #define DFU_STATUS_errUNKNOWN       0x0e
 | |
| #define 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
 | |
| };
 | |
| 
 | |
| #define DFU_EP0_NONE            0
 | |
| #define DFU_EP0_UNHANDLED       1
 | |
| #define DFU_EP0_STALL           2
 | |
| #define DFU_EP0_ZLP             3
 | |
| #define DFU_EP0_DATA            4
 | |
| 
 | |
| #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)
 | |
| 
 | |
| PRE_PACK struct POST_PACK _USB_DFU_FUNC_DESCRIPTOR {
 | |
|   uint8_t   bLength;
 | |
|   uint8_t   bDescriptorType;
 | |
|   uint8_t   bmAttributes;
 | |
|   uint16_t  wDetachTimeOut;
 | |
|   uint16_t  wTransferSize;
 | |
|   uint16_t  bcdDFUVersion;
 | |
| };
 | |
| typedef struct _USB_DFU_FUNC_DESCRIPTOR USB_DFU_FUNC_DESCRIPTOR;
 | |
| 
 | |
| PRE_PACK struct POST_PACK _DFU_STATUS {
 | |
|   uint8_t bStatus;
 | |
|   uint8_t bwPollTimeout[3];
 | |
|   uint8_t bState;
 | |
|   uint8_t iString;
 | |
| };
 | |
| typedef struct _DFU_STATUS DFU_STATUS_T;
 | |
| 
 | |
| #define DFU_FUNC_DESC_SIZE    sizeof(USB_DFU_FUNC_DESCRIPTOR)
 | |
| #define DFU_GET_STATUS_SIZE   0x6 
 | |
| 
 | |
| 
 | |
| #endif  /* __MW_USBD_DFU_H__ */
 | 
