📄 usb.h
字号:
#ifndef _USB_H
#define _USB_H
#ifndef US_FIFO_SIZE
#define US_FIFO_SIZE 8 //word
#endif
#define FAIL 0x0
#define OK 0x1
#define FALSE 0
#define TRUE !FALSE
#define BUFFER_MEM_BASE 0x40600000
#define USB_BUFFER_BASE BUFFER_MEM_BASE
#define USB_BUFFER_SIZE (512*1024)
#define MIN_BUFFER_SIZE (4*1024)
#define MAX_BUFFER_SIZE (500*1024)
#define US_DATASYNC 0xffff
#define US_HEARTBEAT 0xfffe
#define US_HEARTBEAT_INTERVAL 10000
#define NULL 0x0
typedef struct IRingBuffer_Struct IRingBuffer_t;
struct IRingBuffer_Struct {
char name[16];
int size;
int head;
int tail;
int *bufp;
int (*available)(IRingBuffer_t *);
int (*empty)(IRingBuffer_t *);
void (*reset)(IRingBuffer_t *);
int (*put)(IRingBuffer_t *, int );
int (*get)(IRingBuffer_t *, int *);
int (*putData)(IRingBuffer_t *, int *, int);
int (*getData)(IRingBuffer_t *, int *, int);
};
typedef struct {
union {
int data[US_FIFO_SIZE];
struct {
char nSeqNo;
char SeqNo;
short sync;
} pkt;
}u;
} USRawData_t;
typedef struct USlaveBlock_Struct USlaveBlock_t;
struct USlaveBlock_Struct {
IRingBuffer_t rxb;//接收循环队列,64kword
IRingBuffer_t txb;//发送循环队列,64kword
enum {
USL_INIT_STATE,
USL_CMD_STATE,
USL_RECV_STATE,
USL_SEND_STATE,
USL_ECHO_STATE,
USL_GETINFO_STATE,
USL_FLASH_STATE,
USL_DECODE_STATE,
USL_REPLY_CMD_STATE,
USL_REPLY_DAT_STATE,
USL_EXIT_STATE
} state;
enum { RXMode, TXMode } mode;
#define O_US_NOHEARTBEAT 0
#define O_US_HEARTBEAT 1
int HeartBeat;
int nHeartBeat;
#define O_US_RAW 0
#define O_US_PACKET 1
int PktMode;
char NoTx;
char NoRx;
int rxerror;
int rxmasked;
int txmasked;
int txunderflow;
int rxoverflow;
void (*reset)(USlaveBlock_t *);
void (*start)(USlaveBlock_t *);
void (*stop)(USlaveBlock_t *);
void (*setTx)(USlaveBlock_t *);
void (*setRx)(USlaveBlock_t *);
void (*mask)(USlaveBlock_t *, int);
void (*unmask)(USlaveBlock_t *, int);
void (*setHeartBeat)(USlaveBlock_t *, int);
int (*masked)(USlaveBlock_t *, int);
int (*receive)(USlaveBlock_t *, int *, int);
int (*send)(USlaveBlock_t *, int *, int);
};
#define USLCMD_RESET 0x0001
#define USLCMD_ECHO 0x0002
#define USLCMD_RECV 0x0003
#define USLCMD_SEND 0x0004
#define USLCMD_MEMWRITE 0x0005
#define USLCMD_MEMREAD 0x0006
#define USLCMD_FLASH 0x0007
#define USLCMD_STATUS 0x0008
#define USLCMD_RECV_NOCKSUM 0x0009
#define USLCMD_GETINFO 0x000a
#define USLCMD_END 0x0099
typedef struct USL_PKT_STRUCT {
short nCmd;
short Cmd;
int Addr;
int Size;
#define USL_STATUS_OK 1
#define USL_STATUS_FAIL 2
#define USL_STATUS_ECHO 3
#define USL_STATUS_WAIT 4
#define USL_STATUS_FRUN 5
#define USL_STATUS_ADDRESS 6
int Status;
int Chksum4All;
int Pad;
int Chksum4Cmd;
} USL_PKT_STRUCT_t;
typedef struct {
union {
int buffer[US_FIFO_SIZE-1];
struct USL_PKT_STRUCT pkt;
} u;
} USL_PACKET_t;
extern void IRingBufferInit(IRingBuffer_t *ring, char *name, int addr, int size);
extern USlaveBlock_t * uslave7202_setup(int, int);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -