Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add maxwait, start time coordination and system events #206

Merged
merged 67 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
eafdc5e
Handle unconnected inputs and add test
erlingrj Jan 28, 2025
89b08dc
Format
erlingrj Jan 28, 2025
f59c197
Generate timeout handler for reactions
erlingrj Jan 28, 2025
07408fb
Detect STP violations
erlingrj Jan 28, 2025
8bfc162
WIP
erlingrj Jan 28, 2025
ac70508
Update grammer with never and forever keywords
erlingrj Jan 29, 2025
7531496
Various fixes for enabling STAA
erlingrj Jan 29, 2025
46a133c
Rename STAA -> max-wait
erlingrj Feb 6, 2025
c3625f9
Support max-wait with no handler
erlingrj Feb 6, 2025
a99981e
Update tests and examples
erlingrj Feb 6, 2025
cbe71bd
Merge branch 'main' into add-staa
erlingrj Feb 6, 2025
53e8015
FIx more tests
erlingrj Feb 6, 2025
f7633f1
Merge remote-tracking branch 'origin/main' into add-staa
erlingrj Feb 6, 2025
331388f
Resolve merge issues
erlingrj Feb 6, 2025
9181ed5
max-wait -> maxwait
erlingrj Feb 7, 2025
6586788
Formatting
erlingrj Feb 7, 2025
811a916
Fix deadline code-gen
erlingrj Feb 7, 2025
2d3d464
Document intended_tag of event
erlingrj Feb 7, 2025
0584126
Document federated input connection
erlingrj Feb 7, 2025
5e3c42b
Add federate name to the output
erlingrj Feb 7, 2025
63eaec8
Fixes
erlingrj Feb 7, 2025
f943ebf
Increase timeout to avoid flaky test
erlingrj Feb 7, 2025
68d50aa
Docs
erlingrj Feb 7, 2025
b9a5be5
Formatting
erlingrj Feb 7, 2025
b8ac67c
Fix RIOT test
erlingrj Feb 7, 2025
72e83f3
Fix logging
erlingrj Feb 7, 2025
e0d59db
FIx logging
erlingrj Feb 7, 2025
33857e6
Remove mistakenly committed files
erlingrj Feb 7, 2025
80f7e25
Fix bug in connection generator
erlingrj Feb 7, 2025
e544de5
Fix concurrency issues in TcpChannel
erlingrj Feb 7, 2025
40ac2aa
Update FederatedConnection
erlingrj Feb 7, 2025
1baa105
Format
erlingrj Feb 7, 2025
77f2bd2
Fix typo in STP violation check
erlingrj Feb 7, 2025
cfdf5ed
Merge remote-tracking branch 'origin/main' into add-staa
erlingrj Feb 10, 2025
806681a
Dont format kotlin code with spotless
erlingrj Feb 10, 2025
980d0db
Format
erlingrj Feb 10, 2025
74e23cf
Merge remote-tracking branch 'origin/main' into add-staa
erlingrj Feb 10, 2025
36a3860
Add the StartupCoordinator skeleton
erlingrj Feb 10, 2025
1766348
WIP
erlingrj Feb 10, 2025
15b58db
Merge remote-tracking branch 'origin/main' into add-staa
erlingrj Feb 11, 2025
ff149cc
Formating
erlingrj Feb 11, 2025
c9030d4
Add proper handling of start tag
erlingrj Feb 11, 2025
4549e05
Formatting
erlingrj Feb 11, 2025
abb6caa
Also format unit tests
erlingrj Feb 11, 2025
fcf27d3
Small fixes
erlingrj Feb 11, 2025
febc3a6
Format
erlingrj Feb 11, 2025
79a8637
Remove leader concept
erlingrj Feb 11, 2025
68c3cef
Add timeout to RIOT platform test
erlingrj Feb 11, 2025
d885c02
Start moving to a system_event_queue
erlingrj Feb 14, 2025
d4e7e90
Formatting
erlingrj Feb 17, 2025
9e132ab
Formating -> Formatting
erlingrj Feb 17, 2025
e2624a8
Port all examples to also support system_event_queue
erlingrj Feb 17, 2025
74eaec7
Merge branch 'main' into add-staa
erlingrj Feb 17, 2025
3cde148
Formatting
erlingrj Feb 17, 2025
23afbd7
Dont call send_blocking from async context
erlingrj Feb 17, 2025
bf25f03
Remove was_ever_connected
erlingrj Feb 17, 2025
235bec1
Formatting
erlingrj Feb 17, 2025
16b0c0d
Make run script return on first error
erlingrj Feb 17, 2025
dc309df
Update
erlingrj Feb 17, 2025
08d5b8d
Fix critical section
erlingrj Feb 17, 2025
69cf6f7
Update
erlingrj Feb 17, 2025
c7336f5
Fix LF_ENTRY_POINT_FEDERATE
erlingrj Feb 17, 2025
061b05c
Fixes
erlingrj Feb 17, 2025
5ea0732
Format
erlingrj Feb 17, 2025
633788c
Formatting
erlingrj Feb 17, 2025
bc3021b
Cosmetics
erlingrj Feb 18, 2025
a7f7c10
Docs
erlingrj Feb 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:

jobs:
formating:
name: formating
name: formatting
runs-on: ubuntu-24.04
steps:
- name: Checkout
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/riot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:

- name: Run platform tests
working-directory: ${{ github.workspace }}/test/platform/riot
run: ./runAll.sh
run: timeout 120 ./runAll.sh

- name: Build examples
working-directory: ${{ github.workspace }}/examples/riot
Expand Down
7 changes: 0 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ set(TEST_COVERAGE OFF CACHE BOOL "Compute test coverage")
set(ASAN OFF CACHE BOOL "Compile with AddressSanitizer")
set(PLATFORM "POSIX" CACHE STRING "Platform to target")
set(SCHEDULER "DYNAMIC" CACHE STRING "Scheduler to use")
set(EVENT_QUEUE_SIZE 32 CACHE STRING "Static size of the event queue")
set(REACTION_QUEUE_SIZE 32 CACHE STRING "Static size of the reaction queue")
set(NETWORK_CHANNEL_TCP_POSIX OFF CACHE BOOL "Use POSIX TCP NetworkChannel")

# Code coverage setup
Expand Down Expand Up @@ -83,11 +81,6 @@ target_compile_definitions(reactor-uc PUBLIC "PLATFORM_${PLATFORM}")
# Add compile definition for scheduler used
target_compile_definitions(reactor-uc PRIVATE "SCHEDULER_${SCHEDULER}")

# Add compile definitions for event and reaction queue sizes. Has to be PUBLIC because they are used in the header files.
message(STATUS "Setting event queue size to ${EVENT_QUEUE_SIZE} and reaction queue size to ${REACTION_QUEUE_SIZE}")
target_compile_definitions(reactor-uc PUBLIC EVENT_QUEUE_SIZE=${EVENT_QUEUE_SIZE})
target_compile_definitions(reactor-uc PUBLIC REACTION_QUEUE_SIZE=${REACTION_QUEUE_SIZE})

if(NETWORK_CHANNEL_TCP_POSIX)
target_compile_definitions(reactor-uc PRIVATE NETWORK_CHANNEL_TCP_POSIX)
endif()
Expand Down
7 changes: 4 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,18 @@ asan:
make test -C build

# Format the code base
SRC_FILES := $(shell find ./src -path ./src/generated -prune -o -name '*.c' -print)
SRC_FILES := $(shell find ./src ./test/unit/ -path ./src/generated -prune -o -name '*.c' -print)
HDR_FILES := $(shell find ./include -path ./include/reactor-uc/generated -prune -o -name '*.h' -print)

format:
clang-format -i -style=file $(SRC_FILES) $(HDR_FILES)
cd lfc && ./gradlew ktfmtFormat && cd ..
cd lfc && ./gradlew spotlessApply
cd lfc && ./gradlew ktfmtFormat && ./gradlew spotlessApply && cd ..

# Check that the code base is formatted
format-check:
clang-format --dry-run --Werror -style=file $(SRC_FILES) $(HDR_FILES)
cd lfc && ./gradlew ktfmtCheck && cd ..
cd lfc && ./gradlew ktfmtCheck && ./gradlew spotlessCheck && cd ..

# Run the entire CI flow
ci: clean test coverage format-check
Expand Down
4 changes: 2 additions & 2 deletions examples/common/timer_source.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
LF_DEFINE_TIMER_STRUCT(TimerSource, t, 1, 0);
LF_DEFINE_TIMER_CTOR(TimerSource, t, 1, 0);
LF_DEFINE_REACTION_STRUCT(TimerSource, r, 0);
LF_DEFINE_REACTION_CTOR(TimerSource, r, 0);
LF_DEFINE_REACTION_CTOR(TimerSource, r, 0, NULL, NEVER, NULL);

