OpenLcbCLib 1.0 Alpha
OpenSource C Library to create OpenLcb/Lcc Nodes
Loading...
Searching...
No Matches
protocol_snip.h
Go to the documentation of this file.
1
39#ifndef __OPENLCB_PROTOCOL_SNIP__
40#define __OPENLCB_PROTOCOL_SNIP__
41
42#include <stdbool.h>
43#include <stdint.h>
44
45#include "openlcb_types.h"
46
48typedef struct {
49
51 uint16_t(*config_memory_read)(openlcb_node_t *openlcb_node, uint32_t address, uint16_t count, configuration_memory_buffer_t* buffer);
52
54
55#ifdef __cplusplus
56extern "C" {
57#endif /* __cplusplus */
58
64 extern void ProtocolSnip_initialize(const interface_openlcb_protocol_snip_t *interface_openlcb_protocol_snip);
65
75
82
83 // ---- Individual SNIP field loaders (used internally to build the reply) ----
84 //
85 // All share the same signature:
86 // (node, outgoing_msg, payload_offset, max_bytes) → bytes_written
87
97 extern uint16_t ProtocolSnip_load_manufacturer_version_id(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
98
108 extern uint16_t ProtocolSnip_load_name(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
109
119 extern uint16_t ProtocolSnip_load_model(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
120
130 extern uint16_t ProtocolSnip_load_hardware_version(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
131
141 extern uint16_t ProtocolSnip_load_software_version(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
142
152 extern uint16_t ProtocolSnip_load_user_version_id(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
153
163 extern uint16_t ProtocolSnip_load_user_name(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
164
174 extern uint16_t ProtocolSnip_load_user_description(openlcb_node_t* openlcb_node, openlcb_msg_t* outgoing_msg, uint16_t offset, uint16_t requested_bytes);
175
182 extern bool ProtocolSnip_validate_snip_reply(openlcb_msg_t* snip_reply_msg);
183
184
185#ifdef __cplusplus
186}
187#endif /* __cplusplus */
188
189#endif /* __OPENLCB_PROTOCOL_SNIP__ */
Core type definitions, structures, and configuration constants for the OpenLCB library.
uint8_t configuration_memory_buffer_t[LEN_DATAGRAM_MAX_PAYLOAD]
Configuration memory read/write operation buffer (64 bytes).
Definition openlcb_types.h:365
uint16_t ProtocolSnip_load_name(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies manufacturer name string (null-terminated).
Definition protocol_snip.c:164
uint16_t ProtocolSnip_load_manufacturer_version_id(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies manufacturer version ID byte (1 byte).
Definition protocol_snip.c:151
void ProtocolSnip_initialize(const interface_openlcb_protocol_snip_t *interface_openlcb_protocol_snip)
Stores the callback interface. Call once at startup.
Definition protocol_snip.c:70
void ProtocolSnip_handle_simple_node_info_request(openlcb_statemachine_info_t *statemachine_info)
Builds a SNIP reply (MTI 0x0A08) from node params + config memory.
Definition protocol_snip.c:314
uint16_t ProtocolSnip_load_user_description(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Reads user description from config memory (null-terminated, max 64 bytes).
Definition protocol_snip.c:274
uint16_t ProtocolSnip_load_user_version_id(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies user version ID byte (1 byte).
Definition protocol_snip.c:200
void ProtocolSnip_handle_simple_node_info_reply(openlcb_statemachine_info_t *statemachine_info)
Handles an incoming SNIP reply (MTI 0x0A08). No automatic response.
Definition protocol_snip.c:378
uint16_t ProtocolSnip_load_software_version(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies software version string (null-terminated).
Definition protocol_snip.c:191
uint16_t ProtocolSnip_load_model(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies model string (null-terminated).
Definition protocol_snip.c:173
uint16_t ProtocolSnip_load_hardware_version(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Copies hardware version string (null-terminated).
Definition protocol_snip.c:182
bool ProtocolSnip_validate_snip_reply(openlcb_msg_t *snip_reply_msg)
Validates a SNIP reply: correct MTI, valid length, exactly 6 null terminators.
Definition protocol_snip.c:398
uint16_t ProtocolSnip_load_user_name(openlcb_node_t *openlcb_node, openlcb_msg_t *outgoing_msg, uint16_t offset, uint16_t requested_bytes)
Reads user name from config memory (null-terminated, max 63 bytes).
Definition protocol_snip.c:229
Callback interface for SNIP. config_memory_read is REQUIRED.
Definition protocol_snip.h:48
Core OpenLCB message structure.
Definition openlcb_types.h:480
OpenLCB virtual node.
Definition openlcb_types.h:679
Complete context passed to protocol handler functions.
Definition openlcb_types.h:743

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