]> rtime.felk.cvut.cz Git - frescor/fna.git/blob - tests/tests_frescan/test_frescan_servers_send_receive_measures.c
695a262ade86eee545200ddd16daab35f64ccc9a
[frescor/fna.git] / tests / tests_frescan / test_frescan_servers_send_receive_measures.c
1 #include <stdio.h>  // perror
2 #include <stdlib.h> // exit
3 #include <unistd.h>   // sleep
4 #include <assert.h>
5
6 #include "frescan.h"
7 #include "frescan_servers.h"
8
9 #define ERROR(s) {perror (s); exit (-1);}
10 #define NETWORK 0
11 #define LOG_DEVICE LOG_ETHERNET
12
13 #define LOCAL_NODE 0
14
15 #include <misc/time_measurement_hwtime.h>
16 #include <misc/logger.h>
17
18 static const trace_point_id_t BEGIN = 0;
19 static const trace_point_id_t END = 1;
20
21 int main ()
22 {
23         int i, ret;
24         frescan_send_params_t send_params;
25         frescan_recv_params_t recv_params;
26         char msg[200];
27         int written;
28         frescan_init_params_t init_params;
29         frescan_server_params_t server_params;
30         frescan_node_t me;
31         size_t recv_bytes;
32         frescan_node_t from;
33         frescan_prio_t prio;
34
35         me = LOCAL_NODE;
36
37         printf(">> Initializing FRESCAN (me:%u)\n", me);
38
39         init_params.net = NETWORK;
40         init_params.node = LOCAL_NODE;
41         init_params.tx_fp_max_prio = 10;
42         init_params.rx_num_of_channels = 5;
43         init_params.rx_channel_max_prio = NULL;
44
45         ret = frescan_init(&init_params);
46         if (ret != 0) ERROR ("could not init FRESCAN");
47
48         printf(">> Creating a Server\n");
49
50         server_params.values.budget = 3;
51         server_params.values.period.tv_sec  = 3;
52         server_params.values.period.tv_nsec = 0;
53         server_params.prio = 4;
54
55         ret = frescan_servers_create(NETWORK,
56                                      &server_params,
57                                      &send_params.ss);
58         if (ret != 0) ERROR ("could not create server");
59
60         printf(">> Enter in loop for sending packets\n");
61
62         send_params.net      = NETWORK;
63         send_params.channel  = 0;
64         send_params.flags    = FRESCAN_SS | FRESCAN_ASYNC;
65         send_params.to = (me == 0)? 1 : 0;
66
67         recv_params.net      = NETWORK;
68         recv_params.channel  = 0;
69         recv_params.flags    = FRESCAN_SYNC;
70
71         if (me == 0) {
72                 printf(">> Init logger and timer measurements\n");
73
74                 ret = logger_init(LOG_DEVICE);
75                 assert(ret == 0);
76
77                 ret = time_measure_hwtime_init(BEGIN, "frescan_begin");
78                 assert(ret == 0);
79
80                 ret = time_measure_hwtime_init(END, "frescan_end");
81                 assert(ret == 0);
82
83                 printf(">> Enter in loop for send-recv packets\n");
84
85                 for (i=0; i<=100; i++) {
86                         written = snprintf(msg, sizeof(msg), "0123456789012345678901234567890123456789%d", i);
87
88                         time_measure_hwtime_set_timestamp(BEGIN);
89
90                         ret = frescan_send(&send_params,
91                                            (uint8_t *)msg,
92                                            written);
93                         if (ret != 0) ERROR ("could not send message\n");
94
95                         ret = frescan_recv(&recv_params,
96                                            (uint8_t *)msg,
97                                            sizeof(msg),
98                                            &recv_bytes,
99                                            &from,
100                                            &prio);
101                         if (ret != 0) ERROR ("could not receive message");
102
103                         time_measure_hwtime_set_timestamp(END);
104
105                         // msg[recv_bytes] = '\0';
106                         // printf("Received Answer (bytes:%u): %s\n", recv_bytes, msg);
107                 }
108
109                 ret = time_measure_hwtime_write_membuffer(BEGIN);
110                 assert(ret == 0);
111
112                 ret = time_measure_hwtime_write_membuffer(END);
113                 assert(ret == 0);
114
115                 while (logger_manual_call() > 0);
116
117         } else {
118                 printf(">> Enter in loop for recv-send packets\n");
119
120                 while(1) {
121                         ret = frescan_recv(&recv_params,
122                                            (uint8_t *)msg,
123                                            sizeof(msg),
124                                            &recv_bytes,
125                                            &from,
126                                            &prio);
127                         if (ret != 0) ERROR ("could not receive message");
128
129                         ret = frescan_send(&send_params,
130                                            (uint8_t *)msg,
131                                            recv_bytes);
132                         if (ret != 0) ERROR ("could not send message\n");
133                 }
134         }
135
136         return 0;
137 }