TI工程师,您好。请问下CC1310的WakeOnRadio的RF_cmdPropRxSniff怎么立即变为IDLE状态?我想在case PROP_DONE_OK: 之后,就立即变为IDLE。是变化RF_cmdPropRxSniff.commandNo吗?并且立即触发RF_cmdPropRxSniff.startTrigger.triggerType ,但是我只看到 CMD_PROP_RX_SNIFF的命令,没有看到IDLE的命令。谢谢!
Felix ZF:
RF_cmdPropRxSniff命令使RF进入Rx状态,结束RF_cmdPropRxSniff命令退出Rx状态就是处于IDLE状态了
结束RF_cmdPropRxSniff有两种方式,一个是使用RF_cmdPropRxSniff命令自身的EndTrigger结束命令,一个是使用RF_cancelCmd()
user3895839:
回复 Felix ZF:
您好。如下红色部分所注,发现还是不能RF_Close,请问这个是啥原因啊。我关闭的目的是为了重新设置RF的参数。
/* Enter main loop */ while(1) { /* Set next wakeup time in the future */ RF_cmdPropRxSniff.startTime += WOR_WAKE_UP_INTERVAL_RAT_TICKS(WOR_WAKEUPS_PER_SECOND);
/* Schedule RX */ RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropRxSniff, RF_PriorityNormal, &callback, RF_EventRxEntryDone);
/* Log RX_SNIFF status */ switch(RF_cmdPropRxSniff.status) { case PROP_DONE_IDLE: /* Idle based on RSSI */ worStatistics.doneIdle++; break; case PROP_DONE_IDLETIMEOUT: /* Idle based on PQT */ worStatistics.doneIdleTimeout++; break; case PROP_DONE_RXTIMEOUT: /* Got valid preamble on the air, but did not find sync word */ worStatistics.doneRxTimeout++; break; case PROP_DONE_OK: /* Received packet */ worStatistics.doneOk++;
//
RF_cancelCmd(rfHandle,RF_cmdPropRxSniff.commandNo,0);RF_cmdPropRxSniff.commandNo = 0x00;RF_yield(rfHandle);RF_close(rfHandle);
break; default: /* Unhandled status */ break; }; }
Felix ZF:
回复 user3895839:
如下,是SDK中rfPacketErrorRate示例工程中,使用RF_cancelCmd相关部分的代码,供参考。
rxCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRx, RF_PriorityNormal, &rx_callback, RF_EventRxEntryDone);
RF_cancelCmd(rfHandle, rxCmdHndl, 0); RF_pendCmd(rfHandle, rxCmdHndl, RF_EventRxEntryDone); RF_close(rfHandle);