Skip to main content
Version: next

Messenger API

CanMessenger::Messenger is the high-level runtime API.

Constructor

CanMessenger::Messenger.new(
interface_name:,
logger: nil,
endianness: :native,
can_fd: false,
adapter: CanMessenger::Adapter::Socketcan
)

Parameters:

  • interface_name (required): CAN interface name such as can0 or vcan0.
  • logger: Defaults to Logger.new($stdout) when omitted.
  • endianness: :native, :little, or :big for CAN ID byte order.
  • can_fd: Default CAN FD behavior.
  • adapter: Adapter class or instance implementing the base adapter contract.

send_can_message

send_can_message(id:, data:, extended_id: false, can_fd: nil)

Behavior:

  • Raises ArgumentError when required inputs are missing or invalid.
  • Uses messenger-level can_fd when can_fd: is omitted.
  • For non-argument runtime errors, logs and returns without raising.

send_dbc_message

send_dbc_message(message_name:, signals:, dbc:, extended_id: false, can_fd: nil)

Behavior:

  • Requires a non-nil dbc instance.
  • Calls dbc.encode_can(...) and then sends the encoded frame.
  • Automatically sends DBC messages with the extended CAN flag when the DBC message ID includes the EFF bit.

start_listening

start_listening(filter: nil, can_fd: nil, dbc: nil) { |message| ... }

Behavior:

  • Requires a block. If no block is provided, logs an error and returns.
  • Loops until stop_listening is called.
  • Optional filter accepts:
    • Integer
    • Range
    • Array<Integer>
  • Message payload shape from SocketCAN adapter:
{
id: Integer,
data: Array<Integer>,
extended: true | false,
decoded: { name: String, signals: Hash } # only when dbc decode succeeds
}

When dbc: is provided, extended received frames are mapped back to the DBC message ID form before decode.

stop_listening

stop_listening

Sets the internal listening flag to false so the loop exits cleanly.