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 ascan0orvcan0.logger: Defaults toLogger.new($stdout)when omitted.endianness::native,:little, or:bigfor CAN ID byte order.can_fd: Enable or disable CAN FD mode for this messenger instance.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
ArgumentErrorwhen required inputs are missing or invalid. - Uses messenger-level
can_fdwhencan_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
dbcinstance. - Calls
dbc.encode_can(...)and then sends the encoded frame. - Automatically sends DBC messages with the extended CAN flag when the DBC message ID has the extended format flag set.
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.
- Validates
filter:before opening the socket. - Loops until
stop_listeningis called. - Optional
filteraccepts:IntegerRange<Integer>Array<Integer>
- Unsupported filter values raise
ArgumentError. - Message payload shape from SocketCAN adapter:
{
id: Integer,
data: Array<Integer>,
extended: true | false,
decoded: { name: String, signals: Hash }, # only when dbc decode succeeds
decode_error: { class: String, message: String } # only when dbc decode raises
}
When dbc: is provided, extended received frames are mapped back to the DBC message ID form before decode.
If DBC decoding fails, the raw frame is still yielded with decode_error attached.
stop_listening
stop_listening
Sets the internal listening flag to false so the loop exits cleanly.