SocketCAN (python)¶
Python 3.3 added support for socketcan for linux systems.
The socketcan_native
interface directly uses Python’s socket module to
access SocketCAN on linux. This is the most direct route to the kernel
and should provide the most responsive one.
The implementation features efficient filtering of can_id’s. That filtering occurs in the kernel and is much much more efficient than filtering messages in Python.
Python 3.4 added support for the Broadcast Connection Manager (BCM) protocol, which - if enabled - should be used for queueing periodic tasks.
Documentation for the socketcan back end file can be found:
https://www.kernel.org/doc/Documentation/networking/can.txt
Bus¶
-
class
can.interfaces.socketcan.
SocketcanNative_Bus
(channel, receive_own_messages=False, fd=False, **kwargs)[source]¶ Bases:
can.bus.BusABC
Parameters: - channel (str) – The can interface name with which to create this bus. An example channel would be ‘vcan0’.
- receive_own_messages (bool) – If messages transmitted should also be received back.
- fd (bool) – If CAN-FD frames should be supported.
- can_filters (list) – A list of dictionaries, each containing a “can_id” and a “can_mask”.
Internals¶
create_socket¶
-
can.interfaces.socketcan.socketcan_native.
create_socket
(can_protocol=None)[source]¶ Creates a CAN socket. The socket can be BCM or RAW. The socket will be returned unbound to any interface.
Parameters: can_protocol (int) – - The protocol to use for the CAN socket, either:
- socket.CAN_RAW
- socket.CAN_BCM.
Returns: - -1 if socket creation unsuccessful
- socketID - successful creation