typedef struct {
Reactor super;
Expand All @@ -21,4 +21,4 @@ LF_REACTOR_CTOR_SIGNATURE(TimerSource) {
LF_TIMER_REGISTER_EFFECT(self->t, self->r);
}

LF_ENTRY_POINT(TimerSource, SEC(1), false, false);
LF_ENTRY_POINT(TimerSource,32,32, SEC(1), false, false);
11 changes: 8 additions & 3 deletions examples/posix/federated/receiver.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ lf_ret_t deserialize_msg_t(void *user_struct, const unsigned char *msg_buf, size
}

LF_DEFINE_REACTION_STRUCT(Receiver, r, 0);
LF_DEFINE_REACTION_CTOR(Receiver, r, 0);
LF_DEFINE_REACTION_CTOR(Receiver, r, 0, NULL, NEVER, NULL);
LF_DEFINE_INPUT_STRUCT(Receiver, in, 1, 0, msg_t, 0);
LF_DEFINE_INPUT_CTOR(Receiver, in, 1, 0, msg_t, 0);

Expand Down Expand Up @@ -51,7 +51,7 @@ LF_REACTOR_CTOR_SIGNATURE_WITH_PARAMETERS(Receiver, InputExternalCtorArgs *in_ex
}

LF_DEFINE_FEDERATED_INPUT_CONNECTION_STRUCT(Receiver, in, msg_t, 5);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, msg_t, 5, MSEC(100), false);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, msg_t, 5, MSEC(100), false, 0);

typedef struct {
FederatedConnectionBundle super;
Expand All @@ -67,12 +67,16 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Receiver, Sender) {
LF_INITIALIZE_FEDERATED_INPUT_CONNECTION(Receiver, in, deserialize_msg_t);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 1);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 1, 1);

typedef struct {
Reactor super;
LF_CHILD_REACTOR_INSTANCE(Receiver, receiver, 1);
LF_FEDERATED_CONNECTION_BUNDLE_INSTANCE(Receiver, Sender);
LF_FEDERATE_BOOKKEEPING_INSTANCES(1);
LF_CHILD_INPUT_SOURCES(receiver, in, 1, 1, 0);
FederateStartupCoordinator startup_coordinator;
} MainRecv;

LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
Expand All @@ -81,10 +85,11 @@ LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
LF_DEFINE_CHILD_INPUT_ARGS(receiver, in, 1, 1);
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Receiver, receiver, 1, _receiver_in_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Receiver, Sender);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);
lf_connect_federated_input(&self->Receiver_Sender_bundle.inputs[0]->super, &self->receiver->in[0].super);
}

LF_ENTRY_POINT_FEDERATED(MainRecv, SEC(1), true, true, 1, false)
LF_ENTRY_POINT_FEDERATED(MainRecv,32,0,32, SEC(1), true, 1, false)

