A Python library for sending and receiving CAN messages via the PEAK PCan adapter.
Initial commit.
This commit is contained in:
commit
b4631bbd9a
18 changed files with 4997 additions and 0 deletions
99
CANLibrary/CanMessage.py
Normal file
99
CANLibrary/CanMessage.py
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
|
||||
'''
|
||||
Created on 06.07.2012
|
||||
|
||||
@author: Christian Sültrop
|
||||
'''
|
||||
|
||||
#import CanSignal
|
||||
import array
|
||||
import sys
|
||||
|
||||
class CanMessage(object):
|
||||
|
||||
'''
|
||||
A CAN message.
|
||||
A CAN message has an ID, a Length in bytes, an array of signals, and Data.
|
||||
'''
|
||||
|
||||
# Class variables
|
||||
|
||||
|
||||
def __init__(self, MessageId, MessageLength, MessageCycleTime, Label):
|
||||
'''
|
||||
Create a new CanMessage object.
|
||||
@param MessageId: The CAN ID. Valid range 0x00 to 0x7ff.
|
||||
@param MessageLength: The message length in bytes.
|
||||
@param messageCycleTime: Cycle time in ms.
|
||||
'''
|
||||
|
||||
# Instance variables
|
||||
self.Signals = {}
|
||||
self.Data = array.array('B')
|
||||
|
||||
# check message length for validity
|
||||
if MessageLength > 8:
|
||||
sys.exit('Invalid message MessageLength')
|
||||
|
||||
# check message ID for validity
|
||||
if (MessageId < 0x000) or (MessageId > 0x7ff):
|
||||
sys.exit('Invalid MessageId')
|
||||
|
||||
# assign the parameters
|
||||
self.Length = MessageLength
|
||||
self.Id = MessageId
|
||||
self.CycleTime = MessageCycleTime
|
||||
self.Label = Label
|
||||
|
||||
# create an initial array of message data
|
||||
for i in range(0, self.Length):
|
||||
self.Data.append(0x00)
|
||||
|
||||
|
||||
def addSignal(self, CanSignal):
|
||||
'''
|
||||
Add a Signal of type CanSignal to the list of signals.
|
||||
@param CanSignal: The signal to add to the list of signals.
|
||||
'''
|
||||
|
||||
self.Signals.update({CanSignal.Label: CanSignal})
|
||||
|
||||
def composeData(self):
|
||||
'''
|
||||
Takes the CanSignals from the list in self.Signals and copies the data that is stored in their Data fields into the Data field
|
||||
of the CanMessage object. The position where to copy the data is defined in the Begin and Length fields of the CanSignal objects.
|
||||
'''
|
||||
|
||||
for symKey in self.Signals:
|
||||
sym = self.Signals[symKey]
|
||||
srcBegin = 0 # reading the source data (from the Signal definition) always starts at the first bit
|
||||
tgtBegin = sym.Begin # where the source data goes is defined in the Begin field of the CanSignal object
|
||||
|
||||
srcByteNo = (srcBegin/8) # will be 0 if srcBegin == 0
|
||||
srcBitNo = (srcBegin%8) # will be 0 if srcBegin == 0
|
||||
|
||||
tgtByteNo = (tgtBegin/8) # get the byte and bit numbers
|
||||
tgtBitNo = (tgtBegin%8) # for the target (the CanMessage object) array
|
||||
|
||||
for i in range(0, sym.Length):
|
||||
# copy the source data bits to the target
|
||||
# OR # get srcBitNo from srcByteNo and shift it to tgtBitNo
|
||||
if tgtByteNo >= self.Length:
|
||||
sys.exit('Signal does not fit into message!')
|
||||
|
||||
self.Data[tgtByteNo] |= ((sym.Data[srcByteNo] >> srcBitNo) & 0x01) << tgtBitNo
|
||||
|
||||
# increment the counters
|
||||
srcBitNo += 1
|
||||
if srcBitNo >= 8: # on bit counter overflow, increment the byte counter
|
||||
srcBitNo = 0
|
||||
srcByteNo += 1
|
||||
|
||||
tgtBitNo += 1
|
||||
if tgtBitNo >= 8:
|
||||
tgtBitNo = 0
|
||||
tgtByteNo += 1
|
||||
|
||||
|
||||
|
||||
BIN
CANLibrary/CanMessage.pyc
Normal file
BIN
CANLibrary/CanMessage.pyc
Normal file
Binary file not shown.
44
CANLibrary/CanSignal.py
Normal file
44
CANLibrary/CanSignal.py
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
'''
|
||||
Created on 06.07.2012
|
||||
|
||||
@author: sueltrop
|
||||
'''
|
||||
|
||||
import sys
|
||||
import array
|
||||
|
||||
|
||||
class CanSignal(object):
|
||||
'''
|
||||
A CAN Signal.
|
||||
A Signal has a Begin, a Length and Data. The Label is a textual tag that identifies the Signal to
|
||||
a human.
|
||||
'''
|
||||
Begin = 0;
|
||||
Length = 0;
|
||||
Data = [];
|
||||
Label = ''
|
||||
|
||||
def __init__(self, SignalBegin, SignalLength, SignalData, SignalLabel):
|
||||
'''
|
||||
Constructor.
|
||||
@param SignalBegin: At which bit does the Signal begin in a CAN message?
|
||||
@param SignalLength: The length of the Signal data in bits.
|
||||
@param Label: A text label that describes the Signal.
|
||||
'''
|
||||
self.Begin = SignalBegin
|
||||
self.Length = SignalLength
|
||||
self.Label = SignalLabel
|
||||
|
||||
self.Data = SignalData
|
||||
|
||||
|
||||
def SetData(self, Data):
|
||||
'''
|
||||
Updated the data of the Signal.
|
||||
The data is given to the Signal as full bytes, but only the bits up to Length may be used!
|
||||
@param Data: An array of unsigned characters containing the data.
|
||||
'''
|
||||
#if not (len(Data) == self.Length):
|
||||
# sys.exit('Data has invalid length')
|
||||
self.Data = Data
|
||||
BIN
CANLibrary/CanSignal.pyc
Normal file
BIN
CANLibrary/CanSignal.pyc
Normal file
Binary file not shown.
65
CANLibrary/PCan.py
Normal file
65
CANLibrary/PCan.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
|
||||
'''
|
||||
Created on 06.07.2012
|
||||
|
||||
@author: Christan Sültrop
|
||||
'''
|
||||
|
||||
import PCANBasic
|
||||
import sys
|
||||
from PCANBasic import PCAN_BAUD_1M, PCAN_BAUD_125K
|
||||
|
||||
|
||||
class PcanAdapter (object):
|
||||
'''
|
||||
A class for controlling a PEAK PCan adapter. Based on the PCANBasic library.
|
||||
'''
|
||||
Baudrate = { '125k' : PCANBasic.PCAN_BAUD_125K,
|
||||
'500k' : PCANBasic.PCAN_BAUD_500K,
|
||||
'1000k' : PCANBasic.PCAN_BAUD_1M }
|
||||
|
||||
|
||||
def __init__(self, Baudrate):
|
||||
self.Channel = PCANBasic.PCAN_USBBUS1
|
||||
self.Pcan = PCANBasic.PCANBasic()
|
||||
self.Baudrate = Baudrate # Baudrate from PCANBasic
|
||||
self.isInitialised = False
|
||||
|
||||
def __del__(self):
|
||||
print '\nDestructor:'
|
||||
self.uninitialize()
|
||||
|
||||
def initialize(self):
|
||||
self.Pcan.Uninitialize(PCANBasic.PCAN_NONEBUS)
|
||||
status = self.Pcan.Initialize(self.Channel, self.Baudrate)
|
||||
if status != PCANBasic.PCAN_ERROR_OK:
|
||||
print 'Error: ', self.Pcan.GetErrorText(status, 0)[1]
|
||||
sys.exit("PCAN initialization error")
|
||||
|
||||
print("PCAN initialized")
|
||||
self.isInitialised = True
|
||||
|
||||
channel, hwId = self.Pcan.GetValue( self.Channel, PCANBasic.PCAN_DEVICE_NUMBER )
|
||||
print 'DeviceNumber: ', hwId
|
||||
|
||||
def uninitialize(self):
|
||||
if self.isInitialised:
|
||||
status = self.Pcan.Uninitialize(self.Channel)
|
||||
if status != PCANBasic.PCAN_ERROR_OK:
|
||||
print 'Error: ', self.Pcan.GetErrorText(status, 0)[1]
|
||||
sys.exit("PCAN deinitialization error")
|
||||
|
||||
print("PCAN deinitialized")
|
||||
|
||||
def sendMessage(self, Message):
|
||||
Message.composeData()
|
||||
|
||||
msg = PCANBasic.TPCANMsg()
|
||||
msg.ID = Message.Id
|
||||
msg.MSGTYPE = PCANBasic.PCAN_MESSAGE_STANDARD
|
||||
msg.LEN = Message.Length
|
||||
msg.DATA[0:len(Message.Data)] = Message.Data
|
||||
|
||||
self.Pcan.Write(self.Channel, msg)
|
||||
#print ('Message ' + Message.Label + ' written.\n')
|
||||
BIN
CANLibrary/PCan.pyc
Normal file
BIN
CANLibrary/PCan.pyc
Normal file
Binary file not shown.
0
CANLibrary/__init__.py
Normal file
0
CANLibrary/__init__.py
Normal file
BIN
CANLibrary/__init__.pyc
Normal file
BIN
CANLibrary/__init__.pyc
Normal file
Binary file not shown.
65
CANLibrary/example.py
Normal file
65
CANLibrary/example.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
|
||||
'''
|
||||
Example for creating and sending CAN messages via PCAN using the CanMessage, CanSymbol and PCan classes.
|
||||
|
||||
@author: Christian Sültrop
|
||||
'''
|
||||
|
||||
from CanMessage import CanMessage
|
||||
from CanSymbol import CanSymbol
|
||||
from PCan import PcanAdapter
|
||||
|
||||
|
||||
print '\ncreate some messages'
|
||||
mMotor_1 = CanMessage(0x280, 8, 10)
|
||||
print 'mMotor_1.Data', mMotor_1.Data
|
||||
|
||||
mMotor_2 = CanMessage(0x288, 8, 20)
|
||||
print 'mMotor_2.Data', mMotor_2.Data
|
||||
|
||||
print '\ncreate some symbols'
|
||||
# for mMotor_1
|
||||
MO1_Leergas = CanSymbol(0, 1, [0x01], 'MO1_Leergas')
|
||||
MO1_Sta_Pedal = CanSymbol(1, 1, [0x01], 'MO1_Sta_Pedal')
|
||||
MO1_Mo_m_ex = CanSymbol(8, 8, [0x00], 'MO1_Mo_m_ex')
|
||||
|
||||
value = int(3000*0.25)
|
||||
MO1_Drehzahl = CanSymbol(16, 16, [value>>8, value&0x00ff], 'MO1_Drehzahl') # split into two bytes
|
||||
|
||||
mMotor_1.addSymbol(MO1_Leergas)
|
||||
mMotor_1.addSymbol(MO1_Sta_Pedal)
|
||||
mMotor_1.addSymbol(MO1_Mo_m_ex)
|
||||
mMotor_1.addSymbol(MO1_Drehzahl)
|
||||
print MO1_Drehzahl.Data
|
||||
|
||||
# for mMotor_2
|
||||
MO2_Kuehlm_T = CanSymbol(8, 8, [int(60*0.75)-48], 'MO2_Kuehlm_T')
|
||||
mMotor_2.addSymbol( MO2_Kuehlm_T )
|
||||
mMotor_2.addSymbol( CanSymbol(24, 8, [0], 'MO2_GRA_Soll') )
|
||||
mMotor_2.addSymbol( CanSymbol(0, 6, [44], 'MO2_CAN_Vers') )
|
||||
|
||||
print '\nManipulate Symbols'
|
||||
# does not work yet! need a way to replace a symbol -> dictionary
|
||||
MO1_Leergas.SetData( [0x00] )
|
||||
mMotor_1.addSymbol( MO1_Leergas )
|
||||
|
||||
print '\nCreate a PCAN adapter'
|
||||
pcan = PcanAdapter(PcanAdapter.Baudrate['500k'])
|
||||
pcan.initialize()
|
||||
|
||||
print '\nSend the messages'
|
||||
mMotor_1.composeData()
|
||||
pcan.sendMessage(mMotor_1)
|
||||
|
||||
mMotor_2.composeData()
|
||||
pcan.sendMessage(mMotor_2)
|
||||
|
||||
|
||||
print 'end of program'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
335
PCANBasic/PCANBasic.bas
Normal file
335
PCANBasic/PCANBasic.bas
Normal file
|
|
@ -0,0 +1,335 @@
|
|||
Attribute VB_Name = "PCANBasic"
|
||||
' PCANBasic.bas
|
||||
'
|
||||
' ~~~~~~~~~~~~
|
||||
'
|
||||
' PCAN-Basic API
|
||||
'
|
||||
' ~~~~~~~~~~~~
|
||||
'
|
||||
' ------------------------------------------------------------------
|
||||
' Author : Keneth Wagner
|
||||
' Last change: 08.11.2011 Wagner
|
||||
'
|
||||
' Language: Visual Basic 6.0
|
||||
' ------------------------------------------------------------------
|
||||
'
|
||||
' Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
' more Info at http://www.peak-system.com
|
||||
'
|
||||
|
||||
'///////////////////////////////////////////////////////////
|
||||
'/ Value definitions
|
||||
'///////////////////////////////////////////////////////////
|
||||
|
||||
' Currently defined and supported PCAN channels
|
||||
'
|
||||
Public Const PCAN_NONEBUS As Byte = &H0 ' Undefined/default value for a PCAN bus
|
||||
|
||||
Public Const PCAN_ISABUS1 As Byte = &H21 ' PCAN-ISA interface, channel 1
|
||||
Public Const PCAN_ISABUS2 As Byte = &H22 ' PCAN-ISA interface, channel 2
|
||||
Public Const PCAN_ISABUS3 As Byte = &H23 ' PCAN-ISA interface, channel 3
|
||||
Public Const PCAN_ISABUS4 As Byte = &H24 ' PCAN-ISA interface, channel 4
|
||||
Public Const PCAN_ISABUS5 As Byte = &H25 ' PCAN-ISA interface, channel 5
|
||||
Public Const PCAN_ISABUS6 As Byte = &H26 ' PCAN-ISA interface, channel 6
|
||||
Public Const PCAN_ISABUS7 As Byte = &H27 ' PCAN-ISA interface, channel 7
|
||||
Public Const PCAN_ISABUS8 As Byte = &H28 ' PCAN-ISA interface, channel 8
|
||||
|
||||
Public Const PCAN_DNGBUS1 As Byte = &H31 ' PCAN-Dongle/LPT interface, channel 1
|
||||
|
||||
Public Const PCAN_PCIBUS1 As Byte = &H41 ' PCAN-PCI interface, channel 1
|
||||
Public Const PCAN_PCIBUS2 As Byte = &H42 ' PCAN-PCI interface, channel 2
|
||||
Public Const PCAN_PCIBUS3 As Byte = &H43 ' PCAN-PCI interface, channel 3
|
||||
Public Const PCAN_PCIBUS4 As Byte = &H44 ' PCAN-PCI interface, channel 4
|
||||
Public Const PCAN_PCIBUS5 As Byte = &H45 ' PCAN-PCI interface, channel 5
|
||||
Public Const PCAN_PCIBUS6 As Byte = &H46 ' PCAN-PCI interface, channel 6
|
||||
Public Const PCAN_PCIBUS7 As Byte = &H47 ' PCAN-PCI interface, channel 7
|
||||
Public Const PCAN_PCIBUS8 As Byte = &H48 ' PCAN-PCI interface, channel 8
|
||||
|
||||
Public Const PCAN_USBBUS1 As Byte = &H51 ' PCAN-USB interface, channel 1
|
||||
Public Const PCAN_USBBUS2 As Byte = &H52 ' PCAN-USB interface, channel 2
|
||||
Public Const PCAN_USBBUS3 As Byte = &H53 ' PCAN-USB interface, channel 3
|
||||
Public Const PCAN_USBBUS4 As Byte = &H54 ' PCAN-USB interface, channel 4
|
||||
Public Const PCAN_USBBUS5 As Byte = &H55 ' PCAN-USB interface, channel 5
|
||||
Public Const PCAN_USBBUS6 As Byte = &H56 ' PCAN-USB interface, channel 6
|
||||
Public Const PCAN_USBBUS7 As Byte = &H57 ' PCAN-USB interface, channel 7
|
||||
Public Const PCAN_USBBUS8 As Byte = &H58 ' PCAN-USB interface, channel 8
|
||||
|
||||
Public Const PCAN_PCCBUS1 As Byte = &H61 ' PCAN-PC Card interface, channel 1
|
||||
Public Const PCAN_PCCBUS2 As Byte = &H62 ' PCAN-PC Card interface, channel 2
|
||||
|
||||
' Represent the PCAN error and status codes
|
||||
'
|
||||
Public Const PCAN_ERROR_OK As Long = &H0 ' No error
|
||||
Public Const PCAN_ERROR_XMTFULL As Long = &H1 ' Transmit buffer in CAN controller is full
|
||||
Public Const PCAN_ERROR_OVERRUN As Long = &H2 ' CAN controller was read too late
|
||||
Public Const PCAN_ERROR_BUSLIGHT As Long = &H4 ' Bus error: an error counter reached the 'light' limit
|
||||
Public Const PCAN_ERROR_BUSHEAVY As Long = &H8 ' Bus error: an error counter reached the 'heavy' limit
|
||||
Public Const PCAN_ERROR_BUSOFF As Long = &H10 ' Bus error: the CAN controller is in bus-off state
|
||||
Public Const PCAN_ERROR_ANYBUSERR = (PCAN_ERROR_BUSLIGHT Or PCAN_ERROR_BUSHEAVY Or PCAN_ERROR_BUSOFF) ' Mask for all bus errors
|
||||
Public Const PCAN_ERROR_QRCVEMPTY As Long = &H20 ' Receive queue is empty
|
||||
Public Const PCAN_ERROR_QOVERRUN As Long = &H40 ' Receive queue was read too late
|
||||
Public Const PCAN_ERROR_QXMTFULL As Long = &H80 ' Transmit queue is full
|
||||
Public Const PCAN_ERROR_REGTEST As Long = &H100 ' Test of the CAN controller hardware registers failed (no hardware found)
|
||||
Public Const PCAN_ERROR_NODRIVER As Long = &H200 ' Driver not loaded
|
||||
Public Const PCAN_ERROR_HWINUSE As Long = &H400 ' Hardware already in use by a Net
|
||||
Public Const PCAN_ERROR_NETINUSE As Long = &H800 ' A Client is already connected to the Net
|
||||
Public Const PCAN_ERROR_ILLHW As Long = &H1400 ' Hardware handle is invalid
|
||||
Public Const PCAN_ERROR_ILLNET As Long = &H1800 ' Net handle is invalid
|
||||
Public Const PCAN_ERROR_ILLCLIENT As Long = &H1C00 ' Client handle is invalid
|
||||
Public Const PCAN_ERROR_ILLHANDLE = (PCAN_ERROR_ILLHW Or PCAN_ERROR_ILLNET Or PCAN_ERROR_ILLCLIENT) ' Mask for all handle errors
|
||||
Public Const PCAN_ERROR_RESOURCE As Long = &H2000 ' Resource (FIFO, Client, timeout) cannot be created
|
||||
Public Const PCAN_ERROR_ILLPARAMTYPE As Long = &H4000 ' Invalid parameter
|
||||
Public Const PCAN_ERROR_ILLPARAMVAL As Long = &H8000 ' Invalid parameter value
|
||||
Public Const PCAN_ERROR_UNKNOWN As Long = &H10000 ' Unknow error
|
||||
Public Const PCAN_ERROR_ILLDATA As Long = &H20000 ' Invalid data, function, or action
|
||||
Public Const PCAN_ERROR_INITIALIZE As Long = &H40000 ' Channel is not initialized
|
||||
|
||||
' PCAN devices
|
||||
'
|
||||
Public Const PCAN_NONE = &H0 ' Undefined, unknown or not selected PCAN device value
|
||||
Public Const PCAN_PEAKCAN = &H1 ' PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
Public Const PCAN_ISA = &H2 ' PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
Public Const PCAN_DNG = &H3 ' PCAN-Dongle
|
||||
Public Const PCAN_PCI = &H4 ' PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
Public Const PCAN_USB = &H5 ' PCAN-USB and PCAN-USB Pro
|
||||
Public Const PCAN_PCC = &H6 ' PCAN-PC Card
|
||||
|
||||
' PCAN parameters
|
||||
'
|
||||
Public Const PCAN_DEVICE_NUMBER = &H1 ' PCAN-USB device number parameter
|
||||
Public Const PCAN_5VOLTS_POWER = &H2 ' PCAN-PC Card 5-Volt power parameter
|
||||
Public Const PCAN_RECEIVE_EVENT = &H3 ' PCAN receive event handler parameter
|
||||
Public Const PCAN_MESSAGE_FILTER = &H4 ' PCAN message filter parameter
|
||||
Public Const PCAN_API_VERSION = &H5 ' PCAN-Basic API version parameter
|
||||
Public Const PCAN_CHANNEL_VERSION = &H6 ' PCAN device channel version parameter
|
||||
Public Const PCAN_BUSOFF_AUTORESET = &H7 ' PCAN Reset-On-Busoff parameter
|
||||
Public Const PCAN_LISTEN_ONLY = &H8 ' PCAN Listen-Only parameter
|
||||
Public Const PCAN_LOG_LOCATION = &H9 ' Directory path for trace files
|
||||
Public Const PCAN_LOG_STATUS = &HA ' Debug-Trace activation status
|
||||
Public Const PCAN_LOG_CONFIGURE = &HB ' Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
Public Const PCAN_LOG_TEXT = &HC ' Custom insertion of text into the log file
|
||||
Public Const PCAN_CHANNEL_CONDITION = &HD ' Availability status of a PCAN-Channel
|
||||
Public Const PCAN_HARDWARE_NAME = &HE ' PCAN hardware name parameter
|
||||
Public Const PCAN_RECEIVE_STATUS = &HF ' Message reception status of a PCAN-Channel
|
||||
Public Const PCAN_CONTROLLER_NUMBER = &H10 ' CAN-Controller number of a PCAN-Channel
|
||||
|
||||
' PCAN parameter values
|
||||
'
|
||||
Public Const PCAN_PARAMETER_OFF = &H0 ' The PCAN parameter is not set (inactive)
|
||||
Public Const PCAN_PARAMETER_ON = &H1 ' The PCAN parameter is set (active)
|
||||
Public Const PCAN_FILTER_CLOSE = &H0 ' The PCAN filter is closed. No messages will be received
|
||||
Public Const PCAN_FILTER_OPEN = &H1 ' The PCAN filter is fully opened. All messages will be received
|
||||
Public Const PCAN_FILTER_CUSTOM = &H2 ' The PCAN filter is custom configured. Only registered messages will be received
|
||||
Public Const PCAN_CHANNEL_UNAVAILABLE = &H0 ' The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
Public Const PCAN_CHANNEL_AVAILABLE = &H1 ' The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
Public Const PCAN_CHANNEL_OCCUPIED = &H2 ' The PCAN-Channel handle is valid, and is already being used
|
||||
|
||||
Public Const LOG_FUNCTION_DEFAULT = &H0 ' Logs system exceptions / errors
|
||||
Public Const LOG_FUNCTION_ENTRY = &H1 ' Logs the entries to the PCAN-Basic API functions
|
||||
Public Const LOG_FUNCTION_PARAMETERS = &H2 ' Logs the parameters passed to the PCAN-Basic API functions
|
||||
Public Const LOG_FUNCTION_LEAVE = &H4 ' Logs the exits from the PCAN-Basic API functions
|
||||
Public Const LOG_FUNCTION_WRITE = &H8 ' Logs the CAN messages passed to the CAN_Write function
|
||||
Public Const LOG_FUNCTION_READ = &H10 ' Logs the CAN messages received within the CAN_Read function
|
||||
Public Const LOG_FUNCTION_ALL = &HFFFF ' Logs all possible information within the PCAN-Basic API functions
|
||||
|
||||
' PCAN message types
|
||||
'
|
||||
Public Const PCAN_MESSAGE_STANDARD = &H0 ' The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
Public Const PCAN_MESSAGE_RTR = &H1 ' The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
Public Const PCAN_MESSAGE_EXTENDED = &H2 ' The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
Public Const PCAN_MESSAGE_STATUS = &H80 ' The PCAN message represents a PCAN status message
|
||||
|
||||
' Frame Type / Initialization Mode
|
||||
'
|
||||
Public Const PCAN_MODE_STANDARD = PCAN_MESSAGE_STANDARD
|
||||
Public Const PCAN_MODE_EXTENDED = PCAN_MESSAGE_EXTENDED
|
||||
|
||||
' Baud rate codes = BTR0/BTR1 register values for the CAN controller.
|
||||
' You can define your own Baud rate with the BTROBTR1 register.
|
||||
' Take a look at www.peak-system.com for our free software "BAUDTOOL"
|
||||
' to calculate the BTROBTR1 register for every baudrate and sample point.
|
||||
'
|
||||
Public Const PCAN_BAUD_1M = &H14 ' 1 MBit/s
|
||||
Public Const PCAN_BAUD_800K = &H16 ' 800 kBit/s
|
||||
Public Const PCAN_BAUD_500K = &H1C ' 500 kBit/s
|
||||
Public Const PCAN_BAUD_250K = &H11C ' 250 kBit/s
|
||||
Public Const PCAN_BAUD_125K = &H31C ' 125 kBit/s
|
||||
Public Const PCAN_BAUD_100K = &H432F ' 100 kBit/s
|
||||
Public Const PCAN_BAUD_95K = &HC34E ' 95,238 kBit/s
|
||||
Public Const PCAN_BAUD_83K = &H4B14 ' 83,333 kBit/s
|
||||
Public Const PCAN_BAUD_50K = &H472F ' 50 kBit/s
|
||||
Public Const PCAN_BAUD_47K = &H1414 ' 47,619 kBit/s
|
||||
Public Const PCAN_BAUD_33K = &H1D14 ' 33,333 kBit/s
|
||||
Public Const PCAN_BAUD_20K = &H532F ' 20 kBit/s
|
||||
Public Const PCAN_BAUD_10K = &H672F ' 10 kBit/s
|
||||
Public Const PCAN_BAUD_5K = &H7F7F ' 5 kBit/s
|
||||
|
||||
Public Const PCAN_TYPE_ISA = &H1 ' PCAN-ISA 82C200
|
||||
Public Const PCAN_TYPE_ISA_SJA = &H9 ' PCAN-ISA SJA1000
|
||||
Public Const PCAN_TYPE_ISA_PHYTEC = &H4 ' PHYTEC ISA
|
||||
Public Const PCAN_TYPE_DNG = &H2 ' PCAN-Dongle 82C200
|
||||
Public Const PCAN_TYPE_DNG_EPP = &H3 ' PCAN-Dongle EPP 82C200
|
||||
Public Const PCAN_TYPE_DNG_SJA = &H5 ' PCAN-Dongle SJA1000
|
||||
Public Const PCAN_TYPE_DNG_SJA_EPP = &H6 ' PCAN-Dongle EPP SJA1000
|
||||
|
||||
' CAN message
|
||||
Public Type TPCANMsg
|
||||
ID As Long ' 11/29-bit message identifier
|
||||
MsgType As Byte ' Type of the message
|
||||
LEN As Byte ' Data Length Code of the message (0..8)
|
||||
DATA(7) As Byte ' Data of the message (DATA[0]..DATA[7])
|
||||
End Type
|
||||
|
||||
Public Type TPCANTimestamp
|
||||
millis As Long ' base-value: milliseconds: 0.. 2^32-1
|
||||
millis_overflow As Integer ' roll-arounds of millis
|
||||
micros As Integer ' microseconds: 0..999
|
||||
End Type
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Initializes a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="Btr0Btr1">"The speed for the communication (BTR0BTR1 code)"</param>
|
||||
''' <param name="HwType">"NON PLUG&PLAY: The type of hardware and operation mode"</param>
|
||||
''' <param name="IOPort">"NON PLUG&PLAY: The I/O address for the parallel port"</param>
|
||||
''' <param name="Interupt">"NON PLUG&PLAY: Interrupt number of the parallel port"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_Initialize Lib "PCANBasic.DLL" _
|
||||
(ByVal channel As Byte, _
|
||||
ByVal Btr0Btr1 As Integer, _
|
||||
Optional ByVal HwType As Byte = 0, _
|
||||
Optional ByVal IOPort As Long = 0, _
|
||||
Optional ByVal Interrupt As Integer = 0) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
''' </summary>
|
||||
''' <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
''' uninitialize all initialized channels</remarks>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_Uninitialize Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Resets the receive and transmit queues of the PCAN Channel
|
||||
''' </summary>
|
||||
''' <remarks>
|
||||
''' A reset of the CAN controller is not performed.
|
||||
''' </remarks>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_Reset Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Gets the current status of a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_GetStatus Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Reads a CAN message from the receive queue of a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="MessageBuffer">"A TPCANMsg structure buffer to store the CAN message"</param>
|
||||
''' <param name="TimestampBuffer">"A TPCANTimestamp structure buffer to get
|
||||
''' the reception time of the message. If this value is not desired, this parameter
|
||||
''' should be passed as NULL"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_Read Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte, _
|
||||
ByRef MessageBuffer As TPCANMsg, _
|
||||
ByRef TimestampBuffer As TPCANTimestamp) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Transmits a CAN message
|
||||
''' </summary>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="MessageBuffer">"A TPCANMsg buffer with the message to be sent"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_Write Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte, _
|
||||
ByRef MessageBuffer As TPCANMsg) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Configures the reception filter.
|
||||
''' </summary>
|
||||
''' <remarks>The message filter will be expanded with every call to
|
||||
''' this function. If it is desired to reset the filter, please use
|
||||
''' the CAN_SetValue function</remarks>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="FromID">"The lowest CAN ID to be received"</param>
|
||||
''' <param name="ToID">"The highest CAN ID to be received"</param>
|
||||
''' <param name="Mode">"Message type, Standard (11-bit identifier) or
|
||||
''' Extended (29-bit identifier)"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_FilterMessages Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte, _
|
||||
ByVal FromID As Long, _
|
||||
ByVal ToID As Long, _
|
||||
ByVal Mode As Byte) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Retrieves a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="Parameter">"The TPCANParameter parameter to get"</param>
|
||||
''' <param name="Buffer">"Buffer for the parameter value"</param>
|
||||
''' <param name="BufferLength">"Size in bytes of the buffer"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_GetValue Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte, _
|
||||
ByVal Parameter As Byte, _
|
||||
ByRef Buffer As Any, _
|
||||
ByVal BufferLength As Long) As Long
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' Configures or sets a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
''' <param name="Parameter">"The TPCANParameter parameter to set"</param>
|
||||
''' <param name="Buffer">"Buffer with the value to be set"</param>
|
||||
''' <param name="BufferLength">"Size in bytes of the buffer"</param>
|
||||
''' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_SetValue Lib "PCANBasic.DLL" _
|
||||
(ByVal Channel As Byte, _
|
||||
ByVal Parameter As Byte, _
|
||||
ByRef Buffer As Any, _
|
||||
ByVal BufferLength As Long) As Long
|
||||
|
||||
|
||||
' <summary>
|
||||
' Returns a descriptive text of a given TPCANStatus error
|
||||
' code, in any desired language
|
||||
' </summary>
|
||||
' <remarks>The current languages available for translation are:
|
||||
' Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
' Italian (0x10) and French (0x0C)</remarks>
|
||||
' <param name="Error">"A TPCANStatus error code"</param>
|
||||
' <param name="Language">"Indicates a 'Primary language ID'"</param>
|
||||
' <param name="Buffer">"Buffer for a null terminated char array"</param>
|
||||
' <returns>"A TPCANStatus error code"</returns>
|
||||
Public Declare Function CAN_GetErrorText Lib "PCANBasic.DLL" _
|
||||
(ByVal ErrorCode As Long, _
|
||||
ByVal Language As Integer, _
|
||||
ByVal Buffer As String) As Long
|
||||
850
PCANBasic/PCANBasic.cs
Normal file
850
PCANBasic/PCANBasic.cs
Normal file
|
|
@ -0,0 +1,850 @@
|
|||
// PCANBasic.cs
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// PCAN-Basic API
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
// Author : Keneth Wagner
|
||||
// Last change: 08.11.2011 Wagner
|
||||
//
|
||||
// Language: C# 1.0
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
// more Info at http://www.peak-system.com
|
||||
//
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Peak.Can.Basic
|
||||
{
|
||||
using TPCANHandle = System.Byte;
|
||||
|
||||
#region Enumerations
|
||||
/// <summary>
|
||||
/// Represents a PCAN status/error code
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum TPCANStatus : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// No error
|
||||
/// </summary>
|
||||
PCAN_ERROR_OK = 0x00000,
|
||||
/// <summary>
|
||||
/// Transmit buffer in CAN controller is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_XMTFULL = 0x00001,
|
||||
/// <summary>
|
||||
/// CAN controller was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_OVERRUN = 0x00002,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'light' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSLIGHT = 0x00004,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'heavy' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSHEAVY = 0x00008,
|
||||
/// <summary>
|
||||
/// Bus error: the CAN controller is in bus-off state
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSOFF = 0x00010,
|
||||
/// <summary>
|
||||
/// Mask for all bus errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ANYBUSERR = (PCAN_ERROR_BUSLIGHT | PCAN_ERROR_BUSHEAVY | PCAN_ERROR_BUSOFF),
|
||||
/// <summary>
|
||||
/// Receive queue is empty
|
||||
/// </summary>
|
||||
PCAN_ERROR_QRCVEMPTY = 0x00020,
|
||||
/// <summary>
|
||||
/// Receive queue was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_QOVERRUN = 0x00040,
|
||||
/// <summary>
|
||||
/// Transmit queue is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_QXMTFULL = 0x00080,
|
||||
/// <summary>
|
||||
/// Test of the CAN controller hardware registers failed (no hardware found)
|
||||
/// </summary>
|
||||
PCAN_ERROR_REGTEST = 0x00100,
|
||||
/// <summary>
|
||||
/// Driver not loaded
|
||||
/// </summary>
|
||||
PCAN_ERROR_NODRIVER = 0x00200,
|
||||
/// <summary>
|
||||
/// Hardware already in use by a Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_HWINUSE = 0x00400,
|
||||
/// <summary>
|
||||
/// A Client is already connected to the Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_NETINUSE = 0x00800,
|
||||
/// <summary>
|
||||
/// Hardware handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHW = 0x01400,
|
||||
/// <summary>
|
||||
/// Net handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLNET = 0x01800,
|
||||
/// <summary>
|
||||
/// Client handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLCLIENT = 0x01C00,
|
||||
/// <summary>
|
||||
/// Mask for all handle errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHANDLE = (PCAN_ERROR_ILLHW | PCAN_ERROR_ILLNET | PCAN_ERROR_ILLCLIENT),
|
||||
/// <summary>
|
||||
/// Resource (FIFO, Client, timeout) cannot be created
|
||||
/// </summary>
|
||||
PCAN_ERROR_RESOURCE = 0x02000,
|
||||
/// <summary>
|
||||
/// Invalid parameter
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMTYPE = 0x04000,
|
||||
/// <summary>
|
||||
/// Invalid parameter value
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMVAL = 0x08000,
|
||||
/// <summary>
|
||||
/// Unknow error
|
||||
/// </summary>
|
||||
PCAN_ERROR_UNKNOWN = 0x10000,
|
||||
/// <summary>
|
||||
/// Invalid data, function, or action.
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLDATA = 0x20000,
|
||||
/// <summary>
|
||||
/// Channel is not initialized
|
||||
/// </summary>
|
||||
PCAN_ERROR_INITIALIZE = 0x40000,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN device
|
||||
/// </summary>
|
||||
public enum TPCANDevice : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Undefined, unknown or not selected PCAN device value
|
||||
/// </summary>
|
||||
PCAN_NONE = 0,
|
||||
/// <summary>
|
||||
/// PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
/// </summary>
|
||||
PCAN_PEAKCAN = 1,
|
||||
/// <summary>
|
||||
/// PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
/// </summary>
|
||||
PCAN_ISA = 2,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle
|
||||
/// </summary>
|
||||
PCAN_DNG = 3,
|
||||
/// <summary>
|
||||
/// PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
/// </summary>
|
||||
PCAN_PCI = 4,
|
||||
/// <summary>
|
||||
/// PCAN-USB and PCAN-USB Pro
|
||||
/// </summary>
|
||||
PCAN_USB = 5,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card
|
||||
/// </summary>
|
||||
PCAN_PCC = 6
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN parameter to be read or set
|
||||
/// </summary>
|
||||
public enum TPCANParameter : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// PCAN-USB device number parameter
|
||||
/// </summary>
|
||||
PCAN_DEVICE_NUMBER = 1,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card 5-Volt power parameter
|
||||
/// </summary>
|
||||
PCAN_5VOLTS_POWER = 2,
|
||||
/// <summary>
|
||||
/// PCAN receive event handler parameter
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_EVENT = 3,
|
||||
/// <summary>
|
||||
/// PCAN message filter parameter
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_FILTER = 4,
|
||||
/// <summary>
|
||||
/// PCAN-Basic API version parameter
|
||||
/// </summary>
|
||||
PCAN_API_VERSION = 5,
|
||||
/// <summary>
|
||||
/// PCAN device channel version parameter
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_VERSION = 6,
|
||||
/// <summary>
|
||||
/// PCAN Reset-On-Busoff parameter
|
||||
/// </summary>
|
||||
PCAN_BUSOFF_AUTORESET = 7,
|
||||
/// <summary>
|
||||
/// PCAN Listen-Only parameter
|
||||
/// </summary>
|
||||
PCAN_LISTEN_ONLY = 8,
|
||||
/// <summary>
|
||||
/// Directory path for trace files
|
||||
/// </summary>
|
||||
PCAN_LOG_LOCATION = 9,
|
||||
/// <summary>
|
||||
/// Debug-Trace activation status
|
||||
/// </summary>
|
||||
PCAN_LOG_STATUS = 10,
|
||||
/// <summary>
|
||||
/// Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
/// </summary>
|
||||
PCAN_LOG_CONFIGURE = 11,
|
||||
/// <summary>
|
||||
/// Custom insertion of text into the log file
|
||||
/// </summary>
|
||||
PCAN_LOG_TEXT = 12,
|
||||
/// <summary>
|
||||
/// Availability status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_CONDITION = 13,
|
||||
/// <summary>
|
||||
/// PCAN hardware name parameter
|
||||
/// </summary>
|
||||
PCAN_HARDWARE_NAME = 14,
|
||||
/// <summary>
|
||||
/// Message reception status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_STATUS = 15,
|
||||
/// <summary>
|
||||
/// CAN-Controller number of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CONTROLLER_NUMBER = 16,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the type of a PCAN message
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum TPCANMessageType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STANDARD = 0x00,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_RTR = 0x01,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_EXTENDED = 0x02,
|
||||
/// <summary>
|
||||
/// The PCAN message represents a PCAN status message
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STATUS = 0x80,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN filter mode
|
||||
/// </summary>
|
||||
public enum TPCANMode : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Mode is Standard (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_STANDARD = TPCANMessageType.PCAN_MESSAGE_STANDARD,
|
||||
/// <summary>
|
||||
/// Mode is Extended (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_EXTENDED = TPCANMessageType.PCAN_MESSAGE_EXTENDED,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN Baud rate register value
|
||||
/// </summary>
|
||||
public enum TPCANBaudrate : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// 1 MBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_1M = 0x0014,
|
||||
/// <summary>
|
||||
/// 800 KBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_800K = 0x0016,
|
||||
/// <summary>
|
||||
/// 500 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_500K = 0x001C,
|
||||
/// <summary>
|
||||
/// 250 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_250K = 0x011C,
|
||||
/// <summary>
|
||||
/// 125 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_125K = 0x031C,
|
||||
/// <summary>
|
||||
/// 100 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_100K = 0x432F,
|
||||
/// <summary>
|
||||
/// 95,238 KBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_95K = 0xC34E,
|
||||
/// <summary>
|
||||
/// 83,333 KBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_83K = 0x4B14,
|
||||
/// <summary>
|
||||
/// 50 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_50K = 0x472F,
|
||||
/// <summary>
|
||||
/// 47,619 KBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_47K = 0x1414,
|
||||
/// <summary>
|
||||
/// 33,333 KBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_33K = 0x1D14,
|
||||
/// <summary>
|
||||
/// 20 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_20K = 0x532F,
|
||||
/// <summary>
|
||||
/// 10 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_10K = 0x672F,
|
||||
/// <summary>
|
||||
/// 5 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_5K = 0x7F7F,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the type of PCAN (non plug&play) hardware to be initialized
|
||||
/// </summary>
|
||||
public enum TPCANType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// PCAN-ISA 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA = 0x01,
|
||||
/// <summary>
|
||||
/// PCAN-ISA SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_SJA = 0x09,
|
||||
/// <summary>
|
||||
/// PHYTEC ISA
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_PHYTEC = 0x04,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG = 0x02,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_EPP = 0x03,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA = 0x05,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA_EPP = 0x06,
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Structures
|
||||
/// <summary>
|
||||
/// Represents a PCAN message
|
||||
/// </summary>
|
||||
public struct TPCANMsg
|
||||
{
|
||||
/// <summary>
|
||||
/// 11/29-bit message identifier
|
||||
/// </summary>
|
||||
public uint ID;
|
||||
/// <summary>
|
||||
/// Type of the message
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
public TPCANMessageType MSGTYPE;
|
||||
/// <summary>
|
||||
/// Data Length Code of the message (0..8)
|
||||
/// </summary>
|
||||
public byte LEN;
|
||||
/// <summary>
|
||||
/// Data of the message (DATA[0]..DATA[7])
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
||||
public byte[] DATA;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a timestamp of a received PCAN message.
|
||||
/// Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
/// </summary>
|
||||
public struct TPCANTimestamp
|
||||
{
|
||||
/// <summary>
|
||||
/// Base-value: milliseconds: 0.. 2^32-1
|
||||
/// </summary>
|
||||
public uint millis;
|
||||
/// <summary>
|
||||
/// Roll-arounds of millis
|
||||
/// </summary>
|
||||
public ushort millis_overflow;
|
||||
/// <summary>
|
||||
/// Microseconds: 0..999
|
||||
/// </summary>
|
||||
public ushort micros;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region PCANBasic class
|
||||
/// <summary>
|
||||
/// PCAN-Basic API class implementation
|
||||
/// </summary>
|
||||
public static class PCANBasic
|
||||
{
|
||||
#region PCAN-BUS Handles Definition
|
||||
/// <summary>
|
||||
/// Undefined/default value for a PCAN bus
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_NONEBUS = 0x00;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 1
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS1 = 0x21;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 2
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS2 = 0x22;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 3
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS3 = 0x23;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 4
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS4 = 0x24;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 5
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS5 = 0x25;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 6
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS6 = 0x26;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 7
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS7 = 0x27;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 8
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_ISABUS8 = 0x28;
|
||||
|
||||
/// <summary>
|
||||
/// PPCAN-Dongle/LPT interface, channel 1
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_DNGBUS1 = 0x31;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 1
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS1 = 0x41;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 2
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS2 = 0x42;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 3
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS3 = 0x43;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 4
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS4 = 0x44;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 5
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS5 = 0x45;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 6
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS6 = 0x46;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 7
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS7 = 0x47;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 8
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCIBUS8 = 0x48;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 1
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS1 = 0x51;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 2
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS2 = 0x52;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 3
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS3 = 0x53;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 4
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS4 = 0x54;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 5
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS5 = 0x55;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 6
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS6 = 0x56;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 7
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS7 = 0x57;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 8
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_USBBUS8 = 0x58;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 1
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCCBUS1 = 0x61;
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 2
|
||||
/// </summary>
|
||||
public const TPCANHandle PCAN_PCCBUS2 = 0x62;
|
||||
#endregion
|
||||
|
||||
#region Parameter values definition
|
||||
/// <summary>
|
||||
/// The PCAN parameter is not set (inactive)
|
||||
/// </summary>
|
||||
public const int PCAN_PARAMETER_OFF = 0;
|
||||
/// <summary>
|
||||
/// The PCAN parameter is set (active)
|
||||
/// </summary>
|
||||
public const int PCAN_PARAMETER_ON = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is closed. No messages will be received
|
||||
/// </summary>
|
||||
public const int PCAN_FILTER_CLOSE = 0;
|
||||
/// <summary>
|
||||
/// The PCAN filter is fully opened. All messages will be received
|
||||
/// </summary>
|
||||
public const int PCAN_FILTER_OPEN = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is custom configured. Only registered
|
||||
/// messages will be received
|
||||
/// </summary>
|
||||
public const int PCAN_FILTER_CUSTOM = 2;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
/// </summary>
|
||||
public const int PCAN_CHANNEL_UNAVAILABLE = 0;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
/// </summary>
|
||||
public const int PCAN_CHANNEL_AVAILABLE = 1;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is valid, and is already being used
|
||||
/// </summary>
|
||||
public const int PCAN_CHANNEL_OCCUPIED = 2;
|
||||
|
||||
/// <summary>
|
||||
/// Logs system exceptions / errors
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_DEFAULT = 0x00;
|
||||
/// <summary>
|
||||
/// Logs the entries to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_ENTRY = 0x01;
|
||||
/// <summary>
|
||||
/// Logs the parameters passed to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_PARAMETERS = 0x02;
|
||||
/// <summary>
|
||||
/// Logs the exits from the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_LEAVE = 0x04;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages passed to the CAN_Write function
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_WRITE = 0x08;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages received within the CAN_Read function
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_READ = 0x10;
|
||||
/// <summary>
|
||||
/// Logs all possible information within the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
public const int LOG_FUNCTION_ALL = 0xFFFF;
|
||||
#endregion
|
||||
|
||||
#region PCANBasic API Implementation
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <param name="HwType">NON PLUG&PLAY: The type of hardware and operation mode</param>
|
||||
/// <param name="IOPort">NON PLUG&PLAY: The I/O address for the parallel port</param>
|
||||
/// <param name="Interrupt">NON PLUG&PLAY: Interrupt number of the parallel por</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Initialize")]
|
||||
public static extern TPCANStatus Initialize(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
TPCANBaudrate Btr0Btr1,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANType HwType,
|
||||
UInt32 IOPort,
|
||||
UInt16 Interrupt);
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
public static TPCANStatus Initialize(
|
||||
TPCANHandle Channel,
|
||||
TPCANBaudrate Btr0Btr1)
|
||||
{
|
||||
return Initialize(Channel, Btr0Btr1, (TPCANType)0, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
/// </summary>
|
||||
/// <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
/// uninitialize all initialized channels</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Uninitialize")]
|
||||
public static extern TPCANStatus Uninitialize(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Resets the receive and transmit queues of the PCAN Channel
|
||||
/// </summary>
|
||||
/// <remarks>A reset of the CAN controller is not performed</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Reset")]
|
||||
public static extern TPCANStatus Reset(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current status of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetStatus")]
|
||||
public static extern TPCANStatus GetStatus(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <param name="TimestampBuffer">A TPCANTimestamp structure buffer to get
|
||||
/// the reception time of the message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
|
||||
public static extern TPCANStatus Read(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
out TPCANMsg MessageBuffer,
|
||||
out TPCANTimestamp TimestampBuffer);
|
||||
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
|
||||
private static extern TPCANStatus Read(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
out TPCANMsg MessageBuffer,
|
||||
IntPtr bufferPointer);
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
public static TPCANStatus Read(
|
||||
TPCANHandle Channel,
|
||||
out TPCANMsg MessageBuffer)
|
||||
{
|
||||
return Read(Channel, out MessageBuffer, IntPtr.Zero);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Transmits a CAN message
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg buffer with the message to be sent</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Write")]
|
||||
public static extern TPCANStatus Write(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
ref TPCANMsg MessageBuffer);
|
||||
|
||||
/// <summary>
|
||||
/// Configures the reception filter
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="FromID">The lowest CAN ID to be received</param>
|
||||
/// <param name="ToID">The highest CAN ID to be received</param>
|
||||
/// <param name="Mode">Message type, Standard (11-bit identifier) or
|
||||
/// Extended (29-bit identifier)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_FilterMessages")]
|
||||
public static extern TPCANStatus FilterMessages(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
UInt32 FromID,
|
||||
UInt32 ToID,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANMode Mode);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="StringBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetValue")]
|
||||
public static extern TPCANStatus GetValue(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANParameter Parameter,
|
||||
StringBuilder StringBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="NumericBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetValue")]
|
||||
public static extern TPCANStatus GetValue(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANParameter Parameter,
|
||||
out UInt32 NumericBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Configures or sets a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to set</param>
|
||||
/// <param name="NumericBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_SetValue")]
|
||||
public static extern TPCANStatus SetValue(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANParameter Parameter,
|
||||
ref UInt32 NumericBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Configures or sets a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter"></param>
|
||||
/// <param name="StringBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_SetValue")]
|
||||
public static extern TPCANStatus SetValue(
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
TPCANParameter Parameter,
|
||||
[MarshalAs(UnmanagedType.LPStr,SizeParamIndex=3)]
|
||||
string StringBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Returns a descriptive text of a given TPCANStatus error
|
||||
/// code, in any desired language
|
||||
/// </summary>
|
||||
/// <remarks>The current languages available for translation are:
|
||||
/// Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
/// Italian (0x10) and French (0x0C)</remarks>
|
||||
/// <param name="Error">A TPCANStatus error code</param>
|
||||
/// <param name="Language">Indicates a 'Primary language ID'</param>
|
||||
/// <param name="StringBuffer">Buffer for the text (must be at least 256 in length)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetErrorText")]
|
||||
public static extern TPCANStatus GetErrorText(
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
TPCANStatus Error,
|
||||
UInt16 Language,
|
||||
StringBuilder StringBuffer);
|
||||
#endregion
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
BIN
PCANBasic/PCANBasic.dll
Normal file
BIN
PCANBasic/PCANBasic.dll
Normal file
Binary file not shown.
373
PCANBasic/PCANBasic.h
Normal file
373
PCANBasic/PCANBasic.h
Normal file
|
|
@ -0,0 +1,373 @@
|
|||
// PCANBasic.h
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// PCAN-Basic API
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
// Author : Keneth Wagner
|
||||
// Last change: 08.11.2011 Wagner
|
||||
//
|
||||
// Language: ANSI-C
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
// more Info at http://www.peak-system.com
|
||||
//
|
||||
#ifndef __PCANBASICH__
|
||||
#define __PCANBASICH__
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Value definitions
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Currently defined and supported PCAN channels
|
||||
//
|
||||
#define PCAN_NONEBUS 0x00 // Undefined/default value for a PCAN bus
|
||||
|
||||
#define PCAN_ISABUS1 0x21 // PCAN-ISA interface, channel 1
|
||||
#define PCAN_ISABUS2 0x22 // PCAN-ISA interface, channel 2
|
||||
#define PCAN_ISABUS3 0x23 // PCAN-ISA interface, channel 3
|
||||
#define PCAN_ISABUS4 0x24 // PCAN-ISA interface, channel 4
|
||||
#define PCAN_ISABUS5 0x25 // PCAN-ISA interface, channel 5
|
||||
#define PCAN_ISABUS6 0x26 // PCAN-ISA interface, channel 6
|
||||
#define PCAN_ISABUS7 0x27 // PCAN-ISA interface, channel 7
|
||||
#define PCAN_ISABUS8 0x28 // PCAN-ISA interface, channel 8
|
||||
|
||||
#define PCAN_DNGBUS1 0x31 // PCAN-Dongle/LPT interface, channel 1
|
||||
|
||||
#define PCAN_PCIBUS1 0x41 // PCAN-PCI interface, channel 1
|
||||
#define PCAN_PCIBUS2 0x42 // PCAN-PCI interface, channel 2
|
||||
#define PCAN_PCIBUS3 0x43 // PCAN-PCI interface, channel 3
|
||||
#define PCAN_PCIBUS4 0x44 // PCAN-PCI interface, channel 4
|
||||
#define PCAN_PCIBUS5 0x45 // PCAN-PCI interface, channel 5
|
||||
#define PCAN_PCIBUS6 0x46 // PCAN-PCI interface, channel 6
|
||||
#define PCAN_PCIBUS7 0x47 // PCAN-PCI interface, channel 7
|
||||
#define PCAN_PCIBUS8 0x48 // PCAN-PCI interface, channel 8
|
||||
|
||||
#define PCAN_USBBUS1 0x51 // PCAN-USB interface, channel 1
|
||||
#define PCAN_USBBUS2 0x52 // PCAN-USB interface, channel 2
|
||||
#define PCAN_USBBUS3 0x53 // PCAN-USB interface, channel 3
|
||||
#define PCAN_USBBUS4 0x54 // PCAN-USB interface, channel 4
|
||||
#define PCAN_USBBUS5 0x55 // PCAN-USB interface, channel 5
|
||||
#define PCAN_USBBUS6 0x56 // PCAN-USB interface, channel 6
|
||||
#define PCAN_USBBUS7 0x57 // PCAN-USB interface, channel 7
|
||||
#define PCAN_USBBUS8 0x58 // PCAN-USB interface, channel 8
|
||||
|
||||
#define PCAN_PCCBUS1 0x61 // PCAN-PC Card interface, channel 1
|
||||
#define PCAN_PCCBUS2 0x62 // PCAN-PC Card interface, channel 2
|
||||
|
||||
// Represent the PCAN error and status codes
|
||||
//
|
||||
#define PCAN_ERROR_OK 0x00000 // No error
|
||||
#define PCAN_ERROR_XMTFULL 0x00001 // Transmit buffer in CAN controller is full
|
||||
#define PCAN_ERROR_OVERRUN 0x00002 // CAN controller was read too late
|
||||
#define PCAN_ERROR_BUSLIGHT 0x00004 // Bus error: an error counter reached the 'light' limit
|
||||
#define PCAN_ERROR_BUSHEAVY 0x00008 // Bus error: an error counter reached the 'heavy' limit
|
||||
#define PCAN_ERROR_BUSOFF 0x00010 // Bus error: the CAN controller is in bus-off state
|
||||
#define PCAN_ERROR_ANYBUSERR (PCAN_ERROR_BUSLIGHT | PCAN_ERROR_BUSHEAVY | PCAN_ERROR_BUSOFF) // Mask for all bus errors
|
||||
#define PCAN_ERROR_QRCVEMPTY 0x00020 // Receive queue is empty
|
||||
#define PCAN_ERROR_QOVERRUN 0x00040 // Receive queue was read too late
|
||||
#define PCAN_ERROR_QXMTFULL 0x00080 // Transmit queue is full
|
||||
#define PCAN_ERROR_REGTEST 0x00100 // Test of the CAN controller hardware registers failed (no hardware found)
|
||||
#define PCAN_ERROR_NODRIVER 0x00200 // Driver not loaded
|
||||
#define PCAN_ERROR_HWINUSE 0x00400 // Hardware already in use by a Net
|
||||
#define PCAN_ERROR_NETINUSE 0x00800 // A Client is already connected to the Net
|
||||
#define PCAN_ERROR_ILLHW 0x01400 // Hardware handle is invalid
|
||||
#define PCAN_ERROR_ILLNET 0x01800 // Net handle is invalid
|
||||
#define PCAN_ERROR_ILLCLIENT 0x01C00 // Client handle is invalid
|
||||
#define PCAN_ERROR_ILLHANDLE (PCAN_ERROR_ILLHW | PCAN_ERROR_ILLNET | PCAN_ERROR_ILLCLIENT) // Mask for all handle errors
|
||||
#define PCAN_ERROR_RESOURCE 0x02000 // Resource (FIFO, Client, timeout) cannot be created
|
||||
#define PCAN_ERROR_ILLPARAMTYPE 0x04000 // Invalid parameter
|
||||
#define PCAN_ERROR_ILLPARAMVAL 0x08000 // Invalid parameter value
|
||||
#define PCAN_ERROR_UNKNOWN 0x10000 // Unknow error
|
||||
#define PCAN_ERROR_ILLDATA 0x20000 // Invalid data, function, or action.
|
||||
#define PCAN_ERROR_INITIALIZE 0x40000 // Channel is not initialized
|
||||
|
||||
// PCAN devices
|
||||
//
|
||||
#define PCAN_NONE 0x00 // Undefined, unknown or not selected PCAN device value
|
||||
#define PCAN_PEAKCAN 0x01 // PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
#define PCAN_ISA 0x02 // PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
#define PCAN_DNG 0x03 // PCAN-Dongle
|
||||
#define PCAN_PCI 0x04 // PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
#define PCAN_USB 0x05 // PCAN-USB and PCAN-USB Pro
|
||||
#define PCAN_PCC 0x06 // PCAN-PC Card
|
||||
|
||||
// PCAN parameters
|
||||
//
|
||||
#define PCAN_DEVICE_NUMBER 0x01 // PCAN-USB device number parameter
|
||||
#define PCAN_5VOLTS_POWER 0x02 // PCAN-PC Card 5-Volt power parameter
|
||||
#define PCAN_RECEIVE_EVENT 0x03 // PCAN receive event handler parameter
|
||||
#define PCAN_MESSAGE_FILTER 0x04 // PCAN message filter parameter
|
||||
#define PCAN_API_VERSION 0x05 // PCAN-Basic API version parameter
|
||||
#define PCAN_CHANNEL_VERSION 0x06 // PCAN device channel version parameter
|
||||
#define PCAN_BUSOFF_AUTORESET 0x07 // PCAN Reset-On-Busoff parameter
|
||||
#define PCAN_LISTEN_ONLY 0x08 // PCAN Listen-Only parameter
|
||||
#define PCAN_LOG_LOCATION 0x09 // Directory path for trace files
|
||||
#define PCAN_LOG_STATUS 0x0A // Debug-Trace activation status
|
||||
#define PCAN_LOG_CONFIGURE 0x0B // Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
#define PCAN_LOG_TEXT 0x0C // Custom insertion of text into the log file
|
||||
#define PCAN_CHANNEL_CONDITION 0x0D // Availability status of a PCAN-Channel
|
||||
#define PCAN_HARDWARE_NAME 0x0E // PCAN hardware name parameter
|
||||
#define PCAN_RECEIVE_STATUS 0x0F // Message reception status of a PCAN-Channel
|
||||
#define PCAN_CONTROLLER_NUMBER 0x10 // CAN-Controller number of a PCAN-Channel
|
||||
|
||||
// PCAN parameter values
|
||||
//
|
||||
#define PCAN_PARAMETER_OFF 0x00 // The PCAN parameter is not set (inactive)
|
||||
#define PCAN_PARAMETER_ON 0x01 // The PCAN parameter is set (active)
|
||||
#define PCAN_FILTER_CLOSE 0x00 // The PCAN filter is closed. No messages will be received
|
||||
#define PCAN_FILTER_OPEN 0x01 // The PCAN filter is fully opened. All messages will be received
|
||||
#define PCAN_FILTER_CUSTOM 0x02 // The PCAN filter is custom configured. Only registered messages will be received
|
||||
#define PCAN_CHANNEL_UNAVAILABLE 0x00 // The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
#define PCAN_CHANNEL_AVAILABLE 0x01 // The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
#define PCAN_CHANNEL_OCCUPIED 0x02 // The PCAN-Channel handle is valid, and is already being used
|
||||
|
||||
#define LOG_FUNCTION_DEFAULT 0x00 // Logs system exceptions / errors
|
||||
#define LOG_FUNCTION_ENTRY 0x01 // Logs the entries to the PCAN-Basic API functions
|
||||
#define LOG_FUNCTION_PARAMETERS 0x02 // Logs the parameters passed to the PCAN-Basic API functions
|
||||
#define LOG_FUNCTION_LEAVE 0x04 // Logs the exits from the PCAN-Basic API functions
|
||||
#define LOG_FUNCTION_WRITE 0x08 // Logs the CAN messages passed to the CAN_Write function
|
||||
#define LOG_FUNCTION_READ 0x10 // Logs the CAN messages received within the CAN_Read function
|
||||
#define LOG_FUNCTION_ALL 0xFFFF // Logs all possible information within the PCAN-Basic API functions
|
||||
|
||||
// PCAN message types
|
||||
//
|
||||
#define PCAN_MESSAGE_STANDARD 0x00 // The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
#define PCAN_MESSAGE_RTR 0x01 // The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
#define PCAN_MESSAGE_EXTENDED 0x02 // The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
#define PCAN_MESSAGE_STATUS 0x80 // The PCAN message represents a PCAN status message
|
||||
|
||||
// Frame Type / Initialization Mode
|
||||
//
|
||||
#define PCAN_MODE_STANDARD PCAN_MESSAGE_STANDARD
|
||||
#define PCAN_MODE_EXTENDED PCAN_MESSAGE_EXTENDED
|
||||
|
||||
// Baud rate codes = BTR0/BTR1 register values for the CAN controller.
|
||||
// You can define your own Baud rate with the BTROBTR1 register.
|
||||
// Take a look at www.peak-system.com for our free software "BAUDTOOL"
|
||||
// to calculate the BTROBTR1 register for every baudrate and sample point.
|
||||
//
|
||||
#define PCAN_BAUD_1M 0x0014 // 1 MBit/s
|
||||
#define PCAN_BAUD_800K 0x0016 // 800 kBit/s
|
||||
#define PCAN_BAUD_500K 0x001C // 500 kBit/s
|
||||
#define PCAN_BAUD_250K 0x011C // 250 kBit/s
|
||||
#define PCAN_BAUD_125K 0x031C // 125 kBit/s
|
||||
#define PCAN_BAUD_100K 0x432F // 100 kBit/s
|
||||
#define PCAN_BAUD_95K 0xC34E // 95,238 kBit/s
|
||||
#define PCAN_BAUD_83K 0x4B14 // 83,333 kBit/s
|
||||
#define PCAN_BAUD_50K 0x472F // 50 kBit/s
|
||||
#define PCAN_BAUD_47K 0x1414 // 47,619 kBit/s
|
||||
#define PCAN_BAUD_33K 0x1D14 // 33,333 kBit/s
|
||||
#define PCAN_BAUD_20K 0x532F // 20 kBit/s
|
||||
#define PCAN_BAUD_10K 0x672F // 10 kBit/s
|
||||
#define PCAN_BAUD_5K 0x7F7F // 5 kBit/s
|
||||
|
||||
#define PCAN_TYPE_ISA 0x01 // PCAN-ISA 82C200
|
||||
#define PCAN_TYPE_ISA_SJA 0x09 // PCAN-ISA SJA1000
|
||||
#define PCAN_TYPE_ISA_PHYTEC 0x04 // PHYTEC ISA
|
||||
#define PCAN_TYPE_DNG 0x02 // PCAN-Dongle 82C200
|
||||
#define PCAN_TYPE_DNG_EPP 0x03 // PCAN-Dongle EPP 82C200
|
||||
#define PCAN_TYPE_DNG_SJA 0x05 // PCAN-Dongle SJA1000
|
||||
#define PCAN_TYPE_DNG_SJA_EPP 0x06 // PCAN-Dongle EPP SJA1000
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Type definitions
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
#define TPCANHandle BYTE // Represents a PCAN hardware channel handle
|
||||
#define TPCANStatus DWORD // Represents a PCAN status/error code
|
||||
#define TPCANParameter BYTE // Represents a PCAN parameter to be read or set
|
||||
#define TPCANDevice BYTE // Represents a PCAN device
|
||||
#define TPCANMessageType BYTE // Represents the type of a PCAN message
|
||||
#define TPCANType BYTE // Represents the type of PCAN hardware to be initialized
|
||||
#define TPCANMode BYTE // Represents a PCAN filter mode
|
||||
#define TPCANBaudrate WORD // Represents a PCAN Baud rate register value
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Structure definitions
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Represents a PCAN message
|
||||
//
|
||||
typedef struct tagTPCANMsg
|
||||
{
|
||||
DWORD ID; // 11/29-bit message identifier
|
||||
TPCANMessageType MSGTYPE; // Type of the message
|
||||
BYTE LEN; // Data Length Code of the message (0..8)
|
||||
BYTE DATA[8]; // Data of the message (DATA[0]..DATA[7])
|
||||
} TPCANMsg;
|
||||
|
||||
// Represents a timestamp of a received PCAN message
|
||||
// Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
//
|
||||
typedef struct tagTPCANTimestamp
|
||||
{
|
||||
DWORD millis; // Base-value: milliseconds: 0.. 2^32-1
|
||||
WORD millis_overflow; // Roll-arounds of millis
|
||||
WORD micros; // Microseconds: 0..999
|
||||
} TPCANTimestamp;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// PCAN-Basic API function declarations
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="Btr0Btr1">"The speed for the communication (BTR0BTR1 code)"</param>
|
||||
/// <param name="HwType">"NON PLUG&PLAY: The type of hardware and operation mode"</param>
|
||||
/// <param name="IOPort">"NON PLUG&PLAY: The I/O address for the parallel port"</param>
|
||||
/// <param name="Interupt">"NON PLUG&PLAY: Interrupt number of the parallel port"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_Initialize(
|
||||
TPCANHandle Channel,
|
||||
TPCANBaudrate Btr0Btr1,
|
||||
TPCANType HwType = 0,
|
||||
DWORD IOPort = 0,
|
||||
WORD Interrupt = 0);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
/// </summary>
|
||||
/// <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
/// uninitialize all initialized channels</remarks>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_Uninitialize(
|
||||
TPCANHandle Channel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Resets the receive and transmit queues of the PCAN Channel
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// A reset of the CAN controller is not performed.
|
||||
/// </remarks>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_Reset(
|
||||
TPCANHandle Channel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current status of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_GetStatus(
|
||||
TPCANHandle Channel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="MessageBuffer">"A TPCANMsg structure buffer to store the CAN message"</param>
|
||||
/// <param name="TimestampBuffer">"A TPCANTimestamp structure buffer to get
|
||||
/// the reception time of the message. If this value is not desired, this parameter
|
||||
/// should be passed as NULL"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_Read(
|
||||
TPCANHandle Channel,
|
||||
TPCANMsg* MessageBuffer,
|
||||
TPCANTimestamp* TimestampBuffer);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Transmits a CAN message
|
||||
/// </summary>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="MessageBuffer">"A TPCANMsg buffer with the message to be sent"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_Write(
|
||||
TPCANHandle Channel,
|
||||
TPCANMsg* MessageBuffer);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Configures the reception filter.
|
||||
/// </summary>
|
||||
/// <remarks>The message filter will be expanded with every call to
|
||||
/// this function. If it is desired to reset the filter, please use
|
||||
/// the CAN_SetValue function</remarks>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="FromID">"The lowest CAN ID to be received"</param>
|
||||
/// <param name="ToID">"The highest CAN ID to be received"</param>
|
||||
/// <param name="Mode">"Message type, Standard (11-bit identifier) or
|
||||
/// Extended (29-bit identifier)"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_FilterMessages(
|
||||
TPCANHandle Channel,
|
||||
DWORD FromID,
|
||||
DWORD ToID,
|
||||
TPCANMode Mode);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="Parameter">"The TPCANParameter parameter to get"</param>
|
||||
/// <param name="Buffer">"Buffer for the parameter value"</param>
|
||||
/// <param name="BufferLength">"Size in bytes of the buffer"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_GetValue(
|
||||
TPCANHandle Channel,
|
||||
TPCANParameter Parameter,
|
||||
void* Buffer,
|
||||
DWORD BufferLength);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Configures or sets a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">"The handle of a PCAN Channel"</param>
|
||||
/// <param name="Parameter">"The TPCANParameter parameter to set"</param>
|
||||
/// <param name="Buffer">"Buffer with the value to be set"</param>
|
||||
/// <param name="BufferLength">"Size in bytes of the buffer"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_SetValue(
|
||||
TPCANHandle Channel,
|
||||
TPCANParameter Parameter,
|
||||
void* Buffer,
|
||||
DWORD BufferLength);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Returns a descriptive text of a given TPCANStatus error
|
||||
/// code, in any desired language
|
||||
/// </summary>
|
||||
/// <remarks>The current languages available for translation are:
|
||||
/// Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
/// Italian (0x10) and French (0x0C)</remarks>
|
||||
/// <param name="Error">"A TPCANStatus error code"</param>
|
||||
/// <param name="Language">"Indicates a 'Primary language ID'"</param>
|
||||
/// <param name="Buffer">"Buffer for a null terminated char array"</param>
|
||||
/// <returns>"A TPCANStatus error code"</returns>
|
||||
TPCANStatus __stdcall CAN_GetErrorText(
|
||||
TPCANStatus Error,
|
||||
WORD Language,
|
||||
LPSTR Buffer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
895
PCANBasic/PCANBasic.pas
Normal file
895
PCANBasic/PCANBasic.pas
Normal file
|
|
@ -0,0 +1,895 @@
|
|||
// PCANBasic.pas
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// PCAN-Basic API
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
// Author : Keneth Wagner
|
||||
// Last change: 08.11.2011 Wagner
|
||||
//
|
||||
// Language: Pascal OO
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
// more Info at http://www.peak-system.com
|
||||
//
|
||||
unit PCANBasic;
|
||||
|
||||
interface
|
||||
|
||||
type
|
||||
TPCANHandle = Byte;
|
||||
|
||||
{$Z4}
|
||||
/// <summary>
|
||||
/// Represents a PCAN status/error code
|
||||
/// </summary>
|
||||
TPCANStatus = (
|
||||
/// <summary>
|
||||
/// No error
|
||||
/// </summary>
|
||||
PCAN_ERROR_OK = $00000,
|
||||
/// <summary>
|
||||
/// Transmit buffer in CAN controller is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_XMTFULL = $00001,
|
||||
/// <summary>
|
||||
/// CAN controller was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_OVERRUN = $00002,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'light' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSLIGHT = $00004,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'heavy' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSHEAVY = $00008,
|
||||
/// <summary>
|
||||
/// Bus error: the CAN controller is in bus-off state
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSOFF = $00010,
|
||||
/// <summary>
|
||||
/// Mask for all bus errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ANYBUSERR = Byte(PCAN_ERROR_BUSLIGHT) Or Byte(PCAN_ERROR_BUSHEAVY) Or Byte(PCAN_ERROR_BUSOFF),
|
||||
/// <summary>
|
||||
/// Receive queue is empty
|
||||
/// </summary>
|
||||
PCAN_ERROR_QRCVEMPTY = $00020,
|
||||
/// <summary>
|
||||
/// Receive queue was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_QOVERRUN = $00040,
|
||||
/// <summary>
|
||||
/// Transmit queue is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_QXMTFULL = $00080,
|
||||
/// <summary>
|
||||
/// Test of the CAN controller hardware registers failed (no hardware found)
|
||||
/// </summary>
|
||||
PCAN_ERROR_REGTEST = $00100,
|
||||
/// <summary>
|
||||
/// Driver not loaded
|
||||
/// </summary>
|
||||
PCAN_ERROR_NODRIVER = $00200,
|
||||
/// <summary>
|
||||
/// Hardware already in use by a Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_HWINUSE = $00400,
|
||||
/// <summary>
|
||||
/// A Client is already connected to the Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_NETINUSE = $00800,
|
||||
/// <summary>
|
||||
/// Hardware handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHW = $01400,
|
||||
/// <summary>
|
||||
/// Net handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLNET = $01800,
|
||||
/// <summary>
|
||||
/// Client handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLCLIENT = $01C00,
|
||||
/// <summary>
|
||||
/// Mask for all handle errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHANDLE = Byte(PCAN_ERROR_ILLHW) Or Byte(PCAN_ERROR_ILLNET) Or Byte(PCAN_ERROR_ILLCLIENT),
|
||||
/// <summary>
|
||||
/// Resource (FIFO, Client, timeout) cannot be created
|
||||
/// </summary>
|
||||
PCAN_ERROR_RESOURCE = $02000,
|
||||
/// <summary>
|
||||
/// Invalid parameter
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMTYPE = $04000,
|
||||
/// <summary>
|
||||
/// Invalid parameter value
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMVAL = $08000,
|
||||
/// <summary>
|
||||
/// Unknow error
|
||||
/// </summary>
|
||||
PCAN_ERROR_UNKNOWN = $10000,
|
||||
/// <summary>
|
||||
/// Invalid data, function, or action
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLDATA = $20000,
|
||||
/// <summary>
|
||||
/// Channel is not initialized
|
||||
/// </summary>
|
||||
PCAN_ERROR_INITIALIZE = $40000
|
||||
);
|
||||
|
||||
{$Z1}
|
||||
/// <summary>
|
||||
/// Represents a PCAN device
|
||||
/// </summary>
|
||||
TPCANDevice = (
|
||||
/// <summary>
|
||||
/// Undefined, unknown or not selected PCAN device value
|
||||
/// </summary>
|
||||
PCAN_NONE = 0,
|
||||
/// <summary>
|
||||
/// PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
/// </summary>
|
||||
PCAN_PEAKCAN = 1,
|
||||
/// <summary>
|
||||
/// PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
/// </summary>
|
||||
PCAN_ISA = 2,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle
|
||||
/// </summary>
|
||||
PCAN_DNG = 3,
|
||||
/// <summary>
|
||||
/// PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
/// </summary>
|
||||
PCAN_PCI = 4,
|
||||
/// <summary>
|
||||
/// PCAN-USB and PCAN-USB Pro
|
||||
/// </summary>
|
||||
PCAN_USB = 5,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card
|
||||
/// </summary>
|
||||
PCAN_PCC = 6
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN parameter to be read or set
|
||||
/// </summary>
|
||||
TPCANParameter = (
|
||||
/// <summary>
|
||||
/// PCAN-USB device number parameter
|
||||
/// </summary>
|
||||
PCAN_DEVICE_NUMBER = 1,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card 5-Volt power parameter
|
||||
/// </summary>
|
||||
PCAN_5VOLTS_POWER = 2,
|
||||
/// <summary>
|
||||
/// PCAN receive event handler parameter
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_EVENT = 3,
|
||||
/// <summary>
|
||||
/// PCAN message filter parameter
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_FILTER = 4,
|
||||
/// <summary>
|
||||
/// PCAN-Basic API version parameter
|
||||
/// </summary>
|
||||
PCAN_API_VERSION = 5,
|
||||
/// <summary>
|
||||
/// PCAN device channel version parameter
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_VERSION = 6,
|
||||
/// <summary>
|
||||
/// PCAN Reset-On-Busoff parameter
|
||||
/// </summary>
|
||||
PCAN_BUSOFF_AUTORESET = 7,
|
||||
/// <summary>
|
||||
/// PCAN Listen-Only parameter
|
||||
/// </summary>
|
||||
PCAN_LISTEN_ONLY = 8,
|
||||
/// <summary>
|
||||
/// Directory path for trace files
|
||||
/// </summary>
|
||||
PCAN_LOG_LOCATION = 9,
|
||||
/// <summary>
|
||||
/// Debug-Trace activation status
|
||||
/// </summary>
|
||||
PCAN_LOG_STATUS = 10,
|
||||
/// <summary>
|
||||
/// Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
/// </summary>
|
||||
PCAN_LOG_CONFIGURE = 11,
|
||||
/// <summary>
|
||||
/// Custom insertion of text into the log file
|
||||
/// </summary>
|
||||
PCAN_LOG_TEXT = 12,
|
||||
/// <summary>
|
||||
/// Availability status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_CONDITION = 13,
|
||||
/// <summary>
|
||||
/// PCAN hardware name parameter
|
||||
/// </summary>
|
||||
PCAN_HARDWARE_NAME = 14,
|
||||
/// <summary>
|
||||
/// Message reception status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_STATUS = 15,
|
||||
/// <summary>
|
||||
/// CAN-Controller number of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CONTROLLER_NUMBER = 16
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Represents the type of a PCAN message
|
||||
/// </summary>
|
||||
TPCANMessageType = (
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STANDARD = $00,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_RTR = $01,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_EXTENDED = $02,
|
||||
/// <summary>
|
||||
/// The PCAN message represents a PCAN status message
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STATUS = $80
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN filter mode
|
||||
/// </summary>
|
||||
TPCANMode = (
|
||||
/// <summary>
|
||||
/// Mode is Standard (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_STANDARD = Byte(PCAN_MESSAGE_STANDARD),
|
||||
/// <summary>
|
||||
/// Mode is Extended (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_EXTENDED = Byte(PCAN_MESSAGE_EXTENDED)
|
||||
);
|
||||
|
||||
{$Z2}
|
||||
/// <summary>
|
||||
/// Represents a PCAN Baud rate register value
|
||||
/// </summary>
|
||||
TPCANBaudrate = (
|
||||
/// <summary>
|
||||
/// 1 MBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_1M = $0014,
|
||||
/// <summary>
|
||||
/// 800 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_800K = $0016,
|
||||
/// <summary>
|
||||
/// 500 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_500K = $001C,
|
||||
/// <summary>
|
||||
/// 250 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_250K = $011C,
|
||||
/// <summary>
|
||||
/// 125 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_125K = $031C,
|
||||
/// <summary>
|
||||
/// 100 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_100K = $432F,
|
||||
/// <summary>
|
||||
/// 95,238 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_95K = $C34E,
|
||||
/// <summary>
|
||||
/// 83,333 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_83K = $4B14,
|
||||
/// <summary>
|
||||
/// 50 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_50K = $472F,
|
||||
/// <summary>
|
||||
/// 47,619 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_47K = $1414,
|
||||
/// <summary>
|
||||
/// 33,333 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_33K = $1D14,
|
||||
/// <summary>
|
||||
/// 20 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_20K = $532F,
|
||||
/// <summary>
|
||||
/// 10 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_10K = $672F,
|
||||
/// <summary>
|
||||
/// 5 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_5K = $7F7F
|
||||
);
|
||||
|
||||
{$Z1}
|
||||
/// <summary>
|
||||
/// Represents the type of PCAN (non plug&play) hardware to be initialized
|
||||
/// </summary>
|
||||
TPCANType = (
|
||||
/// <summary>
|
||||
/// PCAN-ISA 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA = $01,
|
||||
/// <summary>
|
||||
/// PCAN-ISA SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_SJA = $09,
|
||||
/// <summary>
|
||||
/// PHYTEC ISA
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_PHYTEC = $04,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG = $02,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_EPP = $03,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA = $05,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA_EPP = $06
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN message
|
||||
/// </summary>
|
||||
TPCANMsg = record
|
||||
/// <summary>
|
||||
/// 11/29-bit message identifier
|
||||
/// </summary>
|
||||
ID: Longword;
|
||||
/// <summary>
|
||||
/// Type of the message
|
||||
/// </summary>
|
||||
MSGTYPE: TPCANMessageType;
|
||||
/// <summary>
|
||||
/// Data Length Code of the message (0..8)
|
||||
/// </summary>
|
||||
LEN: Byte;
|
||||
/// <summary>
|
||||
/// Data of the message (DATA[0]..DATA[7])
|
||||
/// </summary>
|
||||
DATA: array[0..7] of Byte;
|
||||
end;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a timestamp of a received PCAN message.
|
||||
/// Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
/// </summary>
|
||||
TPCANTimestamp = record
|
||||
/// <summary>
|
||||
/// Base-value: milliseconds: 0.. 2^32-1
|
||||
/// </summary>
|
||||
millis: Longword;
|
||||
/// <summary>
|
||||
/// Roll-arounds of millis
|
||||
/// </summary>
|
||||
millis_overflow: Word;
|
||||
/// <summary>
|
||||
/// Microseconds: 0..999
|
||||
/// </summary>
|
||||
micros: Word;
|
||||
end;
|
||||
PTPCANTimestamp = ^TPCANTimestamp;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-Basic API class implementation
|
||||
/// </summary>
|
||||
TPCANBasic = class
|
||||
public
|
||||
class var
|
||||
/// <summary>
|
||||
/// Undefined/default value for a PCAN bus
|
||||
/// </summary>
|
||||
const PCAN_NONEBUS: TPCANHandle = $00;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 1
|
||||
/// </summary>
|
||||
const PCAN_ISABUS1: TPCANHandle = $21;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 2
|
||||
/// </summary>
|
||||
const PCAN_ISABUS2: TPCANHandle = $22;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 3
|
||||
/// </summary>
|
||||
const PCAN_ISABUS3: TPCANHandle = $23;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 4
|
||||
/// </summary>
|
||||
const PCAN_ISABUS4: TPCANHandle = $24;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 5
|
||||
/// </summary>
|
||||
const PCAN_ISABUS5: TPCANHandle = $25;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 6
|
||||
/// </summary>
|
||||
const PCAN_ISABUS6: TPCANHandle = $26;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 7
|
||||
/// </summary>
|
||||
const PCAN_ISABUS7: TPCANHandle = $27;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 8
|
||||
/// </summary>
|
||||
const PCAN_ISABUS8: TPCANHandle = $28;
|
||||
|
||||
/// <summary>
|
||||
/// PPCAN-Dongle/LPT interface, channel 1
|
||||
/// </summary>
|
||||
const PCAN_DNGBUS1: TPCANHandle = $31;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 1
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS1: TPCANHandle = $41;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 2
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS2: TPCANHandle = $42;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 3
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS3: TPCANHandle = $43;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 4
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS4: TPCANHandle = $44;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 5
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS5: TPCANHandle = $45;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 6
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS6: TPCANHandle = $46;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 7
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS7: TPCANHandle = $47;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 8
|
||||
/// </summary>
|
||||
const PCAN_PCIBUS8: TPCANHandle = $48;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 1
|
||||
/// </summary>
|
||||
const PCAN_USBBUS1: TPCANHandle = $51;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 2
|
||||
/// </summary>
|
||||
const PCAN_USBBUS2: TPCANHandle = $52;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 3
|
||||
/// </summary>
|
||||
const PCAN_USBBUS3: TPCANHandle = $53;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 4
|
||||
/// </summary>
|
||||
const PCAN_USBBUS4: TPCANHandle = $54;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 5
|
||||
/// </summary>
|
||||
const PCAN_USBBUS5: TPCANHandle = $55;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 6
|
||||
/// </summary>
|
||||
const PCAN_USBBUS6: TPCANHandle = $56;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 7
|
||||
/// </summary>
|
||||
const PCAN_USBBUS7: TPCANHandle = $57;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 8
|
||||
/// </summary>
|
||||
const PCAN_USBBUS8: TPCANHandle = $58;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 1
|
||||
/// </summary>
|
||||
const PCAN_PCCBUS1: TPCANHandle = $61;
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 2
|
||||
/// </summary>
|
||||
const PCAN_PCCBUS2: TPCANHandle = $62;
|
||||
|
||||
/// <summary>
|
||||
/// The PCAN parameter is not set (inactive)
|
||||
/// </summary>
|
||||
const PCAN_PARAMETER_OFF: Integer = 0;
|
||||
/// <summary>
|
||||
/// The PCAN parameter is set (active)
|
||||
/// </summary>
|
||||
const PCAN_PARAMETER_ON: Integer = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is closed. No messages will be received
|
||||
/// </summary>
|
||||
const PCAN_FILTER_CLOSE: Integer = 0;
|
||||
/// <summary>
|
||||
/// The PCAN filter is fully opened. All messages will be received
|
||||
/// </summary>
|
||||
const PCAN_FILTER_OPEN: Integer = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is custom configured. Only registered
|
||||
/// messages will be received
|
||||
/// </summary>
|
||||
const PCAN_FILTER_CUSTOM: Integer = 2;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
/// </summary>
|
||||
const PCAN_CHANNEL_UNAVAILABLE: Integer = 0;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
/// </summary>
|
||||
const PCAN_CHANNEL_AVAILABLE: Integer = 1;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is valid, and is already being used
|
||||
/// </summary>
|
||||
const PCAN_CHANNEL_OCCUPIED: Integer = 2;
|
||||
|
||||
/// <summary>
|
||||
/// Logs system exceptions / errors
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_DEFAULT: Integer = $00;
|
||||
/// <summary>
|
||||
/// Logs the entries to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_ENTRY: Integer = $01;
|
||||
/// <summary>
|
||||
/// Logs the parameters passed to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_PARAMETERS: Integer = $02;
|
||||
/// <summary>
|
||||
/// Logs the exits from the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_LEAVE: Integer = $04;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages passed to the CAN_Write function
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_WRITE: Integer = $08;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages received within the CAN_Read function
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_READ: Integer = $10;
|
||||
/// <summary>
|
||||
/// Logs all possible information within the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
const LOG_FUNCTION_ALL: Integer = $FFFF;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <param name="HwType">NON PLUG&PLAY: The type of hardware and operation mode</param>
|
||||
/// <param name="IOPort">NON PLUG&PLAY: The I/O address for the parallel port</param>
|
||||
/// <param name="Interrupt">NON PLUG&PLAY: Interrupt number of the parallel port</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Initialize(
|
||||
Channel: TPCANHandle;
|
||||
Btr0Btr1: TPCANBaudrate;
|
||||
HwType: TPCANType;
|
||||
IOPort: LongWord;
|
||||
Interrupt: Word
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Initialize(
|
||||
Channel: TPCANHandle;
|
||||
Btr0Btr1: TPCANBaudrate
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
/// </summary>
|
||||
/// <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
/// uninitialize all initialized channels</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Uninitialize(
|
||||
Channel: TPCANHandle
|
||||
): TPCANStatus;
|
||||
|
||||
/// <summary>
|
||||
/// Resets the receive and transmit queues of the PCAN Channel
|
||||
/// </summary>
|
||||
/// <remarks>A reset of the CAN controller is not performed</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Reset(
|
||||
Channel: TPCANHandle
|
||||
): TPCANStatus;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current status of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function GetStatus(
|
||||
Channel: TPCANHandle
|
||||
): TPCANStatus;
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <param name="TimestampBuffer">A TPCANTimestamp structure buffer to get
|
||||
/// the reception time of the message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Read(
|
||||
Channel: TPCANHandle;
|
||||
var MessageBuffer: TPCANMsg;
|
||||
var TimestampBuffer: TPCANTimestamp
|
||||
):TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Read(
|
||||
Channel: TPCANHandle;
|
||||
var MessageBuffer: TPCANMsg
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Transmits a CAN message
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg buffer with the message to be sent</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function Write(
|
||||
Channel: TPCANHandle;
|
||||
var MessageBuffer: TPCANMsg
|
||||
): TPCANStatus;
|
||||
|
||||
/// <summary>
|
||||
/// Configures the reception filter
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="FromID">The lowest CAN ID to be received</param>
|
||||
/// <param name="ToID">The highest CAN ID to be received</param>
|
||||
/// <param name="Mode">Message type, Standard (11-bit identifier) or
|
||||
/// Extended (29-bit identifier)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function FilterMessages(
|
||||
Channel: TPCANHandle;
|
||||
FromID: LongWord;
|
||||
ToID: LongWord;
|
||||
Mode: TPCANMode
|
||||
): TPCANStatus;
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="NumericBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function GetValue(
|
||||
Channel: TPCANHandle;
|
||||
Parameter: TPCANParameter;
|
||||
NumericBuffer: PLongWord;
|
||||
BufferLength: LongWord
|
||||
): TPCANStatus; overload;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="StringBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function GetValue(
|
||||
Channel: TPCANHandle;
|
||||
Parameter: TPCANParameter;
|
||||
StringBuffer: PAnsiChar;
|
||||
BufferLength: LongWord
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Configures or sets a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to set</param>
|
||||
/// <param name="NumericBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function SetValue(
|
||||
Channel: TPCANHandle;
|
||||
Parameter: TPCANParameter;
|
||||
NumericBuffer: PLongWord;
|
||||
BufferLength: LongWord
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Configures or sets a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to set</param>
|
||||
/// <param name="StringBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function SetValue(
|
||||
Channel: TPCANHandle;
|
||||
Parameter: TPCANParameter;
|
||||
StringBuffer: PAnsiChar;
|
||||
BufferLength: LongWord
|
||||
): TPCANStatus; overload;
|
||||
|
||||
/// <summary>
|
||||
/// Returns a descriptive text of a given TPCANStatus error
|
||||
/// code, in any desired language
|
||||
/// </summary>
|
||||
/// <remarks>The current languages available for translation are:
|
||||
/// Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
/// Italian (0x10) and French (0x0C)</remarks>
|
||||
/// <param name="Error">A TPCANStatus error code</param>
|
||||
/// <param name="Language">Indicates a 'Primary language ID'</param>
|
||||
/// <param name="StringBuffer">Buffer for the text (must be at least 256 in length)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
class function GetErrorText(
|
||||
Error: TPCANStatus;
|
||||
Language: Word;
|
||||
StringBuffer: PAnsiChar
|
||||
): TPCANStatus;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses SysUtils;
|
||||
const DLL_Name = 'PCANBASIC.DLL';
|
||||
|
||||
function CAN_Initialize(Channel: TPCANHandle; Btr0Btr1: TPCANBaudrate; HwType: TPCANType; IOPort: LongWord; Interrupt: Word): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_Uninitialize(Channel: TPCANHandle): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_Reset(Channel: TPCANHandle): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_GetStatus(Channel: TPCANHandle): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_Read(Channel: TPCANHandle; var MessageBuffer: TPCANMsg; TimestampBuffer: PTPCANTimestamp):TPCANStatus; overload; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_Write(Channel: TPCANHandle; var MessageBuffer: TPCANMsg): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_FilterMessages(Channel: TPCANHandle; FromID: LongWord; ToID: LongWord; Mode: TPCANMode): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_GetValue(Channel: TPCANHandle; Parameter: TPCANParameter; Buffer: Pointer; BufferLength: LongWord): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_SetValue(Channel: TPCANHandle; Parameter: TPCANParameter; Buffer: Pointer; BufferLength: LongWord): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
function CAN_GetErrorText(Error: TPCANStatus; Language: Word; StringBuffer: PAnsiChar): TPCANStatus; stdcall;
|
||||
external DLL_Name;
|
||||
|
||||
class function TPCANBasic.Initialize(Channel: TPCANHandle; Btr0Btr1: TPCANBaudrate; HwType: TPCANType; IOPort: LongWord; Interrupt: Word): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Initialize(Channel,Btr0Btr1,HwType,IOPort,Interrupt);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Initialize(Channel: TPCANHandle; Btr0Btr1: TPCANBaudrate): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Initialize(Channel,Btr0Btr1,TPCANType(0), 0,0);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Uninitialize(Channel: TPCANHandle): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Uninitialize(Channel);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Reset(Channel: TPCANHandle): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Reset(Channel);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.GetStatus(Channel: TPCANHandle): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_GetStatus(Channel);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Read(Channel: TPCANHandle; var MessageBuffer: TPCANMsg; var TimestampBuffer: TPCANTimestamp):TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Read(Channel, MessageBuffer, @TimestampBuffer);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Read(Channel: TPCANHandle; var MessageBuffer: TPCANMsg):TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Read(Channel, MessageBuffer, nil);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.Write(Channel: TPCANHandle; var MessageBuffer: TPCANMsg): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_Write(Channel, MessageBuffer);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.FilterMessages(Channel: TPCANHandle; FromID: LongWord; ToID: LongWord; Mode: TPCANMode): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_FilterMessages(Channel, FromID,ToID,Mode);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.GetValue(Channel: TPCANHandle; Parameter: TPCANParameter; NumericBuffer: PLongWord; BufferLength: LongWord): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_GetValue(Channel, Parameter, NumericBuffer, BufferLength);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.GetValue(Channel: TPCANHandle; Parameter: TPCANParameter; StringBuffer: PAnsiChar; BufferLength: LongWord): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_GetValue(Channel, Parameter, StringBuffer, BufferLength);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.SetValue(Channel: TPCANHandle; Parameter: TPCANParameter; NumericBuffer: PLongWord; BufferLength: LongWord): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_SetValue(Channel, Parameter, NumericBuffer, BufferLength);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.SetValue(Channel: TPCANHandle; Parameter: TPCANParameter; StringBuffer: PAnsiChar; BufferLength: LongWord): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_SetValue(Channel, Parameter, StringBuffer, BufferLength);
|
||||
end;
|
||||
|
||||
class function TPCANBasic.GetErrorText(Error: TPCANStatus; Language: Word; StringBuffer: PAnsiChar): TPCANStatus;
|
||||
begin
|
||||
Result:= CAN_GetErrorText(Error, Language, StringBuffer);
|
||||
end;
|
||||
end.
|
||||
567
PCANBasic/PCANBasic.py
Normal file
567
PCANBasic/PCANBasic.py
Normal file
|
|
@ -0,0 +1,567 @@
|
|||
# PCANBasic.py
|
||||
#
|
||||
# ~~~~~~~~~~~~
|
||||
#
|
||||
# PCAN-Basic API
|
||||
#
|
||||
# ~~~~~~~~~~~~
|
||||
#
|
||||
# ------------------------------------------------------------------
|
||||
# Author : Keneth Wagner
|
||||
# Last change: 08.11.2011 Wagner
|
||||
#
|
||||
# Language: Python 2.6
|
||||
# ------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
# more Info at http://www.peak-system.com
|
||||
#
|
||||
|
||||
# Module Imports
|
||||
#
|
||||
from ctypes import *
|
||||
|
||||
#///////////////////////////////////////////////////////////
|
||||
# Type definitions
|
||||
#///////////////////////////////////////////////////////////
|
||||
|
||||
TPCANHandle = c_ubyte # Represents a PCAN hardware channel handle
|
||||
TPCANStatus = int # Represents a PCAN status/error code
|
||||
TPCANParameter = c_ubyte # Represents a PCAN parameter to be read or set
|
||||
TPCANDevice = c_ubyte # Represents a PCAN device
|
||||
TPCANMessageType = c_ubyte # Represents the type of a PCAN message
|
||||
TPCANType = c_ubyte # Represents the type of PCAN hardware to be initialized
|
||||
TPCANMode = c_ubyte # Represents a PCAN filter mode
|
||||
TPCANBaudrate = c_ushort # Represents a PCAN Baud rate register value
|
||||
|
||||
#///////////////////////////////////////////////////////////
|
||||
# Value definitions
|
||||
#///////////////////////////////////////////////////////////
|
||||
|
||||
# Currently defined and supported PCAN channels
|
||||
#
|
||||
PCAN_NONEBUS = TPCANHandle(0x00) # Undefined/default value for a PCAN bus
|
||||
|
||||
PCAN_ISABUS1 = TPCANHandle(0x21) # PCAN-ISA interface, channel 1
|
||||
PCAN_ISABUS2 = TPCANHandle(0x22) # PCAN-ISA interface, channel 2
|
||||
PCAN_ISABUS3 = TPCANHandle(0x23) # PCAN-ISA interface, channel 3
|
||||
PCAN_ISABUS4 = TPCANHandle(0x24) # PCAN-ISA interface, channel 4
|
||||
PCAN_ISABUS5 = TPCANHandle(0x25) # PCAN-ISA interface, channel 5
|
||||
PCAN_ISABUS6 = TPCANHandle(0x26) # PCAN-ISA interface, channel 6
|
||||
PCAN_ISABUS7 = TPCANHandle(0x27) # PCAN-ISA interface, channel 7
|
||||
PCAN_ISABUS8 = TPCANHandle(0x28) # PCAN-ISA interface, channel 8
|
||||
|
||||
PCAN_DNGBUS1 = TPCANHandle(0x31) # PCAN-Dongle/LPT interface, channel 1
|
||||
|
||||
PCAN_PCIBUS1 = TPCANHandle(0x41) # PCAN-PCI interface, channel 1
|
||||
PCAN_PCIBUS2 = TPCANHandle(0x42) # PCAN-PCI interface, channel 2
|
||||
PCAN_PCIBUS3 = TPCANHandle(0x43) # PCAN-PCI interface, channel 3
|
||||
PCAN_PCIBUS4 = TPCANHandle(0x44) # PCAN-PCI interface, channel 4
|
||||
PCAN_PCIBUS5 = TPCANHandle(0x45) # PCAN-PCI interface, channel 5
|
||||
PCAN_PCIBUS6 = TPCANHandle(0x46) # PCAN-PCI interface, channel 6
|
||||
PCAN_PCIBUS7 = TPCANHandle(0x47) # PCAN-PCI interface, channel 7
|
||||
PCAN_PCIBUS8 = TPCANHandle(0x48) # PCAN-PCI interface, channel 8
|
||||
|
||||
PCAN_USBBUS1 = TPCANHandle(0x51) # PCAN-USB interface, channel 1
|
||||
PCAN_USBBUS2 = TPCANHandle(0x52) # PCAN-USB interface, channel 2
|
||||
PCAN_USBBUS3 = TPCANHandle(0x53) # PCAN-USB interface, channel 3
|
||||
PCAN_USBBUS4 = TPCANHandle(0x54) # PCAN-USB interface, channel 4
|
||||
PCAN_USBBUS5 = TPCANHandle(0x55) # PCAN-USB interface, channel 5
|
||||
PCAN_USBBUS6 = TPCANHandle(0x56) # PCAN-USB interface, channel 6
|
||||
PCAN_USBBUS7 = TPCANHandle(0x57) # PCAN-USB interface, channel 7
|
||||
PCAN_USBBUS8 = TPCANHandle(0x58) # PCAN-USB interface, channel 8
|
||||
|
||||
PCAN_PCCBUS1 = TPCANHandle(0x61) # PCAN-PC Card interface, channel 1
|
||||
PCAN_PCCBUS2 = TPCANHandle(0x62) # PCAN-PC Card interface, channel 2
|
||||
|
||||
# Represent the PCAN error and status codes
|
||||
#
|
||||
PCAN_ERROR_OK = TPCANStatus(0x00000) # No error
|
||||
PCAN_ERROR_XMTFULL = TPCANStatus(0x00001) # Transmit buffer in CAN controller is full
|
||||
PCAN_ERROR_OVERRUN = TPCANStatus(0x00002) # CAN controller was read too late
|
||||
PCAN_ERROR_BUSLIGHT = TPCANStatus(0x00004) # Bus error: an error counter reached the 'light' limit
|
||||
PCAN_ERROR_BUSHEAVY = TPCANStatus(0x00008) # Bus error: an error counter reached the 'heavy' limit
|
||||
PCAN_ERROR_BUSOFF = TPCANStatus(0x00010) # Bus error: the CAN controller is in bus-off state
|
||||
PCAN_ERROR_ANYBUSERR = TPCANStatus(PCAN_ERROR_BUSLIGHT | PCAN_ERROR_BUSHEAVY | PCAN_ERROR_BUSOFF) # Mask for all bus errors
|
||||
PCAN_ERROR_QRCVEMPTY = TPCANStatus(0x00020) # Receive queue is empty
|
||||
PCAN_ERROR_QOVERRUN = TPCANStatus(0x00040) # Receive queue was read too late
|
||||
PCAN_ERROR_QXMTFULL = TPCANStatus(0x00080) # Transmit queue is full
|
||||
PCAN_ERROR_REGTEST = TPCANStatus(0x00100) # Test of the CAN controller hardware registers failed (no hardware found)
|
||||
PCAN_ERROR_NODRIVER = TPCANStatus(0x00200) # Driver not loaded
|
||||
PCAN_ERROR_HWINUSE = TPCANStatus(0x00400) # Hardware already in use by a Net
|
||||
PCAN_ERROR_NETINUSE = TPCANStatus(0x00800) # A Client is already connected to the Net
|
||||
PCAN_ERROR_ILLHW = TPCANStatus(0x01400) # Hardware handle is invalid
|
||||
PCAN_ERROR_ILLNET = TPCANStatus(0x01800) # Net handle is invalid
|
||||
PCAN_ERROR_ILLCLIENT = TPCANStatus(0x01C00) # Client handle is invalid
|
||||
PCAN_ERROR_ILLHANDLE = TPCANStatus(PCAN_ERROR_ILLHW | PCAN_ERROR_ILLNET | PCAN_ERROR_ILLCLIENT) # Mask for all handle errors
|
||||
PCAN_ERROR_RESOURCE = TPCANStatus(0x02000) # Resource (FIFO, Client, timeout) cannot be created
|
||||
PCAN_ERROR_ILLPARAMTYPE = TPCANStatus(0x04000) # Invalid parameter
|
||||
PCAN_ERROR_ILLPARAMVAL = TPCANStatus(0x08000) # Invalid parameter value
|
||||
PCAN_ERROR_UNKNOWN = TPCANStatus(0x10000) # Unknow error
|
||||
PCAN_ERROR_ILLDATA = TPCANStatus(0x20000) # Invalid data, function, or action
|
||||
PCAN_ERROR_INITIALIZE = TPCANStatus(0x40000) # Channel is not initialized
|
||||
|
||||
# PCAN devices
|
||||
#
|
||||
PCAN_NONE = TPCANDevice(0x00) # Undefined, unknown or not selected PCAN device value
|
||||
PCAN_PEAKCAN = TPCANDevice(0x01) # PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
PCAN_ISA = TPCANDevice(0x02) # PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
PCAN_DNG = TPCANDevice(0x03) # PCAN-Dongle
|
||||
PCAN_PCI = TPCANDevice(0x04) # PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
PCAN_USB = TPCANDevice(0x05) # PCAN-USB and PCAN-USB Pro
|
||||
PCAN_PCC = TPCANDevice(0x06) # PCAN-PC Card
|
||||
|
||||
# PCAN parameters
|
||||
#
|
||||
PCAN_DEVICE_NUMBER = TPCANParameter(0x01) # PCAN-USB device number parameter
|
||||
PCAN_5VOLTS_POWER = TPCANParameter(0x02) # PCAN-PC Card 5-Volt power parameter
|
||||
PCAN_RECEIVE_EVENT = TPCANParameter(0x03) # PCAN receive event handler parameter
|
||||
PCAN_MESSAGE_FILTER = TPCANParameter(0x04) # PCAN message filter parameter
|
||||
PCAN_API_VERSION = TPCANParameter(0x05) # PCAN-Basic API version parameter
|
||||
PCAN_CHANNEL_VERSION = TPCANParameter(0x06) # PCAN device channel version parameter
|
||||
PCAN_BUSOFF_AUTORESET = TPCANParameter(0x07) # PCAN Reset-On-Busoff parameter
|
||||
PCAN_LISTEN_ONLY = TPCANParameter(0x08) # PCAN Listen-Only parameter
|
||||
PCAN_LOG_LOCATION = TPCANParameter(0x09) # Directory path for trace files
|
||||
PCAN_LOG_STATUS = TPCANParameter(0x0A) # Debug-Trace activation status
|
||||
PCAN_LOG_CONFIGURE = TPCANParameter(0x0B) # Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
PCAN_LOG_TEXT = TPCANParameter(0x0C) # Custom insertion of text into the log file
|
||||
PCAN_CHANNEL_CONDITION = TPCANParameter(0x0D) # Availability status of a PCAN-Channel
|
||||
PCAN_HARDWARE_NAME = TPCANParameter(0x0E) # PCAN hardware name parameter
|
||||
PCAN_RECEIVE_STATUS = TPCANParameter(0x0F) # Message reception status of a PCAN-Channel
|
||||
PCAN_CONTROLLER_NUMBER = TPCANParameter(0x010) # CAN-Controller number of a PCAN-Channel
|
||||
|
||||
# PCAN parameter values
|
||||
#
|
||||
PCAN_PARAMETER_OFF = int(0x00) # The PCAN parameter is not set (inactive)
|
||||
PCAN_PARAMETER_ON = int(0x01) # The PCAN parameter is set (active)
|
||||
PCAN_FILTER_CLOSE = int(0x00) # The PCAN filter is closed. No messages will be received
|
||||
PCAN_FILTER_OPEN = int(0x01) # The PCAN filter is fully opened. All messages will be received
|
||||
PCAN_FILTER_CUSTOM = int(0x02) # The PCAN filter is custom configured. Only registered messages will be received
|
||||
PCAN_CHANNEL_UNAVAILABLE = int(0x00) # The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
PCAN_CHANNEL_AVAILABLE = int(0x01) # The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
PCAN_CHANNEL_OCCUPIED = int(0x02) # The PCAN-Channel handle is valid, and is already being used
|
||||
|
||||
LOG_FUNCTION_DEFAULT = int(0x00) # Logs system exceptions / errors
|
||||
LOG_FUNCTION_ENTRY = int(0x01) # Logs the entries to the PCAN-Basic API functions
|
||||
LOG_FUNCTION_PARAMETERS = int(0x02) # Logs the parameters passed to the PCAN-Basic API functions
|
||||
LOG_FUNCTION_LEAVE = int(0x04) # Logs the exits from the PCAN-Basic API functions
|
||||
LOG_FUNCTION_WRITE = int(0x08) # Logs the CAN messages passed to the CAN_Write function
|
||||
LOG_FUNCTION_READ = int(0x10) # Logs the CAN messages received within the CAN_Read function
|
||||
LOG_FUNCTION_ALL = int(0xFFFF) # Logs all possible information within the PCAN-Basic API functions
|
||||
|
||||
# PCAN message types
|
||||
#
|
||||
PCAN_MESSAGE_STANDARD = TPCANMessageType(0x00) # The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
PCAN_MESSAGE_RTR = TPCANMessageType(0x01) # The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
PCAN_MESSAGE_EXTENDED = TPCANMessageType(0x02) # The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
PCAN_MESSAGE_STATUS = TPCANMessageType(0x80) # The PCAN message represents a PCAN status message
|
||||
|
||||
# Frame Type / Initialization Mode
|
||||
#
|
||||
PCAN_MODE_STANDARD = PCAN_MESSAGE_STANDARD
|
||||
PCAN_MODE_EXTENDED = PCAN_MESSAGE_EXTENDED
|
||||
|
||||
# Baud rate codes = BTR0/BTR1 register values for the CAN controller.
|
||||
# You can define your own Baud rate with the BTROBTR1 register.
|
||||
# Take a look at www.peak-system.com for our free software "BAUDTOOL"
|
||||
# to calculate the BTROBTR1 register for every baudrate and sample point.
|
||||
#
|
||||
PCAN_BAUD_1M = TPCANBaudrate(0x0014) # 1 MBit/s
|
||||
PCAN_BAUD_800K = TPCANBaudrate(0x0016) # 800 kBit/s
|
||||
PCAN_BAUD_500K = TPCANBaudrate(0x001C) # 500 kBit/s
|
||||
PCAN_BAUD_250K = TPCANBaudrate(0x011C) # 250 kBit/s
|
||||
PCAN_BAUD_125K = TPCANBaudrate(0x031C) # 125 kBit/s
|
||||
PCAN_BAUD_100K = TPCANBaudrate(0x432F) # 100 kBit/s
|
||||
PCAN_BAUD_95K = TPCANBaudrate(0xC34E) # 95,238 kBit/s
|
||||
PCAN_BAUD_83K = TPCANBaudrate(0x4B14) # 83,333 kBit/s
|
||||
PCAN_BAUD_50K = TPCANBaudrate(0x472F) # 50 kBit/s
|
||||
PCAN_BAUD_47K = TPCANBaudrate(0x1414) # 47,619 kBit/s
|
||||
PCAN_BAUD_33K = TPCANBaudrate(0x1D14) # 33,333 kBit/s
|
||||
PCAN_BAUD_20K = TPCANBaudrate(0x532F) # 20 kBit/s
|
||||
PCAN_BAUD_10K = TPCANBaudrate(0x672F) # 10 kBit/s
|
||||
PCAN_BAUD_5K = TPCANBaudrate(0x7F7F) # 5 kBit/s
|
||||
|
||||
# Supported No-Plug-And-Play Hardware types
|
||||
#
|
||||
PCAN_TYPE_ISA = TPCANType(0x01) # PCAN-ISA 82C200
|
||||
PCAN_TYPE_ISA_SJA = TPCANType(0x09) # PCAN-ISA SJA1000
|
||||
PCAN_TYPE_ISA_PHYTEC = TPCANType(0x04) # PHYTEC ISA
|
||||
PCAN_TYPE_DNG = TPCANType(0x02) # PCAN-Dongle 82C200
|
||||
PCAN_TYPE_DNG_EPP = TPCANType(0x03) # PCAN-Dongle EPP 82C200
|
||||
PCAN_TYPE_DNG_SJA = TPCANType(0x05) # PCAN-Dongle SJA1000
|
||||
PCAN_TYPE_DNG_SJA_EPP = TPCANType(0x06) # PCAN-Dongle EPP SJA1000
|
||||
|
||||
# Represents a PCAN message
|
||||
#
|
||||
class TPCANMsg (Structure):
|
||||
"""
|
||||
Represents a PCAN message
|
||||
"""
|
||||
_fields_ = [ ("ID", c_ulong), # 11/29-bit message identifier
|
||||
("MSGTYPE", TPCANMessageType), # Type of the message
|
||||
("LEN", c_ubyte), # Data Length Code of the message (0..8)
|
||||
("DATA", c_ubyte * 8) ] # Data of the message (DATA[0]..DATA[7])
|
||||
|
||||
# Represents a timestamp of a received PCAN message
|
||||
# Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
#
|
||||
class TPCANTimestamp (Structure):
|
||||
"""
|
||||
Represents a timestamp of a received PCAN message
|
||||
Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
"""
|
||||
_fields_ = [ ("millis", c_ulong), # Base-value: milliseconds: 0.. 2^32-1
|
||||
("millis_overflow", c_ushort), # Roll-arounds of millis
|
||||
("micros", c_ushort) ] # Microseconds: 0..999
|
||||
|
||||
#///////////////////////////////////////////////////////////
|
||||
# PCAN-Basic API function declarations
|
||||
#///////////////////////////////////////////////////////////
|
||||
|
||||
# PCAN-Basic API class implementation
|
||||
#
|
||||
class PCANBasic:
|
||||
"""
|
||||
PCAN-Basic API class implementation
|
||||
"""
|
||||
def __init__(self):
|
||||
# Loads the PCANBasic.dll
|
||||
#
|
||||
self.__m_dllBasic = windll.LoadLibrary("PCANBasic")
|
||||
if self.__m_dllBasic == None:
|
||||
print "Exception: The PCAN-Basic DLL couldn't be loaded!"
|
||||
|
||||
# Initializes a PCAN Channel
|
||||
#
|
||||
def Initialize(
|
||||
self,
|
||||
Channel,
|
||||
Btr0Btr1,
|
||||
HwType = TPCANType(0),
|
||||
IOPort = c_uint(0),
|
||||
Interrupt = c_ushort(0)):
|
||||
|
||||
"""
|
||||
Initializes a PCAN Channel
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
Btr0Btr1 : The speed for the communication (BTR0BTR1 code)
|
||||
HwType : NON PLUG&PLAY: The type of hardware and operation mode
|
||||
IOPort : NON PLUG&PLAY: The I/O address for the parallel port
|
||||
Interrupt: NON PLUG&PLAY: Interrupt number of the parallel port
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_Initialize(Channel,Btr0Btr1,HwType,IOPort,Interrupt)
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.Initialize"
|
||||
raise
|
||||
|
||||
# Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
#
|
||||
def Uninitialize(
|
||||
self,
|
||||
Channel):
|
||||
|
||||
"""
|
||||
Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
|
||||
Remarks:
|
||||
Giving the TPCANHandle value "PCAN_NONEBUS", uninitialize all initialized channels
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_Uninitialize(Channel)
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.Uninitialize"
|
||||
raise
|
||||
|
||||
# Resets the receive and transmit queues of the PCAN Channel
|
||||
#
|
||||
def Reset(
|
||||
self,
|
||||
Channel):
|
||||
|
||||
"""
|
||||
Resets the receive and transmit queues of the PCAN Channel
|
||||
|
||||
Remarks:
|
||||
A reset of the CAN controller is not performed
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_Reset(Channel)
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.Reset"
|
||||
raise
|
||||
|
||||
# Gets the current status of a PCAN Channel
|
||||
#
|
||||
def GetStatus(
|
||||
self,
|
||||
Channel):
|
||||
|
||||
"""
|
||||
Gets the current status of a PCAN Channel
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_GetStatus(Channel)
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.GetStatus"
|
||||
raise
|
||||
|
||||
# Reads a CAN message from the receive queue of a PCAN Channel
|
||||
#
|
||||
def Read(
|
||||
self,
|
||||
Channel):
|
||||
|
||||
"""
|
||||
Reads a CAN message from the receive queue of a PCAN Channel
|
||||
|
||||
Remarks:
|
||||
The return value of this method is a 3-touple, where
|
||||
the first value is the result (TPCANStatus) of the method.
|
||||
The order of the values are:
|
||||
[0]: A TPCANStatus error code
|
||||
[1]: A TPCANMsg structure with the CAN message read
|
||||
[2]: A TPCANTimestamp structure with the time when a message was read
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
|
||||
Returns:
|
||||
A touple with three values
|
||||
"""
|
||||
try:
|
||||
msg = TPCANMsg()
|
||||
timestamp = TPCANTimestamp()
|
||||
res = self.__m_dllBasic.CAN_Read(Channel,byref(msg),byref(timestamp))
|
||||
return TPCANStatus(res),msg,timestamp
|
||||
except:
|
||||
print "Exception on PCANBasic.Read"
|
||||
raise
|
||||
|
||||
# Transmits a CAN message
|
||||
#
|
||||
def Write(
|
||||
self,
|
||||
Channel,
|
||||
MessageBuffer):
|
||||
|
||||
"""
|
||||
Transmits a CAN message
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
MessageBuffer: A TPCANMsg representing the CAN message to be sent
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_Write(Channel,byref(MessageBuffer))
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.Write"
|
||||
raise
|
||||
|
||||
# Configures the reception filter
|
||||
#
|
||||
def FilterMessages(
|
||||
self,
|
||||
Channel,
|
||||
FromID,
|
||||
ToID,
|
||||
Mode):
|
||||
|
||||
"""
|
||||
Configures the reception filter
|
||||
|
||||
Remarks:
|
||||
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.
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
FromID : A c_ulong value with the lowest CAN ID to be received
|
||||
ToID : A c_ulong value with the highest CAN ID to be received
|
||||
Mode : A TPCANMode representing the message type (Standard, 11-bit
|
||||
identifier, or Extended, 29-bit identifier)
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
res = self.__m_dllBasic.CAN_FilterMessages(Channel,FromID,ToID,Mode)
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.FilterMessages"
|
||||
raise
|
||||
|
||||
# Retrieves a PCAN Channel value
|
||||
#
|
||||
def GetValue(
|
||||
self,
|
||||
Channel,
|
||||
Parameter):
|
||||
|
||||
"""
|
||||
Retrieves a PCAN Channel value
|
||||
|
||||
Remarks:
|
||||
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 return value of this method is a 2-touple, where
|
||||
the first value is the result (TPCANStatus) of the method and
|
||||
the second one, the asked value
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
Parameter : The TPCANParameter parameter to get
|
||||
|
||||
Returns:
|
||||
A touple with 2 values
|
||||
"""
|
||||
try:
|
||||
if Parameter == PCAN_API_VERSION or Parameter == PCAN_CHANNEL_VERSION or Parameter == PCAN_LOG_LOCATION:
|
||||
mybuffer = create_string_buffer(256)
|
||||
else:
|
||||
mybuffer = c_int(0)
|
||||
|
||||
res = self.__m_dllBasic.CAN_GetValue(Channel,Parameter,byref(mybuffer),sizeof(mybuffer))
|
||||
return TPCANStatus(res),mybuffer.value
|
||||
except:
|
||||
print "Exception on PCANBasic.GetValue"
|
||||
raise
|
||||
|
||||
# Returns a descriptive text of a given TPCANStatus
|
||||
# error code, in any desired language
|
||||
#
|
||||
def SetValue(
|
||||
self,
|
||||
Channel,
|
||||
Parameter,
|
||||
Buffer):
|
||||
|
||||
"""
|
||||
Returns a descriptive text of a given TPCANStatus error
|
||||
code, in any desired language
|
||||
|
||||
Remarks:
|
||||
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.
|
||||
|
||||
Parameters:
|
||||
Channel : A TPCANHandle representing a PCAN Channel
|
||||
Parameter : The TPCANParameter parameter to set
|
||||
Buffer : Buffer with the value to be set
|
||||
BufferLength : Size in bytes of the buffer
|
||||
|
||||
Returns:
|
||||
A TPCANStatus error code
|
||||
"""
|
||||
try:
|
||||
if Parameter == PCAN_LOG_LOCATION or Parameter == PCAN_LOG_TEXT:
|
||||
mybuffer = create_string_buffer(256)
|
||||
else:
|
||||
mybuffer = c_int(0)
|
||||
|
||||
mybuffer.value = Buffer
|
||||
res = self.__m_dllBasic.CAN_SetValue(Channel,Parameter,byref(mybuffer),sizeof(mybuffer))
|
||||
return TPCANStatus(res)
|
||||
except:
|
||||
print "Exception on PCANBasic.SetValue"
|
||||
raise
|
||||
|
||||
def GetErrorText(
|
||||
self,
|
||||
Error,
|
||||
Language = 0):
|
||||
|
||||
"""
|
||||
Configures or sets a PCAN Channel value
|
||||
|
||||
Remarks:
|
||||
|
||||
The current languages available for translation are:
|
||||
Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
Italian (0x10) and French (0x0C)
|
||||
|
||||
The return value of this method is a 2-touple, where
|
||||
the first value is the result (TPCANStatus) of the method and
|
||||
the second one, the error text
|
||||
|
||||
Parameters:
|
||||
Error : A TPCANStatus error code
|
||||
Language : Indicates a 'Primary language ID' (Default is Neutral(0))
|
||||
|
||||
Returns:
|
||||
A touple with 2 values
|
||||
"""
|
||||
try:
|
||||
mybuffer = create_string_buffer(256)
|
||||
res = self.__m_dllBasic.CAN_GetErrorText(Error,Language,byref(mybuffer))
|
||||
return TPCANStatus(res),mybuffer.value
|
||||
except:
|
||||
print "Exception on PCANBasic.GetErrorText"
|
||||
raise
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
PCANBasic/PCANBasic.pyc
Normal file
BIN
PCANBasic/PCANBasic.pyc
Normal file
Binary file not shown.
852
PCANBasic/PCANBasic.vb
Normal file
852
PCANBasic/PCANBasic.vb
Normal file
|
|
@ -0,0 +1,852 @@
|
|||
' PCANBasic.cs
|
||||
'
|
||||
' ~~~~~~~~~~~~
|
||||
'
|
||||
' PCAN-Basic API
|
||||
'
|
||||
' ~~~~~~~~~~~~
|
||||
'
|
||||
' ------------------------------------------------------------------
|
||||
' Author : Keneth Wagner
|
||||
' Last change: 08.11.2011 Wagner
|
||||
'
|
||||
' Language: VB .NET
|
||||
' ------------------------------------------------------------------
|
||||
'
|
||||
' Copyright (C) 1999-2012 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.Byte
|
||||
|
||||
Namespace Peak.Can.Basic
|
||||
#Region "Enumerations"
|
||||
''' <summary>
|
||||
''' Represents a PCAN status/error code
|
||||
''' </summary>
|
||||
<Flags()> _
|
||||
Public Enum TPCANStatus As UInt32
|
||||
''' <summary>
|
||||
''' No error
|
||||
''' </summary>
|
||||
PCAN_ERROR_OK = &H0
|
||||
''' <summary>
|
||||
''' Transmit buffer in CAN controller is full
|
||||
''' </summary>
|
||||
PCAN_ERROR_XMTFULL = &H1
|
||||
''' <summary>
|
||||
''' CAN controller was read too late
|
||||
''' </summary>
|
||||
PCAN_ERROR_OVERRUN = &H2
|
||||
''' <summary>
|
||||
''' Bus error: an error counter reached the 'light' limit
|
||||
''' </summary>
|
||||
PCAN_ERROR_BUSLIGHT = &H4
|
||||
''' <summary>
|
||||
''' Bus error: an error counter reached the 'heavy' limit
|
||||
''' </summary>
|
||||
PCAN_ERROR_BUSHEAVY = &H8
|
||||
''' <summary>
|
||||
''' Bus error: the CAN controller is in bus-off state
|
||||
''' </summary>
|
||||
PCAN_ERROR_BUSOFF = &H10
|
||||
''' <summary>
|
||||
''' Mask for all bus errors
|
||||
''' </summary>
|
||||
PCAN_ERROR_ANYBUSERR = (PCAN_ERROR_BUSLIGHT Or PCAN_ERROR_BUSHEAVY Or PCAN_ERROR_BUSOFF)
|
||||
''' <summary>
|
||||
''' Receive queue is empty
|
||||
''' </summary>
|
||||
PCAN_ERROR_QRCVEMPTY = &H20
|
||||
''' <summary>
|
||||
''' Receive queue was read too late
|
||||
''' </summary>
|
||||
PCAN_ERROR_QOVERRUN = &H40
|
||||
''' <summary>
|
||||
''' Transmit queue is full
|
||||
''' </summary>
|
||||
PCAN_ERROR_QXMTFULL = &H80
|
||||
''' <summary>
|
||||
''' Test of the CAN controller hardware registers failed (no hardware found)
|
||||
''' </summary>
|
||||
PCAN_ERROR_REGTEST = &H100
|
||||
''' <summary>
|
||||
''' Driver not loaded
|
||||
''' </summary>
|
||||
PCAN_ERROR_NODRIVER = &H200
|
||||
''' <summary>
|
||||
''' Hardware already in use by a Net
|
||||
''' </summary>
|
||||
PCAN_ERROR_HWINUSE = &H400
|
||||
''' <summary>
|
||||
''' A Client is already connected to the Net
|
||||
''' </summary>
|
||||
PCAN_ERROR_NETINUSE = &H800
|
||||
''' <summary>
|
||||
''' Hardware handle is invalid
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLHW = &H1400
|
||||
''' <summary>
|
||||
''' Net handle is invalid
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLNET = &H1800
|
||||
''' <summary>
|
||||
''' Client handle is invalid
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLCLIENT = &H1C00
|
||||
''' <summary>
|
||||
''' Mask for all handle errors
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLHANDLE = (PCAN_ERROR_ILLHW Or PCAN_ERROR_ILLNET Or PCAN_ERROR_ILLCLIENT)
|
||||
''' <summary>
|
||||
''' Resource (FIFO, Client, timeout) cannot be created
|
||||
''' </summary>
|
||||
PCAN_ERROR_RESOURCE = &H2000
|
||||
''' <summary>
|
||||
''' Invalid parameter
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLPARAMTYPE = &H4000
|
||||
''' <summary>
|
||||
''' Invalid parameter value
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLPARAMVAL = &H8000
|
||||
''' <summary>
|
||||
''' Unknow error
|
||||
''' </summary>
|
||||
PCAN_ERROR_UNKNOWN = &H10000
|
||||
''' <summary>
|
||||
''' Invalid data, function, or action.
|
||||
''' </summary>
|
||||
PCAN_ERROR_ILLDATA = &H20000
|
||||
''' <summary>
|
||||
''' Channel is not initialized
|
||||
''' </summary>
|
||||
PCAN_ERROR_INITIALIZE = &H40000
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents a PCAN device
|
||||
''' </summary>
|
||||
Public Enum TPCANDevice As Byte
|
||||
''' <summary>
|
||||
''' Undefined, unknown or not selected PCAN device value
|
||||
''' </summary>
|
||||
PCAN_NONE = 0
|
||||
''' <summary>
|
||||
''' PCAN Non-Plug And Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
''' </summary>
|
||||
PCAN_PEAKCAN = 1
|
||||
''' <summary>
|
||||
''' PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
''' </summary>
|
||||
PCAN_ISA = 2
|
||||
''' <summary>
|
||||
''' PCAN-Dongle
|
||||
''' </summary>
|
||||
PCAN_DNG = 3
|
||||
''' <summary>
|
||||
''' PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
''' </summary>
|
||||
PCAN_PCI = 4
|
||||
''' <summary>
|
||||
''' PCAN-USB and PCAN-USB Pro
|
||||
''' </summary>
|
||||
PCAN_USB = 5
|
||||
''' <summary>
|
||||
''' PCAN-PC Card
|
||||
''' </summary>
|
||||
PCAN_PCC = 6
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents a PCAN parameter to be read or set
|
||||
''' </summary>
|
||||
Public Enum TPCANParameter As Byte
|
||||
''' <summary>
|
||||
''' PCAN-USB device number parameter
|
||||
''' </summary>
|
||||
PCAN_DEVICE_NUMBER = 1
|
||||
''' <summary>
|
||||
''' PCAN-PC Card 5-Volt power parameter
|
||||
''' </summary>
|
||||
PCAN_5VOLTS_POWER = 2
|
||||
''' <summary>
|
||||
''' PCAN receive event handler parameter
|
||||
''' </summary>
|
||||
PCAN_RECEIVE_EVENT = 3
|
||||
''' <summary>
|
||||
''' PCAN message filter parameter
|
||||
''' </summary>
|
||||
PCAN_MESSAGE_FILTER = 4
|
||||
''' <summary>
|
||||
''' PCAN-Basic API version parameter
|
||||
''' </summary>
|
||||
PCAN_API_VERSION = 5
|
||||
''' <summary>
|
||||
''' PCAN device channel version parameter
|
||||
''' </summary>
|
||||
PCAN_CHANNEL_VERSION = 6
|
||||
''' <summary>
|
||||
''' PCAN Reset-On-Busoff parameter
|
||||
''' </summary>
|
||||
PCAN_BUSOFF_AUTORESET = 7
|
||||
''' <summary>
|
||||
''' PCAN Listen-Only parameter
|
||||
''' </summary>
|
||||
PCAN_LISTEN_ONLY = 8
|
||||
''' <summary>
|
||||
''' Directory path for trace files
|
||||
''' </summary>
|
||||
PCAN_LOG_LOCATION = 9
|
||||
''' <summary>
|
||||
''' Debug-Trace activation status
|
||||
''' </summary>
|
||||
PCAN_LOG_STATUS = 10
|
||||
''' <summary>
|
||||
''' Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
''' </summary>
|
||||
PCAN_LOG_CONFIGURE = 11
|
||||
''' <summary>
|
||||
''' Custom insertion of text into the log file
|
||||
''' </summary>
|
||||
PCAN_LOG_TEXT = 12
|
||||
''' <summary>
|
||||
''' Availability status of a PCAN-Channel
|
||||
''' </summary>
|
||||
PCAN_CHANNEL_CONDITION = 13
|
||||
''' <summary>
|
||||
''' PCAN hardware name parameter
|
||||
''' </summary>
|
||||
PCAN_HARDWARE_NAME = 14
|
||||
''' <summary>
|
||||
''' Message reception status of a PCAN-Channel
|
||||
''' </summary>
|
||||
PCAN_RECEIVE_STATUS = 15
|
||||
''' <summary>
|
||||
''' CAN-Controller number of a PCAN-Channel
|
||||
''' </summary>
|
||||
PCAN_CONTROLLER_NUMBER = 16
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents the type of a PCAN message
|
||||
''' </summary>
|
||||
<Flags()> _
|
||||
Public Enum TPCANMessageType As Byte
|
||||
''' <summary>
|
||||
''' The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
''' </summary>
|
||||
PCAN_MESSAGE_STANDARD = &H0
|
||||
''' <summary>
|
||||
''' The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
''' </summary>
|
||||
PCAN_MESSAGE_RTR = &H1
|
||||
''' <summary>
|
||||
''' The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
''' </summary>
|
||||
PCAN_MESSAGE_EXTENDED = &H2
|
||||
''' <summary>
|
||||
''' The PCAN message represents a PCAN status message
|
||||
''' </summary>
|
||||
PCAN_MESSAGE_STATUS = &H80
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents a PCAN filter mode
|
||||
''' </summary>
|
||||
Public Enum TPCANMode As Byte
|
||||
''' <summary>
|
||||
''' Mode is Standard (11-bit identifier)
|
||||
''' </summary>
|
||||
PCAN_MODE_STANDARD = TPCANMessageType.PCAN_MESSAGE_STANDARD
|
||||
''' <summary>
|
||||
''' Mode is Extended (29-bit identifier)
|
||||
''' </summary>
|
||||
PCAN_MODE_EXTENDED = TPCANMessageType.PCAN_MESSAGE_EXTENDED
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents a PCAN Baud rate register value
|
||||
''' </summary>
|
||||
Public Enum TPCANBaudrate As UInt16
|
||||
''' <summary>
|
||||
''' 1 MBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_1M = &H14
|
||||
''' <summary>
|
||||
''' 800 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_800K = &H16
|
||||
''' <summary>
|
||||
''' 500 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_500K = &H1C
|
||||
''' <summary>
|
||||
''' 250 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_250K = &H11C
|
||||
''' <summary>
|
||||
''' 125 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_125K = &H31C
|
||||
''' <summary>
|
||||
''' 100 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_100K = &H432F
|
||||
''' <summary>
|
||||
''' 95,238 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_95K = &HC34E
|
||||
''' <summary>
|
||||
''' 83,333 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_83K = &H4B14
|
||||
''' <summary>
|
||||
''' 50 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_50K = &H472F
|
||||
''' <summary>
|
||||
''' 47,619 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_47K = &H1414
|
||||
''' <summary>
|
||||
''' 33,333 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_33K = &H1D14
|
||||
''' <summary>
|
||||
''' 20 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_20K = &H532F
|
||||
''' <summary>
|
||||
''' 10 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_10K = &H672F
|
||||
''' <summary>
|
||||
''' 5 kBit/s
|
||||
''' </summary>
|
||||
PCAN_BAUD_5K = &H7F7F
|
||||
End Enum
|
||||
|
||||
''' <summary>
|
||||
''' Represents the type of PCAN (non plug and play) hardware to be initialized
|
||||
''' </summary>
|
||||
Public Enum TPCANType As Byte
|
||||
''' <summary>
|
||||
''' PCAN-ISA 82C200
|
||||
''' </summary>
|
||||
PCAN_TYPE_ISA = &H1
|
||||
''' <summary>
|
||||
''' PCAN-ISA SJA1000
|
||||
''' </summary>
|
||||
PCAN_TYPE_ISA_SJA = &H9
|
||||
''' <summary>
|
||||
''' PHYTEC ISA
|
||||
''' </summary>
|
||||
PCAN_TYPE_ISA_PHYTEC = &H4
|
||||
''' <summary>
|
||||
''' PCAN-Dongle 82C200
|
||||
''' </summary>
|
||||
PCAN_TYPE_DNG = &H2
|
||||
''' <summary>
|
||||
''' PCAN-Dongle EPP 82C200
|
||||
''' </summary>
|
||||
PCAN_TYPE_DNG_EPP = &H3
|
||||
''' <summary>
|
||||
''' PCAN-Dongle SJA1000
|
||||
''' </summary>
|
||||
PCAN_TYPE_DNG_SJA = &H5
|
||||
''' <summary>
|
||||
''' PCAN-Dongle EPP SJA1000
|
||||
''' </summary>
|
||||
PCAN_TYPE_DNG_SJA_EPP = &H6
|
||||
End Enum
|
||||
#End Region
|
||||
|
||||
#Region "Structures"
|
||||
''' <summary>
|
||||
''' Represents a PCAN message
|
||||
''' </summary>
|
||||
Public Structure TPCANMsg
|
||||
''' <summary>
|
||||
''' 11/29-bit message identifier
|
||||
''' </summary>
|
||||
Public ID As UInt32
|
||||
''' <summary>
|
||||
''' Type of the message
|
||||
''' </summary>
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
Public MSGTYPE As TPCANMessageType
|
||||
''' <summary>
|
||||
''' Data Length Code of the message (0..8)
|
||||
''' </summary>
|
||||
Public LEN As Byte
|
||||
''' <summary>
|
||||
''' Data of the message (DATA[0]..DATA[7])
|
||||
''' </summary>
|
||||
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _
|
||||
Public DATA As Byte()
|
||||
End Structure
|
||||
|
||||
''' <summary>
|
||||
''' Represents a timestamp of a received PCAN message.
|
||||
''' Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
''' </summary>
|
||||
Public Structure TPCANTimestamp
|
||||
''' <summary>
|
||||
''' Base-value: milliseconds: 0.. 2^32-1
|
||||
''' </summary>
|
||||
Public millis As UInt32
|
||||
''' <summary>
|
||||
''' Roll-arounds of millis
|
||||
''' </summary>
|
||||
Public millis_overflow As UInt16
|
||||
''' <summary>
|
||||
''' Microseconds: 0..999
|
||||
''' </summary>
|
||||
Public micros As UInt16
|
||||
End Structure
|
||||
#End Region
|
||||
|
||||
#Region "PCANBasic class"
|
||||
''' <summary>
|
||||
''' PCAN-Basic API class implementation
|
||||
''' </summary>
|
||||
Public NotInheritable Class PCANBasic
|
||||
#Region "PCAN-BUS Handles Definition"
|
||||
''' <summary>
|
||||
''' Undefined/default value for a PCAN bus
|
||||
''' </summary>
|
||||
Public Const PCAN_NONEBUS As TPCANHandle = &H0
|
||||
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 1
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS1 As TPCANHandle = &H21
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 2
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS2 As TPCANHandle = &H22
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 3
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS3 As TPCANHandle = &H23
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 4
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS4 As TPCANHandle = &H24
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 5
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS5 As TPCANHandle = &H25
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 6
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS6 As TPCANHandle = &H26
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 7
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS7 As TPCANHandle = &H27
|
||||
''' <summary>
|
||||
''' PCAN-ISA interface, channel 8
|
||||
''' </summary>
|
||||
Public Const PCAN_ISABUS8 As TPCANHandle = &H28
|
||||
|
||||
''' <summary>
|
||||
''' PPCAN-Dongle/LPT interface, channel 1
|
||||
''' </summary>
|
||||
Public Const PCAN_DNGBUS1 As TPCANHandle = &H31
|
||||
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 1
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS1 As TPCANHandle = &H41
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 2
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS2 As TPCANHandle = &H42
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 3
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS3 As TPCANHandle = &H43
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 4
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS4 As TPCANHandle = &H44
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 5
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS5 As TPCANHandle = &H45
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 6
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS6 As TPCANHandle = &H46
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 7
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS7 As TPCANHandle = &H47
|
||||
''' <summary>
|
||||
''' PCAN-PCI interface, channel 8
|
||||
''' </summary>
|
||||
Public Const PCAN_PCIBUS8 As TPCANHandle = &H48
|
||||
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 1
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS1 As TPCANHandle = &H51
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 2
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS2 As TPCANHandle = &H52
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 3
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS3 As TPCANHandle = &H53
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 4
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS4 As TPCANHandle = &H54
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 5
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS5 As TPCANHandle = &H55
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 6
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS6 As TPCANHandle = &H56
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 7
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS7 As TPCANHandle = &H57
|
||||
''' <summary>
|
||||
''' PCAN-USB interface, channel 8
|
||||
''' </summary>
|
||||
Public Const PCAN_USBBUS8 As TPCANHandle = &H58
|
||||
|
||||
''' <summary>
|
||||
''' PCAN-PC Card interface, channel 1
|
||||
''' </summary>
|
||||
Public Const PCAN_PCCBUS1 As TPCANHandle = &H61
|
||||
''' <summary>
|
||||
''' PCAN-PC Card interface, channel 2
|
||||
''' </summary>
|
||||
Public Const PCAN_PCCBUS2 As TPCANHandle = &H62
|
||||
#End Region
|
||||
|
||||
#Region "Parameter values definition"
|
||||
''' <summary>
|
||||
''' The PCAN parameter is not set (inactive)
|
||||
''' </summary>
|
||||
Public Const PCAN_PARAMETER_OFF As Integer = 0
|
||||
''' <summary>
|
||||
''' The PCAN parameter is set (active)
|
||||
''' </summary>
|
||||
Public Const PCAN_PARAMETER_ON As Integer = 1
|
||||
''' <summary>
|
||||
''' The PCAN filter is closed. No messages will be received
|
||||
''' </summary>
|
||||
Public Const PCAN_FILTER_CLOSE As Integer = 0
|
||||
''' <summary>
|
||||
''' The PCAN filter is fully opened. All messages will be received
|
||||
''' </summary>
|
||||
Public Const PCAN_FILTER_OPEN As Integer = 1
|
||||
''' <summary>
|
||||
''' The PCAN filter is custom configured. Only registered
|
||||
''' messages will be received
|
||||
''' </summary>
|
||||
Public Const PCAN_FILTER_CUSTOM As Integer = 2
|
||||
''' <summary>
|
||||
''' The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
''' </summary>
|
||||
Public Const PCAN_CHANNEL_UNAVAILABLE As Integer = 0
|
||||
''' <summary>
|
||||
''' The PCAN-Channel handle is available to be connected (Plug and Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
''' </summary>
|
||||
Public Const PCAN_CHANNEL_AVAILABLE As Integer = 1
|
||||
''' <summary>
|
||||
''' The PCAN-Channel handle is valid, and is already being used
|
||||
''' </summary>
|
||||
Public Const PCAN_CHANNEL_OCCUPIED As Integer = 2
|
||||
|
||||
''' <summary>
|
||||
''' Logs system exceptions / errors
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_DEFAULT As Integer = &H0
|
||||
''' <summary>
|
||||
''' Logs the entries to the PCAN-Basic API functions
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_ENTRY As Integer = &H1
|
||||
''' <summary>
|
||||
''' Logs the parameters passed to the PCAN-Basic API functions
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_PARAMETERS As Integer = &H2
|
||||
''' <summary>
|
||||
''' Logs the exits from the PCAN-Basic API functions
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_LEAVE As Integer = &H4
|
||||
''' <summary>
|
||||
''' Logs the CAN messages passed to the CAN_Write function
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_WRITE As Integer = &H8
|
||||
''' <summary>
|
||||
''' Logs the CAN messages received within the CAN_Read function
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_READ As Integer = &H10
|
||||
''' <summary>
|
||||
''' Logs all possible information within the PCAN-Basic API functions
|
||||
''' </summary>
|
||||
Public Const LOG_FUNCTION_ALL As Integer = &HFFFF
|
||||
#End Region
|
||||
|
||||
#Region "PCANBasic API Implementation"
|
||||
''' <summary>
|
||||
''' Initializes a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
''' <param name="HwType">NON PLUG AND PLAY: The type of hardware and operation mode</param>
|
||||
''' <param name="IOPort">NON PLUG AND PLAY: The I/O address for the parallel port</param>
|
||||
''' <param name="Interrupt">NON PLUG AND PLAY: Interrupt number of the parallel por</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Initialize")> _
|
||||
Public Shared Function Initialize( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
<MarshalAs(UnmanagedType.U2)> _
|
||||
ByVal Btr0Btr1 As TPCANBaudrate, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal HwType As TPCANType, _
|
||||
ByVal IOPort As UInt32, _
|
||||
ByVal Interrupt As UInt16) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Initializes a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
Public Shared Function Initialize( _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByVal Btr0Btr1 As TPCANBaudrate) As TPCANStatus
|
||||
Return Initialize(Channel, Btr0Btr1, 0, 0, 0)
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
''' </summary>
|
||||
''' <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
''' uninitialize all initialized channels</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Uninitialize")> _
|
||||
Public Shared Function Uninitialize( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Resets the receive and transmit queues of the PCAN Channel
|
||||
''' </summary>
|
||||
''' <remarks>A reset of the CAN controller is not performed</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Reset")> _
|
||||
Public Shared Function Reset( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Gets the current status of a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_GetStatus")> _
|
||||
Public Shared Function GetStatus( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Reads a CAN message from the receive queue of a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
''' <param name="TimestampBuffer">A TPCANTimestamp structure buffer to get
|
||||
''' the reception time of the message</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Read")> _
|
||||
Public Shared Function Read( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByRef MessageBuffer As TPCANMsg, _
|
||||
ByRef TimestampBuffer As TPCANTimestamp) As TPCANStatus
|
||||
End Function
|
||||
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Read")> _
|
||||
Private Shared Function Read( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByRef MessageBuffer As TPCANMsg, _
|
||||
ByVal BufferPointer As IntPtr) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Reads a CAN message from the receive queue of a PCAN Channel
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
Public Shared Function Read( _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByRef MessageBuffer As TPCANMsg) As TPCANStatus
|
||||
Return Read(Channel, MessageBuffer, IntPtr.Zero)
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Transmits a CAN message
|
||||
''' </summary>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="MessageBuffer">A TPCANMsg buffer with the message to be sent</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_Write")> _
|
||||
Public Shared Function Write( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByRef MessageBuffer As TPCANMsg) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Configures the reception filter
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="FromID">The lowest CAN ID to be received</param>
|
||||
''' <param name="ToID">The highest CAN ID to be received</param>
|
||||
''' <param name="Mode">Message type, Standard (11-bit identifier) or
|
||||
''' Extended (29-bit identifier)</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_FilterMessages")> _
|
||||
Public Shared Function FilterMessages( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
ByVal FromID As UInt32, _
|
||||
ByVal ToID As UInt32, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Mode As TPCANMode) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Retrieves a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
''' <param name="StringBuffer">Buffer for the parameter value</param>
|
||||
''' <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_GetValue")> _
|
||||
Public Shared Function GetValue( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Parameter As TPCANParameter, _
|
||||
ByVal StringBuffer As StringBuilder, _
|
||||
ByVal BufferLength As UInt32) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Retrieves a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
''' <param name="NumericBuffer">Buffer for the parameter value</param>
|
||||
''' <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_GetValue")> _
|
||||
Public Shared Function GetValue( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Parameter As TPCANParameter, _
|
||||
ByRef NumericBuffer As UInt32, _
|
||||
ByVal BufferLength As UInt32) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Configures or sets a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Parameter">The TPCANParameter parameter to set</param>
|
||||
''' <param name="NumericBuffer">Buffer with the value to be set</param>
|
||||
''' <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_SetValue")> _
|
||||
Public Shared Function SetValue( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Parameter As TPCANParameter, _
|
||||
ByRef NumericBuffer As UInt32, _
|
||||
ByVal BufferLength As UInt32) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Configures or sets a PCAN Channel value
|
||||
''' </summary>
|
||||
''' <remarks>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</remarks>
|
||||
''' <param name="Channel">The handle of a PCAN Channel</param>
|
||||
''' <param name="Parameter"></param>
|
||||
''' <param name="StringBuffer">Buffer with the value to be set</param>
|
||||
''' <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_SetValue")> _
|
||||
Public Shared Function SetValue( _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Channel As TPCANHandle, _
|
||||
<MarshalAs(UnmanagedType.U1)> _
|
||||
ByVal Parameter As TPCANParameter, _
|
||||
<MarshalAs(UnmanagedType.LPStr, SizeParamIndex:=3)> _
|
||||
ByVal StringBuffer As String, _
|
||||
ByVal BufferLength As UInt32) As TPCANStatus
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' Returns a descriptive text of a given TPCANStatus error
|
||||
''' code, in any desired language
|
||||
''' </summary>
|
||||
''' <remarks>The current languages available for translation are:
|
||||
''' Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
''' Italian (0x10) and French (0x0C)</remarks>
|
||||
''' <param name="anError">A TPCANStatus error code</param>
|
||||
''' <param name="Language">Indicates a 'Primary language ID'</param>
|
||||
''' <param name="StringBuffer">Buffer for the text (must be at least 256 in length)</param>
|
||||
''' <returns>A TPCANStatus error code</returns>
|
||||
<DllImport("PCANBasic.dll", EntryPoint:="CAN_GetErrorText")> _
|
||||
Public Shared Function GetErrorText( _
|
||||
<MarshalAs(UnmanagedType.U4)> _
|
||||
ByVal anError As TPCANStatus, _
|
||||
ByVal Language As UInt16, _
|
||||
ByVal StringBuffer As StringBuilder) As TPCANStatus
|
||||
End Function
|
||||
#End Region
|
||||
End Class
|
||||
#End Region
|
||||
End Namespace
|
||||
|
||||
|
||||
852
PCANBasic/PCANBasicCLR.h
Normal file
852
PCANBasic/PCANBasicCLR.h
Normal file
|
|
@ -0,0 +1,852 @@
|
|||
// PCANBasicCLR.h
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// PCAN-Basic API
|
||||
//
|
||||
// ~~~~~~~~~~~~
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
// Author : Keneth Wagner
|
||||
// Last change: 08.11.2011 Wagner
|
||||
//
|
||||
// Language: C++/CLR
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (C) 1999-2012 PEAK-System Technik GmbH, Darmstadt
|
||||
// more Info at http://www.peak-system.com
|
||||
//
|
||||
using namespace System;
|
||||
using namespace System::Text;
|
||||
using namespace System::Runtime::InteropServices;
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Type definitions
|
||||
////////////////////////////////////////////////////////////
|
||||
#define TPCANHandle System::Byte // Represents a PCAN hardware channel handle
|
||||
|
||||
namespace Peak
|
||||
{
|
||||
namespace Can
|
||||
{
|
||||
namespace Basic
|
||||
{
|
||||
#pragma region Enumerations
|
||||
/// <summary>
|
||||
/// Represents a PCAN status/error code
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum class TPCANStatus : UInt32
|
||||
{
|
||||
/// <summary>
|
||||
/// No error
|
||||
/// </summary>
|
||||
PCAN_ERROR_OK = 0x00000,
|
||||
/// <summary>
|
||||
/// Transmit buffer in CAN controller is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_XMTFULL = 0x00001,
|
||||
/// <summary>
|
||||
/// CAN controller was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_OVERRUN = 0x00002,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'light' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSLIGHT = 0x00004,
|
||||
/// <summary>
|
||||
/// Bus error: an error counter reached the 'heavy' limit
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSHEAVY = 0x00008,
|
||||
/// <summary>
|
||||
/// Bus error: the CAN controller is in bus-off state
|
||||
/// </summary>
|
||||
PCAN_ERROR_BUSOFF = 0x00010,
|
||||
/// <summary>
|
||||
/// Mask for all bus errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ANYBUSERR = (PCAN_ERROR_BUSLIGHT | PCAN_ERROR_BUSHEAVY | PCAN_ERROR_BUSOFF),
|
||||
/// <summary>
|
||||
/// Receive queue is empty
|
||||
/// </summary>
|
||||
PCAN_ERROR_QRCVEMPTY = 0x00020,
|
||||
/// <summary>
|
||||
/// Receive queue was read too late
|
||||
/// </summary>
|
||||
PCAN_ERROR_QOVERRUN = 0x00040,
|
||||
/// <summary>
|
||||
/// Transmit queue is full
|
||||
/// </summary>
|
||||
PCAN_ERROR_QXMTFULL = 0x00080,
|
||||
/// <summary>
|
||||
/// Test of the CAN controller hardware registers failed (no hardware found)
|
||||
/// </summary>
|
||||
PCAN_ERROR_REGTEST = 0x00100,
|
||||
/// <summary>
|
||||
/// Driver not loaded
|
||||
/// </summary>
|
||||
PCAN_ERROR_NODRIVER = 0x00200,
|
||||
/// <summary>
|
||||
/// Hardware already in use by a Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_HWINUSE = 0x00400,
|
||||
/// <summary>
|
||||
/// A Client is already connected to the Net
|
||||
/// </summary>
|
||||
PCAN_ERROR_NETINUSE = 0x00800,
|
||||
/// <summary>
|
||||
/// Hardware handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHW = 0x01400,
|
||||
/// <summary>
|
||||
/// Net handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLNET = 0x01800,
|
||||
/// <summary>
|
||||
/// Client handle is invalid
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLCLIENT = 0x01C00,
|
||||
/// <summary>
|
||||
/// Mask for all handle errors
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLHANDLE = (PCAN_ERROR_ILLHW | PCAN_ERROR_ILLNET | PCAN_ERROR_ILLCLIENT),
|
||||
/// <summary>
|
||||
/// Resource (FIFO, Client, timeout) cannot be created
|
||||
/// </summary>
|
||||
PCAN_ERROR_RESOURCE = 0x02000,
|
||||
/// <summary>
|
||||
/// Invalid parameter
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMTYPE = 0x04000,
|
||||
/// <summary>
|
||||
/// Invalid parameter value
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLPARAMVAL = 0x08000,
|
||||
/// <summary>
|
||||
/// Unknow error
|
||||
/// </summary>
|
||||
PCAN_ERROR_UNKNOWN = 0x10000,
|
||||
/// <summary>
|
||||
/// Invalid data, function, or action.
|
||||
/// </summary>
|
||||
PCAN_ERROR_ILLDATA = 0x20000,
|
||||
/// <summary>
|
||||
/// Channel is not initialized
|
||||
/// </summary>
|
||||
PCAN_ERROR_INITIALIZE = 0x40000,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN device
|
||||
/// </summary>
|
||||
public enum class TPCANDevice : Byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Undefined, unknown or not selected PCAN device value
|
||||
/// </summary>
|
||||
PCAN_NONE = 0,
|
||||
/// <summary>
|
||||
/// PCAN Non-Plug&Play devices. NOT USED WITHIN PCAN-Basic API
|
||||
/// </summary>
|
||||
PCAN_PEAKCAN = 1,
|
||||
/// <summary>
|
||||
/// PCAN-ISA, PCAN-PC/104, and PCAN-PC/104-Plus
|
||||
/// </summary>
|
||||
PCAN_ISA = 2,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle
|
||||
/// </summary>
|
||||
PCAN_DNG = 3,
|
||||
/// <summary>
|
||||
/// PCAN-PCI, PCAN-cPCI, PCAN-miniPCI, and PCAN-PCI Express
|
||||
/// </summary>
|
||||
PCAN_PCI = 4,
|
||||
/// <summary>
|
||||
/// PCAN-USB and PCAN-USB Pro
|
||||
/// </summary>
|
||||
PCAN_USB = 5,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card
|
||||
/// </summary>
|
||||
PCAN_PCC = 6
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN parameter to be read or set
|
||||
/// </summary>
|
||||
public enum class TPCANParameter : Byte
|
||||
{
|
||||
/// <summary>
|
||||
/// PCAN-USB device number parameter
|
||||
/// </summary>
|
||||
PCAN_DEVICE_NUMBER = 1,
|
||||
/// <summary>
|
||||
/// PCAN-PC Card 5-Volt power parameter
|
||||
/// </summary>
|
||||
PCAN_5VOLTS_POWER = 2,
|
||||
/// <summary>
|
||||
/// PCAN receive event handler parameter
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_EVENT = 3,
|
||||
/// <summary>
|
||||
/// PCAN message filter parameter
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_FILTER = 4,
|
||||
/// <summary>
|
||||
/// PCAN-Basic API version parameter
|
||||
/// </summary>
|
||||
PCAN_API_VERSION = 5,
|
||||
/// <summary>
|
||||
/// PCAN device channel version parameter
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_VERSION = 6,
|
||||
/// <summary>
|
||||
/// PCAN Reset-On-Busoff parameter
|
||||
/// </summary>
|
||||
PCAN_BUSOFF_AUTORESET = 7,
|
||||
/// <summary>
|
||||
/// PCAN Listen-Only parameter
|
||||
/// </summary>
|
||||
PCAN_LISTEN_ONLY = 8,
|
||||
/// <summary>
|
||||
/// Directory path for trace files
|
||||
/// </summary>
|
||||
PCAN_LOG_LOCATION = 9,
|
||||
/// <summary>
|
||||
/// Debug-Trace activation status
|
||||
/// </summary>
|
||||
PCAN_LOG_STATUS = 10,
|
||||
/// <summary>
|
||||
/// Configuration of the debugged information (LOG_FUNCTION_***)
|
||||
/// </summary>
|
||||
PCAN_LOG_CONFIGURE = 11,
|
||||
/// <summary>
|
||||
/// Custom insertion of text into the log file
|
||||
/// </summary>
|
||||
PCAN_LOG_TEXT = 12,
|
||||
/// <summary>
|
||||
/// Availability status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CHANNEL_CONDITION = 13,
|
||||
/// <summary>
|
||||
/// PCAN hardware name parameter
|
||||
/// </summary>
|
||||
PCAN_HARDWARE_NAME = 14,
|
||||
/// <summary>
|
||||
/// Message reception status of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_RECEIVE_STATUS = 15,
|
||||
/// <summary>
|
||||
/// CAN-Controller number of a PCAN-Channel
|
||||
/// </summary>
|
||||
PCAN_CONTROLLER_NUMBER = 16,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents the type of a PCAN message
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum class TPCANMessageType : Byte
|
||||
{
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Standard Frame (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STANDARD = 0x00,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Remote-Transfer-Request Frame
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_RTR = 0x01,
|
||||
/// <summary>
|
||||
/// The PCAN message is a CAN Extended Frame (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_EXTENDED = 0x02,
|
||||
/// <summary>
|
||||
/// The PCAN message represents a PCAN status message
|
||||
/// </summary>
|
||||
PCAN_MESSAGE_STATUS = 0x80,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN filter mode
|
||||
/// </summary>
|
||||
public enum class TPCANMode : Byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Mode is Standard (11-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_STANDARD = TPCANMessageType::PCAN_MESSAGE_STANDARD,
|
||||
/// <summary>
|
||||
/// Mode is Extended (29-bit identifier)
|
||||
/// </summary>
|
||||
PCAN_MODE_EXTENDED = TPCANMessageType::PCAN_MESSAGE_EXTENDED,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents a PCAN Baud rate register value
|
||||
/// </summary>
|
||||
public enum class TPCANBaudrate : UInt16
|
||||
{
|
||||
/// <summary>
|
||||
/// 1 MBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_1M = 0x0014,
|
||||
/// <summary>
|
||||
/// 800 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_800K = 0x0016,
|
||||
/// <summary>
|
||||
/// 500 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_500K = 0x001C,
|
||||
/// <summary>
|
||||
/// 250 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_250K = 0x011C,
|
||||
/// <summary>
|
||||
/// 125 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_125K = 0x031C,
|
||||
/// <summary>
|
||||
/// 100 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_100K = 0x432F,
|
||||
/// <summary>
|
||||
/// 95,238 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_95K = 0xC34E,
|
||||
/// <summary>
|
||||
/// 83,333 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_83K = 0x4B14,
|
||||
/// <summary>
|
||||
/// 50 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_50K = 0x472F,
|
||||
/// <summary>
|
||||
/// 47,619 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_47K = 0x1414,
|
||||
/// <summary>
|
||||
/// 33,333 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_33K = 0x1D14,
|
||||
/// <summary>
|
||||
/// 20 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_20K = 0x532F,
|
||||
/// <summary>
|
||||
/// 10 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_10K = 0x672F,
|
||||
/// <summary>
|
||||
/// 5 kBit/s
|
||||
/// </summary>
|
||||
PCAN_BAUD_5K = 0x7F7F,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents the type of PCAN (non plug&play) hardware to be initialized
|
||||
/// </summary>
|
||||
public enum class TPCANType : Byte
|
||||
{
|
||||
/// <summary>
|
||||
/// PCAN-ISA 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA = 0x01,
|
||||
/// <summary>
|
||||
/// PCAN-ISA SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_SJA = 0x09,
|
||||
/// <summary>
|
||||
/// PHYTEC ISA
|
||||
/// </summary>
|
||||
PCAN_TYPE_ISA_PHYTEC = 0x04,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG = 0x02,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP 82C200
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_EPP = 0x03,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA = 0x05,
|
||||
/// <summary>
|
||||
/// PCAN-Dongle EPP SJA1000
|
||||
/// </summary>
|
||||
PCAN_TYPE_DNG_SJA_EPP = 0x06,
|
||||
};
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Strutures
|
||||
/// <summary>
|
||||
/// Represents a PCAN message
|
||||
/// </summary>
|
||||
public value struct TPCANMsg
|
||||
{
|
||||
/// <summary>
|
||||
/// 11/29-bit message identifier
|
||||
/// </summary>
|
||||
UInt32 ID;
|
||||
/// <summary>
|
||||
/// Type of the message
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANMessageType MSGTYPE;
|
||||
/// <summary>
|
||||
/// Data Length Code of the message (0..8)
|
||||
/// </summary>
|
||||
Byte LEN;
|
||||
/// <summary>
|
||||
/// Data of the message (DATA[0]..DATA[7])
|
||||
/// </summary>
|
||||
[MarshalAs(UnmanagedType::ByValArray, SizeConst = 8)]
|
||||
array<Byte>^ DATA;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Represents a timestamp of a received PCAN message.
|
||||
/// Total Microseconds = micros + 1000 * millis + 0xFFFFFFFF * 1000 * millis_overflow
|
||||
/// </summary>
|
||||
public value struct TPCANTimestamp
|
||||
{
|
||||
/// <summary>
|
||||
/// Base-value: milliseconds: 0.. 2^32-1
|
||||
/// </summary>
|
||||
UInt32 millis;
|
||||
/// <summary>
|
||||
/// Roll-arounds of millis
|
||||
/// </summary>
|
||||
UInt16 millis_overflow;
|
||||
/// <summary>
|
||||
/// Microseconds: 0..999
|
||||
/// </summary>
|
||||
UInt16 micros;
|
||||
};
|
||||
#pragma endregion
|
||||
|
||||
#pragma region PCANBasic class
|
||||
/// <summary>
|
||||
/// PCAN-Basic API class implementation
|
||||
/// </summary>
|
||||
public ref class PCANBasic abstract sealed
|
||||
{
|
||||
public:
|
||||
#pragma region PCAN-BUS Handles Definition
|
||||
/// <summary>
|
||||
/// Undefined/default value for a PCAN bus
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_NONEBUS = 0x00;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 1
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS1 = 0x21;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 2
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS2 = 0x22;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 3
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS3 = 0x23;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 4
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS4 = 0x24;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 5
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS5 = 0x25;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 6
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS6 = 0x26;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 7
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS7 = 0x27;
|
||||
/// <summary>
|
||||
/// PCAN-ISA interface, channel 8
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_ISABUS8 = 0x28;
|
||||
|
||||
/// <summary>
|
||||
/// PPCAN-Dongle/LPT interface, channel 1
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_DNGBUS1 = 0x31;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 1
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS1 = 0x41;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 2
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS2 = 0x42;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 3
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS3 = 0x43;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 4
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS4 = 0x44;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 5
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS5 = 0x45;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 6
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS6 = 0x46;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 7
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS7 = 0x47;
|
||||
/// <summary>
|
||||
/// PCAN-PCI interface, channel 8
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCIBUS8 = 0x48;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 1
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS1 = 0x51;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 2
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS2 = 0x52;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 3
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS3 = 0x53;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 4
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS4 = 0x54;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 5
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS5 = 0x55;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 6
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS6 = 0x56;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 7
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS7 = 0x57;
|
||||
/// <summary>
|
||||
/// PCAN-USB interface, channel 8
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_USBBUS8 = 0x58;
|
||||
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 1
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCCBUS1 = 0x61;
|
||||
/// <summary>
|
||||
/// PCAN-PC Card interface, channel 2
|
||||
/// </summary>
|
||||
static const TPCANHandle PCAN_PCCBUS2 = 0x62;
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Parameter values definition
|
||||
/// <summary>
|
||||
/// The PCAN parameter is not set (inactive)
|
||||
/// </summary>
|
||||
static const int PCAN_PARAMETER_OFF = 0;
|
||||
/// <summary>
|
||||
/// The PCAN parameter is set (active)
|
||||
/// </summary>
|
||||
static const int PCAN_PARAMETER_ON = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is closed. No messages will be received
|
||||
/// </summary>
|
||||
static const int PCAN_FILTER_CLOSE = 0;
|
||||
/// <summary>
|
||||
/// The PCAN filter is fully opened. All messages will be received
|
||||
/// </summary>
|
||||
static const int PCAN_FILTER_OPEN = 1;
|
||||
/// <summary>
|
||||
/// The PCAN filter is custom configured. Only registered
|
||||
/// messages will be received
|
||||
/// </summary>
|
||||
static const int PCAN_FILTER_CUSTOM = 2;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is illegal, or its associated hadware is not available
|
||||
/// </summary>
|
||||
static const int PCAN_CHANNEL_UNAVAILABLE = 0;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is available to be connected (Plug&Play Hardware: it means futhermore that the hardware is plugged-in)
|
||||
/// </summary>
|
||||
static const int PCAN_CHANNEL_AVAILABLE = 1;
|
||||
/// <summary>
|
||||
/// The PCAN-Channel handle is valid, and is already being used
|
||||
/// </summary>
|
||||
static const int PCAN_CHANNEL_OCCUPIED = 2;
|
||||
|
||||
/// <summary>
|
||||
/// Logs system exceptions / errors
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_DEFAULT = 0x00;
|
||||
/// <summary>
|
||||
/// Logs the entries to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_ENTRY = 0x01;
|
||||
/// <summary>
|
||||
/// Logs the parameters passed to the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_PARAMETERS = 0x02;
|
||||
/// <summary>
|
||||
/// Logs the exits from the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_LEAVE = 0x04;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages passed to the CAN_Write function
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_WRITE = 0x08;
|
||||
/// <summary>
|
||||
/// Logs the CAN messages received within the CAN_Read function
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_READ = 0x10;
|
||||
/// <summary>
|
||||
/// Logs all possible information within the PCAN-Basic API functions
|
||||
/// </summary>
|
||||
static const int LOG_FUNCTION_ALL = 0xFFFF;
|
||||
#pragma endregion
|
||||
|
||||
#pragma region PCANBasic API Implementation
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <param name="HwType">NON PLUG&PLAY: The type of hardware and operation mode</param>
|
||||
/// <param name="IOPort">NON PLUG&PLAY: The I/O address for the parallel port</param>
|
||||
/// <param name="Interrupt">NON PLUG&PLAY: Interrupt number of the parallel por</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Initialize")]
|
||||
static TPCANStatus Initialize(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType::U2)]
|
||||
TPCANBaudrate Btr0Btr1,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANType HwType,
|
||||
UInt32 IOPort,
|
||||
UInt16 Interrupt);
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Btr0Btr1">The speed for the communication (BTR0BTR1 code)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
static TPCANStatus Initialize(
|
||||
TPCANHandle Channel,
|
||||
TPCANBaudrate Btr0Btr1)
|
||||
{
|
||||
return Initialize(Channel, Btr0Btr1, (TPCANType)0, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uninitializes one or all PCAN Channels initialized by CAN_Initialize
|
||||
/// </summary>
|
||||
/// <remarks>Giving the TPCANHandle value "PCAN_NONEBUS",
|
||||
/// uninitialize all initialized channels</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Uninitialize")]
|
||||
static TPCANStatus Uninitialize(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Resets the receive and transmit queues of the PCAN Channel
|
||||
/// </summary>
|
||||
/// <remarks>A reset of the CAN controller is not performed</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Reset")]
|
||||
static TPCANStatus Reset(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current status of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetStatus")]
|
||||
static TPCANStatus GetStatus(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel);
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <param name="TimestampBuffer">A TPCANTimestamp structure buffer to get
|
||||
/// the reception time of the message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
|
||||
static TPCANStatus Read(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
TPCANMsg %MessageBuffer,
|
||||
TPCANTimestamp %TimestampBuffer);
|
||||
|
||||
/// <summary>
|
||||
/// Reads a CAN message from the receive queue of a PCAN Channel
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg structure buffer to store the CAN message</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
|
||||
static TPCANStatus Read(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
TPCANMsg %MessageBuffer);
|
||||
|
||||
/// <summary>
|
||||
/// Transmits a CAN message
|
||||
/// </summary>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="MessageBuffer">A TPCANMsg buffer with the message to be sent</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Write")]
|
||||
static TPCANStatus Write(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
TPCANMsg %MessageBuffer);
|
||||
|
||||
/// <summary>
|
||||
/// Configures the reception filter
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="FromID">The lowest CAN ID to be received</param>
|
||||
/// <param name="ToID">The highest CAN ID to be received</param>
|
||||
/// <param name="Mode">Message type, Standard (11-bit identifier) or
|
||||
/// Extended (29-bit identifier)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_FilterMessages")]
|
||||
static TPCANStatus FilterMessages(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
UInt32 FromID,
|
||||
UInt32 ToID,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANMode Mode);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="StringBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetValue")]
|
||||
static TPCANStatus GetValue(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANParameter Parameter,
|
||||
StringBuilder^ StringBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to get</param>
|
||||
/// <param name="NumericBuffer">Buffer for the parameter value</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetValue")]
|
||||
static TPCANStatus GetValue(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANParameter Parameter,
|
||||
UInt32 %NumericBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Configures a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter">The TPCANParameter parameter to set</param>
|
||||
/// <param name="NumericBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_SetValue")]
|
||||
static TPCANStatus SetValue(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANParameter Parameter,
|
||||
UInt32% NumericBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Configures a PCAN Channel value
|
||||
/// </summary>
|
||||
/// <remarks>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</remarks>
|
||||
/// <param name="Channel">The handle of a PCAN Channel</param>
|
||||
/// <param name="Parameter"></param>
|
||||
/// <param name="StringBuffer">Buffer with the value to be set</param>
|
||||
/// <param name="BufferLength">Size in bytes of the buffer</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_SetValue")]
|
||||
static TPCANStatus SetValue(
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANHandle Channel,
|
||||
[MarshalAs(UnmanagedType::U1)]
|
||||
TPCANParameter Parameter,
|
||||
[MarshalAs(UnmanagedType::LPStr,SizeParamIndex=3)]
|
||||
String^ StringBuffer,
|
||||
UInt32 BufferLength);
|
||||
|
||||
/// <summary>
|
||||
/// Returns a descriptive text of a given TPCANStatus error
|
||||
/// code, in any desired language
|
||||
/// </summary>
|
||||
/// <remarks>The current languages available for translation are:
|
||||
/// Neutral (0x00), German (0x07), English (0x09), Spanish (0x0A),
|
||||
/// Italian (0x10) and French (0x0C)</remarks>
|
||||
/// <param name="Error">A TPCANStatus error code</param>
|
||||
/// <param name="Language">Indicates a 'Primary language ID'</param>
|
||||
/// <param name="StringBuffer">Buffer for the text (must be at least 256 in length)</param>
|
||||
/// <returns>A TPCANStatus error code</returns>
|
||||
[DllImport("PCANBasic.dll", EntryPoint = "CAN_GetErrorText")]
|
||||
static TPCANStatus GetErrorText(
|
||||
[MarshalAs(UnmanagedType::U4)]
|
||||
TPCANStatus Error,
|
||||
UInt16 Language,
|
||||
StringBuilder^ StringBuffer);
|
||||
#pragma endregion
|
||||
};
|
||||
#pragma endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue