OpenLcbCLib 1.0 Alpha
OpenSource C Library to create OpenLcb/Lcc Nodes
Loading...
Searching...
No Matches
openlcb_types.h
Go to the documentation of this file.
1
41// This is a guard condition so that contents of this file are not included
42// more than once.
43#ifndef __OPENLCB_OPENLCB_TYPES__
44#define __OPENLCB_OPENLCB_TYPES__
45
46#include <stdbool.h>
47#include <stdint.h>
48
49#if __has_include("openlcb_user_config.h")
50#include "openlcb_user_config.h"
51#elif __has_include("../../openlcb_user_config.h")
52#include "../../openlcb_user_config.h"
53#elif __has_include("../../../openlcb_user_config.h")
54#include "../../../openlcb_user_config.h"
55#else
56#error "openlcb_user_config.h not found. Copy templates/openlcb_user_config.h to your project include path."
57#endif
58
59#ifdef __cplusplus
60 extern "C" {
61#endif /* __cplusplus */
62
73#ifndef USER_DEFINED_BASIC_BUFFER_DEPTH
74#error "USER_DEFINED_BASIC_BUFFER_DEPTH must be defined in openlcb_user_config.h"
75#endif
76
78#ifndef USER_DEFINED_DATAGRAM_BUFFER_DEPTH
79#error "USER_DEFINED_DATAGRAM_BUFFER_DEPTH must be defined in openlcb_user_config.h"
80#endif
81
83#ifndef USER_DEFINED_SNIP_BUFFER_DEPTH
84#error "USER_DEFINED_SNIP_BUFFER_DEPTH must be defined in openlcb_user_config.h"
85#endif
86
88#ifndef USER_DEFINED_STREAM_BUFFER_DEPTH
89#error "USER_DEFINED_STREAM_BUFFER_DEPTH must be defined in openlcb_user_config.h"
90#endif
91
93#ifndef USER_DEFINED_NODE_BUFFER_DEPTH
94#error "USER_DEFINED_NODE_BUFFER_DEPTH must be defined in openlcb_user_config.h"
95#endif
96
98#ifndef USER_DEFINED_CDI_LENGTH
99#error "USER_DEFINED_CDI_LENGTH must be defined in openlcb_user_config.h"
100#endif
101
103#ifndef USER_DEFINED_FDI_LENGTH
104#error "USER_DEFINED_FDI_LENGTH must be defined in openlcb_user_config.h"
105#endif
106
108#ifndef USER_DEFINED_PRODUCER_COUNT
109#error "USER_DEFINED_PRODUCER_COUNT must be defined in openlcb_user_config.h"
110#endif
111
113#ifndef USER_DEFINED_PRODUCER_RANGE_COUNT
114#error "USER_DEFINED_PRODUCER_RANGE_COUNT must be defined in openlcb_user_config.h"
115#endif
116
118#ifndef USER_DEFINED_CONSUMER_COUNT
119#error "USER_DEFINED_CONSUMER_COUNT must be defined in openlcb_user_config.h"
120#endif
121
123#ifndef USER_DEFINED_CONSUMER_RANGE_COUNT
124#error "USER_DEFINED_CONSUMER_RANGE_COUNT must be defined in openlcb_user_config.h"
125#endif
126
127
129#ifndef USER_DEFINED_TRAIN_NODE_COUNT
130#error "USER_DEFINED_TRAIN_NODE_COUNT must be defined in openlcb_user_config.h"
131#endif
132
134#ifndef USER_DEFINED_MAX_LISTENERS_PER_TRAIN
135#error "USER_DEFINED_MAX_LISTENERS_PER_TRAIN must be defined in openlcb_user_config.h"
136#endif
137
139#ifndef USER_DEFINED_MAX_TRAIN_FUNCTIONS
140#error "USER_DEFINED_MAX_TRAIN_FUNCTIONS must be defined in openlcb_user_config.h"
141#endif
142
143 // end of user_config_constants
144
152#define LEN_CONFIG_MEM_OPTIONS_DESCRIPTION (64 - 1)
153
155#define LEN_CONFIG_MEM_ADDRESS_SPACE_DESCRIPTION (60 - 1)
156
158#define NULL_NODE_ID 0x000000000000
159
161#define NULL_EVENT_ID 0x0000000000000000
162
164#define LEN_SNIP_NAME_BUFFER 41
165
167#define LEN_SNIP_MODEL_BUFFER 41
168
170#define LEN_SNIP_HARDWARE_VERSION_BUFFER 21
171
173#define LEN_SNIP_SOFTWARE_VERSION_BUFFER 21
174
176#define LEN_SNIP_USER_NAME_BUFFER 63
177
179#define LEN_SNIP_USER_DESCRIPTION_BUFFER 64
180
182#define LEN_SNIP_USER_DATA (LEN_SNIP_USER_NAME_BUFFER + LEN_SNIP_USER_DESCRIPTION_BUFFER)
183
185#define LEN_SNIP_VERSION 1
186
188#define LEN_SNIP_USER_VERSION 1
189
191#define LEN_SNIP_STRUCTURE 264
192
194#define LEN_MESSAGE_BYTES_BASIC 16
195
197#define LEN_MESSAGE_BYTES_DATAGRAM 72
198
200#define LEN_MESSAGE_BYTES_SNIP 256
201
203#define LEN_MESSAGE_BYTES_STREAM 512
204
206#define LEN_EVENT_ID 8
207
209#define LEN_MESSAGE_BUFFER (USER_DEFINED_BASIC_BUFFER_DEPTH + USER_DEFINED_DATAGRAM_BUFFER_DEPTH + USER_DEFINED_SNIP_BUFFER_DEPTH + USER_DEFINED_STREAM_BUFFER_DEPTH)
210
212#define LEN_DATAGRAM_MAX_PAYLOAD 64
213
215#define LEN_EVENT_PAYLOAD LEN_MESSAGE_BYTES_SNIP
216
217 // end of buffer_size_constants
218
228
237
245
267
286
295
304
307
310
313
314 // end of payload_buffer_types
315
323 typedef payload_basic_t openlcb_basic_data_buffer_t[USER_DEFINED_BASIC_BUFFER_DEPTH];
324
326 typedef payload_datagram_t openlcb_datagram_data_buffer_t[USER_DEFINED_DATAGRAM_BUFFER_DEPTH];
327
329 typedef payload_snip_t openlcb_snip_data_buffer_t[USER_DEFINED_SNIP_BUFFER_DEPTH];
330
332 typedef payload_stream_t openlcb_stream_data_buffer_t[USER_DEFINED_STREAM_BUFFER_DEPTH];
333
334 // end of payload_pool_types
335
337 typedef uint8_t openlcb_payload_t[1];
338
340 typedef uint64_t event_id_t;
341
349
357
359 typedef uint64_t node_id_t;
360
363
366
368 typedef struct {
369
370 uint8_t hour;
371 uint8_t minute;
372 bool valid;
375
377 typedef struct {
378
379 uint8_t month;
380 uint8_t day;
381 bool valid;
384
386 typedef struct {
387
388 uint16_t year;
389 bool valid;
392
399 typedef struct {
400
401 int16_t rate;
402 bool valid;
405
418
435
437 typedef struct {
438
439 bool allocated : 1;
440 bool inprocess : 1;
441 bool invalid : 1;
442 bool loopback : 1;
445
458 typedef union {
459
462 struct {
463
464 uint8_t tick_snapshot : 5;
465 uint8_t retry_count : 3;
467 } datagram;
468
470
495
498
509
516 typedef struct {
517
518 uint8_t mfg_version;
521 char hardware_version[LEN_SNIP_HARDWARE_VERSION_BUFFER];
522 char software_version[LEN_SNIP_SOFTWARE_VERSION_BUFFER];
523 uint8_t user_version;
526
542
544 typedef struct {
545
546 bool present : 1;
547 bool read_only : 1;
551 uint32_t low_address;
553
555
581
587 typedef struct {
588
589 bool running : 1;
590 uint8_t enum_index;
594
596 typedef struct {
597
598 uint16_t count;
599 event_id_struct_t list[USER_DEFINED_CONSUMER_COUNT];
600 uint16_t range_count;
601 event_id_range_t range_list[USER_DEFINED_CONSUMER_RANGE_COUNT];
603
605
607 typedef struct {
608
609 uint16_t count;
610 event_id_struct_t list[USER_DEFINED_PRODUCER_COUNT];
611 uint16_t range_count;
612 event_id_range_t range_list[USER_DEFINED_PRODUCER_RANGE_COUNT];
614
616
618 typedef struct {
619
620 uint8_t run_state : 5;
621 bool allocated : 1;
622 bool permitted : 1;
623 bool initialized : 1;
630
632 typedef struct {
633
635 uint8_t flags;
638
672
695
697 typedef struct {
698
699 openlcb_node_t node[USER_DEFINED_NODE_BUFFER_DEPTH];
700 uint16_t count;
703
712
714 typedef void (*parameterless_callback_t)(void);
715
723
733
735 typedef struct {
736
738 uint8_t enumerate : 1;
739
741
751
759
769
777
780
782 typedef void (*operations_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_operations_request_info_TAG *config_mem_operations_request_info);
783
791
794
796 typedef void (*read_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_read_request_info_TAG *config_mem_read_request_info);
797
809
812
814 typedef void (*write_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_write_request_info_TAG *config_mem_write_request_info);
815
828
829#ifdef __cplusplus
830}
831#endif /* __cplusplus */
832
833#endif /* __OPENLCB_OPENLCB_TYPES__ */
#define LEN_CONFIG_MEM_OPTIONS_DESCRIPTION
Maximum description length for Configuration Options reply.
Definition openlcb_types.h:152
#define LEN_SNIP_MODEL_BUFFER
SNIP model name field length (including null)
Definition openlcb_types.h:167
#define LEN_SNIP_HARDWARE_VERSION_BUFFER
SNIP hardware version field length (including null)
Definition openlcb_types.h:170
#define LEN_DATAGRAM_MAX_PAYLOAD
Maximum datagram payload after protocol overhead.
Definition openlcb_types.h:212
#define LEN_SNIP_NAME_BUFFER
SNIP manufacturer name field length (including null)
Definition openlcb_types.h:164
#define LEN_EVENT_PAYLOAD
Event payload maximum size (uses SNIP buffer)
Definition openlcb_types.h:215
#define LEN_MESSAGE_BUFFER
Total number of message buffers (sum of all buffer types)
Definition openlcb_types.h:209
#define LEN_CONFIG_MEM_ADDRESS_SPACE_DESCRIPTION
Maximum description length for Address Space Info reply.
Definition openlcb_types.h:155
#define LEN_SNIP_SOFTWARE_VERSION_BUFFER
SNIP software version field length (including null)
Definition openlcb_types.h:173
#define LEN_MESSAGE_BYTES_BASIC
BASIC message payload size.
Definition openlcb_types.h:194
#define LEN_MESSAGE_BYTES_SNIP
SNIP message payload size (also covers Events with Payload)
Definition openlcb_types.h:200
#define LEN_MESSAGE_BYTES_DATAGRAM
DATAGRAM message maximum payload size.
Definition openlcb_types.h:197
#define LEN_MESSAGE_BYTES_STREAM
STREAM message payload size.
Definition openlcb_types.h:203
uint8_t payload_datagram_t[LEN_MESSAGE_BYTES_DATAGRAM]
DATAGRAM message payload buffer (72 bytes)
Definition openlcb_types.h:306
uint8_t payload_basic_t[LEN_MESSAGE_BYTES_BASIC]
BASIC message payload buffer (16 bytes)
Definition openlcb_types.h:303
uint8_t payload_snip_t[LEN_MESSAGE_BYTES_SNIP]
SNIP message payload buffer (256 bytes)
Definition openlcb_types.h:309
uint8_t payload_stream_t[LEN_MESSAGE_BYTES_STREAM]
STREAM message payload buffer (512 bytes)
Definition openlcb_types.h:312
payload_datagram_t openlcb_datagram_data_buffer_t[USER_DEFINED_DATAGRAM_BUFFER_DEPTH]
Array of DATAGRAM payload buffers.
Definition openlcb_types.h:326
payload_basic_t openlcb_basic_data_buffer_t[USER_DEFINED_BASIC_BUFFER_DEPTH]
Array of BASIC payload buffers.
Definition openlcb_types.h:323
payload_stream_t openlcb_stream_data_buffer_t[USER_DEFINED_STREAM_BUFFER_DEPTH]
Array of STREAM payload buffers.
Definition openlcb_types.h:332
payload_snip_t openlcb_snip_data_buffer_t[USER_DEFINED_SNIP_BUFFER_DEPTH]
Array of SNIP payload buffers.
Definition openlcb_types.h:329
struct config_mem_read_request_info_TAG config_mem_read_request_info_t
Request info for a configuration memory read operation.
struct config_mem_operations_request_info_TAG config_mem_operations_request_info_t
Request info for Get Options / Get Address Space Info commands.
uint64_t event_id_t
64-bit Event ID.
Definition openlcb_types.h:340
struct config_mem_write_request_info_TAG config_mem_write_request_info_t
Request info for a configuration memory write operation.
void(* parameterless_callback_t)(void)
Callback function type with no parameters.
Definition openlcb_types.h:714
void(* write_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_write_request_info_TAG *config_mem_write_request_info)
Config mem write callback function type.
Definition openlcb_types.h:814
event_status_enum
Event status for Producer/Consumer identification messages.
Definition openlcb_types.h:230
@ EVENT_STATUS_UNKNOWN
Definition openlcb_types.h:232
@ EVENT_STATUS_CLEAR
Definition openlcb_types.h:234
@ EVENT_STATUS_SET
Definition openlcb_types.h:233
uint8_t configuration_memory_buffer_t[LEN_DATAGRAM_MAX_PAYLOAD]
Configuration memory read/write operation buffer (64 bytes).
Definition openlcb_types.h:365
event_range_count_enum
Power-of-two event range sizes for range-identified events.
Definition openlcb_types.h:247
@ EVENT_RANGE_COUNT_16
Definition openlcb_types.h:253
@ EVENT_RANGE_COUNT_512
Definition openlcb_types.h:258
@ EVENT_RANGE_COUNT_32
Definition openlcb_types.h:254
@ EVENT_RANGE_COUNT_32768
Definition openlcb_types.h:264
@ EVENT_RANGE_COUNT_8192
Definition openlcb_types.h:262
@ EVENT_RANGE_COUNT_4
Definition openlcb_types.h:251
@ EVENT_RANGE_COUNT_8
Definition openlcb_types.h:252
@ EVENT_RANGE_COUNT_2
Definition openlcb_types.h:250
@ EVENT_RANGE_COUNT_1024
Definition openlcb_types.h:259
@ EVENT_RANGE_COUNT_64
Definition openlcb_types.h:255
@ EVENT_RANGE_COUNT_2048
Definition openlcb_types.h:260
@ EVENT_RANGE_COUNT_256
Definition openlcb_types.h:257
@ EVENT_RANGE_COUNT_4096
Definition openlcb_types.h:261
@ EVENT_RANGE_COUNT_1
Definition openlcb_types.h:249
@ EVENT_RANGE_COUNT_16384
Definition openlcb_types.h:263
@ EVENT_RANGE_COUNT_128
Definition openlcb_types.h:256
struct openlcb_node_TAG openlcb_node_t
OpenLCB virtual node.
train_emergency_type_enum
Emergency state type for train protocol callbacks.
Definition openlcb_types.h:288
@ TRAIN_EMERGENCY_TYPE_ESTOP
Definition openlcb_types.h:290
@ TRAIN_EMERGENCY_TYPE_GLOBAL_STOP
Definition openlcb_types.h:291
@ TRAIN_EMERGENCY_TYPE_GLOBAL_OFF
Definition openlcb_types.h:292
uint8_t openlcb_payload_t[1]
Generic 1-byte payload pointer type for casting.
Definition openlcb_types.h:337
struct train_state_TAG train_state_t
Mutable runtime state for a single train node.
uint8_t event_payload_t[LEN_EVENT_PAYLOAD]
Event payload data buffer (LEN_EVENT_PAYLOAD bytes).
Definition openlcb_types.h:362
openlcb_msg_t openlcb_msg_array_t[LEN_MESSAGE_BUFFER]
Array of all message structures in the buffer store.
Definition openlcb_types.h:497
void(* read_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_read_request_info_TAG *config_mem_read_request_info)
Config mem read callback function type.
Definition openlcb_types.h:796
space_encoding_enum
Where the address space byte is encoded in a Config Mem command.
Definition openlcb_types.h:239
@ ADDRESS_SPACE_IN_BYTE_1
Definition openlcb_types.h:241
@ ADDRESS_SPACE_IN_BYTE_6
Definition openlcb_types.h:242
broadcast_time_event_type_enum
Broadcast Time Protocol event type decoded from an Event ID.
Definition openlcb_types.h:269
@ BROADCAST_TIME_EVENT_REPORT_RATE
Definition openlcb_types.h:274
@ BROADCAST_TIME_EVENT_STOP
Definition openlcb_types.h:280
@ BROADCAST_TIME_EVENT_START
Definition openlcb_types.h:281
@ BROADCAST_TIME_EVENT_UNKNOWN
Definition openlcb_types.h:283
@ BROADCAST_TIME_EVENT_QUERY
Definition openlcb_types.h:279
@ BROADCAST_TIME_EVENT_REPORT_YEAR
Definition openlcb_types.h:273
@ BROADCAST_TIME_EVENT_SET_TIME
Definition openlcb_types.h:275
@ BROADCAST_TIME_EVENT_REPORT_TIME
Definition openlcb_types.h:271
@ BROADCAST_TIME_EVENT_DATE_ROLLOVER
Definition openlcb_types.h:282
@ BROADCAST_TIME_EVENT_SET_RATE
Definition openlcb_types.h:278
@ BROADCAST_TIME_EVENT_SET_YEAR
Definition openlcb_types.h:277
@ BROADCAST_TIME_EVENT_REPORT_DATE
Definition openlcb_types.h:272
@ BROADCAST_TIME_EVENT_SET_DATE
Definition openlcb_types.h:276
uint64_t node_id_t
48-bit Node ID stored in a 64-bit type (upper 16 bits unused).
Definition openlcb_types.h:359
struct node_parameters_TAG node_parameters_t
Complete node configuration parameters (typically const/flash).
void(* operations_config_mem_space_func_t)(openlcb_statemachine_info_t *statemachine_info, struct config_mem_operations_request_info_TAG *config_mem_operations_request_info)
Config mem operations callback function type.
Definition openlcb_types.h:782
payload_type_enum
Message buffer payload type identifier.
Definition openlcb_types.h:220
@ BASIC
Definition openlcb_types.h:222
@ STREAM
Definition openlcb_types.h:225
@ DATAGRAM
Definition openlcb_types.h:223
@ SNIP
Definition openlcb_types.h:224
Complete state for one Broadcast Time clock.
Definition openlcb_types.h:407
broadcast_rate_t rate
Definition openlcb_types.h:413
broadcast_time_t time
Definition openlcb_types.h:410
bool is_running
Definition openlcb_types.h:414
uint64_t clock_id
Definition openlcb_types.h:409
broadcast_year_t year
Definition openlcb_types.h:412
uint32_t ms_accumulator
Definition openlcb_types.h:415
broadcast_date_t date
Definition openlcb_types.h:411
A clock slot with state and subscription flags.
Definition openlcb_types.h:420
uint8_t send_query_reply_state
Per-clock state for query reply sequence (0-5).
Definition openlcb_types.h:428
bool is_allocated
Definition openlcb_types.h:425
bool is_consumer
Definition openlcb_types.h:423
broadcast_clock_state_t state
Definition openlcb_types.h:422
uint8_t sync_delay_ticks
Countdown for Set command coalescing (30 = 3s at 100ms).
Definition openlcb_types.h:429
uint8_t previous_run_state
Last-seen producer node run_state for startup sync detection.
Definition openlcb_types.h:431
void * producer_node
Node pointer for sending (set in setup_producer).
Definition openlcb_types.h:432
bool query_reply_pending
Query reply state machine active.
Definition openlcb_types.h:426
bool sync_pending
Delayed sync waiting to fire after Set commands.
Definition openlcb_types.h:427
uint16_t report_cooldown_ticks
Cooldown between periodic Report Time events (600 = 60s).
Definition openlcb_types.h:430
bool is_producer
Definition openlcb_types.h:424
Broadcast Time month/day.
Definition openlcb_types.h:377
bool valid
Definition openlcb_types.h:381
uint8_t month
Definition openlcb_types.h:379
uint8_t day
Definition openlcb_types.h:380
Broadcast Time clock rate (12-bit signed fixed point, 2 fractional bits).
Definition openlcb_types.h:399
bool valid
Definition openlcb_types.h:402
int16_t rate
Definition openlcb_types.h:401
Broadcast Time hour/minute.
Definition openlcb_types.h:368
bool valid
Definition openlcb_types.h:372
uint8_t minute
Definition openlcb_types.h:371
uint8_t hour
Definition openlcb_types.h:370
Broadcast Time year.
Definition openlcb_types.h:386
bool valid
Definition openlcb_types.h:389
uint16_t year
Definition openlcb_types.h:388
Request info for Get Options / Get Address Space Info commands.
Definition openlcb_types.h:785
operations_config_mem_space_func_t operations_func
Definition openlcb_types.h:788
const user_address_space_info_t * space_info
Definition openlcb_types.h:787
Request info for a configuration memory read operation.
Definition openlcb_types.h:799
uint16_t data_start
Definition openlcb_types.h:804
read_config_mem_space_func_t read_space_func
Definition openlcb_types.h:806
uint16_t bytes
Definition openlcb_types.h:803
const user_address_space_info_t * space_info
Definition openlcb_types.h:805
uint32_t address
Definition openlcb_types.h:802
space_encoding_enum encoding
Definition openlcb_types.h:801
Request info for a configuration memory write operation.
Definition openlcb_types.h:817
uint16_t data_start
Definition openlcb_types.h:823
uint16_t bytes
Definition openlcb_types.h:821
const user_address_space_info_t * space_info
Definition openlcb_types.h:824
write_config_mem_space_func_t write_space_func
Definition openlcb_types.h:825
configuration_memory_buffer_t * write_buffer
Definition openlcb_types.h:822
uint32_t address
Definition openlcb_types.h:820
space_encoding_enum encoding
Definition openlcb_types.h:819
List of events consumed by a node.
Definition openlcb_types.h:596
uint16_t range_count
Definition openlcb_types.h:600
event_id_enum_t enumerator
Definition openlcb_types.h:602
uint16_t count
Definition openlcb_types.h:598
Event list enumeration state.
Definition openlcb_types.h:587
bool running
Definition openlcb_types.h:589
uint8_t enum_index
Definition openlcb_types.h:590
uint8_t range_enum_index
Definition openlcb_types.h:591
List of events produced by a node.
Definition openlcb_types.h:607
uint16_t range_count
Definition openlcb_types.h:611
event_id_enum_t enumerator
Definition openlcb_types.h:613
uint16_t count
Definition openlcb_types.h:609
Contiguous range of Event IDs starting at a base address.
Definition openlcb_types.h:351
event_range_count_enum event_count
Definition openlcb_types.h:354
event_id_t start_base
Definition openlcb_types.h:353
Event ID paired with its current status.
Definition openlcb_types.h:343
event_id_t event
Definition openlcb_types.h:345
event_status_enum status
Definition openlcb_types.h:346
Master buffer storage: message structures + segregated payload pools.
Definition openlcb_types.h:500
openlcb_stream_data_buffer_t stream
Definition openlcb_types.h:506
openlcb_msg_array_t messages
Definition openlcb_types.h:502
openlcb_snip_data_buffer_t snip
Definition openlcb_types.h:505
openlcb_datagram_data_buffer_t datagram
Definition openlcb_types.h:504
openlcb_basic_data_buffer_t basic
Definition openlcb_types.h:503
Complete node configuration parameters (typically const/flash).
Definition openlcb_types.h:562
user_address_space_info_t address_space_train_function_definition_info
Definition openlcb_types.h:575
uint8_t fdi[USER_DEFINED_FDI_LENGTH]
Definition openlcb_types.h:569
uint8_t consumer_count_autocreate
Definition openlcb_types.h:566
user_snip_struct_t snip
Definition openlcb_types.h:564
user_address_space_info_t address_space_train_function_config_memory
Definition openlcb_types.h:576
user_address_space_info_t address_space_acdi_manufacturer
Definition openlcb_types.h:573
user_address_space_info_t address_space_acdi_user
Definition openlcb_types.h:574
user_address_space_info_t address_space_all
Definition openlcb_types.h:571
user_address_space_info_t address_space_firmware
Definition openlcb_types.h:578
uint8_t cdi[USER_DEFINED_CDI_LENGTH]
Definition openlcb_types.h:568
user_address_space_info_t address_space_config_memory
Definition openlcb_types.h:572
uint64_t protocol_support
Definition openlcb_types.h:565
user_address_space_info_t address_space_configuration_definition
Definition openlcb_types.h:570
uint8_t producer_count_autocreate
Definition openlcb_types.h:567
user_configuration_options configuration_options
Definition openlcb_types.h:577
Message with inline BASIC-sized payload.
Definition openlcb_types.h:753
openlcb_msg_t openlcb_msg
Definition openlcb_types.h:755
payload_basic_t openlcb_payload
Definition openlcb_types.h:756
Incoming message context.
Definition openlcb_types.h:735
openlcb_msg_t * msg_ptr
Definition openlcb_types.h:737
uint8_t enumerate
Definition openlcb_types.h:738
Login state machine context.
Definition openlcb_types.h:771
openlcb_node_t * openlcb_node
Definition openlcb_types.h:773
openlcb_outgoing_basic_msg_info_t outgoing_msg_info
Definition openlcb_types.h:774
Message buffer allocation/assembly state flags.
Definition openlcb_types.h:437
bool allocated
Definition openlcb_types.h:439
bool invalid
Definition openlcb_types.h:441
bool loopback
Definition openlcb_types.h:442
bool inprocess
Definition openlcb_types.h:440
Core OpenLCB message structure.
Definition openlcb_types.h:480
openlcb_msg_timer_t timer
Definition openlcb_types.h:491
node_id_t source_id
Definition openlcb_types.h:486
node_id_t dest_id
Definition openlcb_types.h:487
uint8_t reference_count
Definition openlcb_types.h:492
openlcb_msg_state_t state
Definition openlcb_types.h:482
uint16_t payload_count
Definition openlcb_types.h:489
openlcb_payload_t * payload
Definition openlcb_types.h:490
payload_type_enum payload_type
Definition openlcb_types.h:488
uint16_t mti
Definition openlcb_types.h:483
uint16_t source_alias
Definition openlcb_types.h:484
uint16_t dest_alias
Definition openlcb_types.h:485
OpenLCB virtual node.
Definition openlcb_types.h:679
const node_parameters_t * parameters
Definition openlcb_types.h:687
struct train_state_TAG * train_state
Definition openlcb_types.h:692
uint64_t seed
Definition openlcb_types.h:684
uint16_t alias
Definition openlcb_types.h:683
openlcb_msg_t * last_received_datagram
Definition openlcb_types.h:690
uint64_t id
Definition openlcb_types.h:682
openlcb_node_state_t state
Definition openlcb_types.h:681
event_id_producer_list_t producers
Definition openlcb_types.h:686
uint8_t index
Definition openlcb_types.h:691
uint16_t timerticks
Definition openlcb_types.h:688
uint64_t owner_node
Definition openlcb_types.h:689
event_id_consumer_list_t consumers
Definition openlcb_types.h:685
Bit-packed node state flags.
Definition openlcb_types.h:618
bool allocated
Definition openlcb_types.h:621
bool firmware_upgrade_active
Definition openlcb_types.h:627
bool duplicate_id_detected
Definition openlcb_types.h:624
uint8_t run_state
Definition openlcb_types.h:620
bool resend_datagram
Definition openlcb_types.h:626
bool openlcb_datagram_ack_sent
Definition openlcb_types.h:625
bool permitted
Definition openlcb_types.h:622
bool initialized
Definition openlcb_types.h:623
Collection of all virtual nodes.
Definition openlcb_types.h:697
uint16_t count
Definition openlcb_types.h:700
Outgoing message context for the login state machine.
Definition openlcb_types.h:761
openlcb_basic_message_t openlcb_msg
Definition openlcb_types.h:766
uint8_t valid
Definition openlcb_types.h:764
openlcb_msg_t * msg_ptr
Definition openlcb_types.h:763
uint8_t enumerate
Definition openlcb_types.h:765
Outgoing message context for the main state machine.
Definition openlcb_types.h:725
uint8_t valid
Definition openlcb_types.h:728
openlcb_msg_t * msg_ptr
Definition openlcb_types.h:727
uint8_t enumerate
Definition openlcb_types.h:729
openlcb_stream_message_t openlcb_msg
Definition openlcb_types.h:730
Complete context passed to protocol handler functions.
Definition openlcb_types.h:743
openlcb_outgoing_stream_msg_info_t outgoing_msg_info
Definition openlcb_types.h:747
uint8_t current_tick
Definition openlcb_types.h:748
openlcb_node_t * openlcb_node
Definition openlcb_types.h:745
openlcb_incoming_msg_info_t incoming_msg_info
Definition openlcb_types.h:746
State machine temporary working buffers.
Definition openlcb_types.h:705
openlcb_msg_t * active_msg
Definition openlcb_types.h:709
openlcb_msg_t worker
Definition openlcb_types.h:707
payload_stream_t worker_buffer
Definition openlcb_types.h:708
Message with inline STREAM-sized payload.
Definition openlcb_types.h:717
openlcb_msg_t openlcb_msg
Definition openlcb_types.h:719
payload_stream_t openlcb_payload
Definition openlcb_types.h:720
A single listener entry for a train consist.
Definition openlcb_types.h:632
node_id_t node_id
Definition openlcb_types.h:634
uint8_t flags
Definition openlcb_types.h:635
Mutable runtime state for a single train node.
Definition openlcb_types.h:644
uint8_t listener_count
Definition openlcb_types.h:660
train_listener_entry_t listeners[USER_DEFINED_MAX_LISTENERS_PER_TRAIN]
Definition openlcb_types.h:659
uint32_t heartbeat_counter_100ms
Definition openlcb_types.h:657
uint32_t heartbeat_timeout_s
Definition openlcb_types.h:656
struct openlcb_node_TAG * owner_node
Definition openlcb_types.h:669
uint8_t speed_steps
Definition openlcb_types.h:667
uint16_t dcc_address
Definition openlcb_types.h:665
bool is_long_address
Definition openlcb_types.h:666
bool estop_active
Definition openlcb_types.h:649
uint16_t set_speed
Definition openlcb_types.h:646
uint16_t controller_alias
Definition openlcb_types.h:653
uint16_t actual_speed
Definition openlcb_types.h:648
uint8_t reserved_node_count
Definition openlcb_types.h:654
node_id_t reserved_by_node_id
Definition openlcb_types.h:655
bool global_eoff_active
Definition openlcb_types.h:651
uint8_t listener_enum_index
Definition openlcb_types.h:661
bool global_estop_active
Definition openlcb_types.h:650
node_id_t controller_node_id
Definition openlcb_types.h:652
uint16_t functions[USER_DEFINED_MAX_TRAIN_FUNCTIONS]
Definition openlcb_types.h:663
uint16_t commanded_speed
Definition openlcb_types.h:647
Properties of a single configuration memory address space.
Definition openlcb_types.h:544
uint8_t address_space
Definition openlcb_types.h:549
uint32_t low_address
Definition openlcb_types.h:551
bool present
Definition openlcb_types.h:546
bool low_address_valid
Definition openlcb_types.h:548
uint32_t highest_address
Definition openlcb_types.h:550
bool read_only
Definition openlcb_types.h:547
Capability flags returned by Get Configuration Options command.
Definition openlcb_types.h:528
uint8_t high_address_space
Definition openlcb_types.h:537
bool write_under_mask_supported
Definition openlcb_types.h:530
bool read_from_user_space_0xfb_supported
Definition openlcb_types.h:534
uint8_t low_address_space
Definition openlcb_types.h:538
bool stream_read_write_supported
Definition openlcb_types.h:536
bool unaligned_writes_supported
Definition openlcb_types.h:532
bool unaligned_reads_supported
Definition openlcb_types.h:531
bool write_to_user_space_0xfb_supported
Definition openlcb_types.h:535
bool read_from_manufacturer_space_0xfc_supported
Definition openlcb_types.h:533
SNIP identification strings (manufacturer + user version byte).
Definition openlcb_types.h:516
uint8_t mfg_version
Definition openlcb_types.h:518
uint8_t user_version
Definition openlcb_types.h:523
Timer field union for openlcb_msg_t.
Definition openlcb_types.h:458
uint8_t tick_snapshot
Definition openlcb_types.h:464
uint8_t assembly_ticks
Definition openlcb_types.h:460
uint8_t retry_count
Definition openlcb_types.h:465

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