511 lines
14 KiB
C
511 lines
14 KiB
C
#ifndef __SLCAN_H__
|
|
#define __SLCAN_H__
|
|
|
|
#include <windows.h>
|
|
|
|
#define STDCALL __stdcall
|
|
#ifdef SLCAN_EXPORT
|
|
#define SLCANAPI __declspec(dllexport)
|
|
#else
|
|
#define SLCANAPI __declspec(dllimport)
|
|
#endif
|
|
|
|
#define SLCAN_PROPERTY_INDEX_LINKNAME 0
|
|
#define SLCAN_PROPERTY_INDEX_INSTANCEID 1
|
|
|
|
#define SLCAN_PROPERTY_INDEX_DEVICEDESC 2
|
|
#define SLCAN_PROPERTY_INDEX_FRIENDLYNAME 3
|
|
#define SLCAN_PROPERTY_INDEX_PHOBJECTNAME 4
|
|
#define SLCAN_PROPERTY_INDEX_MFG 5
|
|
#define SLCAN_PROPERTY_INDEX_LOCATIONINFO 6
|
|
#define SLCAN_PROPERTY_INDEX_ENUMERATOR 7
|
|
#define SLCAN_PROPERTY_INDEX_CLASS 8
|
|
#define SLCAN_PROPERTY_INDEX_CLASSGUID 9
|
|
#define SLCAN_PROPERTY_INDEX_SERVICE 10
|
|
#define SLCAN_PROPERTY_INDEX_DRIVER 11
|
|
#define SLCAN_PROPERTY_INDEX_PORTNAME 12
|
|
#define SLCAN_PROPERTY_INDEX_PRODUCT 13L
|
|
#define SLCAN_PROPERTY_INDEX_MANUFACTURER 14L
|
|
#define SLCAN_PROPERTY_INDEX_CONFIGURATION 15L
|
|
#define SLCAN_PROPERTY_INDEX_INTERFACE 16L
|
|
#define SLCAN_PROPERTY_INDEX_SERIAL 17L
|
|
#define SLCAN_PROPERTY_INDEX_ALIAS 18L
|
|
#define SLCAN_PROPERTY_INDEX_CHANNELLINK 19L
|
|
#define SLCAN_PROPERTY_INDEX_SERIALID 20L
|
|
|
|
|
|
#define SLCAN_MODE_CONFIG 0x00
|
|
#define SLCAN_MODE_NORMAL 0x01
|
|
#define SLCAN_MODE_LISTENONLY 0x02
|
|
#define SLCAN_MODE_LOOPBACK 0x03
|
|
#define SLCAN_MODE_SLEEP 0x04
|
|
|
|
#define SLCAN_BR_CIA_1000K 0x8000
|
|
#define SLCAN_BR_CIA_800K 0x8001
|
|
#define SLCAN_BR_CIA_500K 0x8002
|
|
#define SLCAN_BR_CIA_250K 0x8003
|
|
#define SLCAN_BR_CIA_125K 0x8004
|
|
#define SLCAN_BR_CIA_50K 0x8005
|
|
#define SLCAN_BR_CIA_20K 0x8006
|
|
#define SLCAN_BR_CIA_10K 0x8007
|
|
#define SLCAN_BR_400K 0x8008
|
|
#define SLCAN_BR_200K 0x8009
|
|
#define SLCAN_BR_100K 0x800A
|
|
#define SLCAN_BR_83333 0x800B
|
|
#define SLCAN_BR_33333 0x800C
|
|
#define SLCAN_BR_25K 0x800D
|
|
#define SLCAN_BR_5K 0x800E
|
|
#define SLCAN_BR_30K 0x800F
|
|
#define SLCAN_BR_300K 0x8010
|
|
#define SLCAN_BR_LASTINDEX SLCAN_BR_300K
|
|
|
|
|
|
|
|
|
|
|
|
#define SLCAN_CAP_MODE_NORMAL 0x01
|
|
#define SLCAN_CAP_MODE_LISTEN_ONLY 0x02
|
|
#define SLCAN_CAP_MODE_LOOP_BACK 0x04
|
|
#define SLCAN_CAP_MODE_SLEEP 0x08
|
|
|
|
#define SLCAN_CAP_TXMODE_ONE_SHOT 0x01
|
|
#define SLCAN_CAP_TXMODE_TIMESTAMP 0x02
|
|
|
|
|
|
#define SLCAN_CAP_CONTR_EXTERNAL 0x00
|
|
#define SLCAN_CAP_CONTR_MCP2515 0x01
|
|
#define SLCAN_CAP_CONTR_SJA1000 0x02
|
|
|
|
#define SLCAN_CAP_CONTR_INTERNAL 0x80
|
|
#define SLCAN_CAP_CONTR_LPC 0x81
|
|
#define SLCAN_CAP_CONTR_STM32 0x82
|
|
#define SLCAN_CAP_CONTR_STM8 0x83
|
|
#define SLCAN_CAP_CONTR_PIC 0x84
|
|
#define SLCAN_CAP_CONTR_PIC_ECAN 0x85
|
|
|
|
#define SLCAN_CAP_PHYS_HS 0x01
|
|
#define SLCAN_CAP_PHYS_LS 0x02
|
|
#define SLCAN_CAP_PHYS_SW 0x04
|
|
#define SLCAN_CAP_PHYS_J1708 0x08
|
|
#define SLCAN_CAP_PHYS_LIN 0x10
|
|
#define SLCAN_CAP_PHYS_KLINE 0x20
|
|
|
|
#define SLCAN_CAP_PHYS_LOAD 0x01
|
|
|
|
#define SLCAN_CAP_BITRATE_INDEX 0x01
|
|
#define SLCAN_CAP_BITRATE_CUSTOM 0x02
|
|
#define SLCAN_CAP_BITRATE_AUTOMATIC 0x04
|
|
|
|
|
|
#define SLCAN_EVT_LEVEL_RX_MSG 0
|
|
#define SLCAN_EVT_LEVEL_TIME_STAMP 1
|
|
#define SLCAN_EVT_LEVEL_TX_MSG 2
|
|
#define SLCAN_EVT_LEVEL_BUS_STATE 3
|
|
#define SLCAN_EVT_LEVEL_COUNTS 4
|
|
#define SLCAN_EVT_LEVEL_ERRORS 5
|
|
|
|
#define SLCAN_EVT_TYPE_RX 0x0
|
|
#define SLCAN_EVT_TYPE_START_TX 0x1
|
|
#define SLCAN_EVT_TYPE_END_TX 0x2
|
|
#define SLCAN_EVT_TYPE_ABORT_TX 0x3
|
|
#define SLCAN_EVT_TYPE_BUS_STATE 0x4
|
|
#define SLCAN_EVT_TYPE_ERROR_COUNTS 0x5
|
|
#define SLCAN_EVT_TYPE_BUS_ERROR 0x6
|
|
#define SLCAN_EVT_TYPE_ARBITRATION_ERROR 0x7
|
|
#define SLCAN_EVT_STAMP_INC 0xF
|
|
|
|
#define SLCAN_BUS_STATE_ERROR_ACTIVE 0x00
|
|
#define SLCAN_BUS_STATE_ERROR_ACTIVE_WARN 0x01
|
|
#define SLCAN_BUS_STATE_ERROR_PASSIVE 0x02
|
|
#define SLCAN_BUS_STATE_BUSOFF 0x03
|
|
|
|
#define SLCAN_MES_INFO_EXT 0x01
|
|
#define SLCAN_MES_INFO_RTR 0x02
|
|
#define SLCAN_MES_INFO_ONESHOT 0x04
|
|
|
|
|
|
|
|
#define SLCAN_DEVOP_CREATE 0x00000000
|
|
#define SLCAN_DEVOP_CREATEHANDLE 0x00000001
|
|
#define SLCAN_DEVOP_OPEN 0x00000002
|
|
#define SLCAN_DEVOP_CLOSE 0x00000003
|
|
#define SLCAN_DEVOP_DESTROYHANDLE 0x00000004
|
|
#define SLCAN_DEVOP_DESTROY 0x00000005
|
|
|
|
|
|
#define SLCAN_INVALID_HANDLE_ERROR 0xE0001001
|
|
#define SLCAN_DEVICE_INVALID_HANDLE_ERROR 0xE0001120
|
|
#define SLCAN_HANDLE_INIT_ERROR 0xE0001017
|
|
#define SLCAN_DEVICE_NOTOPEN_ERROR 0xE0001121
|
|
|
|
#define SLCAN_EVT_ERR_TYPE_BIT 0x00
|
|
#define SLCAN_EVT_ERR_TYPE_FORM 0x01
|
|
#define SLCAN_EVT_ERR_TYPE_STUFF 0x02
|
|
#define SLCAN_EVT_ERR_TYPE_OTHER 0x03
|
|
|
|
#define SLCAN_EVT_ERR_DIR_TX 0x00
|
|
#define SLCAN_EVT_ERR_DIR_RX 0x01
|
|
|
|
#define SLCAN_EVT_ERR_FRAME_SOF 0x03
|
|
#define SLCAN_EVT_ERR_FRAME_ID28_ID21 0x02
|
|
#define SLCAN_EVT_ERR_FRAME_ID20_ID18 0x06
|
|
#define SLCAN_EVT_ERR_FRAME_SRTR 0x04
|
|
#define SLCAN_EVT_ERR_FRAME_IDE 0x05
|
|
#define SLCAN_EVT_ERR_FRAME_ID17_ID13 0x07
|
|
#define SLCAN_EVT_ERR_FRAME_ID12_ID5 0x0F
|
|
#define SLCAN_EVT_ERR_FRAME_ID4_ID0 0x0E
|
|
#define SLCAN_EVT_ERR_FRAME_RTR 0x0C
|
|
#define SLCAN_EVT_ERR_FRAME_RSRV0 0x0D
|
|
#define SLCAN_EVT_ERR_FRAME_RSRV1 0x09
|
|
#define SLCAN_EVT_ERR_FRAME_DLC 0x0B
|
|
#define SLCAN_EVT_ERR_FRAME_DATA 0x0A
|
|
#define SLCAN_EVT_ERR_FRAME_CRC_SEQ 0x08
|
|
#define SLCAN_EVT_ERR_FRAME_CRC_DEL 0x18
|
|
#define SLCAN_EVT_ERR_FRAME_ACK_SLOT 0x19
|
|
#define SLCAN_EVT_ERR_FRAME_ACK_DEL 0x1B
|
|
#define SLCAN_EVT_ERR_FRAME_EOF 0x1A
|
|
#define SLCAN_EVT_ERR_FRAME_INTER 0x12
|
|
#define SLCAN_EVT_ERR_FRAME_AER_FLAG 0x11
|
|
#define SLCAN_EVT_ERR_FRAME_PER_FLAG 0x16
|
|
#define SLCAN_EVT_ERR_FRAME_TDB 0x13
|
|
#define SLCAN_EVT_ERR_FRAME_ERR_DEL 0x17
|
|
#define SLCAN_EVT_ERR_FRAME_OVER_FLAG 0x1C
|
|
|
|
#define SLCAN_TX_STATUS_OK 0x00
|
|
#define SLCAN_TX_STATUS_TIMEOUT 0x01
|
|
#define SLCAN_TX_STATUS_BUSOFF 0x02
|
|
#define SLCAN_TX_STATUS_ABORT 0x03
|
|
#define SLCAN_TX_STATUS_NOT_ENA 0x04
|
|
#define SLCAN_TX_STATUS_ERROR_ONE_SHOT 0x05
|
|
#define SLCAN_TX_STATUS_INVALID_MODE 0x06
|
|
#define SLCAN_TX_STATUS_UNKNOWN 0x0F
|
|
|
|
#define SLCAN_PURGE_TX_ABORT 0x01
|
|
#define SLCAN_PURGE_RX_ABORT 0x02
|
|
#define SLCAN_PURGE_TX_CLEAR 0x04
|
|
#define SLCAN_PURGE_RX_CLEAR 0x08
|
|
|
|
#pragma pack(push,1)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"{
|
|
#endif
|
|
|
|
typedef PVOID HSLCAN;
|
|
|
|
typedef struct _SLCAN_CAPABILITIES{
|
|
|
|
BYTE bModes;
|
|
BYTE bTXModes;
|
|
BYTE bMaxEventLevel;
|
|
BYTE bController;
|
|
BYTE bPhysical;
|
|
BYTE bPhysicalLoad;
|
|
BYTE bBitrates;
|
|
BYTE bAdvancedModes;
|
|
DWORD dwCanBaseClk;
|
|
DWORD dwTimeStampClk;
|
|
WORD wMaxBRP;
|
|
}SLCAN_CAPABILITIES,*PSLCAN_CAPABILITIES;
|
|
|
|
typedef struct _SLCAN_BITRATE {
|
|
WORD BRP;
|
|
BYTE TSEG1;
|
|
BYTE TSEG2;
|
|
BYTE SJW;
|
|
BYTE SAM;
|
|
}SLCAN_BITRATE,*PSLCAN_BITRATE;
|
|
|
|
|
|
typedef void (STDCALL* SLCAN_DEVICE_CALLBACK)(
|
|
HSLCAN hDevice,
|
|
DWORD dwIndex,
|
|
DWORD dwOperation,
|
|
PVOID pContext,
|
|
DWORD dwContextSize
|
|
);
|
|
|
|
typedef VOID (STDCALL* SLCAN_DEVICELIST_CALLBACK)(
|
|
HSLCAN hDevice,
|
|
DWORD dwIndex,
|
|
PVOID pContext,
|
|
DWORD dwContextSize
|
|
);
|
|
|
|
typedef struct _SLCAN_MESSAGE{
|
|
BYTE Info;
|
|
DWORD ID;
|
|
BYTE DataCount;
|
|
BYTE Data[8];
|
|
}SLCAN_MESSAGE,*PSLCAN_MESSAGE;
|
|
|
|
typedef struct _SLCAN_TXMESSAGE{
|
|
LONG dwDelay;
|
|
SLCAN_MESSAGE Msg;
|
|
}SLCAN_TXMESSAGE,*PSLCAN_TXMESSAGE;
|
|
|
|
typedef struct _SLCAN_EVENT{
|
|
BYTE EventType;
|
|
DWORD TimeStampLo;
|
|
union {
|
|
SLCAN_MESSAGE Msg;
|
|
DWORD TimeStamp[2];
|
|
DWORD64 TimeStamp64;
|
|
struct {
|
|
BYTE BusMode;
|
|
BYTE Dummy1;
|
|
BYTE ErrCountRx;
|
|
BYTE ErrCountTx;
|
|
BYTE ErrType;
|
|
BYTE ErrDir;
|
|
BYTE ErrFrame;
|
|
BYTE LostArbitration;
|
|
};
|
|
};
|
|
}SLCAN_EVENT,*PSLCAN_EVENT;
|
|
|
|
typedef struct _SLCAN_STATE{
|
|
BYTE BusMode;
|
|
BYTE Dummy1;
|
|
BYTE ErrCountRX;
|
|
BYTE ErrCountTX;
|
|
}SLCAN_STATE,*PSLCAN_STATE;
|
|
|
|
typedef union _SLCAN_TIMESTAMP{
|
|
UINT64 Value;
|
|
DWORD dwValue[2];
|
|
USHORT wValue[4];
|
|
BYTE bValue[8];
|
|
}SLCAN_TIMESTAMP,*PSLCAN_TIMESTAMP;
|
|
|
|
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_Load(
|
|
SLCAN_DEVICE_CALLBACK DeviceProc,
|
|
SLCAN_DEVICELIST_CALLBACK DeviceListProc
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_Free(
|
|
BOOL bDoCallBack
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_Update();
|
|
|
|
SLCANAPI HSLCAN STDCALL SlCan_GetDevice(
|
|
DWORD dwIndex
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_GetDeviceCount();
|
|
|
|
|
|
SLCANAPI HANDLE STDCALL SlCan_DeviceGetHandle(
|
|
DWORD dwIndex
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_DeviceGetProperty(
|
|
HSLCAN hDevice,
|
|
DWORD dwIndex,
|
|
PCHAR pBuf,
|
|
DWORD dwSize
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_DeviceGetPropertyW(
|
|
HSLCAN hDevice,
|
|
DWORD dwIndex,
|
|
PWCHAR pBuf,
|
|
DWORD dwSize
|
|
);
|
|
|
|
SLCANAPI HKEY STDCALL SlCan_DeviceGetRegKey(
|
|
HSLCAN hDevice,
|
|
DWORD dwIndex
|
|
);
|
|
|
|
SLCANAPI PVOID STDCALL SlCan_DeviceSetContext(
|
|
HSLCAN hDevice,
|
|
PVOID pBuf,
|
|
DWORD dwBufSize
|
|
);
|
|
|
|
SLCANAPI PVOID STDCALL SlCan_DeviceGetContext(
|
|
HSLCAN hDevice
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_DeviceGetContextSize(
|
|
HSLCAN hDevice
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetAlias(
|
|
HSLCAN hDevice,
|
|
PCHAR pBuf
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetAliasW(
|
|
HSLCAN hDevice,
|
|
PWCHAR pBuf
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_DeviceGetAlias(
|
|
HSLCAN hDevice,
|
|
PCHAR pBuf,
|
|
DWORD dwSize
|
|
);
|
|
|
|
SLCANAPI DWORD STDCALL SlCan_DeviceGetAliasW(
|
|
HSLCAN hDevice,
|
|
PWCHAR pBuf,
|
|
DWORD dwSize
|
|
);
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetCapabilities(
|
|
HSLCAN hDevice,
|
|
PSLCAN_CAPABILITIES pCapabilities
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceOpen(
|
|
HSLCAN hDevice
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceClose(
|
|
HSLCAN hDevice
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetMode(
|
|
HSLCAN hDevice,
|
|
DWORD dwMode
|
|
);
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetMode(
|
|
HSLCAN hDevice,
|
|
PDWORD pdwMode
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetState(
|
|
HSLCAN hDevice,
|
|
PSLCAN_STATE pState
|
|
);
|
|
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetTXTimeOut(
|
|
HSLCAN hDevice,
|
|
DWORD dwMillisecond
|
|
);
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetTXTimeOut(
|
|
HSLCAN hDevice,
|
|
PDWORD pdwMillisecond
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetBitRate(
|
|
HSLCAN hDevice,
|
|
PSLCAN_BITRATE pBitRate
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetBitRate(
|
|
HSLCAN hDevice,
|
|
PSLCAN_BITRATE pBitRate
|
|
);
|
|
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceEnaRec(
|
|
HSLCAN hDevice,
|
|
BYTE bValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetLatency(
|
|
HSLCAN hDevice,
|
|
BYTE bValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetLatency(
|
|
HSLCAN hDevice,
|
|
PBYTE pbValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DevicePurge(
|
|
HSLCAN hDevice,
|
|
BYTE bValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetEventLevel(
|
|
HSLCAN hDevice,
|
|
BYTE bValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetEventLevel(
|
|
HSLCAN hDevice,
|
|
PBYTE pbValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetStartTimeStamp(
|
|
HSLCAN hDevice,
|
|
PSLCAN_TIMESTAMP pValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetStartTimeStamp(
|
|
HSLCAN hDevice,
|
|
PSLCAN_TIMESTAMP pValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStamp(
|
|
HSLCAN hDevice,
|
|
PSLCAN_TIMESTAMP pValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetTimeStampPeriod(
|
|
HSLCAN hDevice,
|
|
LONG lValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetTimeStampPeriod(
|
|
HSLCAN hDevice,
|
|
PLONG plValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceSetExMode(
|
|
HSLCAN hDevice,
|
|
BYTE bValue
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceGetExMode(
|
|
HSLCAN hDevice,
|
|
PBYTE pbValue
|
|
);
|
|
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessages(
|
|
HSLCAN hDevice,
|
|
PSLCAN_MESSAGE pMsg,
|
|
DWORD dwCount,
|
|
PBYTE pbStatus
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceWriteMessagesEx(
|
|
HSLCAN hDevice,
|
|
PSLCAN_TXMESSAGE pMsg,
|
|
DWORD dwCount,
|
|
PBYTE pbStatus,
|
|
PDWORD pdwCount
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceReadMessages(
|
|
HSLCAN hDevice,
|
|
DWORD dwTimeOut,
|
|
PSLCAN_MESSAGE pMsg,
|
|
DWORD dwCount,
|
|
PDWORD pdwCount
|
|
);
|
|
|
|
SLCANAPI BOOL STDCALL SlCan_DeviceReadEvents(
|
|
HSLCAN hDevice,
|
|
DWORD dwTimeOut,
|
|
PSLCAN_EVENT pEvent,
|
|
DWORD dwCount,
|
|
PDWORD pdwCount
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#pragma pack(pop)
|
|
|
|
#endif //__SLCAN_H
|