📄 obj_dfudesc.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 + -