Forcing Multihop

 

 

NOTE: this is a workaround for debugging purposes. This code is not intended for permanent use but only in case that you want to force a certain topology.

Forcing Multihop in OpenWSN has been simplified. 

Follow this simple steps:

  1. Edit file topology.c in 02a-MACLow folder
  2. Modify TOPOLOGY_MOTEX by adding the 16bit UID of your motes to form a topology. 

#include "openwsn.h"
#include "topology.h"
#include "idmanager.h"

//=========================== defines =========================================

#define TOPOLOGY_MOTE1 0x01
#define TOPOLOGY_MOTE2 0x02
#define TOPOLOGY_MOTE3 0x03
#define TOPOLOGY_MOTE4 0x04
//=========================== variables =======================================


//=========================== prototypes ======================================


//=========================== public ==========================================

bool topology_isAcceptablePacket(ieee802154_header_iht* ieee802514_header) {
   bool returnVal;
   switch (idmanager_getMyID(ADDR_64B)->addr_64b[7]) {
      case TOPOLOGY_MOTE1:
         if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
            returnVal=TRUE;
         } else {
            returnVal=FALSE;
         }
         break;
      case TOPOLOGY_MOTE2:
         if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE1 ||
             ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
            returnVal=TRUE;
         } else {
            returnVal=FALSE;
         }
         break;
       case TOPOLOGY_MOTE3:
         if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2 ||
             ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE4) {
            returnVal=TRUE;
         } else {
            returnVal=FALSE;
         }
         break;
       case TOPOLOGY_MOTE4:
         if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
            returnVal=TRUE;
         } else {
            returnVal=FALSE;
         }
         break;
      default:
         returnVal=TRUE;
   }
   return returnVal;
}

 

In this example a 3 hop topology is being defined where Mote with 16bit UID = 0x01 will be the DAGroot. Mote with 16bit UID = 0x02 will be the first hop, Mote with 16bit UID = 0x03 will be the second hop and Mote with 16bit UID = 0x04 will be the third hop.