dimanche 15 mars 2015

Rewrite in the contiki source code “example-mesh.c” to send messages based on a timer value


The example in Contiki " example-mesh.c " is designed to send a message every time the button is pressed but I want this example to send data periodically every 5 seconds for example instead of pressing on button so I need to rewrite the example "example-mesh.c" to send messages based on a timer value. here is the code with but I run the simulation in the mote output window only 3 messages are sent while the rest is " packet timedout " how can I solve that problem :





#include "contiki.h"
#include "net/rime.h"
#include "net/rime/mesh.h"

#include "contiki-conf.h"
#include "sys/etimer.h"
#include "sys/process.h"
#include "sys/ctimer.h"


#include "dev/leds.h"

#include <stdio.h>
#include <string.h>


#define MESSAGE "Hello"

static struct mesh_conn mesh;
/*---------------------------------------------------------------------------*/
PROCESS(example_mesh_process, "Mesh example");
AUTOSTART_PROCESSES(&example_mesh_process);
/*---------------------------------------------------------------------------*/
static void
sent(struct mesh_conn *c)
{
printf("packet sent\n");
}

static void
timedout(struct mesh_conn *c)
{

printf("packet timedout\n");
}

static void
recv(struct mesh_conn *c, const rimeaddr_t *from, uint8_t hops)
{
printf("Data received from %d.%d: %.*s (%d)\n",
from->u8[0], from->u8[1],
packetbuf_datalen(), (char *)packetbuf_dataptr(), packetbuf_datalen());

packetbuf_copyfrom(MESSAGE, strlen(MESSAGE));
mesh_send(&mesh, from);
}

const static struct mesh_callbacks callbacks = {recv, sent, timedout};
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(example_mesh_process, ev, data)
{

static struct etimer et;

PROCESS_EXITHANDLER(mesh_close(&mesh);)

PROCESS_BEGIN();

mesh_open(&mesh, 132, &callbacks);

etimer_set(&et, CLOCK_SECOND +50);


while(1) {
rimeaddr_t addr;

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

/* Send a message to node number 1. */

packetbuf_copyfrom(MESSAGE, strlen(MESSAGE));
addr.u8[0] = 1;
addr.u8[1] = 0;
mesh_send(&mesh, &addr);
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/





Aucun commentaire:

Enregistrer un commentaire