OpenLcbCLib 1.0 Alpha
OpenSource C Library to create OpenLcb/Lcc Nodes
Loading...
Searching...
No Matches
can_rx_message_handler.h
Go to the documentation of this file.
1
33#ifndef __DRIVERS_CANBUS_CAN_RX_MESSAGE_HANDLER__
34#define __DRIVERS_CANBUS_CAN_RX_MESSAGE_HANDLER__
35
36#include <stdbool.h>
37#include <stdint.h>
38
39#include "can_types.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif /* __cplusplus */
45
56 typedef struct {
57
59 can_msg_t *(*can_buffer_store_allocate_buffer)(void);
60
62 openlcb_msg_t *(*openlcb_buffer_store_allocate_buffer)(payload_type_enum payload_type);
63
65 alias_mapping_t *(*alias_mapping_find_mapping_by_alias)(uint16_t alias);
66
68 alias_mapping_t *(*alias_mapping_find_mapping_by_node_id)(node_id_t node_id);
69
71 alias_mapping_info_t *(*alias_mapping_get_alias_mapping_info)(void);
72
74 void (*alias_mapping_set_has_duplicate_alias_flag)(void);
75
77 uint8_t (*get_current_tick)(void);
78
87 listener_alias_entry_t *(*listener_register)(node_id_t node_id);
88
97 void (*listener_set_alias)(node_id_t node_id, uint16_t alias);
98
108 void (*listener_clear_alias_by_alias)(uint16_t alias);
109
121 void (*listener_flush_aliases)(void);
122
124
125
138 extern void CanRxMessageHandler_initialize(const interface_can_rx_message_handler_t *interface_can_frame_message_handler);
139
140
158 extern void CanRxMessageHandler_first_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type);
159
160
175 extern void CanRxMessageHandler_middle_frame(can_msg_t *can_msg, uint8_t offset);
176
177
193 extern void CanRxMessageHandler_last_frame(can_msg_t *can_msg, uint8_t offset);
194
195
210 extern void CanRxMessageHandler_single_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type);
211
212
228 extern void CanRxMessageHandler_can_legacy_snip(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type);
229
230
240 extern void CanRxMessageHandler_stream_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type);
241
242
252 extern void CanRxMessageHandler_rid_frame(can_msg_t *can_msg);
253
254
264 extern void CanRxMessageHandler_amd_frame(can_msg_t *can_msg);
265
266
278 extern void CanRxMessageHandler_ame_frame(can_msg_t *can_msg);
279
280
290 extern void CanRxMessageHandler_amr_frame(can_msg_t *can_msg);
291
292
303
304
321 extern void CanRxMessageHandler_cid_frame(can_msg_t *can_msg);
322
323#ifdef __cplusplus
324}
325#endif /* __cplusplus */
326
327#endif /* __DRIVERS_CANBUS_CAN_RX_MESSAGE_HANDLER__ */
void CanRxMessageHandler_last_frame(can_msg_t *can_msg, uint8_t offset)
Handles the last frame of a multi-frame OpenLCB message.
Definition can_rx_message_handler.c:264
void CanRxMessageHandler_middle_frame(can_msg_t *can_msg, uint8_t offset)
Handles a middle frame of a multi-frame OpenLCB message.
Definition can_rx_message_handler.c:230
void CanRxMessageHandler_amr_frame(can_msg_t *can_msg)
Handles AMR (Alias Map Reset) CAN control frames.
Definition can_rx_message_handler.c:662
void CanRxMessageHandler_error_info_report_frame(can_msg_t *can_msg)
Handles Error Information Report CAN control frames.
Definition can_rx_message_handler.c:682
void CanRxMessageHandler_stream_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type)
Handles stream protocol CAN frames (placeholder, not yet implemented).
Definition can_rx_message_handler.c:367
void CanRxMessageHandler_cid_frame(can_msg_t *can_msg)
Handles CID (Check ID) CAN control frames (CanFrameTransferS ยง6.2.5).
Definition can_rx_message_handler.c:387
void CanRxMessageHandler_initialize(const interface_can_rx_message_handler_t *interface_can_frame_message_handler)
Registers the dependency-injection interface for this module.
Definition can_rx_message_handler.c:65
void CanRxMessageHandler_can_legacy_snip(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type)
Handles legacy SNIP messages that lack standard framing bits.
Definition can_rx_message_handler.c:336
void CanRxMessageHandler_ame_frame(can_msg_t *can_msg)
Handles AME (Alias Map Enquiry) CAN control frames.
Definition can_rx_message_handler.c:541
void CanRxMessageHandler_amd_frame(can_msg_t *can_msg)
Handles AMD (Alias Map Definition) CAN control frames.
Definition can_rx_message_handler.c:509
void CanRxMessageHandler_rid_frame(can_msg_t *can_msg)
Handles RID (Reserve ID) CAN control frames.
Definition can_rx_message_handler.c:416
void CanRxMessageHandler_single_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type)
Handles a complete single-frame OpenLCB message.
Definition can_rx_message_handler.c:289
void CanRxMessageHandler_first_frame(can_msg_t *can_msg, uint8_t offset, payload_type_enum data_type)
Handles the first frame of a multi-frame OpenLCB message.
Definition can_rx_message_handler.c:184
Type definitions and constants for the CAN transport layer.
OpenLCB node allocation, enumeration, and lifecycle management.
uint64_t node_id_t
48-bit Node ID stored in a 64-bit type (upper 16 bits unused).
Definition openlcb_types.h:359
payload_type_enum
Message buffer payload type identifier.
Definition openlcb_types.h:220
Definition can_types.h:190
Definition can_types.h:173
Definition can_types.h:118
Dependency-injection interface for the CAN receive message handlers.
Definition can_rx_message_handler.h:56
Definition can_types.h:209
Core OpenLCB message structure.
Definition openlcb_types.h:480

Copyright (c) 2026 Jim Kueneman all rights reserved. See the License