int main() {
lf_start();
Expand Down
13 changes: 9 additions & 4 deletions examples/posix/federated/sender.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ typedef struct {
char msg[512];
} msg_t;

size_t serialize_msg_t(const void *user_struct, size_t user_struct_size, unsigned char *msg_buf) {
int serialize_msg_t(const void *user_struct, size_t user_struct_size, unsigned char *msg_buf) {
const msg_t *msg = user_struct;

memcpy(msg_buf, &msg->size, sizeof(msg->size));
Expand All @@ -24,7 +24,7 @@ size_t serialize_msg_t(const void *user_struct, size_t user_struct_size, unsigne
LF_DEFINE_TIMER_STRUCT(Sender, t, 1, 0)
LF_DEFINE_TIMER_CTOR(Sender, t, 1, 0)
LF_DEFINE_REACTION_STRUCT(Sender, r, 1)
LF_DEFINE_REACTION_CTOR(Sender, r, 0)
LF_DEFINE_REACTION_CTOR(Sender, r, 0, NULL, NEVER, NULL)
LF_DEFINE_OUTPUT_STRUCT(Sender, out, 1, msg_t)
LF_DEFINE_OUTPUT_CTOR(Sender, out, 1)

Expand Down Expand Up @@ -78,6 +78,9 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Sender, Receiver) {
LF_INITIALIZE_FEDERATED_OUTPUT_CONNECTION(Sender, out, serialize_msg_t);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 1);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 1, 1);

// Reactor main
typedef struct {
Reactor super;
Expand All @@ -87,6 +90,7 @@ typedef struct {
LF_CHILD_OUTPUT_CONNECTIONS(sender, out, 1, 1, 1);
LF_CHILD_OUTPUT_EFFECTS(sender, out, 1, 1, 0);
LF_CHILD_OUTPUT_OBSERVERS(sender, out, 1, 1, 0);
FederateStartupCoordinator startup_coordinator;
} MainSender;

LF_REACTOR_CTOR_SIGNATURE(MainSender) {
Expand All @@ -95,10 +99,11 @@ LF_REACTOR_CTOR_SIGNATURE(MainSender) {
LF_DEFINE_CHILD_OUTPUT_ARGS(sender, out, 1, 1);
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Sender, sender, 1, _sender_out_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Sender, Receiver);
lf_connect_federated_output(self->Sender_Receiver_bundle.outputs[0], self->sender->out);
lf_connect_federated_output(&self->Sender_Receiver_bundle.outputs[0]->super, &self->sender->out[0].super);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);
}

LF_ENTRY_POINT_FEDERATED(MainSender, SEC(1), true, false, 1, true)
LF_ENTRY_POINT_FEDERATED(MainSender,32,0,32, SEC(1), true, 1, true)

int main() {
lf_start();
Expand Down
2 changes: 0 additions & 2 deletions examples/riot/blinky/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,5 @@ QUIET ?= 1

# Enable reactor-uc features
# CFLAGS += -DNETWORK_CHANNEL_TCP_POSIX
REACTION_QUEUE_SIZE = 32
EVENT_QUEUE_SIZE = 32

include $(CURDIR)/../../../make/riot/riot.mk
2 changes: 0 additions & 2 deletions examples/riot/coap_federated/receiver/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ QUIET ?= 1

# Enable reactor-uc features
CFLAGS += -DNETWORK_CHANNEL_COAP
REACTION_QUEUE_SIZE = 32
EVENT_QUEUE_SIZE = 32

CFLAGS += -DTHREAD_STACKSIZE_DEFAULT=10000
CFLAGS += -DTHREAD_STACKSIZE_MAIN=10000
Expand Down
10 changes: 7 additions & 3 deletions examples/riot/coap_federated/receiver/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ lf_ret_t deserialize_msg_t(void *user_struct, const unsigned char *msg_buf, size
}

LF_DEFINE_REACTION_STRUCT(Receiver, r, 0)
LF_DEFINE_REACTION_CTOR(Receiver, r, 0)
LF_DEFINE_REACTION_CTOR(Receiver, r, 0, NULL, NEVER, NULL)
LF_DEFINE_INPUT_STRUCT(Receiver, in, 1, 0, lf_msg_t, 0)
LF_DEFINE_INPUT_CTOR(Receiver, in, 1, 0, lf_msg_t, 0)

Expand Down Expand Up @@ -50,7 +50,7 @@ LF_REACTOR_CTOR_SIGNATURE_WITH_PARAMETERS(Receiver, InputExternalCtorArgs *in_ex
}

LF_DEFINE_FEDERATED_INPUT_CONNECTION_STRUCT(Receiver, in, lf_msg_t, 5);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, lf_msg_t, 5, MSEC(100), false);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, lf_msg_t, 5, MSEC(100), false, 0);

typedef struct {
FederatedConnectionBundle super;
Expand All @@ -66,12 +66,15 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Receiver, Sender) {
LF_INITIALIZE_FEDERATED_INPUT_CONNECTION(Receiver, in, deserialize_msg_t);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 1);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 1, 1);
typedef struct {
Reactor super;
LF_CHILD_REACTOR_INSTANCE(Receiver, receiver, 1);
LF_FEDERATED_CONNECTION_BUNDLE_INSTANCE(Receiver, Sender);
LF_FEDERATE_BOOKKEEPING_INSTANCES(1);
LF_CHILD_INPUT_SOURCES(receiver, in, 1, 1, 0);
FederateStartupCoordinator startup_coordinator;
} MainRecv;

LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
Expand All @@ -80,10 +83,11 @@ LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
LF_DEFINE_CHILD_INPUT_ARGS(receiver, in, 1, 1);
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Receiver, receiver, 1, _receiver_in_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Receiver, Sender);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);
lf_connect_federated_input(&self->Receiver_Sender_bundle.inputs[0]->super, &self->receiver->in[0].super);
}

