diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-03-18 03:34:12 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-03-18 03:34:12 +0100 |
commit | 77199be682daa1797a4518b3958d58c133dd88f2 (patch) | |
tree | 60737630a303d0127fdf9db062228289311152fa /mmss/mmss.c | |
parent | cdf537c71c29c05fd3d77637a3731de80019d2be (diff) | |
download | gmrf-77199be682daa1797a4518b3958d58c133dd88f2.tar gmrf-77199be682daa1797a4518b3958d58c133dd88f2.zip |
Rename context data structures, define more of the module API
Diffstat (limited to 'mmss/mmss.c')
-rw-r--r-- | mmss/mmss.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/mmss/mmss.c b/mmss/mmss.c index eca99ad..abb4835 100644 --- a/mmss/mmss.c +++ b/mmss/mmss.c @@ -31,11 +31,19 @@ #include <stdlib.h> +static void init_nodes(gmrf_t *nodes) { + gmrf_t *node; + for (node = nodes; node; node = node->next) { + node->ctx = node->proto->init(node); + } +} + + int main() { - mmss_context_t ctx = { .now = 0 }; + mmss_t mmss = { .now = 0 }; mmss_network_t net = { .mtu = 1500 }; - gmrf_context_t node1 = { .mmss = &ctx }, node2 = { .mmss = &ctx }; + gmrf_t node1 = { .mmss = &mmss }, node2 = { .mmss = &mmss }; gmrf_iface_t iface1 = {}, iface2 = {}; iface1.net = &net; @@ -53,10 +61,12 @@ int main() { net.interfaces = &iface2; node2.next = &node1; - gmrf_context_t *nodes = &node2; + gmrf_t *nodes = &node2; + + init_nodes(nodes); while (true) { - int timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue); + int timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); if (timeout < 0) { fprintf(stderr, "Nothing queued, deadlock occured.\n"); @@ -64,25 +74,24 @@ int main() { } if (timeout > 0) { - assert(!mmss_queue_get(&ctx, &ctx.packet_queue)); + assert(!mmss_queue_get(&mmss, &mmss.packet_queue)); - ctx.now += timeout; - timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue); + mmss.now += timeout; + timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); } assert(timeout == 0); while (timeout == 0) { - mmss_packet_t *packet = mmss_queue_get(&ctx, &ctx.packet_queue); + mmss_packet_t *packet = mmss_queue_get(&mmss, &mmss.packet_queue); assert(packet); - packet->dest->node->handle_packet(packet->dest->node, packet->dest, - &packet->source->address, packet->data, - packet->len); + packet->dest->node->proto->handle_packet(packet->dest->node, packet->dest->node->ctx, packet->dest, + &packet->source->address, packet->data, packet->len); free(packet); - timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue); + timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); } } |