⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obj_dfudesc.h

📁 at91rm9200的一级bootloader
💻 H
字号:
//*----------------------------------------------------------------------------

//*         ATMEL Microcontroller Software Support  -  ROUSSET  -

//*----------------------------------------------------------------------------

//* The software is delivered "AS IS" without warranty or condition of any

//* kind, either express, implied or statutory. This includes without

//* limitation any warranty or condition with respect to merchantability or

//* fitness for any particular purpose, or against the infringements of

//* intellectual property rights of others.

//*----------------------------------------------------------------------------

//* File Name           : obj_dfudesc.h

//* Object              : DFU filter.

//*

//* 1.0 07/24/01 ODi    : Creation

//*----------------------------------------------------------------------------

#ifndef obj_dfudesc_h

#define obj_dfudesc_h



#include "services/obj_usbdesc.h"

#include "services/obj_svctempo.h"

#include "services/obj_svcudp.h"



/* ====================================================================== */

/* DFU definitions extracted from the USB Device Firmware Upgrade         */

/* Specification, revision 1.0                                            */

/* ====================================================================== */



/* Run-Time DFU Functional Descriptor */

/* This descriptor is identical for both run-time and the DFU mode */

/* descriptor set */



typedef __packed struct _AT91S_DfuFDesc {

	volatile char  bLength;

	volatile char  bDescriptorType;

	volatile char  bmAttributes;

	volatile unsigned short wDetachTimeout;

	volatile unsigned short wTransferSize;

} AT91S_DfuFDesc, *AT91PS_DfuFDesc;



/* Device status structure as defined in */

/* USB Device Firmware Upgrade Specification, rev 1.1 */

typedef __packed struct _AT91S_DfuStatus {

	volatile char bStatus;

	volatile char bwPollTimeout[3];

	volatile char bState;

	char iString;

} AT91S_DfuStatus, *AT91PS_DfuStatus;



__inline char bmAttributes(AT91S_DfuFDesc const *pUSBDfuFDesc)

{

	char const *pChar = (char *) pUSBDfuFDesc;

	return pChar[2];

}



__inline unsigned short wDetachTimeOut(AT91S_DfuFDesc const *pUSBDfuFDesc)

{

	char const *pChar = (char *) pUSBDfuFDesc;

	return (((pChar[4]) << 8) | pChar[3]);

}



__inline unsigned short wTransferSize(AT91S_DfuFDesc const *pUSBDfuFDesc)

{

	char const *pChar = (char *) pUSBDfuFDesc;

	return ((pChar[6] << 8) | pChar[5]);

}



__inline unsigned int bwPollTimeout(AT91S_DfuStatus const *pStatus)

{

	char const *pChar = (char *) pStatus;

	return ((pChar[3] << 16) | (pChar[2] << 8) | pChar[1]);

}



/* DFU class-Specific Request Values */

#define AT91C_DFU_DETACH    0

#define AT91C_DFU_DNLOAD    1

#define AT91C_DFU_UPLOAD    2

#define AT91C_DFU_GETSTATUS 3

#define AT91C_DFU_CLRSTATUS 4

#define AT91C_DFU_GETSTATE  5

#define AT91C_DFU_ABORT     6



/* DFU state values, as defined in */

/* USB Device Firmware Upgrade Specification, rev 1.1 */

#define AT91C_DFU_appIDLE                0

#define AT91C_DFU_appDETACH              1

#define AT91C_DFU_dfuIDLE                2

#define AT91C_DFU_dfuDNLOAD_SYNC         3

#define AT91C_DFU_dfuDNBUSY              4

#define AT91C_DFU_dfuDNLOAD_IDLE         5

#define AT91C_DFU_dfuMANIFEST_SYNC       6

#define AT91C_DFU_dfuMANIFEST            7

#define AT91C_DFU_dfuMANIFEST_WAIT_RESET 8

#define AT91C_DFU_dfuUPLOAD_IDLE         9

#define AT91C_DFU_dfuERROR               10



/* DFU status values, as defined in */

/* USB Device Firmware Upgrade Specification, rev 1.1 */

#define AT91C_DFU_OK              0x00

#define AT91C_DFU_errTARGET       0x01

#define AT91C_DFU_errFILE         0x02

#define AT91C_DFU_errWRITE        0x03

#define AT91C_DFU_errERASE        0x04