LF_ENTRY_POINT_FEDERATED(MainRecv, SEC(1), true, true, 1, false)
LF_ENTRY_POINT_FEDERATED(MainRecv, 32, 0, 32, SEC(1), true, 1, false)

int main() {
lf_start();
Expand Down
2 changes: 0 additions & 2 deletions examples/riot/coap_federated/sender/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ QUIET ?= 1

# Enable reactor-uc features
CFLAGS += -DNETWORK_CHANNEL_COAP
REACTION_QUEUE_SIZE = 32
EVENT_QUEUE_SIZE = 32

CFLAGS += -DTHREAD_STACKSIZE_DEFAULT=10000
CFLAGS += -DTHREAD_STACKSIZE_MAIN=10000
Expand Down
8 changes: 6 additions & 2 deletions examples/riot/coap_federated/sender/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ int serialize_msg_t(const void *user_struct, size_t user_struct_size, unsigned c
LF_DEFINE_TIMER_STRUCT(Sender, t, 1, 0)
LF_DEFINE_TIMER_CTOR(Sender, t, 1, 0)
LF_DEFINE_REACTION_STRUCT(Sender, r, 1)
LF_DEFINE_REACTION_CTOR(Sender, r, 0)
LF_DEFINE_REACTION_CTOR(Sender, r, 0, NULL, NEVER, NULL)
LF_DEFINE_OUTPUT_STRUCT(Sender, out, 1, lf_msg_t)
LF_DEFINE_OUTPUT_CTOR(Sender, out, 1)

Expand Down Expand Up @@ -73,6 +73,8 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Sender, Receiver) {
LF_INITIALIZE_FEDERATED_OUTPUT_CONNECTION(Sender, out, serialize_msg_t);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 1);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 1, 1);
// Reactor main
typedef struct {
Reactor super;
Expand All @@ -82,6 +84,7 @@ typedef struct {
LF_CHILD_OUTPUT_CONNECTIONS(sender, out, 1, 1, 1);
LF_CHILD_OUTPUT_EFFECTS(sender, out, 1, 1, 0);
LF_CHILD_OUTPUT_OBSERVERS(sender, out, 1, 1, 0);
FederateStartupCoordinator startup_coordinator;
} MainSender;

LF_REACTOR_CTOR_SIGNATURE(MainSender) {
Expand All @@ -91,9 +94,10 @@ LF_REACTOR_CTOR_SIGNATURE(MainSender) {
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Sender, sender, 1, _sender_out_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Sender, Receiver);
lf_connect_federated_output((Connection *)self->Sender_Receiver_bundle.outputs[0], (Port *)self->sender->out);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);
}

LF_ENTRY_POINT_FEDERATED(MainSender, SEC(1), true, false, 1, true)
LF_ENTRY_POINT_FEDERATED(MainSender, SEC(1), true, 1, true)

int main() {
lf_start();
Expand Down
2 changes: 0 additions & 2 deletions examples/riot/hello/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,5 @@ QUIET ?= 1

# Enable reactor-uc features
# CFLAGS += -DNETWORK_CHANNEL_TCP_POSIX
REACTION_QUEUE_SIZE = 32
EVENT_QUEUE_SIZE = 32

include $(CURDIR)/../../../make/riot/riot.mk
10 changes: 7 additions & 3 deletions examples/zephyr/basic_federated/common/receiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ typedef struct {
} msg_t;

LF_DEFINE_REACTION_STRUCT(Receiver, r, 0);
LF_DEFINE_REACTION_CTOR(Receiver, r, 0)
LF_DEFINE_REACTION_CTOR(Receiver, r, 0, NULL, NEVER, NULL);

LF_DEFINE_INPUT_STRUCT(Receiver, in, 1, 0, msg_t, 0)
LF_DEFINE_INPUT_CTOR(Receiver, in, 1, 0, msg_t, 0)
Expand Down Expand Up @@ -65,7 +65,7 @@ LF_REACTOR_CTOR_SIGNATURE_WITH_PARAMETERS(Receiver, InputExternalCtorArgs *in_ex
}

LF_DEFINE_FEDERATED_INPUT_CONNECTION_STRUCT(Receiver, in, msg_t, 5);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, msg_t, 5, MSEC(100), false);
LF_DEFINE_FEDERATED_INPUT_CONNECTION_CTOR(Receiver, in, msg_t, 5, MSEC(100), false, 0);

