[Tinyos-help] Collection Dissemination

giorgio giorgio.galassi at unimi.it
Mon Apr 20 02:36:17 PDT 2009


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();
	    	
	    	}
}




More information about the Tinyos-help mailing list