Beispiel #1
0
void schedule_init() {
   uint8_t         i;
   slotOffset_t    running_slotOffset;
   open_addr_t     temp_neighbor;

   // reset local variables
   memset(&schedule_vars,0,sizeof(schedule_vars_t));
   for (i=0;i<MAXACTIVESLOTS;i++) {
      schedule_resetEntry(&schedule_vars.scheduleBuf[i]);
   }
   schedule_vars.backoffExponent = MINBE-1;
   memset(&schedule_dbg, 0,sizeof(schedule_dbg_t));

   // set frame length
   schedule_setFrameLength(SUPERFRAME_LENGTH);
   
   // start at slot 0
   running_slotOffset = 0;
   
   // advertisement slot(s)
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   for (i=0;i<NUMADVSLOTS;i++) {
      schedule_addActiveSlot(
         running_slotOffset,      // slot offset
         CELLTYPE_ADV,            // type of slot
         FALSE,                   // shared?
         0,                       // channel offset
         &temp_neighbor,           // neighbor
         FALSE                     //no update but insert
      );
      running_slotOffset++;
   } 
   
   // shared TXRX anycast slot(s)
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   temp_neighbor.type             = ADDR_ANYCAST;
   for (i=0;i<NUMSHAREDTXRX;i++) {
      schedule_addActiveSlot(
         running_slotOffset,      // slot offset
         CELLTYPE_TXRX,           // type of slot
         TRUE,                    // shared?
         0,                       // channel offset
         &temp_neighbor,          // neighbor
         FALSE                    //no update but insert
      );
      running_slotOffset++;
   }
   

   /*
   for (i=0;i<NUMSERIALRX-1;i++) {
      schedule_addActiveSlot(
         running_slotOffset,      // slot offset
         CELLTYPE_MORESERIALRX,   // type of slot
         FALSE,                   // shared?
         0,                       // channel offset
         &temp_neighbor           // neighbor
      );
      running_slotOffset++;
   }
   */

   /*if(NUMNODE == 0){//DAG ROOT
	   // shared TXRX anycast slot(s)
	      memset(&temp_neighbor,0,sizeof(temp_neighbor));
	      temp_neighbor.type             = ADDR_ANYCAST;
	      for (i=0;i<NUMRX;i++) {
	         schedule_addActiveSlot(
	            running_slotOffset,      // slot offset
	            CELLTYPE_RX,           // type of slot
	            FALSE,                    // shared?
	            0,                       // channel offset
	            &temp_neighbor,          // neighbor
	            FALSE                    //no update but insert
	         );
	         running_slotOffset++;
	      }
   }else{//other node
	   running_slotOffset += (NUMNODE-1);
	   memset(&temp_neighbor,0,sizeof(temp_neighbor));
	   	      temp_neighbor.type             = ADDR_ANYCAST;
	   	         schedule_addActiveSlot(
	   	            running_slotOffset,      // slot offset
	   	            CELLTYPE_TX,           // type of slot
	   	            FALSE,                    // shared?
	   	            0,                       // channel offset
	   	            &temp_neighbor,          // neighbor
	   	            FALSE                    //no update but insert
	   	         );
	   	         running_slotOffset++;

   }*/
   // serial RX slot(s)
    memset(&temp_neighbor,0,sizeof(temp_neighbor));
    schedule_addActiveSlot(
       running_slotOffset,         // slot offset
       CELLTYPE_SERIALRX,          // type of slot
       FALSE,                      // shared?
       0,                          // channel offset
       &temp_neighbor,             // neighbor
       FALSE                       //no update but insert
    );
    running_slotOffset++;
}
Beispiel #2
0
/* piggy902: addr-specific schedule */ 
void schedule_init() {
   uint8_t     i;
   open_addr_t temp_neighbor;

   // reset local variables
   memset(&schedule_vars,0,sizeof(schedule_vars_t));
   memset(&schedule_dbg, 0,sizeof(schedule_dbg_t));
   for (i=0;i<MAXACTIVESLOTS;i++){
      schedule_resetEntry(&schedule_vars.scheduleBuf[i]);
   }

   // set frame length
   schedule_setFrameLength(11);

   // slot 0 is advertisement slot
   i = 0;
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   schedule_addActiveSlot(i,
         CELLTYPE_ADV,
         FALSE,
         0,
         &temp_neighbor);
   
    switch(idmanager_getMyID(ADDR_16B)->addr_16b[1]){
    case DEBUG_MOTEID_MASTER:
       // slot 1 is shared TXRX, but with specific neighbour rather than anycast
       i = 1;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       temp_neighbor.type             = ADDR_64B;
       temp_neighbor.addr_64b[6]    = 0xED;
       temp_neighbor.addr_64b[7]    = DEBUG_MOTEID_2;
       schedule_addActiveSlot(i,
             CELLTYPE_TXRX,
             FALSE,
             0,
             &temp_neighbor);
       
       // slot 2 is shared TXRX, but with specific neighbour rather than anycast
       i = 2;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       schedule_addActiveSlot(i,
             CELLTYPE_MORESERIALRX,
             FALSE,
             0,
             &temp_neighbor); 
       
       i = 3;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       schedule_addActiveSlot(i,
             CELLTYPE_MORESERIALRX,
             FALSE,
             0,
             &temp_neighbor);
        break;
        
    case DEBUG_MOTEID_2:
       // slot 1 is shared TXRX, but with specific neighbour rather than anycast
       i = 1;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       temp_neighbor.type             = ADDR_64B;
       temp_neighbor.addr_64b[6]    = 0xED;
       temp_neighbor.addr_64b[7]    = DEBUG_MOTEID_MASTER;
       schedule_addActiveSlot(i,
             CELLTYPE_TXRX,
             FALSE,
             0,
             &temp_neighbor);
     
       i = 2;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       schedule_addActiveSlot(i,
             CELLTYPE_MORESERIALRX,
             FALSE,
             0,
             &temp_neighbor);
    
       i = 3;
       memset(&temp_neighbor,0,sizeof(temp_neighbor));
       schedule_addActiveSlot(i,
             CELLTYPE_MORESERIALRX,
             FALSE,
             0,
             &temp_neighbor); 
        break;
        
    default:
        break;
   }
   
   // slot 4 is SERIALRX
   i = 4;
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   schedule_addActiveSlot(i,
         CELLTYPE_SERIALRX,
         FALSE,
         0,
         &temp_neighbor);

   // slot 5 is MORESERIALRX
   i = 5;
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   schedule_addActiveSlot(i,
         CELLTYPE_MORESERIALRX,
         FALSE,
         0,
         &temp_neighbor);
   
   // Noise Floor Probe
   i = 6; 
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   schedule_addActiveSlot(i,
         CELLTYPE_NF,
         FALSE,
         0,
         &temp_neighbor);
   
   i = 7; 
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   schedule_addActiveSlot(i,
         CELLTYPE_NF,
         FALSE,
         0,
         &temp_neighbor);
   
   //for RPL DIOs?
   i = 8;
   memset(&temp_neighbor,0,sizeof(temp_neighbor));
   temp_neighbor.type             = ADDR_64B;
   temp_neighbor.addr_64b[0]          = 0xff;
   temp_neighbor.addr_64b[1]          = 0xff;
   temp_neighbor.addr_64b[2]          = 0xff;
   temp_neighbor.addr_64b[3]          = 0xff;
   temp_neighbor.addr_64b[4]          = 0xff;
   temp_neighbor.addr_64b[5]          = 0xff;
   temp_neighbor.addr_64b[6]          = 0xff;
   temp_neighbor.addr_64b[7]          = 0xff;
   schedule_addActiveSlot(i,
         CELLTYPE_TXRX,
         FALSE,
         0,
         &temp_neighbor);
}