Blame view

RIOT/examples/real_time_app/main.c 12.5 KB
41eae2a4   vrobic   ajout serveur snt...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  /*
   * Copyright (C) 2015 Freie Universität Berlin
   *
   * This file is subject to the terms and conditions of the GNU Lesser
   * General Public License v2.1. See the file LICENSE in the top level
   * directory for more details.
   */
  
  /**
   * @ingroup     examples
   * @{
   *
   * @file
   * @brief       Example application for demonstrating the RIOT network stack
   *
   * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
   *
   * @}
   */
  #include <stdbool.h>
  #include <stdint.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <inttypes.h>
41eae2a4   vrobic   ajout serveur snt...
26
  #include <arpa/inet.h>
0ce5a8d8   root   correctif mode dé...
27
  
41eae2a4   vrobic   ajout serveur snt...
28
29
  #include "../../boards/stm32f4discovery/include/board.h"
  #include "../../boards/stm32f4discovery/include/periph_conf.h"
5345525d   root   ajout retour serv...
30
  #include "periph/gpio.h"
41eae2a4   vrobic   ajout serveur snt...
31
32
33
34
35
36
37
38
39
40
  #include "net/sock/udp.h"
  #include "net/gnrc/ipv6.h"
  #include "net/af.h"
  #include "net/sixlowpan.h"
  #include "net/gnrc/pktdump.h"
  #include "shell.h"
  #include "shell_commands.h"
  #include "msg.h"
  #include "thread.h"
  #include "sched.h"
41eae2a4   vrobic   ajout serveur snt...
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  #include "kernel_types.h"
  #include "net/netstats.h"
  #include "net/ipv6/addr.h"
  #include "periph/timer.h"
  #include "net/gnrc/ipv6/netif.h"
  #include "net/gnrc/netif.h"
  #include "net/gnrc/netapi.h"
  #include "net/netopt.h"
  #include "net/gnrc/pkt.h"
  #include "net/gnrc/pktbuf.h"
  #include "net/gnrc/netif/hdr.h"
  #include "net/gnrc/sixlowpan/netif.h"
  #include "net/fib.h"
  #include "net/gnrc/udp.h"
  #include "periph/pwm.h"
  #include "od.h"
  #include "net/sntp.h"
  #include "net/ntp_packet.h"
  #ifdef MODULE_SCHEDSTATISTICS
  #include "xtimer.h"
  #endif
  
  #ifdef MODULE_TLSF
  #include "tlsf.h"
  #endif
  
  #define MAIN_QUEUE_SIZE     (8)
  /**
   * @brief   The maximal expected link layer address length in byte
   */
  #define MAX_ADDR_LEN            (8U)
  
  /**
   * @brief   The default IPv6 prefix length if not specified.
   */
  #define SC_NETIF_IPV6_DEFAULT_PREFIX_LEN     (64)
  
  #define _STACKSIZE      (THREAD_STACKSIZE_DEFAULT + THREAD_EXTRA_STACKSIZE_PRINTF)
  #define MSG_TYPE_ISR    (0x3456)
  
0ce5a8d8   root   correctif mode dé...
81
82
83
  #define PWM_FREQ 1000
  #define PWM_RES 1000
  #define DEADLINE 40000
41eae2a4   vrobic   ajout serveur snt...
84
85
86
87
88
89
  
  // addr ipv6 link local node 1: fe80::3734:510e:3317:3402
  uint8_t node1[16]={0xfe,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x34,0x51,0x0e,0x33,0x17,0x34,0x02};
  // addr ipv6 link local node 2: fe80::3634:5110:3473:3762
  uint8_t node2[16]={0xfe,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x34,0x51,0x10,0x34,0x73,0x37,0x62};
  //addr ipv6 link local node 3: fe80::3634:5110:3471:3766
5345525d   root   ajout retour serv...
90
  uint8_t node3[16]={0xfe,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x34,0x51,0x0b,0x33,0x0a,0x34,0x1e};
