Object Buffers

Support for accessing Object Buffers.

New in version 1.22.

class canlib.canlib.objbuf.MessageFilter(code, mask)[source]

A message reception filter.

First set the mask bit to ‘1’ for the bits you would like to filter on. Then set the code to the desired bitpattern. See Code and Mask Format for an explanation of the code and mask format.

Calling the MessageFilter with an id returns True if the id passes the filter.

>>> mf = MessageFilter(code=0b0100, mask=0b0110)
>>> mf(0b0110)
False
>>> mf(0b0101)
True
>>> mf(0b0010)
False

For use with Response object buffers.

New in version 1.22.

class canlib.canlib.objbuf.Periodic(ch, period_us, frame=None)[source]

Periodic object buffer (also known as auto transmit buffer).

Returned from canlib.Channel.allocate_periodic_objbuf()

enable()[source]

Enable this object buffer.

send_burst(length)[source]

Send a burst of CAN frames from this object buffer.

The frames will be sent as fast as possible from the hardware. This function is intended for certain diagnostic applications.

Parameters

length (int) – Number of CAN frames to send.

set_msg_count(count)[source]

Limit the total number of CAN frames sent.

When this periodic buffer is enabled, only count number of CAN frames will be sent (i.e. the periodic buffer will only be active for count number of periods).

When all frames have been sent, the msg_count is set to zero. If you would like to send five more frames, you need to make two calls:

>>> periodic_buffer.set_msg_count(5)
>>> periodic_buffer.enable()
Parameters

count (int) – Total number of CAN frames to send, Zero means infinite.

set_period(period_us)[source]

Set interval in microseconds between each sent CAN frame.

Parameters

period_us (int) – Interval in microseconds between each sent CAN frames.

class canlib.canlib.objbuf.Response(ch, filter=None, frame=None, rtr_only=False)[source]

Auto response object buffer.

Returned from canlib.Channel.allocate_response_objbuf()

The following example responds with a CAN frame with CAN ID 200 when a CAN frame with CAN ID 100 is received.:

>>> from canlib import canlib, Frame
>>> ch = canlib.openChannel(0)
>>> msg_filter = canlib.objbuf.MessageFilter(code=100, mask=0xFFFF)
>>> msg_filter(100)
True
>>> frame = Frame(id_=200, data=[1, 2, 3, 4])
>>> response_buf = ch.allocate_response_objbuf(filter=msg_filter, frame=frame)
>>> response_buf.enable()

New in version 1.22.

set_filter(filter)[source]

Set message reception filter.

If no filter is set, any CAN ID will trigger the auto response.

Parameters

filter (MessageFilter) – Messages not matching the filter is ignored.

set_rtr_only(value)[source]

Filter on CAN RTR (remote transmission request).

This complements the message reception filter (see set_filter()).

When set to True, the auto response buffer will only respond to remote requests (that also passes the message reception filter). When set to False, the auto response buffer will respond to both remote requests and ordinary data frames (that also passes the message reception filter).

class canlib.canlib.objbuf.Type(value)[source]

An enumeration based on canOBJBUF_TYPE_xxx

AUTO_RESPONSE = 1

The buffer is an auto response buffer.

PERIODIC_TX = 2

The buffer is an auto transmit buffer.