Hi *

  I programm a cluster routing protocol for TinyOS2 and have following 
problem. I use AMPackage and will send and receive all AM types but only 
in one cluster. I've made own header I store at the begin of payload. So 
i provide own ClusterPacket and Packet to get the real payload and my 
header... I defined a cluster_id_t (uint8_t) and will provide 
Sender[am_id_t amId] and Receiver[am_id_t amId] but for different 
clusters. So I'made a gengeric module and configuration as follow : 
(This is only for Receive)

****************************************************************************
ClusterReceiverP.nc

generic module ClusterReceiverP(cluster_id_t cId) {
  provides interface Receive[am_id_t amId];
  uses{
    interface Receive as SubReceive[am_id_t amId];
    interface Packet;
    interface ClusterPacket;
  }
}
implementation {

  //------------------------------------------------------
  /***************** Receive commands ****************/
  command void* Receive.getPayload[am_id_t id](message_t *msg, uint8_t 
*len){
        return call Packet.getPayload(msg,len);
  }

  command uint8_t Receive.payloadLength[am_id_t id](message_t *msg){
        return call Packet.payloadLength(msg);
  }
  
  event message_t* SubReceive.receive[am_id_t amId]( message_t* msg, void* 
payload, uint8_t len){
        if (call ClusterPacket.cluster(msg) == cId){
                signal Receive.receive[amId](msg,payload,len);
        }
        return msg;
  }
  
  default event message_t* Receive.receive[am_id_t amId]( message_t* msg, 
void* payload, uint8_t len){
        return msg;
  }
  //------------------------------------------------------

}
**********************************************************************************

AND ClusterReceiverC.nc

#include "AM.h"
#include "SCluster.h"

generic configuration ClusterReceiverC(cluster_id_t cId) {
  provides {
        interface Receive[am_id_t amId];
        interface Packet;
        interface ClusterPacket;
    }
}

implementation {
  components new ClusterReceiverP(cId) as ClusterReceiverP;
  components ClusterSenderC, ActiveMessageC;
  
  ClusterReceiverP.SubReceive -> ActiveMessageC.Receive;
  ClusterReceiverP.ClusterPacket -> ClusterSenderC;
  ClusterReceiverP.Packet -> ClusterSenderC;
  
  Receive = ClusterReceiverP;
  Packet = ClusterSenderC;
  ClusterPacket = ClusterSenderC;
}
*******************************************************************************

I use two instances of Receiver in higher layer and I get fan out warning.

" warning: calls to Receive.receive in CC2420ActiveMessageP fan out, but 
there is no combine function specified for the return type".
I think becouse of my Receiver is not UNIQUE (or my SubReceive)?!? Is 
that right? Some suggestion ?

thanks in advance

  Jordan Jordanow

----------------------------------------------------
Dwa tysiące lat temu Chiński Cesarz Smok podbił połowę świata.
Teraz Wraca by dokończyć dzieło... Film pełen EFEKTÓW SPECJALNYCH.
MUMIA: GROBOWIEC CESARZA SMOKA - w kinach. 
http://klik.wp.pl/?adr=http%3A%2F%2Fcorto.www.wp.pl%2Fas%2FMumiaGrobowiec.html&sid=436


_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to