I have had a strange question that is very important for me .I have written a
littele example with 3 modules one for start and stop the other 2 modules and
one module to do collection and one to do dissemination.Coleection module and
dissemination module are esasycollection module and easydisseminationmodule
that I find on Tiny OS documentaion Wiki.The strange thing is that when I start
dissemination start also collection also I don't start it.Why ?
help ME
Thanks in advance
I poste the code Here:
#include "Collection.h"
configuration GestioneC{
}
implementation{
/**
* Per la parte di raccogli
*/
components RaccogliP,MainC,ActiveMessageC,GestioneP;
components CollectionC as Collector;
components new CollectionSenderC(3);
components new TimerMilliC() as TimerRaccogli;
/**
* Per la parte di semina
*/
components SeminaP,ActiveMessageC as ActiveMessageSemina;
components DisseminationC;
components new DisseminatorC(uint16_t,4) as Diss16C;
components new TimerMilliC() as Timersemina;
/**
* Per la parte di raccogli
*/
GestioneP.Boot ->MainC;
RaccogliP.RadioControl -> ActiveMessageC;
RaccogliP.RoutingControl -> Collector;
RaccogliP.Timer -> TimerRaccogli;
RaccogliP.Send-> CollectionSenderC;
RaccogliP.RootControl -> Collector;
RaccogliP.Receive -> Collector.Receive[3];
GestioneP.StartRaccogli -> RaccogliP.StartRaccogli;
GestioneP.StopRaccogli -> RaccogliP.StopRaccogli;
/**
* Per la parte di semina
*/
SeminaP.RadioControlSemina -> ActiveMessageSemina;
SeminaP.SeminaControl -> DisseminationC;
SeminaP.Value -> Diss16C;
SeminaP.Update -> Diss16C;
SeminaP.Timer -> Timersemina;
GestioneP.StartSemina -> SeminaP.Start;
GestioneP.StopSemina -> SeminaP.Stop;
}
module GestioneP{
uses interface Boot;
uses command void StartRaccogli();
uses command void StopRaccogli();
uses command void StartSemina();
uses command void StopSemina();
}
implementation{
event void Boot.booted(){
call StartRaccogli();
//call StartSemina();
}
}
#include <Timer.h>
#include "printf.h"
#include "Data.h"
module RaccogliP @safe(){
provides {
command void StartRaccogli();
command void StopRaccogli();
}
uses{
interface SplitControl as RadioControl;
interface StdControl as RoutingControl;
interface Send;
interface Timer<TMilli>;
interface RootControl;
interface Receive;
}
}
implementation{
message_t packet;
bool sendBusy = FALSE;
uint16_t contatore = 0;
command void StartRaccogli()
{
call RadioControl.start();
}
command void StopRaccogli()
{
call RadioControl.stop();
//call RoutingControl.stop();
}
event void RadioControl.startDone(error_t err)
{
if(err != SUCCESS)
call RadioControl.start();
else
{
call RoutingControl.start();
if(TOS_NODE_ID == 1)
call RootControl.setRoot();
else
call Timer.startPeriodic(10000);
}
}
event void RadioControl.stopDone(error_t error){}
void sendMessage(){
uint8_t i=0;
EasyCollectionMsg * msg=(EasyCollectionMsg*) call
Send.getPayload(&packet,sizeof(EasyCollectionMsg));
for(i=0;i<24;i++)
msg->data[i]=contatore+i;
if(call
Send.send(&packet,sizeof(EasyCollectionMsg))!=SUCCESS)
{
printf("collection --Not send\n");
printfflush();
}else
sendBusy = TRUE;
}
event void Timer.fired(){
printf("collection --Timer fired :sendMesssage\n");
printfflush();
if(!sendBusy)
sendMessage();
}
event void Send.sendDone(message_t *msg,error_t err){
if(err!=SUCCESS)
{
printf("collection --Not send\n");
printfflush();
}else
{
printf("collection --Ho mandato %d\n",contatore);
printfflush();
contatore ++;
}
sendBusy = FALSE;
//if(contatore == 30)
//call StopRaccogli();
}
event message_t * Receive.receive(message_t *msg, void *payload,
uint8_t len)
{
uint8_t i=0;
EasyCollectionMsg* mgh = (EasyCollectionMsg *)payload;
printf("collection --Ho ricevuto : ");
for(i=0;i<24;i++)
printf("%d ",mgh->data[i]);
printf("\n");
printfflush();
return msg;
}
}
#include<Timer.h>
#include "printf.h"
module SeminaP @safe(){
provides {
command void Start();
command void Stop();
}
uses{
interface Timer<TMilli>;
interface SplitControl as RadioControlSemina;
interface StdControl as SeminaControl;
interface DisseminationValue<uint16_t> as Value;
interface DisseminationUpdate<uint16_t> as Update;
}
}
implementation{
uint16_t counter=0;
command void Start()
{
call RadioControlSemina.start();
}
command void Stop()
{
call RadioControlSemina.stop();
call SeminaControl.stop();
}
event void RadioControlSemina.startDone(error_t error){
if(error != SUCCESS)
call RadioControlSemina.start();
else
{
call SeminaControl.start();
counter = 0;
if(TOS_NODE_ID == 1)
call Timer.startPeriodic(200);
}
}
event void RadioControlSemina.stopDone(error_t error){
}
event void Timer.fired(){
counter = counter +1;
printf("dissemination --update value counter %d
tos_node_id
%d\n",counter,TOS_NODE_ID);
printfflush();
call Update.change(&counter);
}
event void Value.changed(){
const uint16_t* newVal = call Value.get();
counter = *newVal;
printf("dissemination --valore cambiato counter
%d\n",counter);
printfflush();
}
}
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help