📄 sensornodem.nc
字号:
call IBADCcontrol.stop();
call BatteryControl.stop();
call DioControl.stop();
call Timer2.stop();
call Timer1.stop();
call Timer3.stop();
call HPLUART.stop();
return SUCCESS;
}
/*--------------------- Events Start from here ------------------------*/
/****************************************************************************
* if Uart msg xmitted,Xmit same msg over radio
* if Radio msg xmitted, issue a new round measuring
****************************************************************************/
event result_t Send.sendDone(TOS_MsgPtr msg, result_t success) {
uint8_t i;
if(!inited){inited = TRUE;} // System Init, no data storage
else{
if(bufData_tx) // Sending the buffered data
{
rstIndex++;
if(rstIndex<12){call Timer3.start(TIMER_ONE_SHOT,50);}
else{bufData_tx = FALSE;}
}
else // Sending everyday data
{
for(i=0;i<DATA_RESTORE_BYTES;i++)
{
datastore[measured%12][i] = databuffer[i];
}
atomic{
measured++;
if(measured==24) {
measured=0;
day++;
if(day==211){day=0;}
}
}
}
}
return SUCCESS;
}
/****************************************************************************
* Uart msg rcvd.
* This app doesn't respond to any incoming uart msg
* Just return
****************************************************************************/
event TOS_MsgPtr Receive.receive(TOS_MsgPtr data) {
if(data->data[2]%2==0){
Excitation_33(EX_ON);
atomic{
state = NOECTE;
fromExcitation = TRUE; // Used for EC-TE sensor decision
uartBufCount = 0;}
call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
call Leds.redToggle();
}
return data;
}
/****************************************************************************
* ADCs Data Ready Routines.
* Tell system what to do when data convertion is ready
* ADC0 to ADC2 will start another convertion,
* Battery will start transmission
****************************************************************************/
event result_t Soilsensor0.dataReady( uint16_t data ) {
atomic {
databuffer[4] = (uint8_t)((data&0xff00)>>8);
databuffer[5] = (uint8_t)data;}
Excitation_25(EX_OFF);
atomic state = SOILSENSOR1EX;
call Dio0.high();
call Timer2.start(TIMER_ONE_SHOT,20);
return SUCCESS;
} /* code done */
event result_t Soilsensor1.dataReady( uint16_t data ) {
atomic {
databuffer[6] = (uint8_t)((data&0xff00)>>8);
databuffer[7] = (uint8_t)data;}
Excitation_25(EX_OFF);
atomic state = SOILSENSOR2EX;
call Dio0.low();
call Dio1.high();
call Timer2.start(TIMER_ONE_SHOT,20);
return SUCCESS;
} /* code done */
event result_t Soilsensor2.dataReady( uint16_t data ) {
atomic {
databuffer[8] = (uint8_t)((data&0xff00)>>8);
databuffer[9] = (uint8_t)data;}
Excitation_25(EX_OFF);
atomic state = SOILSENSOR3EX;
call Dio0.high();
call Dio1.high();
call Timer2.start(TIMER_ONE_SHOT,20);
return SUCCESS;
}
event result_t Soilsensor3.dataReady( uint16_t data ) {
atomic {
databuffer[20] = (uint8_t)((data&0xff00)>>8);
databuffer[21] = (uint8_t)data;}
Excitation_25(EX_OFF);
atomic state = BATTERY;
call Dio0.low();
call Dio1.low();
call Dio2.low(); // Disable ADG0804
call Timer2.start(TIMER_ONE_SHOT,20);
return SUCCESS;
} /* code done */
async event result_t Battery.dataReady(uint16_t data) {
atomic {
databuffer[2] = (uint8_t)((data&0xff00)>>8);
databuffer[3] = (uint8_t)data;}
post send_msg();
return SUCCESS;
} /* code done */
/*--------------------------------------------------------------------------*/
/**
* UART interrupt handeler
*
* @return the buffer with EC-TE data
**/
async event result_t HPLUART.get(uint8_t data){
if(fromExcitation){
if (data != ASCII_CR) {
uartBuf[uartBufCount]=data;
uartBufCount++;
}
if((data == ASCII_CR)&&(uartBufCount!=0)) {
fromExcitation = FALSE;
uartBufCount--; // obtain current position of uartBuf
post dataProcess();
}
}
return SUCCESS;
} /* code done */
/**
* Timer Fired Session
*
* Toggle the red LED in response to the <code>Timer.fired</code> event.
*
* @return Always returns <code>SUCCESS</code>
**/
event result_t Timer1.fired(){
if(!inited){call Timer1.start(TIMER_REPEAT, MEASUREINTERVAL);}
Excitation_33(EX_ON);
atomic{
state = NOECTE;
fromExcitation = TRUE; // Used for EC-TE sensor decision
uartBufCount = 0;
databuffer[0] = day;
databuffer[1] = measured;
}
call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
call Leds.redToggle();
return SUCCESS;
}
/**
* Timer2 Fired Session
*
* Wait 2 seconds if not stopped, than start getting sample
*
* @return Always return SUCCESS
**/
event result_t Timer2.fired()
{
switch(state) {
case NOECTE: Excitation_33(EX_OFF);
atomic {state = SOILSENSOR0EX;
fromExcitation = FALSE;}
call Dio2.high(); // Enable ADG0804
call Timer2.start(TIMER_ONE_SHOT,20);
break;
case SOILSENSOR0EX: Excitation_25(EX_ON);
call Timer2.start(TIMER_ONE_SHOT,15);
state = SOILSENSOR0GD;
break;
case SOILSENSOR0GD: call Soilsensor0.getData();
break;
case SOILSENSOR1EX: Excitation_25(EX_ON);
call Timer2.start(TIMER_ONE_SHOT,15);
state = SOILSENSOR1GD;
break;
case SOILSENSOR1GD: call Soilsensor1.getData();
break;
case SOILSENSOR2EX: Excitation_25(EX_ON);
call Timer2.start(TIMER_ONE_SHOT,15);
state = SOILSENSOR2GD;
break;
case SOILSENSOR2GD: call Soilsensor2.getData();
break;
case SOILSENSOR3EX: Excitation_25(EX_ON);
call Timer2.start(TIMER_ONE_SHOT,15);
state = SOILSENSOR3GD;
break;
case SOILSENSOR3GD: call Soilsensor3.getData();
break;
case BATTERY: call Battery.getData();
state = SOILSENSOR0EX;
break;
default: break;
}
return SUCCESS;
}
event result_t Timer3.fired()
{
uint8_t i;
if(bufData_tx)
{
for(i=0;i<DATA_RESTORE_BYTES;i++)
{
databuffer[i] = datastore[rstIndex][i];
}
post send_msg();
}
else
{
call Leds.yellowToggle();
Excitation_33(EX_ON);
atomic{
state = NOECTE;
fromExcitation = TRUE; // Used for EC-TE sensor decision
uartBufCount = 0;}
call Timer2.start(TIMER_ONE_SHOT, EC_TEWAITINGTIME);
call Leds.redToggle();
}
return SUCCESS;
}
event async result_t HPLUART.putDone()
{
return SUCCESS;
}
event result_t Dio0.dataReady(uint16_t data) {
return SUCCESS;
}
event result_t Dio1.dataReady(uint16_t data) {
return SUCCESS;
}
event result_t Dio0.dataOverflow() {
return SUCCESS;
}
event result_t Dio1.dataOverflow() {
return SUCCESS;
}
event result_t Dio2.dataReady(uint16_t data) {
return SUCCESS;
}
event result_t Dio2.dataOverflow() {
return SUCCESS;
}
event result_t Dio3.dataOverflow() {
return SUCCESS;
}
event result_t Dio3.dataReady(uint16_t data) {
if(inited){
if(!bufData_tx){
bufData_tx = TRUE;
rstIndex = 0;
call Timer3.start(TIMER_ONE_SHOT,50);
}
}
return SUCCESS;
}
event result_t Dio4.dataOverflow() {
return SUCCESS;
}
event result_t Dio4.dataReady(uint16_t data) {
if(inited){
call Timer3.start(TIMER_ONE_SHOT,500);
}
return SUCCESS;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -