⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agrimonitorc.nc

📁 tinyos2.0版本驱动
💻 NC
📖 第 1 页 / 共 2 页
字号:
    }
      return i;
  }  
  task void sendSensordataMsg(){
    //if(!SendBusy && SensorDataVaild){
    if(SensorDataVaild){
      sensorData_t* msg_sensor;
  	  msg_sensor = (sensorData_t* )call SensorDataSend.getPayload(&SensorData_Msg, sizeof(sensorData_t));
  	  msg_sensor -> Seq_no = seq_sensorData ;
	      //call LowPowerListening.setRxSleepInterval(&SensorData_Msg, LPL_INTERVAL);
  		  //if(call SensorDataSend.send(&SensorData_Msg, sizeof(sensorData_t)) != SUCCESS){
  	  if(call SensorDataSend.send(&SensorData_Msg, 1 + msg_sensor ->length ) != SUCCESS){
  		    //call Leds.led0Toggle();
  		}
  	  else {
  			//SendBusy = TRUE;
  		}
  	}
  	//else if(!SendBusy && !SensorDataVaild){
  	  else{
  	 getSensorData();
  	 post sendSensordataMsg();
  	  }
  }
  task void sendTopologydataMsg(){
    //if(!SendBusy){  
      topologyData_t* msg_topology;
  	  //call Leds.led1Toggle();
  	  msg_topology = (topologyData_t* )call TopologyDataSend.getPayload(&TopologyData_Msg, sizeof(topologyData_t));	
	    //call LowPowerListening.setRxSleepInterval(&TopologyData_Msg, LPL_INTERVAL);
  		//if(call TopologyDataSend.send(&TopologyData_Msg, sizeof(topologyData_t)) != SUCCESS){
  	  if(call TopologyDataSend.send(&TopologyData_Msg, 1 + msg_topology -> length ) != SUCCESS){
  		  //call Leds.led0Toggle();
  	  }
  	  else {
  	   // SendBusy = TRUE;
  		}
  	//}    	
  }
  task void sendStatedataMsg(){
    //if(!SendBusy){ 	
  	  //call Leds.led2Toggle();
      //call LowPowerListening.setRxSleepInterval(&TopologyData_Msg, LPL_INTERVAL);
  	  if(call StateDataSend.send(&StateData_Msg, sizeof(stateData_t)) != SUCCESS){
  		  //call Leds.led0Toggle();
  		}
  	  else {
  			//SendBusy = TRUE;
  		} 		
  	//}
  }

  event void SensorDataSend.sendDone(message_t* m, error_t err) {
    if (err != SUCCESS) {
      call Leds.led0Toggle();
    	/*如果发送不成功,继续尝试发送*/
    }
    else {
    	//SendBusy = FALSE;
      //call Leds.led0Toggle();
      //call SensorData_Interval.stop(); 
      // try to resolve the question that the sequence num increase by one automatically when i retransmit the data
      //call Leds.led1Toggle();
    }
  }
  
  event void TopologyDataSend.sendDone(message_t* m, error_t err) {
    if (err != SUCCESS) {
    	/*如果发送不成功,继续尝试发送*/
     call Leds.led0Toggle();
    }
    else {
      call Leds.led1Toggle();
      //call TopologyData_Interval.stop(); 
      // try to resolve the question that the sequence num increase by one automatically when i retransmit the data
      //SendBusy = FALSE;
      //memset(&TopologyData_Msg, 0, sizeof(message_t)); //添加此行会导致发送两个重复包 08.9.28 zhangjiwen
    }
  }

  event void StateDataSend.sendDone(message_t* m, error_t err) {
    if (err != SUCCESS) {
      call Leds.led0Toggle();
    	/*如果发送不成功,继续尝试发送*/
    }
    else {
    	//SendBusy = FALSE;
      //call SensorData_Interval.stop(); 
      // try to resolve the question that the sequence num increase by one automatically when i retransmit the data
      call Leds.led2Toggle();
      //memset(&StateData_Msg, 0, sizeof(message_t));//添加此行会导致发送两个重复包 08.9.28 zhangjiwen
    }
  }  
  event void voltageRead.readDone( error_t result, uint16_t val ){
  	stateData_t* msg_state;
  	if (result == SUCCESS){
  		msg_state = (stateData_t* )call StateDataSend.getPayload(&StateData_Msg, sizeof(stateData_t));
  		msg_state -> data[1].state_type = STATE_NODE_POWER ;
  		msg_state -> data[1].state = val;
  	}
  }
/*当接收到新的分发数据包时,根据数据包中的指令执行不同的操作*/  
  event void SettingsValue.changed() {
    const rootDissemination_t *newSettings = call SettingsValue.get();
    memcpy(&Dissemination_buf,newSettings,sizeof(rootDissemination_t));
    if (Dissemination_buf.Command_ID & DIS_TIME_SYNCHRONIZATION) {
      /*接收到时间同步命令,重新设置传感器采集周期*/
      //call Leds.led0Toggle();
      SensorDataVaild = FALSE;
      //memset(&SensorData_Msg, 0, sizeof(message_t));//添加此行会导致发送两个重复包 08.9.28 zhangjiwen
    	SensorData_Cycle = Dissemination_buf.Interval_Setting;
    	startTimer(SENSORDATA_TIMER);
    }
    if (Dissemination_buf.Command_ID & DIS_GET_STATEDATA_ALL) {
    	/*接收到全网状态数据提取命令*/
      //call Leds.led2Toggle();
      call DisState_delay.startOneShot(((call Random.rand16()) & 0xBff));	
    }
    if (Dissemination_buf.Command_ID & DIS_GET_SENSORDATA_ALL) {
    	/*接收到全网传感器数据提取命令*/
      //call Leds.led2Toggle();
      call DisSensor_delay.startOneShot(((call Random.rand16()) & 0xBff));	
    }
    if (Dissemination_buf.Command_ID & DIS_RESET_TOPOLOGY_STATE_TIMER) {
    	/*接收到初始化拓扑、状态上传周期为默认值命令*/
      //call Leds.led1Toggle();
    	startTimer(TOPOLOGYDATA_TIMER | STATEDATA_TIMER);  	
    }  
    if (Dissemination_buf.Command_ID & DIS_STOP_TOPOLOGY_STATE_TIMER) {
    	/*接收到停止拓扑、状态上传的命令*/
      //call Leds.led1Toggle();
  	  if(call TopologyData_Interval.isRunning())
  		  call TopologyData_Interval.stop();	
  	  if(call StateData_Interval.isRunning())
  		  call StateData_Interval.stop();
    }
    if (Dissemination_buf.Command_ID & DIS_NODE_TYPE) {
    	/*设置节点类型*/
      //call Leds.led1Toggle();
      Node_Type = Dissemination_buf.Node_Type;
    }     
  }
  /*接收到广播数据包*/
  event message_t* BcastReceive.receive(message_t* msg , void* payload , uint8_t len){
  	BroadCastMsg_t * msg_Bcast = (BroadCastMsg_t *)payload;
    //call Leds.led0Toggle();
  	memcpy(&Bcast_buf , msg_Bcast , len);
    if(Bcast_buf.Command_ID & BCAST_RETRANSMIT){
      if(needRetransmit()){
        call Leds.led0Toggle();
        call Retransmit_delay.startOneShot(((call Random.rand16()) & 0xBff));
      }
  	}
    if(Bcast_buf.Command_ID & BCAST_GET_SENSORDATA_SPECIFY){
      if(needRetransmit()){
        call Leds.led0Toggle();
        call BcastSensor_delay.startOneShot(((call Random.rand16()) & 0xBff));
      }	
  	}
    if(Bcast_buf.Command_ID & BCAST_GET_STATEDATA_SPECIFY){
      if(needRetransmit()){
        call Leds.led0Toggle();
        call BcastState_delay.startOneShot(((call Random.rand16()) & 0xBff));
      } 		
  	}
    return msg;
  }
  
  bool needRetransmit(){
  	uint8_t len ,i;
  	len = Bcast_buf.length;
    for(i = 0 ; i < len/2; i++){
  	  if (Bcast_buf.id[i] == TOS_NODE_ID)
  		  return TRUE;
  	}
    return FALSE;
  }
  /*
  bool isExist(am_addr_t addr){
    topologyData_t* msg_topology;  	
    uint8_t i;
  	msg_topology = (topologyData_t* )call TopologyDataSend.getPayload(&TopologyData_Msg , sizeof(topologyData_t));
    if(msg_topology -> parnt_ID ==addr)
  	  return TRUE;
    for(i = 0; i < 3; i++)
  	  if(msg_topology -> info[i].id == addr)
  	    return TRUE;
  	return FALSE;
  }
*/
  void startTimer(uint8_t type) {
    if(type & SENSORDATA_TIMER){
  	  if(call SensorData_Interval.isRunning())
  		  call SensorData_Interval.stop();
  	  //call SensorData_Interval.startOneShot(SensorData_Cycle * 1024 + ((call Random.rand16()) & 0xFFF));
  	  call SensorData_Interval.startOneShot(SensorData_Cycle * 1024 + ((call Random.rand16()) & 0xBff));
  	}
    if(type & TOPOLOGYDATA_TIMER){
  	  if(call TopologyData_Interval.isRunning())
  		  call TopologyData_Interval.stop();
  	  //call TopologyData_Interval.startPeriodic(TopologyData_Cycle * 1024 + ((call Random.rand16()) & 0xFFF));
  	  call TopologyData_Interval.startPeriodic(TopologyData_Cycle * 1024 + ((call Random.rand16()) & 0xBff));
  	}
    if(type & STATEDATA_TIMER){
  	  if(call StateData_Interval.isRunning())
  		  call StateData_Interval.stop();
  	  //call StateData_Interval.startPeriodic(StateData_Cycle * 1024 + ((call Random.rand16()) & 0xFFF));
  	  call StateData_Interval.startPeriodic(StateData_Cycle * 1024 + ((call Random.rand16()) & 0xBff));
  	}
  }
  
  event void RadioControl.stopDone(error_t ok) { }
  event void DisSensor_delay.fired(){
   getSensorData();
   seq_sensorData ++;
   post sendSensordataMsg();  	
  }	
  event void DisState_delay.fired(){
  	getStateData();  	
    post sendStatedataMsg();
  }
  event void Retransmit_delay.fired(){
    post sendSensordataMsg();
  }	
  event void BcastSensor_delay.fired(){
    getSensorData();
    seq_sensorData ++;
    post sendSensordataMsg();
  }	
  event void BcastState_delay.fired(){
  	getStateData();
    post sendStatedataMsg(); 
  }	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -