/*---------------------------------------------------------------------------- | File: | VCAND.H | Project: | CAN driver for Win NT and Win 95 | | Description: | Driver Interface Prototypes | |----------------------------------------------------------------------------- | $Author: Jörg $ $Locker: $ $Revision: 48 $ | $Header: /CANdriver/dll/VCanD.h 48 22.01.04 9:26 Jörg $ |----------------------------------------------------------------------------- | Copyright (c) 1996 by Vector Informatik GmbH. All rights reserved. ----------------------------------------------------------------------------*/ #ifndef _V_CAND_H_ #define _V_CAND_H_ #ifdef __cplusplus extern "C" { #endif #if (__FLAT__) || defined(_WIN32) || defined(__WIN32__) || defined(WIN32) #if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) #define _EXPORT_API __stdcall #else #define _EXPORT_API #endif #else #define _EXPORT_API _far _pascal #endif #ifndef DYNAMIC_CANDRIVER_DLL // not used for dynamic load of dll #define _EXPORT_DECL __declspec(dllimport) _EXPORT_API #define _EXPORT_DEF __declspec(dllimport) _EXPORT_API #endif #include typedef char * ncdStringType; //------------------------------------------------------------------------------ // accessmask typedef unsigned long Vaccess; //------------------------------------------------------------------------------ // structure for V_RECEIVE_MSG, V_TRANSMIT_MSG // message flags #ifndef MAX_MSG_LEN #define MAX_MSG_LEN 8 #endif #define EXT_MSG 0x80000000 // signs an extended identifier #define VCAN_EXT_MSG_ID EXT_MSG #define VCAN_MSG_FLAG_ERROR_FRAME 0x01 #define VCAN_MSG_FLAG_OVERRUN 0x02 /* Overrun in Driver or CAN Controller */ /* special case: OVERRUN combined with TIMER * means the 32 bit timer has overrun */ #define VCAN_MSG_FLAG_NERR 0x04 /* Line Error on Lowspeed */ #define VCAN_MSG_FLAG_WAKEUP 0x08 /* High Voltage Message on Single Wire CAN */ #define VCAN_MSG_FLAG_REMOTE_FRAME 0x10 #define VCAN_MSG_FLAG_RESERVED_1 0x20 #define VCAN_MSG_FLAG_TX_NOTIFY 0x40 /* Message Transmitted */ #define VCAN_MSG_FLAG_TX_START 0x80 /* Transmit Message stored into Controller */ // old style flags #define MSGFLAG_ERROR_FRAME VCAN_MSG_FLAG_ERROR_FRAME // Msg is a bus error #define MSGFLAG_OVERRUN VCAN_MSG_FLAG_OVERRUN // Msgs following this has been lost #define MSGFLAG_NERR VCAN_MSG_FLAG_NERR // NERR active during this msg #define MSGFLAG_WAKEUP VCAN_MSG_FLAG_WAKEUP // Msg rcv'd in wakeup mode #define MSGFLAG_REMOTE_FRAME VCAN_MSG_FLAG_REMOTE_FRAME // Msg is a remote frame #define MSGFLAG_RESERVED_1 VCAN_MSG_FLAG_RESERVED_1 // Reserved for future usage #define MSGFLAG_TX VCAN_MSG_FLAG_TX_NOTIFY // TX acknowledge #define MSGFLAG_TXRQ VCAN_MSG_FLAG_TX_START // TX request struct s_vcan_msg { /* 14 Bytes */ unsigned long id; unsigned char flags; unsigned char dlc; unsigned char data [MAX_MSG_LEN]; }; //------------------------------------------------------------------------------ // structure for V_CHIP_STATE #define CHIPSTAT_BUSOFF 0x01 #define CHIPSTAT_ERROR_PASSIVE 0x02 #define CHIPSTAT_ERROR_WARNING 0x04 #define CHIPSTAT_ERROR_ACTIVE 0x08 struct s_vcan_chip_state { unsigned char busStatus; unsigned char txErrorCounter; unsigned char rxErrorCounter; }; //------------------------------------------------------------------------------ // structure for SET_OUTPUT_MODE #define OUTPUT_MODE_SILENT 0 #define OUTPUT_MODE_NORMAL 1 //------------------------------------------------------------------------------ // Transceiver modes #define TRANSCEIVER_EVENT_ERROR 1 #define TRANSCEIVER_EVENT_CHANGED 2 //------------------------------------------------------------------------------ // Transceiver types #define VCAN_TRANSCEIVER_TYPE_NONE 0 #define VCAN_TRANSCEIVER_TYPE_251 1 #define VCAN_TRANSCEIVER_TYPE_252 2 #define VCAN_TRANSCEIVER_TYPE_DNOPTO 3 #define VCAN_TRANSCEIVER_TYPE_W210 4 #define VCAN_TRANSCEIVER_TYPE_SWC_PROTO 5 // Prototype. Driver may latch-up. #define VCAN_TRANSCEIVER_TYPE_SWC 6 #define VCAN_TRANSCEIVER_TYPE_EVA 7 #define VCAN_TRANSCEIVER_TYPE_FIBER 8 #define VCAN_TRANSCEIVER_TYPE_K251 9 #define VCAN_TRANSCEIVER_TYPE_K 10 #define VCAN_TRANSCEIVER_TYPE_1054_OPTO 11 // 1054 with optical isolation #define VCAN_TRANSCEIVER_TYPE_SWC_OPTO 12 // SWC with optical isolation #define VCAN_TRANSCEIVER_TYPE_B10011S 13 // B10011S truck-and-trailer #define VCAN_TRANSCEIVER_TYPE_1050 14 // 1050 #define VCAN_TRANSCEIVER_TYPE_1050_OPTO 15 // 1050 with optical isolation #define VCAN_TRANSCEIVER_TYPE_1041 16 // 1041 #define VCAN_TRANSCEIVER_TYPE_1041_OPTO 17 // 1041 with optical isolation // piggy backs #define VCAN_TRANSCEIVER_TYPE_PB_251 0x0101 #define VCAN_TRANSCEIVER_TYPE_PB_1054 0x0103 #define VCAN_TRANSCEIVER_TYPE_PB_251_OPTO 0x0105 // 0x0107, 0x0109 are not supported!! #define VCAN_TRANSCEIVER_TYPE_PB_SWC 0x010B // 0x010D not supported, 0x010F, 0x0111, 0x0113 reserved for future use!! #define VCAN_TRANSCEIVER_TYPE_PB_1054_OPTO 0x0115 #define VCAN_TRANSCEIVER_TYPE_PB_SWC_OPTO 0x0117 #define VCAN_TRANSCEIVER_TYPE_PB_TT_OPTO 0x0119 #define VCAN_TRANSCEIVER_TYPE_PB_1050 0x011B #define VCAN_TRANSCEIVER_TYPE_PB_1050_OPTO 0x011D #define VCAN_TRANSCEIVER_TYPE_PB_1041 0x011F #define VCAN_TRANSCEIVER_TYPE_PB_1041_OPTO 0x0121 //------------------------------------------------------------------------------ // old style Transceiver types #define TRANSCEIVER_TYPE_NONE VCAN_TRANSCEIVER_TYPE_NONE #define TRANSCEIVER_TYPE_251 VCAN_TRANSCEIVER_TYPE_251 #define TRANSCEIVER_TYPE_252 VCAN_TRANSCEIVER_TYPE_252 #define TRANSCEIVER_TYPE_DNOPTO VCAN_TRANSCEIVER_TYPE_DNOPTO #define TRANSCEIVER_TYPE_W210 VCAN_TRANSCEIVER_TYPE_W210 #define TRANSCEIVER_TYPE_SWC_PROTO VCAN_TRANSCEIVER_TYPE_SWC_PROTO #define TRANSCEIVER_TYPE_SWC VCAN_TRANSCEIVER_TYPE_SWC //------------------------------------------------------------------------------ // Transceiver modes #define VCAN_TRANSCEIVER_LINEMODE_NA 0 #define VCAN_TRANSCEIVER_LINEMODE_TWO_LINE 1 #define VCAN_TRANSCEIVER_LINEMODE_CAN_H 2 #define VCAN_TRANSCEIVER_LINEMODE_CAN_L 3 #define VCAN_TRANSCEIVER_LINEMODE_SWC_SLEEP 4 // SWC Sleep Mode. #define VCAN_TRANSCEIVER_LINEMODE_SWC_NORMAL 5 // SWC Normal Mode. #define VCAN_TRANSCEIVER_LINEMODE_SWC_FAST 6 // SWC High-Speed Mode. #define VCAN_TRANSCEIVER_LINEMODE_SWC_WAKEUP 7 // SWC Wakeup Mode. #define VCAN_TRANSCEIVER_LINEMODE_SLEEP 8 #define VCAN_TRANSCEIVER_LINEMODE_NORMAL 9 #define VCAN_TRANSCEIVER_LINEMODE_STDBY 10 // Standby for those who support it #define VCAN_TRANSCEIVER_LINEMODE_TT_CAN_H 11 // truck & trailer: operating mode single wire using CAN high #define VCAN_TRANSCEIVER_LINEMODE_TT_CAN_L 12 // truck & trailer: operating mode single wire using CAN low #define VCAN_TRANSCEIVER_LINEMODE_EVA_00 13 // CANcab Eva #define VCAN_TRANSCEIVER_LINEMODE_EVA_01 14 // CANcab Eva #define VCAN_TRANSCEIVER_LINEMODE_EVA_10 15 // CANcab Eva #define VCAN_TRANSCEIVER_LINEMODE_EVA_11 16 // CANcab Eva //------------------------------------------------------------------------------ // old style Transceiver modes #define TRANSCEIVER_LINEMODE_NA VCAN_TRANSCEIVER_LINEMODE_NA #define TRANSCEIVER_LINEMODE_TWO_LINE VCAN_TRANSCEIVER_LINEMODE_TWO_LINE #define TRANSCEIVER_LINEMODE_CAN_H VCAN_TRANSCEIVER_LINEMODE_CAN_H #define TRANSCEIVER_LINEMODE_CAN_L VCAN_TRANSCEIVER_LINEMODE_CAN_L #define TRANSCEIVER_LINEMODE_SWC_SLEEP VCAN_TRANSCEIVER_LINEMODE_SWC_SLEEP #define TRANSCEIVER_LINEMODE_SWC_NORMAL VCAN_TRANSCEIVER_LINEMODE_SWC_NORMAL #define TRANSCEIVER_LINEMODE_SWC_FAST VCAN_TRANSCEIVER_LINEMODE_SWC_FAST #define TRANSCEIVER_LINEMODE_SWC_WAKEUP VCAN_TRANSCEIVER_LINEMODE_SWC_WAKEUP #define TRANSCEIVER_LINEMODE_SLEEP VCAN_TRANSCEIVER_LINEMODE_SLEEP #define TRANSCEIVER_LINEMODE_NORMAL VCAN_TRANSCEIVER_LINEMODE_NORMAL #define VCAN_TRANSCEIVER_RESNET_NA 0 #define VCAN_TRANSCEIVER_RESNET_MASTER 1 #define VCAN_TRANSCEIVER_RESNET_MASTER_STBY 2 #define VCAN_TRANSCEIVER_RESNET_SLAVE 3 // old style #define TRANSCEIVER_RESNET_NA VCAN_TRANSCEIVER_RESNET_NA #define TRANSCEIVER_RESNET_MASTER VCAN_TRANSCEIVER_RESNET_MASTER #define TRANSCEIVER_RESNET_MASTER_STBY VCAN_TRANSCEIVER_RESNET_MASTER_STBY #define TRANSCEIVER_RESNET_SLAVE VCAN_TRANSCEIVER_RESNET_SLAVE //------------------------------------------------------------------------------ // definitions for the events and commands used by the driver enum e_vevent_type { V_NO_COMMAND = 0, V_RECEIVE_MSG = 1, V_CHIP_STATE = 4, V_TIMER = 8, V_TRANSMIT_MSG =10, }; union s_vcan_tag_data { struct s_vcan_msg msg; struct s_vcan_chip_state chipState; }; typedef unsigned char VeventTag; //------------------------------------------------------------------------------ // VCAN_EVENT structure // event type definition struct s_vcan_event { VeventTag tag; // 1 unsigned char chanIndex; // 1 unsigned char transId; // 1 unsigned char portHandle; // 1 internal use only !!!! unsigned long timeStamp; // 4 union s_vcan_tag_data tagData; // 14 Bytes (_VMessage) }; // -------- // 22 Bytes typedef struct s_vcan_event VCAN_EVENT, Vevent, *PVevent; // message name to aquire a unique message id from windows #define DriverNotifyMessageName "VectorCanDriverChangeNotifyMessage" typedef enum { UNKNOWN = 0, HARDWARE_CHANGED = 1, APP_SETTINGS_CHANGED = 2, } VCAN_NOTIFY_REASON; // defines for the supported hardware #define HWTYPE_NONE 0 #define HWTYPE_VIRTUAL 1 #define HWTYPE_CANCARDX 2 #define HWTYPE_CANPARI 3 #define HWTYPE_CANAC2 5 #define HWTYPE_CANAC2PCI 6 #define HWTYPE_CANCARDY 12 #define HWTYPE_CANCARDXL 15 #define HWTYPE_CANCARD2 17 #define HWTYPE_EDICCARD 19 #define HWTYPE_CANCASEXL 21 #define HWTYPE_CANBOARDXL 25 #define HWTYPE_CANBOARDXL_COMPACT 27 #define MAX_HWTYPE 27 //------------------------------------------------------------------------------ // build a channels mask from the channels index #define CHANNEL_MASK(x) (1<<(x)) #define MAX_APPNAME 32 //------------------------------------------------------------------------------ // define for ReceiveMode #define VCAN_WAIT 0 #define VCAN_POLL 1 #define VCAN_NOTIFY 2 //------------------------------------------------------------------------------ // driver status typedef short Vstatus; #define VSUCCESS 0 #define VPENDING 1 #define VERR_QUEUE_IS_EMPTY 10 #define VERR_QUEUE_IS_FULL 11 #define VERR_TX_NOT_POSSIBLE 12 #define VERR_NO_LICENSE 14 #define VERR_WRONG_PARAMETER 101 #define VERR_TWICE_REGISTER 110 #define VERR_INVALID_CHAN_INDEX 111 #define VERR_INVALID_ACCESS 112 #define VERR_PORT_IS_OFFLINE 113 #define VERR_CHAN_IS_ONLINE 116 #define VERR_NOT_IMPLEMENTED 117 #define VERR_INVALID_PORT 118 #define VERR_HW_NOT_READY 120 #define VERR_CMD_TIMEOUT 121 #define VERR_HW_NOT_PRESENT 129 #define VERR_NOTIFY_ALREADY_ACTIVE 131 #define VERR_NO_RESOURCES 152 #define VERR_WRONG_CHIP_TYPE 153 #define VERR_WRONG_COMMAND 154 #define VERR_INVALID_HANDLE 155 #define VERR_CANNOT_OPEN_DRIVER 201 #define VERROR 255 #define MAX_DRIVER_NAME 31 #define MAX_CHANNEL_NAME 31 #define MAX_CHAN_NAME MAX_CHANNEL_NAME //------------------------------------------------------------------------------ // acceptance filter typedef struct _Vset_acceptance { unsigned long code; unsigned long mask; } VsetAcceptance; //------------------------------------------------------------------------------ // bit timing typedef struct { unsigned long bitRate; unsigned char sjw; unsigned char tseg1; unsigned char tseg2; unsigned char sam; // 1 or 3 } VchipParams; // porthandle #define INVALID_PORTHANDLE (-1) typedef long VportHandle, *PVportHandle; typedef struct s_vcan_channel_config { char name [MAX_CHANNEL_NAME + 1]; unsigned char hwType; // HWTYPE_xxxx (see above) unsigned char hwIndex; // Index of the hardware (same type) (0,1,...) unsigned char hwChannel; // Index of the channel (same hardware) (0,1,...) unsigned char tranceiverType; // TRANCEIVER_TYPE_xxxx (see above) unsigned char channelIndex; // Global channel index (0,1,...) unsigned long channelMask; // Global channel mask (=1< #ifdef __cplusplus } #endif // _cplusplus #endif