41eae2a4   vrobic   ajout serveur snt...
91
92
93
94
95
96
97
98
99
100
101
102
103
  
  //static char _stack_server[GNRC_PKTDUMP_STACKSIZE];
  char pwm_stack[THREAD_STACKSIZE_MAIN];
  char sock_server_stack[THREAD_STACKSIZE_MAIN];
  char sock_client_stack[THREAD_STACKSIZE_MAIN];
  char sock_time_server_stack[THREAD_STACKSIZE_MAIN];
  // static gnrc_netreg_entry_t server = GNRC_NETREG_ENTRY_INIT_PID(GNRC_NETREG_DEMUX_CTX_ALL,
  //                                                                KERNEL_PID_UNDEF);
  // 
  // kernel_pid_t gnrc_server_pid = KERNEL_PID_UNDEF;
  // 
  kernel_pid_t server, client, time_server;
  int ordre = 0;
0f803f1d   root   test application ...
104
105
  int64_t offset = 0;
  int timer_run = 0;
e873cff7   root   application real-...
106
  int tourne = 0;
d3acc3ce   root   ajout gestion led...
107
  int arret = 0;
41eae2a4   vrobic   ajout serveur snt...
108
109
110
111
112
113
  sock_udp_ep_t local = SOCK_IPV6_EP_ANY;
  sock_udp_t sock; 
  sock_udp_ep_t local_ntp = SOCK_IPV6_EP_ANY;
  sock_udp_t sock_ntp; 
  static ntp_packet_t sntp_packet;
  
0f803f1d   root   test application ...
114
115
116
117
118
  typedef struct tableau {
    uint32_t heure_actuelle;
    char donnees[2];
  }Data;
  
41eae2a4   vrobic   ajout serveur snt...
119
120
121
  
  void *sock_time_server_thread(void *arg)
  {
0ce5a8d8   root   correctif mode dé...
122
123
124
125
126
    (void) arg;
    local_ntp.port = NTP_PORT;
    
    if (sock_udp_create(&sock_ntp, &local_ntp, NULL, 0) < 0) {
      puts("Error creating UDP sock");
41eae2a4   vrobic   ajout serveur snt...
127
      return NULL;
0ce5a8d8   root   correctif mode dé...
128
129
130
131
132
133
134
135
136
137
    }
    
    while (1) {
      sock_udp_ep_t remote;
      ssize_t res;
      
      if ((res = sock_udp_recv(&sock_ntp,&sntp_packet, sizeof(sntp_packet), SOCK_NO_TIMEOUT,
        &remote)) >= 0) {
        //  puts("Received a message");
        //printf("TT: %lu\n", byteorder_ntohl(sntp_packet.transmit.seconds));
41eae2a4   vrobic   ajout serveur snt...
138
        
0ce5a8d8   root   correctif mode dé...
139
140
141
142
143
144
145
146
147
148
149
150
151
        // printf("%c\n",remote.addr.ipv6[15]);
        //xtimer_ticks64_t now = xtimer_now64();
        // heure actuelle du serveur
        sntp_packet.receive.seconds=byteorder_htonl( xtimer_now_usec());
      sntp_packet.origin.seconds=sntp_packet.transmit.seconds;
      sntp_packet.transmit.seconds=byteorder_htonl( xtimer_now_usec());
      //printf("heure actuelle : %lu\n",xtimer_now_usec());
      //printf("TT2: %lu\n", byteorder_ntohl(sntp_packet.transmit.seconds));
      //memset(&sntp_packet, 0, sizeof(sntp_packet)); 
      //ntp_packet_set_vn(&sntp_packet);
      //ntp_packet_set_mode(&sntp_packet, NTP_MODE_SERVER);
      if (sock_udp_send(&sock_ntp, &sntp_packet, sizeof(sntp_packet), &remote) < 0) {
        puts("Error sending reply");
41eae2a4   vrobic   ajout serveur snt...
152
      }
0ce5a8d8   root   correctif mode dé...
153
154
155
156
157
        }
    }
    return NULL;
  }
  
41eae2a4   vrobic   ajout serveur snt...
158
159
160
  
  void *sock_server_thread(void *arg)
  {
ceb4c7ca   root   changement carte ...
161
162
163
164
    (void) arg;
    Data buf;
    int compteur = 5;
    int deadline;
0ce5a8d8   root   correctif mode dé...
165
    int interruption_msg = 0;
ceb4c7ca   root   changement carte ...
166
167
168
    local.port = 1234;
    sock_udp_ep_t server = { .port = NTP_PORT, .family = AF_INET6 };
    ipv6_addr_from_str((ipv6_addr_t *)&server.addr, "dead:beef::3402");
0ce5a8d8   root   correctif mode dé...
169
    
ceb4c7ca   root   changement carte ...
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    if (sock_udp_create(&sock, &local, NULL, 0) < 0) {
      puts("Error creating UDP sock");
      return NULL;
    }
    if (sntp_sync(&server, SOCK_NO_TIMEOUT) < 0) {
      puts("Error in synchronization");
      return NULL;
    }
    offset = sntp_get_offset();
    printf("offset : %i\n",(int)offset);
    
    while (1) {
      sock_udp_ep_t remote;
      ssize_t res;
0ce5a8d8   root   correctif mode dé...
184
      if ((res = sock_udp_recv(&sock, &buf, sizeof(buf), 5 * SEC_IN_USEC ,&remote)) >= 0) {
ceb4c7ca   root   changement carte ...
185
186
187
188
        deadline = xtimer_now_usec() + offset - buf.heure_actuelle;
        printf("tps de transmission : %i\n",deadline);
        
        if(buf.donnees[0] == 'g' && buf.donnees[1] == 'o') {
0ce5a8d8   root   correctif mode dé...
189
190
191
192
193
194
195
196
197
  	if(interruption_msg == 1) {
  	  if (sntp_sync(&server, SOCK_NO_TIMEOUT) < 0) {
  	    puts("Error in synchronization");
  	    return NULL;
  	  }
  	  offset = sntp_get_offset();
  	  printf("offset : %i\n",(int)offset);
  	  interruption_msg = 0;
  	}
ceb4c7ca   root   changement carte ...
198
199
  	if(deadline >= DEADLINE && compteur >=5) {
  	  compteur = 0;
d3acc3ce   root   ajout gestion led...
200
201
202
203
  	  if(arret == 0) {
  	    if (sock_udp_send(&sock, "d", sizeof("d"), &remote) < 0) {
  	      puts("Error sending reply");
  	    }
0ce5a8d8   root   correctif mode dé...
204
205
206
207
208
209
  	  }
  	  if(tourne == 1) 
  	  {
  	    pwm_set(PWM_DEV(0),1,987);
  	    pwm_set(PWM_DEV(1),1,960);
  	  }
ceb4c7ca   root   changement carte ...
210
  	  if(timer_run == 0) {
d3acc3ce   root   ajout gestion led...
211
  	    puts("Degradation");
5345525d   root   ajout retour serv...
212
213
214
  	    gpio_clear(LED1_PIN);
  	    gpio_clear(LED2_PIN);
  	    gpio_set(LED0_PIN);
ceb4c7ca   root   changement carte ...
215
  	    timer_set(TIMER_DEV(1),0,25200);
d3acc3ce   root   ajout gestion led...
216
217
218
219
220
221
  	    /* if (sntp_sync(&server, SOCK_NO_TIMEOUT) < 0) {
  	     *	      puts("Error in synchronization");
  	     *	      return NULL;
  	  }
  	  offset = sntp_get_offset();
  	  printf("offset : %i\n",(int)offset);*/
ceb4c7ca   root   changement carte ...
222
223
224
225
226
  	    timer_run = 1;
  	  }
  	}
  	if(deadline >= DEADLINE && compteur < 5) {
  	  compteur = 0;
0ce5a8d8   root   correctif mode dé...
227
228
229
  	  if (sock_udp_send(&sock, "d", sizeof("d"), &remote) < 0) {
  	    puts("Error sending reply");
  	  }  
ceb4c7ca   root   changement carte ...
230
231
  	}
  	if(deadline<=DEADLINE && compteur >=5) {
0ce5a8d8   root   correctif mode dé...
232
233
  	  pwm_set(PWM_DEV(0),1,992);
  	  pwm_set(PWM_DEV(1),1,658);
ceb4c7ca   root   changement carte ...
234
235
236
  	  tourne = 1;
  	  timer_run=0;
  	  timer_clear(TIMER_DEV(1),0);
0ce5a8d8   root   correctif mode dé...
237
238
239
  	  if (sock_udp_send(&sock, "n", sizeof("n"), &remote) < 0) {
  	    puts("Error sending reply");
  	  }
d3acc3ce   root   ajout gestion led...
240
  	  arret = 0;
0ce5a8d8   root   correctif mode dé...
241
242
243
  	  gpio_clear(LED2_PIN);
  	  gpio_clear(LED0_PIN);
  	  gpio_set(LED1_PIN);
ceb4c7ca   root   changement carte ...
244
245
246
247
248
249
  	}
  	if(deadline<=DEADLINE && compteur <5) {
  	  compteur++;
  	} 
  	printf("compteur : %d\n",compteur);
  	memset(&buf,0,sizeof(buf));
d3acc3ce   root   ajout gestion led...
250
251
252
253
254
  	if(arret == 1) {
  	  if (sock_udp_send(&sock, "a", sizeof("a"), &remote) < 0) {
  	    puts("Error sending reply");
  	  }
  	}
41eae2a4   vrobic   ajout serveur snt...
255
        }
0f803f1d   root   test application ...
256
      }
0ce5a8d8   root   correctif mode dé...
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
      else {
        puts("msg non recu");
        if(timer_run == 0 && interruption_msg == 0) {
  	timer_run = 1;
  	timer_set(TIMER_DEV(1),0,25200);
        }
        interruption_msg = 1;
        if(tourne == 1) 
        {
  	pwm_set(PWM_DEV(0),1,987);
  	pwm_set(PWM_DEV(1),1,960);
  	gpio_clear(LED1_PIN);
  	gpio_clear(LED2_PIN);
  	gpio_set(LED0_PIN);
        }
      }
ceb4c7ca   root   changement carte ...
273
    }
0ce5a8d8   root   correctif mode dé...
274
    return NULL;
41eae2a4   vrobic   ajout serveur snt...
275
276
277
278
  }
  
  void *sock_client_thread(void *arg)
  {
ceb4c7ca   root   changement carte ...
279
280
    (void) arg;
    Data data;
5345525d   root   ajout retour serv...
281
    int vitesse=2;
0ce5a8d8   root   correctif mode dé...
282
    uint8_t buf[3];pwm_set(PWM_DEV(0),1,0);
ceb4c7ca   root   changement carte ...
283
284
285
    data.donnees[0] = 'g';
    data.donnees[1] = 'o';
    //uint8_t paquet[];
5345525d   root   ajout retour serv...
286
    ssize_t res;
ceb4c7ca   root   changement carte ...
287
288
289
290
291
292
293
294
    sock_udp_ep_t remote = { .family = AF_INET6 };
    
    remote.port = 1234;
    remote.addr.ipv6[0] = 0xde;
    remote.addr.ipv6[1] = 0xad;
    remote.addr.ipv6[2] = 0xbe;
    remote.addr.ipv6[3] = 0xef;
    remote.addr.ipv6[14] = 0x34;
5345525d   root   ajout retour serv...
295
    remote.addr.ipv6[15] = 0x1e;
0ce5a8d8   root   correctif mode dé...
296
    
ceb4c7ca   root   changement carte ...
297
    while (1) {
0ce5a8d8   root   correctif mode dé...
298
299
300
301
      data.heure_actuelle = xtimer_now_usec();
      if (sock_udp_send(&sock, &data, sizeof(data), &remote) < 0) {
        puts("Error sending message");
      }   
5345525d   root   ajout retour serv...
302
303
      if ((res = sock_udp_recv(&sock, buf, sizeof(buf), 0.05 * SEC_IN_USEC,NULL)) < 0) {
        if (res == -ETIMEDOUT) {
0ce5a8d8   root   correctif mode dé...
304
  	vitesse = 1;
5345525d   root   ajout retour serv...
305
306
307
308
309
310
        }
        else {
  	puts("Error receiving message");
        }
      }
      else {
5345525d   root   ajout retour serv...
311
312
        if(buf[0] == 'n')
  	vitesse = 2;
d3acc3ce   root   ajout gestion led...
313
314
315
316
        else if(buf[0] == 'a') {
  	vitesse = 1;
  	gpio_set(LED2_PIN);
        }
5345525d   root   ajout retour serv...
317
        else vitesse = 1;
d3acc3ce   root   ajout gestion led...
318
319
320
321
322
323
324
325
326
      }
      if(vitesse==2) {
        gpio_clear(LED0_PIN);
        gpio_clear(LED2_PIN);
        gpio_toggle(LED1_PIN);
      }
      else {
        gpio_clear(LED1_PIN);
        gpio_toggle(LED0_PIN);
5345525d   root   ajout retour serv...
327
328
      }
      xtimer_sleep(vitesse);
ceb4c7ca   root   changement carte ...
329
330
    }
    return NULL;
41eae2a4   vrobic   ajout serveur snt...
331
332
333
334
  }
  
  static void arret_urgence(void *arg,int channel)
  {
e873cff7   root   application real-...
335
    pwm_set(PWM_DEV(0),1,0);
0ce5a8d8   root   correctif mode dé...
336
    pwm_set(PWM_DEV(1),1,0);
e873cff7   root   application real-...
337
    tourne = 0;
0f803f1d   root   test application ...
338
    timer_run = 0;
d3acc3ce   root   ajout gestion led...
339
    arret = 1;
5345525d   root   ajout retour serv...
340
341
342
    gpio_clear(LED0_PIN);
    gpio_clear(LED1_PIN);
    gpio_set(LED2_PIN);
d3acc3ce   root   ajout gestion led...
343
    puts("Arret d'urgence");
41eae2a4   vrobic   ajout serveur snt...
344
345
  }
  