typedef struct {
FederatedConnectionBundle super;
Expand All @@ -81,12 +81,15 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Receiver, Sender) {
LF_INITIALIZE_FEDERATED_INPUT_CONNECTION(Receiver, in, deserialize_payload_default);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 1);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 1, 1);
typedef struct {
Reactor super;
LF_CHILD_REACTOR_INSTANCE(Receiver, receiver, 1);
LF_FEDERATED_CONNECTION_BUNDLE_INSTANCE(Receiver, Sender);
LF_FEDERATE_BOOKKEEPING_INSTANCES(1);
LF_CHILD_INPUT_SOURCES(receiver, in, 1, 1, 0);
FederateStartupCoordinator startup_coordinator;
} MainRecv;

LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
Expand All @@ -95,6 +98,7 @@ LF_REACTOR_CTOR_SIGNATURE(MainRecv) {
LF_DEFINE_CHILD_INPUT_ARGS(receiver, in, 1, 1);
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Receiver, receiver, 1, _receiver_in_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Receiver, Sender);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);
lf_connect_federated_input(&self->Receiver_Sender_bundle.inputs[0]->super, &self->receiver->in[0].super);
}
LF_ENTRY_POINT_FEDERATED(MainRecv, FOREVER, true, true, 1, false)
LF_ENTRY_POINT_FEDERATED(MainRecv,32,0,32, FOREVER, true, 1, false)
8 changes: 6 additions & 2 deletions examples/zephyr/basic_federated/federated_sender/src/sender.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ typedef struct {
LF_DEFINE_ACTION_STRUCT(Sender, act, PHYSICAL_ACTION, 1, 0, 0, 10, bool);
LF_DEFINE_ACTION_CTOR(Sender, act, PHYSICAL_ACTION, 1, 0, 0, 10, bool);
LF_DEFINE_REACTION_STRUCT(Sender, r, 1);
LF_DEFINE_REACTION_CTOR(Sender, r, 0);
LF_DEFINE_REACTION_CTOR(Sender, r, 0, NULL, NEVER, NULL);

LF_DEFINE_OUTPUT_STRUCT(Sender, out, 1, msg_t)
LF_DEFINE_OUTPUT_CTOR(Sender, out, 1)
Expand Down Expand Up @@ -132,6 +132,8 @@ LF_FEDERATED_CONNECTION_BUNDLE_CTOR_SIGNATURE(Sender, Receiver2) {
LF_INITIALIZE_FEDERATED_OUTPUT_CONNECTION(Sender, out, serialize_payload_default);
}

LF_DEFINE_STARTUP_COORDINATOR_STRUCT(Federate, 2);
LF_DEFINE_STARTUP_COORDINATOR_CTOR(Federate, 2, 1);
// Reactor main
typedef struct {
Reactor super;
Expand All @@ -142,6 +144,7 @@ typedef struct {
LF_CHILD_OUTPUT_EFFECTS(sender, out, 1, 1, 0);
LF_CHILD_OUTPUT_OBSERVERS(sender, out,1, 1, 0);
LF_FEDERATE_BOOKKEEPING_INSTANCES(2);
FederateStartupCoordinator startup_coordinator;
} MainSender;

LF_REACTOR_CTOR_SIGNATURE(MainSender) {
Expand All @@ -152,12 +155,13 @@ LF_REACTOR_CTOR_SIGNATURE(MainSender) {
LF_INITIALIZE_CHILD_REACTOR_WITH_PARAMETERS(Sender, sender, 1, _sender_out_args[i]);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Sender, Receiver1);
LF_INITIALIZE_FEDERATED_CONNECTION_BUNDLE(Sender, Receiver2);
LF_INITIALIZE_STARTUP_COORDINATOR(Federate);

lf_connect_federated_output(self->Sender_Receiver1_bundle.outputs[0], self->sender->out);
lf_connect_federated_output(self->Sender_Receiver2_bundle.outputs[0], self->sender->out);
}

LF_ENTRY_POINT_FEDERATED(MainSender, FOREVER, true, true, 2, true)
LF_ENTRY_POINT_FEDERATED(MainSender,32,0,32, FOREVER, true, 2, true)

int main() {
setup_button();
Expand Down
Loading
Loading