Some Kvaser products feature I/O pins that can be used in real-time applications using a part of the API dedicated to I/O Pin Handling. This API is initialized by confirming the I/O pin configuration, see kvIoConfirmConfig. Before the configuration is confirmed the user can only retrieve information about the pins.
>>> from canlib import canlib, Device ... device = Device.find(serial=66666) ... channel = device.channel_number() ... ch = canlib.openChannel(channel) ... config = canlib.iopin.Configuration(ch) ... ch.get_io_pin(86).pin_type <PinType.ANALOG: 2> >>> for pin in config: ... print(pin) Pin 0: <PinType.DIGITAL: 1> <Direction.OUT: 8> bits=1 range=0.0-24.0 (<ModuleType.DIGITAL: 1>) Pin 1: <PinType.DIGITAL: 1> <Direction.OUT: 8> bits=1 range=0.0-24.0 (<ModuleType.DIGITAL: 1>) : Pin 31: <PinType.DIGITAL: 1> <Direction.IN: 4> bits=1 range=0.0-24.0 HL_filter=5000 LH_filter=5000 (<ModuleType.DIGITAL: 1>)
After the configuration has been confirmed the user may set or read any values of the I/O pins:
>>> config.confirm() >>> ch.get_io_pin(0).value 0 >>> ch.get_io_pin(0).value = 1 >>> ch.get_io_pin(0).value 1
Pins are identified by their pin number, which is a number from zero up to, but not including, the value returned by ~.canlib.Channel.number_of_io_pins. Using the pin number, the specific properties of any pin is retrieved and set using .canlib.iopin.IoPin.
There are currently three types of pins that is supported by the API dedicated to I/O Pin Handling. These include analog, digital and relay pins. To learn what pin type a given pin is, use .canlib.iopin.IoPin.pin_type. See ~.canlib.iopin.PinType to see all supported types.
The analog pins are represented by multiple bits, the number of bits can be retrieved by calling ~`.canlib.iopin.IoPin.number_of_bits`. The value of an analog pin is within in the interval given by ~.canlib.iopin.IoPin.range_min and ~.canlib.iopin.IoPin.range_min. The analog input pin has two configurable properties, namely the low pass filter order and the hysteresis. See ~.canlib.iopin.AnalogIn.lp_filter_order and ~.canlib.iopin.AnalogIn.hysteresis. Pins are read and set using ~.canlib.iopin.IoPin.value. When reading an output, the latest value set is retrieved.
The digital pins have two configurable properties, namely the low-to-high and the high-to-low filter time. See ~.canlib.iopin.DigitalIn.high_low_filter and ~.canlib.iopin.DigitalIn.low_high_filter. Pins are read and set using ~.canlib.iopin.IoPin.value. When reading an output, the latest value set is retrieved.
The relay pins have no configurable properties. All of these pins are considered as outputs. Pins are set and read using ~.canlib.iopin.IoPin.value.