41eae2a4   vrobic   ajout serveur snt...
346
347
  static void _init_timer(void)
  {
ceb4c7ca   root   changement carte ...
348
349
    timer_init(TIMER_DEV(1), CLOCK_CORECLOCK/2 ,&arret_urgence,NULL);
    timer_irq_enable(TIMER_DEV(1));
41eae2a4   vrobic   ajout serveur snt...
350
351
352
353
  }
  
  static void _init_pwm(void)
  {
ceb4c7ca   root   changement carte ...
354
355
    pwm_init(PWM_DEV(0), PWM_LEFT, PWM_FREQ, PWM_RES);
    pwm_set(PWM_DEV(0),1,0);
0ce5a8d8   root   correctif mode dé...
356
357
    pwm_init(PWM_DEV(1), PWM_LEFT, PWM_FREQ, PWM_RES);
    pwm_set(PWM_DEV(1),1,0);
41eae2a4   vrobic   ajout serveur snt...
358
359
  }
  
0ce5a8d8   root   correctif mode dé...
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
  
  static void _init_interface(void)
  {
    kernel_pid_t ifs[GNRC_NETIF_NUMOF];
    ipv6_addr_t addr = IPV6_ADDR_UNSPECIFIED;
    ipv6_addr_t tmp_addr= IPV6_ADDR_UNSPECIFIED;
    uint8_t hwaddr[MAX_ADDR_LEN];
    int res;
    
    gnrc_netif_get(ifs);
    
    //addresses gobales
    addr.u8[0] = 0xde;
    addr.u8[1] = 0xad;
    addr.u8[2] = 0xbe;
    addr.u8[3] = 0xef;
    
    res = gnrc_netapi_get(ifs[0], NETOPT_ADDRESS, 0, hwaddr, sizeof(hwaddr));
    
    if (res >= 0) {
      addr.u8[14] = *hwaddr;
      addr.u8[15] = *(hwaddr+1);
    }
    memcpy(tmp_addr.u8,addr.u8,IPV6_ADDR_BIT_LEN);
    
    gnrc_ipv6_netif_add_addr(ifs[0], &addr, 64, GNRC_IPV6_NETIF_ADDR_FLAGS_UNICAST);
    /* model ipv6 addr: dead:beef::Hwaddr */
    if((addr.u8[14]==0x34)&&(addr.u8[15]==0x02)){
      
      tmp_addr.u8[14] = 0x34;
      tmp_addr.u8[15] = 0x1e;
      //fibroute dest: dead:beef::3766 via fe80::3634:5110:3473:3762
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node2, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE);
      tmp_addr.u8[14] = 0x37;
      tmp_addr.u8[15] = 0x62;
      //fibroute dest: dead:beef::3762 via fe80::3634:5110:3473:3762
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node2, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE);
      client=thread_create(sock_client_stack,sizeof(sock_client_stack),8,THREAD_CREATE_STACKTEST,sock_client_thread,NULL,"sock_client_thread");
      time_server=thread_create(sock_time_server_stack,sizeof(sock_time_server_stack),6,THREAD_CREATE_STACKTEST,sock_time_server_thread,NULL,"sock_time_server_thread");
    }else if((addr.u8[14]==0x37)&&(addr.u8[15]==0x62)){
      tmp_addr.u8[14] = 0x34;
      tmp_addr.u8[15] = 0x1e;
      //fibroute dest: dead:beef::3766 via fe80::3634:5110:3471:3766
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node3, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE);
      tmp_addr.u8[14] = 0x34;
      tmp_addr.u8[15] = 0x02;
      //fibroute dest: dead:beef::3402 via fe80::3734:510e:3317:3402
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node1, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE);
    }else if((addr.u8[14]==0x34)&&(addr.u8[15]==0x1e)){
      tmp_addr.u8[14] = 0x34;
      tmp_addr.u8[15] = 0x02;
      //fibroute dest: dead:beef::3402 via fe80::3634:5110:3473:3762
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node2, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE); tmp_addr.u8[14] = 0x37;
      tmp_addr.u8[14] = 0x37;
      tmp_addr.u8[15] = 0x62;
      //fibroute dest: dead:beef::3762 via fe80::3634:5110:3473:3762
      fib_add_entry(&gnrc_ipv6_fib_table, ifs[0],tmp_addr.u8, IN6ADDRSZ, 0,node2, IN6ADDRSZ, 0, FIB_LIFETIME_NO_EXPIRE);
      _init_timer();
      _init_pwm();
      server=thread_create(sock_server_stack,sizeof(sock_server_stack),6,THREAD_CREATE_STACKTEST,sock_server_thread,NULL,"sock_server_thread");
      
      
    }else{
      puts("new node ?");
    }
  }
41eae2a4   vrobic   ajout serveur snt...
426
  
41eae2a4   vrobic   ajout serveur snt...
427
428
429
430
431
  static msg_t _main_msg_queue[MAIN_QUEUE_SIZE];
  
  extern int udp_cmd(int argc, char **argv);
  
  static const shell_command_t shell_commands[] = {
0ce5a8d8   root   correctif mode dé...
432
433
    { "udp", "send data over UDP and listen on UDP ports", udp_cmd },
    { NULL, NULL, NULL }
41eae2a4   vrobic   ajout serveur snt...
434
435
436
437
438
  };
  
  
  int main(void)
  {
0ce5a8d8   root   correctif mode dé...
439
440
441
442
443
444
445
446
447
448
449
450
    
    msg_init_queue(_main_msg_queue, MAIN_QUEUE_SIZE);
    puts("RIOT network stack example application");
    _init_interface();
    
    /* start shell */
    puts("All up, running the shell now");
    char line_buf[SHELL_DEFAULT_BUFSIZE];
    shell_run(shell_commands, line_buf, SHELL_DEFAULT_BUFSIZE);
    
    /* should be never reached */
    return 0;
41eae2a4   vrobic   ajout serveur snt...
451
  }