#define AT91C_DFU_errCHECK_ERASED 0x05

#define AT91C_DFU_errPROG         0x06

#define AT91C_DFU_errVERIFY       0x07

#define AT91C_DFU_errADDRESS      0x08

#define AT91C_DFU_errNOTDONE      0x09

#define AT91C_DFU_errFIRMWARE     0x0A

#define AT91C_DFU_errVENDOR       0x0B

#define AT91C_DFU_errUSBR         0x0C

#define AT91C_DFU_errPOR          0x0D

#define AT91C_DFU_errUNKNOWN      0x0E

#define AT91C_DFU_errSTALLPKT     0x0F



/* ====================================================================== */

/* DFU definitions used in lib_dfu.c                                      */

/* ====================================================================== */





typedef struct _AT91S_DfuDesc {

	AT91PS_Pipe  pPipe;     // Link to a AT91S_Pipe object

	AT91S_SvcTempo tempo; // Link to a AT91S_Tempo object



	// Private methods:

	void (*State0)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State1)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State2)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State3)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State4)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State5)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State6)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State7)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State8)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State9)  (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);

	void (*State10) (struct _AT91S_DfuDesc *, AT91PS_UsbSetup);



	void (*GetStatus) (struct _AT91S_DfuDesc *);

	void (*GetState)  (struct _AT91S_DfuDesc *);



	// public methods:

	void (*DispatchClassRequest) (AT91PS_UsbSetup, void *);

	void (*Download)(struct _AT91S_DfuDesc *, unsigned short, AT91PF_PipeReadCallBack);

	void (*Upload)(struct _AT91S_DfuDesc *, unsigned short);



	// Public data:

	AT91S_DfuStatus dfuStatus;

	AT91S_DfuFDesc const *pDfuFDesc;

	char manifestComplete;

	char blockComplete;



} AT91S_DfuDesc, *AT91PS_DfuDesc;



// Types definition:

typedef void (*AT91PF_DfuDescDownload)  (AT91PS_DfuDesc, unsigned short, AT91PF_PipeReadCallBack);

typedef void (*AT91PF_DfuDescUpload)  (AT91PS_DfuDesc, unsigned short);



typedef AT91PS_DfuDesc (*AT91PF_OpenDfuDesc) (

	AT91PS_DfuDesc, 

	AT91PS_Pipe, 

	AT91PS_CtlTempo, 

	char, 

	AT91S_DfuFDesc const *, 

	AT91PF_DfuDescDownload, 

	AT91PF_DfuDescUpload);

typedef void (*AT91PF_DfuDescDispatchClassRequest) (AT91PS_DfuDesc, void *);

typedef void (*AT91PF_DfuDescState0)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState1)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState2)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState3)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState4)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState5)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState6)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState7)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState8)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState9)  (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescState10) (AT91PS_DfuDesc, AT91PS_UsbSetup);

typedef void (*AT91PF_DfuDescGetStatus) (AT91PS_DfuDesc);

typedef void (*AT91PF_DfuDescGetState)  (AT91PS_DfuDesc);



// Function declaration:

extern AT91PS_DfuDesc AT91F_OpenDfuDesc(AT91PS_DfuDesc, AT91PS_Pipe, AT91PS_CtlTempo, char, AT91S_DfuFDesc const *, AT91PF_DfuDescDownload, AT91PF_DfuDescUpload);



extern void AT91F_DfuDescDispatchClassRequest (AT91PS_UsbSetup, void *);

extern void AT91F_DfuDescState0  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState1  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState2  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState3  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState4  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState5  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState6  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState7  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState8  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState9  (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescState10 (AT91PS_DfuDesc, AT91PS_UsbSetup);

extern void AT91F_DfuDescGetStatus(AT91PS_DfuDesc);

extern void AT91F_DfuDescGetState (AT91PS_DfuDesc);

extern void AT91F_DfuDescSuccess  (AT91PS_DfuDesc);

extern void AT91F_DfuDescError    (AT91PS_DfuDesc);

extern void AT91F_DfuDescDetachTimeout(AT91S_TempoStatus status, void *pVoid);

extern void AT91F_DfuDescStatusPollTimeOut(AT91S_TempoStatus status, void *pVoid);

extern void AT91F_DfuDescDownload(AT91S_PipeStatus status, void *pVoid);

#endif // obj_dfudesc_h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -