📄 sdev.h
字号:
#ifndef _SDEV_H__
#define _SDEV_H__
/* #include <types.h> */
#include "src/arch.h"
#define SDE_OK 0 /* Device is ok */
#define SDN_NULL 0 /* This device is not existed */
#define SDN_MISC 1 /* Misc functins */
#define SDN_MMI 5 /* MMI interface */
#define SDA_NONE 0 /* No alarm */
#define SDB_SDEV 0
/* for error code */
#define SDE_DEV_BUSY (-SDB_SDEV-1) /* Device is busy, try later */
#define SDE_PACKET_LEN (-SDB_SDEV-2) /* Invalid packet len */
#define SDE_SHORTER_BUF (-SDB_SDEV-3) /* Buffer supplied by upper shorter */
#define SDE_BUF_EMPTY (-SDB_SDEV-4) /* No data packet valid */
#define SDE_UNKNOW_CMD (-SDB_SDEV-5) /* Unknown command */
#define SDE_OUT_OF_MEMORY (-SDB_SDEV-6) /* Out of Memory */
#define SDE_PACKET_ERR (-SDB_SDEV-7) /* Packet is err */
#define SDE_DEV_NOT_EXIST (-SDB_SDEV-8) /* dev not existed */
#define SDE_INVALID_TASKID (-SDB_SDEV-9) /* Invalid taskid */
#define SDE_INVALID_EV (-SDB_SDEV-10) /* Invalid EV */
#define SDE_INVALID_LEN (-SDB_SDEV-11) /* Invalid Length of Param */
#define SDE_INVALID_ARG (-SDB_SDEV-12) /* Invalid arguments */
#define SDE_INVALID_SLAVE (-SDB_SDEV-13) /* Invalid Slave */
#define SDE_INVALID_PACKET (-SDB_SDEV-14) /* HDLC recv 2 bytes pkt, !invalid*/
#define SDE_GENERAL_FAIL (-SDB_SDEV-15) /* INIT FAILED */
#define SDE_IN_TEST_MODE (-SDB_SDEV-16) /* Device in test mode */
#define SDE_CONN_CHEK_ERR (-SDB_SDEV-17) /* CHECK CONNECT ERROR */
/* for control code */
#define SDC_NULL (SDB_SDEV+0) /* NULL */
#define SDC_GET_MAX_BUF_LEN (SDB_SDEV+1) /*r NULL */
#define SDC_GET_MAX_SEND_BD_NUM (SDB_SDEV+2) /*r NULL */
#define SDC_GET_MAX_RECV_BD_NUM (SDB_SDEV+3) /*r NULL */
#define SDC_GET_EMPTY_SEND_BD_NUM (SDB_SDEV+4) /*r NULL */
#define SDC_GET_EMPTY_RECV_BD_NUM (SDB_SDEV+5) /*r NULL */
#define SDC_GET_DRIVER_INFO (SDB_SDEV+6) /* SDCGetDrvInfoStruct */
#define SDC_CLR_DRIVER_INFO (SDB_SDEV+7) /* NULL */
#define SDC_REINIT (SDB_SDEV+8) /* NULL */
#define SDC_SET_ACTION (SDB_SDEV+9) /* SDCSetActionStruct */
#define SDC_SET_NORMAL_MODE (SDB_SDEV+10)/* NULL */
#define SDC_SET_LOOPBACK_MODE (SDB_SDEV+11)/* NULL */
#define SDC_SET_TSA_LOOPBACK_MODE (SDB_SDEV+12)/* NULL */
#define SDC_SET_TX_NO_CRC_MODE (SDB_SDEV+13)/* NULL */
#define SDC_GET_ALARMS (SDB_SDEV+14)/* ULONG *, maxlen */
#define SDC_SET_QUEUE_ACTION (SDB_SDEV+15)/* SDCSetQueueStruct*/
#define SDC_SET_BAUDRATE (SDB_SDEV+16)/* SDCSetBaudRate*/
#define SDC_SET_TEST_MODE (SDB_SDEV+17)/* SDCEventQueueStruct 0r NULL*/
#define SDC_SET_UNTEST_MODE (SDB_SDEV+18)/* SDCEventQueueStruct Or NULL*/
#define SDC_GET_EV_QUEUE_ACTION (SDB_SDEV+19)/* SDCEventQueueStruct*/
#define SDC_SET_EV_QUEUE_ACTION (SDB_SDEV+20)/* SDCEventQueueStruct*/
typedef struct {
void *Addr; /* Addr */
UCHAR Size; /* Addr Size, eq. 8,16,32 */
ULONG Mask; /* Mask Hi,Lo */
ULONG Hi,Lo; /* value that control LineLevel */
}LineLevelStruct;
typedef struct {
ULONG RecvEv; /* 当接收到一个数据包时,要发送的事件 */
ULONG SendEv; /* 当发送完毕一个数据包时,要发送的事件 */
ULONG RecvTid; /* 驱动程序发送RecvEv给此任务ID */
ULONG SendTid; /* 驱动程序发送SendEv给此任务ID */
}SDCSetActionStruct;
typedef struct {
ULONG RecvQID; /* 当接收到一个数据包时,消息发送到的队列 */
ULONG RecvMessage[4];
ULONG SendQID; /* 发送完毕一个数据包时,消息发送到的队列 */
ULONG SendMessage[4];
}SDCSetQueueStruct;
typedef struct {
ULONG RecvEv; /* 当接收到一个数据包时,要发送的事件 */
ULONG SendEv; /* 当发送完毕一个数据包时,要发送的事件 */
ULONG RecvTid; /* 驱动程序发送RecvEv给此任务ID */
ULONG SendTid; /* 驱动程序发送SendEv给此任务ID */
ULONG RecvQID; /* 当接收到一个数据包时,消息发送到的队列 */
ULONG RecvMessage[4];
ULONG SendQID; /* 发送完毕一个数据包时,消息发送到的队列 */
ULONG SendMessage[4];
}SDCEventQueueStruct;
typedef struct {
ULONG TotalRecvInt; /*总的接收数据包的中断数 */
ULONG TotalSendInt; /*总的发送数据包的中断数 */
ULONG RecvNum; /*总接收到的正确的数据包 */
ULONG RecvError; /*总接收到的错误的数据包 */
ULONG RecvBDStat[16];
ULONG SendTryNum; /*上层试图发送的数据包数 */
ULONG SendPerNum; /*允许发送的数据包 */
ULONG TotalRecvByte; /*总接收的数据 */
ULONG TotalSendByte; /*总发送的数据 */
}SDCGetDriverInfoStruct;
typedef BuffDescType;
typedef struct {
BuffDescType *pBaseRecvBD; /* Base address of recv BDs */
BuffDescType *pBaseSendBD; /* Base address of send BDs */
USHORT MaxRecvBD;
USHORT MaxSendBD;
USHORT MaxBufLen; /* Max Buffer length */
USHORT CurRecvBD; /* Current Recv BD number */
USHORT CurSendBD; /* Current Send BD number */
ULONG SendTid,RecvTid;
ULONG SendEv,RecvEv;
ULONG SendQID,RecvQID;
ULONG SendMessage[4],RecvMessage[4];
SDCGetDriverInfoStruct DrvInfo;
USHORT RecvErrMask;
USHORT SendErrMask;
char *UncachedBuffer;
char Reserved[1];
} DataBufStruct;
typedef struct {
int (*read )(void *databuf, void *buf, int BufLen);
int (*write)(void *databuf, void *buf, int BufLen);
int (*cntrl)(void *databuf, int cmd, void *param, int ParamLen);
void *databuf;
ULONG sm; /* for sm */
char devmode; /* 1 for test,0 for normal*/
ULONG testtaskid;
} SDIndexTableStruct;
void SetDat(LineLevelStruct *p,ULONG val); /* val=1-Hi, 0-Lo */
ULONG GetDat(LineLevelStruct *p); /* return 1-Hi,0-Lo */
UCHAR *sd_init(UCHAR *FreeMemPtr);
char *AllocUncachedBuffer(int size,int align);
void InstallSD(int DEV,
int (*read )(void *databuf, void *buf, int BufLen),
int (*write)(void *databuf, void *buf, int BufLen),
int (*cntrl)(void *databuf, int cmd, void *param, int ParamLen),
void *databuf);
/*
if you use next three functions,
pDataBuf must be pointed to a DataBufStruct struct
*/
int BDRead(void *pDataBuf,char *pBuf, int MaxLen);
int BDWrite(void *pDataBuf, char *pBuf, int Len);
int BDCntrl(void *pDataBuf, int Cmd, void *pParam, int ParamLen);
/* Defination for common BD operating functions */
#define BD_LEN 8
#define BD_READY (1 << (15-0))
#define BD_EMPTY (1 << (15-0))
#define BD_INTR (1 << (15-3))
#define BD_WRAP (1 << (15-2))
#define BD_LAST (1 << (15-4))
extern char UncachedBuffer[MAX_UNCACHED_BUFFER_LEN];
extern SDIndexTableStruct sd_table[SDN_MAX];
int sd_smp(int DEV,int NoWait); /* return 0, ok */
void sd_smv(int DEV);
int sd_read (int DEV, void *buf, int BufLen);
int sd_write(int DEV, void *buf, int BufLen);
int sd_cntrl(int DEV, int cmd, void *param, int ParamLen);
char *sd_err(int err);
#endif _SDEV_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -