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

📄 can841.h

📁 一个研华古老CAN卡驱动程序
💻 H
字号:
/*****************************************************************************
 *  FILE        : CAN841.H
 *  DATE        : 11-3-95'
 *  Version     : V1.0
 *  Description : Prototype for CAN841x.LIB
 *
 *
 *
 ******************************************************************************/

#ifndef _CAN841_H
#define _CAN841_H

#define  BYTE  unsigned char
#define  UI    unsigned int
#define  UL    unsigned long
/*add by jinzhong*/
#define CANBUS_PROTOCOL_20A      0  /* protocol 2.0A, add by jinzhong*/
#define CANBUS_PROTOCOL_20B      1  /* protocol 2.0B, add by jinzhong*/
#define PELICAN_DOUBLE_FILTER                 0     // in prelican mode, use two 2bytes code and mask to filter

#define PELICAN_SINGLE_FILTER                 8     /* in prelican mode, use a 4bytes code and mask to filter*/
typedef unsigned long DWORD;
typedef unsigned char UCHAR;
typedef struct tag_PT_FilterSetting
{
	DWORD       dwFilterType;           /* filter type: 0 - two 2bytes accept code and accept mask
		      8 - a 4 bytes accept code and accept mask */
	UI       uchAcceptCode0;
	UI       uchAcceptCode1;
	UI       uchAcceptCode2;
	UI       uchAcceptCode3;
	UI       uchAcceptMask0;
	UI       uchAcceptMask1;
	UI       uchAcceptMask2;
	UI       uchAcceptMask3;
}PT_FilterSetting;

/* Data Frame Format */
#define PELICAN_EFF                    0x80     /* Extended Frame Format*/
#define PELICAN_SFF                    0x00     /* Standard Frame format  */

typedef struct {
        BYTE acc_code;
        BYTE acc_mask;
        BYTE bt0;
        BYTE bt1;
		BYTE protocoltype;/*add by jinzhong*/
		PT_FilterSetting  ssFilterSetting;
}CAN_STRUCT;
/*end added*/
typedef struct {
        UI   id;
        BYTE rtr;
        BYTE dlen;
        BYTE data[8];
} MSG_STRUCT, *pMSG_STRUCT;
/*add by jinzhong*/
typedef struct {
	UCHAR ff;
	UCHAR rtr;      /* EFF RTR 0 0 DLC.3 DLC.2 DLC.1 DLC.0 */
	long	  id;       /* not present in standard frames */
	UCHAR dlen;
	UCHAR data[8];
} CAN_MSG_T_EX, *PCAN_MSG_T_EX;
/*edd added*/
#define CAN_MSG_LEN sizeof(MSG_STRUCT)
#define CAN_MSG_EX_LEN sizeof(CAN_MSG_T_EX)/*add by jinzhong*/
#define RD_FIFO_EX_LEN (1000*CAN_MSG_EX_LEN)/*add by jinzhong*/
#define RD_FIFO_LEN (1000*CAN_MSG_LEN)
#define FIFO_EMPTY    -1
#define FIFO_OK        0
#define FIFO_FULL      1
#define FIFO_OVERFLOW  2
#define ULONG unsigned long
typedef struct
{
	ULONG head;
	ULONG tail;
	ULONG status;
	ULONG size;
	unsigned char buffer[RD_FIFO_LEN];
}CAN_RD_FIFO_T;

/*add by jinzhong*/
typedef struct {
	ULONG head;
	ULONG tail;
	ULONG status;
	ULONG size;
	UCHAR buffer[RD_FIFO_EX_LEN];
} CAN_RD_FIFO_EX_T;
/*end added*/

extern  int can_err_no;

/*===============  functions declaration ==========================*/
/* set can card hardware setting , if successful return 1, else return 0*/
/*----------------------------------------------------------------------
input:
   segment :set memory decode segment value, 0xC000 to 0xDF00
   irq1    : can port#1 irq number
   irq2    : can port#2 irq number
----------------------------------------------------------------------*/


int canInitHW( UI segment, BYTE irq1, BYTE irq2);

int canReleaseHW();
/* reset can controller */
int  canReset( BYTE port );

/* initiallize and configure can controller */
int  canConfig( BYTE port, CAN_STRUCT can);

/* change can controller to normal run mode */
int  canNormalRun( BYTE port );

/* send a message */
int canSendMsg( BYTE  port, MSG_STRUCT send_msg);

/* receive a message */
int  canReceiveMsg( BYTE port, MSG_STRUCT *msg_ptr, BYTE* pIsEmpty);
int  canSetProtocolType( BYTE port,BYTE protocoltype );
/*add by jinzhong*/
int  canReceiveMsgEx( BYTE port, CAN_MSG_T_EX *msg_ptrex, BYTE * IsEmpty);
int canSendMsgEx( BYTE  port, CAN_MSG_T_EX msgex);
#endif

⌨️ 快捷键说明

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