【发布时间】:2021-07-06 06:36:01
【问题描述】:
我正在尝试在 x-mac 协议中实现数据确认。算法是,数据包传输结束后,发送节点将等待接收方的确认。为此,我添加了一个新状态 WAIT_ACK。但是在运行时,我可以看到节点无法从WAIT_TX_DATA_OVER 到WAIT_ACK 进行状态转换。我收到以下错误。
状态 7(无线电状态 2)中类型 204 的未定义事件! -- 在模块 (inet::XMac1) SensorNetworkShowcaseA.sensor3.wlan[0].mac (id=181) 中,在 t=0.10677288732s,事件 #62
注意:XMAC1_DATA_TX_OVER = 204 并且状态 7 是 WAIT_ACK
case SEND_DATA:
if (msg->getKind() == XMAC1_STOP_PREAMBLES) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else if (msg->getKind() == XMAC1_SWITCHING_FINISHED) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else {
return;
}
break;
case WAIT_TX_DATA_OVER:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
scheduleAt(simTime() + (slotDuration / 2), data_ack_timeout);
macState = WAIT_ACK;
radio->setRadioMode(IRadio::RADIO_MODE_RECEIVER);
changeDisplayColor(GREEN);
}
break;
case WAIT_ACK:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
delete msg;
return;
}
...
}
break;
更新
在运行时,执行停止后我可以看到以下内容
INFO (XMac1)SensorNetworkShowcaseA.sensor3.wlan[0].mac:节点 0A-AA-00-00-00-04:状态 WAIT_TX_DATA_OVER,消息 XMAC_DATA_TX_OVER,新状态 WAIT_ACK INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0].radio:SensorNetworkShowcaseA.sensor3.wlan[0].radio:无线电模式从 TRANSMITTER 更改为 RECEIVER。 INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0].radio:SensorNetworkShowcaseA.sensor3.wlan[0].radio:将无线电接收状态从 UNDEFINED 更改为 IDLE。 INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan[0].radio:SensorNetworkShowcaseA.sensor3.wlan[0].radio:将无线电传输状态从 IDLE 更改为 UNDEFINED。 状态 7(无线电状态 2)中类型 204 的未定义事件! -- 在模块 (inet::XMac1) SensorNetworkShowcaseA.sensor3.wlan[0].mac (id=181) 中,在 t=0.10677288732s,事件 #62
【问题讨论】: