I have successfully sent a message from a PC host to an
Xmesh node, however I personally have not tested that in
a multi-hop environment.

On the node the message is configed as:
   // messages we receive
   App.CalibMsg -> MULTIHOPROUTER.Receive[CPAM_CALIBMSG];

Which causes this method to be called on message arrival:
   event TOS_MsgPtr CalibMsg.receive(
        TOS_MsgPtr m, void* payload, uint16_t payloadLen )
   { return m; }

On the PC host I use the "usual" Packetizer.java
writePacket() interface while specifying the target
node ID in the message. I presume, but do not know,
that one could use the usual send() mechanism from
another node as well. I could find nothing in the
"extensive" Xmesh documentation about this though.

MS


Atslands Rocha wrote:
> Hi all,
> 
> How can a sensor node receive packets from another sensor node using 
> Xmesh (Crossbow) and TinyOS1? I read the material and I just saw the 
> upstream transmission mode using sink nodes, but I want a communication 
> between sensor nodes (source and destination). I changed the source 
> BASE_STATION_ADDRESS for the specific NODE_ADDRESS (ex: 1), but the code 
> doesnt work.
> 
> Thanks in advance.
> 
> -----
> 
> module ExampleM {
>   provides {
>     interface StdControl;
>   }
>   uses {  
> interface Leds;    
> interface MhopSend as Send;
> interface Receive;
> ........ 
> 
> implementation {
> ....
>    TOS_Msg msg_buf;
>    TOS_MsgPtr msg_ptr;
>    HealthMsg *h_msg;
>    norace bool sending_packet,sensinginsession;
> 
>    norace uint8_t state;
>    XDataMsg pack; 
>    bool sleeping;       // application command state
> ......
> 
> /****************************************************************************
>  * Task to xmit radio message
>  *
>  ****************************************************************************/
>    task void send_radio_msg(){
>     uint16_t  len;
> XDataMsg *data;
>     uint8_t i;
>     if(sending_packet) return; 
>     call Leds.yellowOn();
>     atomic sending_packet=TRUE;  
> 
>     data = (XDataMsg*)call Send.getBuffer(msg_ptr, &len);
> for (i=0; i<= sizeof(XDataMsg)-1; i++)
> ((uint8_t*) data)[i] = ((uint8_t*)&pack)[i];
>     data->xMeshHeader.board_id = SENSOR_BOARD_ID;
>     data->xMeshHeader.packet_id = 1;         
>     data->xMeshHeader.parent    = call RouteControl.getParent();
>     data->xMeshHeader.packet_id = data->xMeshHeader.packet_id | 0x80;
>     
>     #if FEATURE_UART_SEND
>      if (TOS_LOCAL_ADDRESS != 0) {
>      call Leds.yellowOn();
>         call PowerMgrDisable();
>         TOSH_uwait(1000);
>         if (call SendUART.send(TOS_UART_ADDR, sizeof(XDataMsg),msg_ptr) 
> != SUCCESS) 
>         {
>          atomic sending_packet = FALSE;
>          call Leds.greenToggle();
>          call PowerMgrEnable();
>         }
>      } 
>      else 
>     #endif
>      {
>         // Send the RF packet!
>             if (call Send.send(NODE_ADDRESS,MODE_UPSTREAM,msg_ptr, 
> sizeof(XDataMsg)) != SUCCESS) {
>          atomic sending_packet = FALSE;
>         call Leds.yellowOn();
>          call Leds.greenOff();
>         }
>      }
>     return;
>   }
> 
> 
> /****************************************************************************
> #if FEATURE_UART_SEND
>  /**
>   * Handle completion of sent UART packet.
>   *
>   * @author    Martin Turon
>   * @version   2004/7/21      mturon       Initial revision
>   */
>   event result_t SendUART.sendDone(TOS_MsgPtr msg, result_t success) 
>   {
>       //if (msg->addr == TOS_UART_ADDR) {
>       atomic msg_ptr = msg;
>       msg_ptr->addr = TOS_BCAST_ADDR;
>       if (call 
> Send.send(NODE_ADDRESS,MODE_UPSTREAM,msg_ptr,sizeof(XDataMsg)) != SUCCESS) {
>  atomic sending_packet = FALSE;
>  call Leds.yellowOff();
>       }
>       
>       if (TOS_LOCAL_ADDRESS != 0) // never turn on power mgr for base
>  call PowerMgrEnable();
>       
>       //}
>       return SUCCESS;
>   }
> #endif
> 
> 
> 
> /****************************************************************************/
>  * Receive packets from sensor nodes. 
>  *
>  ****************************************************************************/
> 
> event TOS_MsgPtr Receive.receive(TOS_MsgPtr msg, void* payload, uint16_t 
> payloadLen) {
> call Leds.redOn();
>     return msg;
>   }
>   
> .....
> }
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Tinyos-help mailing list
> [email protected]
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to