' PCANBasic.cs ' ' ~~~~~~~~~~~~ ' ' PCAN-Basic API ' ' ~~~~~~~~~~~~ ' ' ------------------------------------------------------------------ ' Author : Keneth Wagner ' Last change: 2022-07-06 ' ' Language: VB .NET ' ------------------------------------------------------------------ ' ' Copyright (C) 1999-2022 PEAK-System Technik GmbH, Darmstadt ' more Info at http://www.peak-system.com ' Imports System Imports System.Text Imports System.Runtime.InteropServices Imports TPCANHandle = System.UInt16 Imports TPCANBitrateFD = System.String Imports TPCANTimestampFD = System.UInt64 Namespace Peak.Can.Basic #Region "Enumerations" ''' ''' Represents a PCAN status/error code ''' _ Public Enum TPCANStatus As UInt32 ''' ''' No error ''' PCAN_ERROR_OK = &H0 ''' ''' Transmit buffer in CAN controller is full ''' PCAN_ERROR_XMTFULL = &H1 ''' ''' CAN controller was read too late ''' PCAN_ERROR_OVERRUN = &H2 ''' ''' Bus error: an error counter reached the 'light' limit ''' PCAN_ERROR_BUSLIGHT = &H4 ''' ''' Bus error: an error counter reached the 'heavy' limit ''' PCAN_ERROR_BUSHEAVY = &H8 ''' ''' Bus error: an error counter reached the 'warning' limit ''' PCAN_ERROR_BUSWARNING = PCAN_ERROR_BUSHEAVY ''' ''' Bus error: the CAN controller is error passive ''' PCAN_ERROR_BUSPASSIVE = &H40000 ''' ''' Bus error: the CAN controller is in bus-off state ''' PCAN_ERROR_BUSOFF = &H10 ''' ''' Mask for all bus errors ''' PCAN_ERROR_ANYBUSERR = (PCAN_ERROR_BUSWARNING Or PCAN_ERROR_BUSLIGHT Or PCAN_ERROR_BUSHEAVY Or PCAN_ERROR_BUSOFF Or PCAN_ERROR_BUSPASSIVE) ''' ''' Receive queue is empty ''' PCAN_ERROR_QRCVEMPTY = &H20 ''' ''' Receive queue was read too late ''' PCAN_ERROR_QOVERRUN = &H40 ''' ''' Transmit queue is full ''' PCAN_ERROR_QXMTFULL = &H80 ''' ''' Test of the CAN controller hardware registers failed (no hardware found) ''' PCAN_ERROR_REGTEST = &H100 ''' ''' Driver not loaded ''' PCAN_ERROR_NODRIVER = &H200 ''' ''' Hardware already in use by a Net ''' PCAN_ERROR_HWINUSE = &H400 ''' ''' A Client is already connected to the Net ''' PCAN_ERROR_NETINUSE = &H800 ''' ''' Hardware handle is invalid ''' PCAN_ERROR_ILLHW = &H1400 ''' ''' Net handle is invalid ''' PCAN_ERROR_ILLNET = &H1800 ''' ''' Client handle is invalid ''' PCAN_ERROR_ILLCLIENT = &H1C00 ''' ''' Mask for all handle errors ''' PCAN_ERROR_ILLHANDLE = (PCAN_ERROR_ILLHW Or PCAN_ERROR_ILLNET Or PCAN_ERROR_ILLCLIENT) ''' ''' Resource (FIFO, Client, timeout) cannot be created ''' PCAN_ERROR_RESOURCE = &H2000 ''' ''' Invalid parameter ''' PCAN_ERROR_ILLPARAMTYPE = &H4000 ''' ''' Invalid parameter value ''' PCAN_ERROR_ILLPARAMVAL = &H8000 ''' ''' Unknown error ''' PCAN_ERROR_UNKNOWN = &H10000 ''' ''' Invalid data, function, or action. ''' PCAN_ERROR_ILLDATA = &H20000 ''' ''' Driver object state is wrong for the attempted operation ''' PCAN_ERROR_ILLMODE = &H80000 ''' ''' An operation was successfully carried out, however, irregularities were registered ''' PCAN_ERROR_CAUTION = &H2000000 ''' ''' Channel is not initialized ''' Value was changed from 0x40000 to 0x4000000 ''' PCAN_ERROR_INITIALIZE = &H4000000 ''' ''' Invalid operation ''' Value was changed from 0x80000 to 0x8000000 ''' PCAN_ERROR_ILLOPERATION = &H8000000 End Enum ''' ''' Represents a PCAN device ''' Public Enum TPCANDevice As Byte ''' ''' Undefined, unknown or not selected PCAN device value ''' PCAN_NONE = 0 ''' ''' PCAN Non-PnP devices. NOT USED WITHIN PCAN-Basic API ''' PCAN_PEAKCAN = 1 ''' ''' PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus ''' PCAN_ISA = 2 ''' ''' PCAN-Dongle ''' PCAN_DNG = 3 ''' ''' PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express ''' PCAN_PCI = 4 ''' ''' PCAN-USB and PCAN-USB Pro ''' PCAN_USB = 5 ''' ''' PCAN-PC Card ''' PCAN_PCC = 6 ''' ''' PCAN Virtual hardware. NOT USED WITHIN PCAN-Basic API ''' PCAN_VIRTUAL = 7 ''' ''' PCAN Gateway devices ''' PCAN_LAN = 8 End Enum ''' ''' Represents a PCAN parameter to be read or set ''' Public Enum TPCANParameter As Byte ''' ''' Device identifier parameter ''' PCAN_DEVICE_ID = 1 ''' ''' DEPRECATED. Use PCAN_DEVICE_ID instead ''' PCAN_DEVICE_NUMBER = PCAN_DEVICE_ID ''' ''' 5-Volt power parameter ''' PCAN_5VOLTS_POWER = 2 ''' ''' PCAN receive event handler parameter ''' PCAN_RECEIVE_EVENT = 3 ''' ''' PCAN message filter parameter ''' PCAN_MESSAGE_FILTER = 4 ''' ''' PCAN-Basic API version parameter ''' PCAN_API_VERSION = 5 ''' ''' PCAN device channel version parameter ''' PCAN_CHANNEL_VERSION = 6 ''' ''' PCAN Reset-On-Busoff parameter ''' PCAN_BUSOFF_AUTORESET = 7 ''' ''' PCAN Listen-Only parameter ''' PCAN_LISTEN_ONLY = 8 ''' ''' Directory path for log files ''' PCAN_LOG_LOCATION = 9 ''' ''' Debug-Log activation status ''' PCAN_LOG_STATUS = 10 ''' ''' Configuration of the debugged information (LOG_FUNCTION_***) ''' PCAN_LOG_CONFIGURE = 11 ''' ''' Custom insertion of text into the log file ''' PCAN_LOG_TEXT = 12 ''' ''' Availability status of a PCAN-Channel ''' PCAN_CHANNEL_CONDITION = 13 ''' ''' PCAN hardware name parameter ''' PCAN_HARDWARE_NAME = 14 ''' ''' Message reception status of a PCAN-Channel ''' PCAN_RECEIVE_STATUS = 15 ''' ''' CAN-Controller number of a PCAN-Channel ''' PCAN_CONTROLLER_NUMBER = 16 ''' ''' Directory path for PCAN trace files ''' PCAN_TRACE_LOCATION = 17 ''' ''' CAN tracing activation status ''' PCAN_TRACE_STATUS = 18 ''' ''' Configuration of the maximum file size of a CAN trace ''' PCAN_TRACE_SIZE = 19 ''' ''' Configuration of the trace file storing mode (TRACE_FILE_***) ''' PCAN_TRACE_CONFIGURE = 20 ''' ''' Physical identification of a USB based PCAN-Channel by blinking its associated LED ''' PCAN_CHANNEL_IDENTIFYING = 21 ''' ''' Capabilities of a PCAN device (FEATURE_***) ''' PCAN_CHANNEL_FEATURES = 22 ''' ''' Using of an existing bit rate (PCAN-View connected to a channel) ''' PCAN_BITRATE_ADAPTING = 23 ''' ''' Configured bit rate as Btr0Btr1 value ''' PCAN_BITRATE_INFO = 24 ''' ''' Configured bit rate as TPCANBitrateFD string ''' PCAN_BITRATE_INFO_FD = 25 ''' ''' Configured nominal CAN Bus speed as Bits per seconds ''' PCAN_BUSSPEED_NOMINAL = 26 ''' ''' Configured CAN data speed as Bits per seconds ''' PCAN_BUSSPEED_DATA = 27 ''' ''' Remote address of a LAN channel as string in IPv4 format ''' PCAN_IP_ADDRESS = 28 ''' ''' Status of the Virtual PCAN-Gateway Service ''' PCAN_LAN_SERVICE_STATUS = 29 ''' ''' Status messages reception status within a PCAN-Channel ''' PCAN_ALLOW_STATUS_FRAMES = 30 ''' ''' RTR messages reception status within a PCAN-Channel ''' PCAN_ALLOW_RTR_FRAMES = 31 ''' ''' Error messages reception status within a PCAN-Channel ''' PCAN_ALLOW_ERROR_FRAMES = 32 ''' ''' Delay, in microseconds, between sending frames ''' PCAN_INTERFRAME_DELAY = 33 ''' ''' Filter over code and mask patterns for 11-Bit messages ''' PCAN_ACCEPTANCE_FILTER_11BIT = 34 ''' ''' Filter over code and mask patterns for 29-Bit messages ''' PCAN_ACCEPTANCE_FILTER_29BIT = 35 ''' ''' Output mode of 32 digital I/O pin of a PCAN-USB Chip. 1: Output-Active 0 : Output Inactive ''' PCAN_IO_DIGITAL_CONFIGURATION = 36 ''' ''' Value assigned to a 32 digital I/O pins of a PCAN-USB Chip ''' PCAN_IO_DIGITAL_VALUE = 37 ''' ''' Value assigned to a 32 digital I/O pins of a PCAN-USB Chip - Multiple digital I/O pins to 1 = High ''' PCAN_IO_DIGITAL_SET = 38 ''' ''' Clear multiple digital I/O pins to 0 ''' PCAN_IO_DIGITAL_CLEAR = 39 ''' ''' Get value of a single analog input pin ''' PCAN_IO_ANALOG_VALUE = 40 ''' ''' Get the version of the firmware used by the device associated with a PCAN-Channel ''' PCAN_FIRMWARE_VERSION = 41 ''' ''' Get the amount of PCAN channels attached to a system ''' PCAN_ATTACHED_CHANNELS_COUNT = 42 ''' ''' Get information about PCAN channels attached to a system ''' PCAN_ATTACHED_CHANNELS = 43 ''' ''' Echo messages reception status within a PCAN-Channel ''' PCAN_ALLOW_ECHO_FRAMES = 44 ''' ''' Get the part number associated to a device ''' PCAN_DEVICE_PART_NUMBER = 45 End Enum ''' ''' Represents the type of a PCAN message ''' _ Public Enum TPCANMessageType As Byte ''' ''' The PCAN message is a CAN Standard Frame (11-bit identifier) ''' PCAN_MESSAGE_STANDARD = &H0 ''' ''' The PCAN message is a CAN Remote-Transfer-Request Frame ''' PCAN_MESSAGE_RTR = &H1 ''' ''' The PCAN message is a CAN Extended Frame (29-bit identifier) ''' PCAN_MESSAGE_EXTENDED = &H2 ''' ''' The PCAN message represents a FD frame in terms of CiA Specs ''' PCAN_MESSAGE_FD = &H4 ''' ''' The PCAN message represents a FD bit rate switch (CAN data at a higher bit rate) ''' PCAN_MESSAGE_BRS = &H8 ''' ''' The PCAN message represents a FD error state indicator(CAN FD transmitter was error active) ''' PCAN_MESSAGE_ESI = &H10 ''' ''' The PCAN message represents an echo CAN Frame ''' PCAN_MESSAGE_ECHO = &H20 ''' ''' The PCAN message represents an error frame ''' PCAN_MESSAGE_ERRFRAME = &H40 ''' ''' The PCAN message represents a PCAN status message ''' PCAN_MESSAGE_STATUS = &H80 End Enum ''' ''' Represents a PCAN filter mode ''' Public Enum TPCANMode As Byte ''' ''' Mode is Standard (11-bit identifier) ''' PCAN_MODE_STANDARD = TPCANMessageType.PCAN_MESSAGE_STANDARD ''' ''' Mode is Extended (29-bit identifier) ''' PCAN_MODE_EXTENDED = TPCANMessageType.PCAN_MESSAGE_EXTENDED End Enum ''' ''' Represents a PCAN Baud rate register value ''' Public Enum TPCANBaudrate As UInt16 ''' ''' 1 MBit/s ''' PCAN_BAUD_1M = &H14 ''' ''' 800 kBit/s ''' PCAN_BAUD_800K = &H16 ''' ''' 500 kBit/s ''' PCAN_BAUD_500K = &H1C ''' ''' 250 kBit/s ''' PCAN_BAUD_250K = &H11C ''' ''' 125 kBit/s ''' PCAN_BAUD_125K = &H31C ''' ''' 100 kBit/s ''' PCAN_BAUD_100K = &H432F ''' ''' 95,238 kBit/s ''' PCAN_BAUD_95K = &HC34E ''' ''' 83,333 kBit/s ''' PCAN_BAUD_83K = &H852B ''' ''' 50 kBit/s ''' PCAN_BAUD_50K = &H472F ''' ''' 47,619 kBit/s ''' PCAN_BAUD_47K = &H1414 ''' ''' 33,333 kBit/s ''' PCAN_BAUD_33K = &H8B2F ''' ''' 20 kBit/s ''' PCAN_BAUD_20K = &H532F ''' ''' 10 kBit/s ''' PCAN_BAUD_10K = &H672F ''' ''' 5 kBit/s ''' PCAN_BAUD_5K = &H7F7F End Enum ''' ''' Represents the type of PCAN (Non-PnP) hardware to be initialized ''' Public Enum TPCANType As Byte ''' ''' PCAN-ISA 82C200 ''' PCAN_TYPE_ISA = &H1 ''' ''' PCAN-ISA SJA1000 ''' PCAN_TYPE_ISA_SJA = &H9 ''' ''' PHYTEC ISA ''' PCAN_TYPE_ISA_PHYTEC = &H4 ''' ''' PCAN-Dongle 82C200 ''' PCAN_TYPE_DNG = &H2 ''' ''' PCAN-Dongle EPP 82C200 ''' PCAN_TYPE_DNG_EPP = &H3 ''' ''' PCAN-Dongle SJA1000 ''' PCAN_TYPE_DNG_SJA = &H5 ''' ''' PCAN-Dongle EPP SJA1000 ''' PCAN_TYPE_DNG_SJA_EPP = &H6 End Enum #End Region #Region "Structures" ''' ''' Represents a PCAN message ''' Public Structure TPCANMsg ''' ''' 11/29-bit message identifier ''' Public ID As UInt32 ''' ''' Type of the message ''' _ Public MSGTYPE As TPCANMessageType ''' ''' Data Length Code of the message (0..8) ''' Public LEN As Byte ''' ''' Data of the message (DATA[0]..DATA[7]) ''' _ Public DATA As Byte() End Structure ''' ''' Represents a timestamp of a received PCAN message. ''' Total Microseconds = micros + 1000 * millis + 0x100000000 * 1000 * millis_overflow ''' Public Structure TPCANTimestamp ''' ''' Base-value: milliseconds: 0.. 2^32-1 ''' Public millis As UInt32 ''' ''' Roll-arounds of millis ''' Public millis_overflow As UInt16 ''' ''' Microseconds: 0..999 ''' Public micros As UInt16 End Structure ''' ''' Represents a PCAN message from a FD capable hardware ''' Public Structure TPCANMsgFD ''' ''' 11/29-bit message identifier ''' Public ID As UInt32 ''' ''' Type of the message ''' Public MSGTYPE As TPCANMessageType ''' ''' Data Length Code of the message (0..15) ''' Public DLC As Byte ''' ''' Data of the message (DATA[0]..DATA[63]) ''' Public DATA As Byte() End Structure ''' ''' Describes an available PCAN channel ''' Public Structure TPCANChannelInformation ''' ''' PCAN channel handle ''' Public channel_handle As TPCANHandle ''' ''' Kind of PCAN device ''' Public device_type As TPCANDevice ''' ''' CAN-Controller number ''' Public controller_number As Byte ''' ''' Device capabilities flag (see FEATURE_*) ''' Public device_features As UInt32 ''' ''' Device name ''' Public device_name As String ''' ''' Device number ''' Public device_id As UInt32 ''' ''' Availability status of a PCAN-Channel ''' Public channel_condition As UInt32 End Structure #End Region #Region "PCANBasic class" ''' ''' PCAN-Basic API class implementation ''' Public NotInheritable Class PCANBasic #Region "PCAN-BUS Handles Definition" ''' ''' Undefined/default value for a PCAN bus ''' Public Const PCAN_NONEBUS As TPCANHandle = &H0 ''' ''' PCAN-ISA interface, channel 1 ''' Public Const PCAN_ISABUS1 As TPCANHandle = &H21 ''' ''' PCAN-ISA interface, channel 2 ''' Public Const PCAN_ISABUS2 As TPCANHandle = &H22 ''' ''' PCAN-ISA interface, channel 3 ''' Public Const PCAN_ISABUS3 As TPCANHandle = &H23 ''' ''' PCAN-ISA interface, channel 4 ''' Public Const PCAN_ISABUS4 As TPCANHandle = &H24 ''' ''' PCAN-ISA interface, channel 5 ''' Public Const PCAN_ISABUS5 As TPCANHandle = &H25 ''' ''' PCAN-ISA interface, channel 6 ''' Public Const PCAN_ISABUS6 As TPCANHandle = &H26 ''' ''' PCAN-ISA interface, channel 7 ''' Public Const PCAN_ISABUS7 As TPCANHandle = &H27 ''' ''' PCAN-ISA interface, channel 8 ''' Public Const PCAN_ISABUS8 As TPCANHandle = &H28 ''' ''' PPCAN-Dongle/LPT interface, channel 1 ''' Public Const PCAN_DNGBUS1 As TPCANHandle = &H31 ''' ''' PCAN-PCI interface, channel 1 ''' Public Const PCAN_PCIBUS1 As TPCANHandle = &H41 ''' ''' PCAN-PCI interface, channel 2 ''' Public Const PCAN_PCIBUS2 As TPCANHandle = &H42 ''' ''' PCAN-PCI interface, channel 3 ''' Public Const PCAN_PCIBUS3 As TPCANHandle = &H43 ''' ''' PCAN-PCI interface, channel 4 ''' Public Const PCAN_PCIBUS4 As TPCANHandle = &H44 ''' ''' PCAN-PCI interface, channel 5 ''' Public Const PCAN_PCIBUS5 As TPCANHandle = &H45 ''' ''' PCAN-PCI interface, channel 6 ''' Public Const PCAN_PCIBUS6 As TPCANHandle = &H46 ''' ''' PCAN-PCI interface, channel 7 ''' Public Const PCAN_PCIBUS7 As TPCANHandle = &H47 ''' ''' PCAN-PCI interface, channel 8 ''' Public Const PCAN_PCIBUS8 As TPCANHandle = &H48 ''' ''' PCAN-PCI interface, channel 9 ''' Public Const PCAN_PCIBUS9 As TPCANHandle = &H409 ''' ''' PCAN-PCI interface, channel 10 ''' Public Const PCAN_PCIBUS10 As TPCANHandle = &H40A ''' ''' PCAN-PCI interface, channel 11 ''' Public Const PCAN_PCIBUS11 As TPCANHandle = &H40B ''' ''' PCAN-PCI interface, channel 12 ''' Public Const PCAN_PCIBUS12 As TPCANHandle = &H40C ''' ''' PCAN-PCI interface, channel 13 ''' Public Const PCAN_PCIBUS13 As TPCANHandle = &H40D ''' ''' PCAN-PCI interface, channel 14 ''' Public Const PCAN_PCIBUS14 As TPCANHandle = &H40E ''' ''' PCAN-PCI interface, channel 15 ''' Public Const PCAN_PCIBUS15 As TPCANHandle = &H40F ''' ''' PCAN-PCI interface, channel 16 ''' Public Const PCAN_PCIBUS16 As TPCANHandle = &H410 ''' ''' PCAN-USB interface, channel 1 ''' Public Const PCAN_USBBUS1 As TPCANHandle = &H51 ''' ''' PCAN-USB interface, channel 2 ''' Public Const PCAN_USBBUS2 As TPCANHandle = &H52 ''' ''' PCAN-USB interface, channel 3 ''' Public Const PCAN_USBBUS3 As TPCANHandle = &H53 ''' ''' PCAN-USB interface, channel 4 ''' Public Const PCAN_USBBUS4 As TPCANHandle = &H54 ''' ''' PCAN-USB interface, channel 5 ''' Public Const PCAN_USBBUS5 As TPCANHandle = &H55 ''' ''' PCAN-USB interface, channel 6 ''' Public Const PCAN_USBBUS6 As TPCANHandle = &H56 ''' ''' PCAN-USB interface, channel 7 ''' Public Const PCAN_USBBUS7 As TPCANHandle = &H57 ''' ''' PCAN-USB interface, channel 8 ''' Public Const PCAN_USBBUS8 As TPCANHandle = &H58 ''' ''' PCAN-USB interface, channel 9 ''' Public Const PCAN_USBBUS9 As TPCANHandle = &H509 ''' ''' PCAN-USB interface, channel 10 ''' Public Const PCAN_USBBUS10 As TPCANHandle = &H50A ''' ''' PCAN-USB interface, channel 11 ''' Public Const PCAN_USBBUS11 As TPCANHandle = &H50B ''' ''' PCAN-USB interface, channel 12 ''' Public Const PCAN_USBBUS12 As TPCANHandle = &H50C ''' ''' PCAN-USB interface, channel 13 ''' Public Const PCAN_USBBUS13 As TPCANHandle = &H50D ''' ''' PCAN-USB interface, channel 14 ''' Public Const PCAN_USBBUS14 As TPCANHandle = &H50E ''' ''' PCAN-USB interface, channel 15 ''' Public Const PCAN_USBBUS15 As TPCANHandle = &H50F ''' ''' PCAN-USB interface, channel 16 ''' Public Const PCAN_USBBUS16 As TPCANHandle = &H510 ''' ''' PCAN-PC Card interface, channel 1 ''' Public Const PCAN_PCCBUS1 As TPCANHandle = &H61 ''' ''' PCAN-PC Card interface, channel 2 ''' Public Const PCAN_PCCBUS2 As TPCANHandle = &H62 ''' ''' PCAN-LAN interface, channel 1 ''' Public Const PCAN_LANBUS1 As TPCANHandle = &H801 ''' ''' PCAN-LAN interface, channel 2 ''' Public Const PCAN_LANBUS2 As TPCANHandle = &H802 ''' ''' PCAN-LAN interface, channel 3 ''' Public Const PCAN_LANBUS3 As TPCANHandle = &H803 ''' ''' PCAN-LAN interface, channel 4 ''' Public Const PCAN_LANBUS4 As TPCANHandle = &H804 ''' ''' PCAN-LAN interface, channel 5 ''' Public Const PCAN_LANBUS5 As TPCANHandle = &H805 ''' ''' PCAN-LAN interface, channel 6 ''' Public Const PCAN_LANBUS6 As TPCANHandle = &H806 ''' ''' PCAN-LAN interface, channel 7 ''' Public Const PCAN_LANBUS7 As TPCANHandle = &H807 ''' ''' PCAN-LAN interface, channel 8 ''' Public Const PCAN_LANBUS8 As TPCANHandle = &H808 ''' ''' PCAN-LAN interface, channel 9 ''' Public Const PCAN_LANBUS9 As TPCANHandle = &H809 ''' ''' PCAN-LAN interface, channel 10 ''' Public Const PCAN_LANBUS10 As TPCANHandle = &H80A ''' ''' PCAN-LAN interface, channel 11 ''' Public Const PCAN_LANBUS11 As TPCANHandle = &H80B ''' ''' PCAN-LAN interface, channel 12 ''' Public Const PCAN_LANBUS12 As TPCANHandle = &H80C ''' ''' PCAN-LAN interface, channel 13 ''' Public Const PCAN_LANBUS13 As TPCANHandle = &H80D ''' ''' PCAN-LAN interface, channel 14 ''' Public Const PCAN_LANBUS14 As TPCANHandle = &H80E ''' ''' PCAN-LAN interface, channel 15 ''' Public Const PCAN_LANBUS15 As TPCANHandle = &H80F ''' ''' PCAN-LAN interface, channel 16 ''' Public Const PCAN_LANBUS16 As TPCANHandle = &H810 #End Region #Region "FD Bit rate parameters" ''' ''' Clock frequency in Herz (80000000, 60000000, 40000000, 30000000, 24000000, 20000000) ''' Public Const PCAN_BR_CLOCK As String = "f_clock" ''' ''' Clock frequency in Megaherz (80, 60, 40, 30, 24, 20) ''' Public Const PCAN_BR_CLOCK_MHZ As String = "f_clock_mhz" ''' ''' Clock prescaler for nominal time quantum ''' Public Const PCAN_BR_NOM_BRP As String = "nom_brp" ''' ''' TSEG1 segment for nominal bit rate in time quanta ''' Public Const PCAN_BR_NOM_TSEG1 As String = "nom_tseg1" ''' ''' TSEG2 segment for nominal bit rate in time quanta ''' Public Const PCAN_BR_NOM_TSEG2 As String = "nom_tseg2" ''' ''' Synchronization Jump Width for nominal bit rate in time quanta ''' Public Const PCAN_BR_NOM_SJW As String = "nom_sjw" ''' ''' Sample point for nominal bit rate ''' Public Const PCAN_BR_NOM_SAMPLE As String = "nom_sam" ''' ''' Clock prescaler for highspeed data time quantum ''' Public Const PCAN_BR_DATA_BRP As String = "data_brp" ''' ''' TSEG1 segment for fast data bit rate in time quanta ''' Public Const PCAN_BR_DATA_TSEG1 As String = "data_tseg1" ''' ''' TSEG2 segment for fast data bit rate in time quanta ''' Public Const PCAN_BR_DATA_TSEG2 As String = "data_tseg2" ''' ''' Synchronization Jump Width for highspeed data bit rate in time quanta ''' Public Const PCAN_BR_DATA_SJW As String = "data_sjw" ''' ''' Secondary sample point delay for highspeed data bit rate in cyles ''' Public Const PCAN_BR_DATA_SAMPLE As String = "data_ssp_offset" #End Region #Region "Parameter values definition" ''' ''' The PCAN parameter is not set (inactive) ''' Public Const PCAN_PARAMETER_OFF As Integer = 0 ''' ''' The PCAN parameter is set (active) ''' Public Const PCAN_PARAMETER_ON As Integer = 1 ''' ''' The PCAN filter is closed. No messages will be received ''' Public Const PCAN_FILTER_CLOSE As Integer = 0 ''' ''' The PCAN filter is fully opened. All messages will be received ''' Public Const PCAN_FILTER_OPEN As Integer = 1 ''' ''' The PCAN filter is custom configured. Only registered ''' messages will be received ''' Public Const PCAN_FILTER_CUSTOM As Integer = 2 ''' ''' The PCAN-Channel handle is illegal, or its associated hardware is not available ''' Public Const PCAN_CHANNEL_UNAVAILABLE As Integer = 0 ''' ''' The PCAN-Channel handle is available to be connected (PnP Hardware: it means furthermore that the hardware is plugged-in) ''' Public Const PCAN_CHANNEL_AVAILABLE As Integer = 1 ''' ''' The PCAN-Channel handle is valid, and is already being used ''' Public Const PCAN_CHANNEL_OCCUPIED As Integer = 2 ''' ''' The PCAN-Channel handle is already being used by a PCAN-View application, but is available to connect ''' Public Const PCAN_CHANNEL_PCANVIEW As Integer = PCAN_CHANNEL_AVAILABLE Or PCAN_CHANNEL_OCCUPIED ''' ''' Logs system exceptions / errors ''' Public Const LOG_FUNCTION_DEFAULT As Integer = &H0 ''' ''' Logs the entries to the PCAN-Basic API functions ''' Public Const LOG_FUNCTION_ENTRY As Integer = &H1 ''' ''' Logs the parameters passed to the PCAN-Basic API functions ''' Public Const LOG_FUNCTION_PARAMETERS As Integer = &H2 ''' ''' Logs the exits from the PCAN-Basic API functions ''' Public Const LOG_FUNCTION_LEAVE As Integer = &H4 ''' ''' Logs the CAN messages passed to the CAN_Write function ''' Public Const LOG_FUNCTION_WRITE As Integer = &H8 ''' ''' Logs the CAN messages received within the CAN_Read function ''' Public Const LOG_FUNCTION_READ As Integer = &H10 ''' ''' Logs all possible information within the PCAN-Basic API functions ''' Public Const LOG_FUNCTION_ALL As Integer = &HFFFF ''' ''' A single file is written until it size reaches PAN_TRACE_SIZE ''' Public Const TRACE_FILE_SINGLE As Integer = &H0 ''' ''' Traced data is distributed in several files with size PAN_TRACE_SIZE ''' Public Const TRACE_FILE_SEGMENTED As Integer = &H1 ''' ''' Includes the date into the name of the trace file ''' Public Const TRACE_FILE_DATE As Integer = &H2 ''' ''' Includes the start time into the name of the trace file ''' Public Const TRACE_FILE_TIME As Integer = &H4 ''' ''' Causes the overwriting of available traces (same name) ''' Public Const TRACE_FILE_OVERWRITE As Integer = &H80 ''' ''' Device supports flexible data-rate (CAN-FD) ''' Public Const FEATURE_FD_CAPABLE As Integer = &H1 ''' ''' Device supports a delay between sending frames (FPGA based USB devices) ''' Public Const FEATURE_DELAY_CAPABLE As Integer = &H2 ''' ''' Device supports I/O functionality for electronic circuits (USB-Chip devices) ''' Public Const FEATURE_IO_CAPABLE As Integer = &H4 ''' ''' The service is not running ''' Public Const SERVICE_STATUS_STOPPED As Integer = &H1 ''' ''' The service is running ''' Public Const SERVICE_STATUS_RUNNING As Integer = &H4 #End Region #Region "Lookup Parameters" ''' ''' Lookup channel by Device type (see PCAN devices e.g. PCAN_USB) ''' Public Const LOOKUP_DEVICE_TYPE As String = "devicetype" ''' ''' Lookup channel by device id ''' Public Const LOOKUP_DEVICE_ID As String = "deviceid" ''' ''' Lookup channel by CAN controller 0-based index ''' Public Const LOOKUP_CONTROLLER_NUMBER As String = "controllernumber" ''' ''' Lookup channel by IP address (LAN channels only) ''' Public Const LOOKUP_IP_ADDRESS As String = "ipaddress" #End Region #Region "Other Constants" ''' ''' Maximum length of the name of a device: 32 characters + terminator ''' Public Const MAX_LENGTH_HARDWARE_NAME As Integer = 33 ''' ''' ' Maximum length of a version string: 255 characters + terminator ''' Public Const MAX_LENGTH_VERSION_STRING As Integer = 256 #End Region #Region "PCANBasic API Implementation" ''' ''' Initializes a PCAN Channel ''' ''' The handle of a PCAN Channel ''' The speed for the communication (BTR0BTR1 code) ''' Non-PnP: The type of hardware and operation mode ''' Non-PnP: The I/O address for the parallel port ''' Non-PnP: Interrupt number of the parallel por ''' A TPCANStatus error code _ Public Shared Function Initialize( _ _ ByVal Channel As TPCANHandle, _ _ ByVal Btr0Btr1 As TPCANBaudrate, _ _ ByVal HwType As TPCANType, _ ByVal IOPort As UInt32, _ ByVal Interrupt As UInt16) As TPCANStatus End Function ''' ''' Initializes a PCAN Channel ''' ''' The handle of a PCAN Channel ''' The speed for the communication (BTR0BTR1 code) ''' A TPCANStatus error code Public Shared Function Initialize( _ ByVal Channel As TPCANHandle, _ ByVal Btr0Btr1 As TPCANBaudrate) As TPCANStatus Return Initialize(Channel, Btr0Btr1, 0, 0, 0) End Function ''' ''' Initializes a FD capable PCAN Channel ''' ''' The handle of a FD capable PCAN Channel ''' The speed for the communication (FD bit rate string) ''' See PCAN_BR_* values ''' Bit rate string must follow the following construction rules: ''' * parameter and values must be separated by '=' ''' * Couples of Parameter/value must be separated by ',' ''' * Following Parameter must be filled out: f_clock, data_brp, data_sjw, data_tseg1, data_tseg2, ''' nom_brp, nom_sjw, nom_tseg1, nom_tseg2. ''' * Following Parameters are optional (not used yet): data_ssp_offset, nom_sam ''' f_clock=80000000,nom_brp=10,nom_tseg1=5,nom_tseg2=2,nom_sjw=1,data_brp=4,data_tseg1=7,data_tseg2=2,data_sjw=1 ''' A TPCANStatus error code _ Public Shared Function InitializeFD( _ _ ByVal Channel As TPCANHandle, _ ByVal BitrateFD As TPCANBitrateFD) As TPCANStatus End Function ''' ''' Uninitializes one or all PCAN Channels initialized by CAN_Initialize ''' ''' Giving the TPCANHandle value "PCAN_NONEBUS", ''' uninitialize all initialized channels ''' The handle of a PCAN Channel ''' A TPCANStatus error code _ Public Shared Function Uninitialize( _ _ ByVal Channel As TPCANHandle) As TPCANStatus End Function ''' ''' Resets the receive and transmit queues of the PCAN Channel ''' ''' A reset of the CAN controller is not performed ''' The handle of a PCAN Channel ''' A TPCANStatus error code _ Public Shared Function Reset( _ _ ByVal Channel As TPCANHandle) As TPCANStatus End Function ''' ''' Gets the current status of a PCAN Channel ''' ''' The handle of a PCAN Channel ''' A TPCANStatus error code _ Public Shared Function GetStatus( _ _ ByVal Channel As TPCANHandle) As TPCANStatus End Function ''' ''' Reads a CAN message from the receive queue of a PCAN Channel ''' ''' The handle of a PCAN Channel ''' A TPCANMsg structure buffer to store the CAN message ''' A TPCANTimestamp structure buffer to get ''' the reception time of the message ''' A TPCANStatus error code _ Public Shared Function Read( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsg, _ ByRef TimestampBuffer As TPCANTimestamp) As TPCANStatus End Function _ Private Shared Function Read( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsg, _ ByVal BufferPointer As IntPtr) As TPCANStatus End Function ''' ''' Reads a CAN message from the receive queue of a PCAN Channel ''' ''' The handle of a PCAN Channel ''' A TPCANMsg structure buffer to store the CAN message ''' A TPCANStatus error code Public Shared Function Read( _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsg) As TPCANStatus Return Read(Channel, MessageBuffer, IntPtr.Zero) End Function ''' ''' Reads a CAN message from the receive queue of a FD capable PCAN Channel ''' ''' The handle of a FD capable PCAN Channel ''' A TPCANMsgFD structure buffer to store the CAN message ''' A TPCANTimestampFD buffer to get the ''' reception time of the message ''' A TPCANStatus error code _ Public Shared Function ReadFD( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsgFD, _ ByRef TimestampBuffer As TPCANTimestampFD) As TPCANStatus End Function _ Private Shared Function ReadFD( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsgFD, _ ByVal TimestampBuffer As IntPtr) As TPCANStatus End Function ''' ''' Reads a CAN message from the receive queue of a FD capable PCAN Channel ''' ''' The handle of a FD capable PCAN Channel ''' A TPCANMsgFD structure buffer to store the CAN message ''' A TPCANStatus error code Public Shared Function ReadFD( _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsgFD) As TPCANStatus Return ReadFD(Channel, MessageBuffer, IntPtr.Zero) End Function ''' ''' Transmits a CAN message ''' ''' The handle of a PCAN Channel ''' A TPCANMsg buffer with the message to be sent ''' A TPCANStatus error code _ Public Shared Function Write( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsg) As TPCANStatus End Function ''' ''' Transmits a CAN message over a FD capable PCAN Channel ''' ''' The handle of a FD capable PCAN Channel ''' A TPCANMsgFD buffer with the message to be sent ''' A TPCANStatus error code _ Public Shared Function WriteFD( _ _ ByVal Channel As TPCANHandle, _ ByRef MessageBuffer As TPCANMsgFD) As TPCANStatus End Function ''' ''' Configures the reception filter ''' ''' The message filter will be expanded with every call to ''' this function. If it is desired to reset the filter, please use ''' the 'SetValue' function ''' The handle of a PCAN Channel ''' The lowest CAN ID to be received ''' The highest CAN ID to be received ''' Message type, Standard (11-bit identifier) or ''' Extended (29-bit identifier) ''' A TPCANStatus error code _ Public Shared Function FilterMessages( _ _ ByVal Channel As TPCANHandle, _ ByVal FromID As UInt32, _ ByVal ToID As UInt32, _ _ ByVal Mode As TPCANMode) As TPCANStatus End Function ''' ''' Retrieves a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to get ''' Buffer for the parameter value ''' Size in bytes of the buffer ''' A TPCANStatus error code _ Public Shared Function GetValue( _ _ ByVal Channel As TPCANHandle, _ _ ByVal Parameter As TPCANParameter, _ ByVal StringBuffer As StringBuilder, _ ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Retrieves a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to get ''' Buffer for the parameter value ''' Size in bytes of the buffer ''' A TPCANStatus error code Public Shared Function GetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, ByRef NumericBuffer As UInt32, ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Retrieves a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to get ''' Buffer for the parameter value ''' Size in bytes of the buffer ''' A TPCANStatus error code Public Shared Function GetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, ByRef NumericBuffer As UInt64, ByVal BufferLength As UInt32) As TPCANStatus End Function Private Shared Function GetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, <[In], Out> ByVal ChannelsBuffer() As TPCANChannelInformation, ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Retrieves a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to get ''' Buffer for the parameter value ''' A TPCANStatus error code Public Shared Function GetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, ByVal ChannelsBuffer() As TPCANChannelInformation) As TPCANStatus If (ChannelsBuffer Is Nothing) Then Return TPCANStatus.PCAN_ERROR_ILLPARAMVAL End If Return GetValue(Channel, Parameter, ChannelsBuffer, ChannelsBuffer.Length * Marshal.SizeOf(GetType(TPCANChannelInformation))) End Function ''' ''' Configures or sets a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to set ''' Buffer with the value to be set ''' Size in bytes of the buffer ''' A TPCANStatus error code Public Shared Function SetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, ByRef NumericBuffer As UInt32, ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Configures or sets a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' The TPCANParameter parameter to set ''' Buffer with the value to be set ''' Size in bytes of the buffer ''' A TPCANStatus error code Public Shared Function SetValue( ByVal Channel As TPCANHandle, ByVal Parameter As TPCANParameter, ByRef NumericBuffer As UInt64, ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Configures or sets a PCAN Channel value ''' ''' Parameters can be present or not according with the kind ''' of Hardware (PCAN Channel) being used. If a parameter is not available, ''' a PCAN_ERROR_ILLPARAMTYPE error will be returned ''' The handle of a PCAN Channel ''' ''' Buffer with the value to be set ''' Size in bytes of the buffer ''' A TPCANStatus error code _ Public Shared Function SetValue( _ _ ByVal Channel As TPCANHandle, _ _ ByVal Parameter As TPCANParameter, _ _ ByVal StringBuffer As String, _ ByVal BufferLength As UInt32) As TPCANStatus End Function ''' ''' Returns a descriptive text of a given TPCANStatus error ''' code, in any desired language ''' ''' The current languages available for translation are: ''' Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A), ''' Italian (0x10) and French (0x0C) ''' A TPCANStatus error code ''' Indicates a 'Primary language ID' ''' Buffer for the text (must be at least 256 in length) ''' A TPCANStatus error code Public Shared Function GetErrorText( ByVal anError As TPCANStatus, ByVal Language As UInt16, ByVal StringBuffer As StringBuilder) As TPCANStatus End Function ''' ''' Finds a PCAN-Basic channel that matches with the given parameters ''' ''' A comma separated string contained pairs of ''' parameter-name/value to be matched within a PCAN-Basic channel ''' Buffer for returning the PCAN-Basic channel, ''' when found ''' A TPCANStatus error code Public Shared Function LookUpChannel( ByVal Parameters As String, ByRef FoundChannel As TPCANHandle) As TPCANStatus End Function #End Region End Class #End Region End Namespace