【发布时间】:2017-04-19 17:23:32
【问题描述】:
我正在尝试在收到消息时向节点发送 Ack。我能够获取帧 ID,但无法弄清楚如何在我的消息中包含此帧 ID 并广播它?任何指针?这会很有帮助。谢谢。
更新:这是我想要做的,当 RSU 在函数 BaseWaveApplLayer::handleLowerMsg 中收到消息时,我正在提取帧 ID 并发送 Ack。我面临的问题是在使用 sendDown 时,我收到错误,表明已经计划发送事件。如何正确调度消息?我正在使用 sendDown(msg)。
我没有得到正确的帧 ID,我使用了封装的帧 ID,但它给出了不同的值,我如何从 BasicSafetyMessage 或 cMessage 获取帧 ID?
代码:
void BaseWaveApplLayer::handleLowerMsg(cMessage* msg) {
WaveShortMessage* wsm = dynamic_cast<WaveShortMessage*>(msg);
ASSERT(wsm);
if (BasicSafetyMessage* bsm = dynamic_cast<BasicSafetyMessage*>(wsm)) {
receivedBSMs++;
onBSM(bsm);
if(isBaseStation())
{
BasicSafetyMessage* Ack= new BasicSafetyMessage();
populateWSM(Ack);
Ack->setWsmData(getFrameId(bsm));
EV<<" Sending Ack Frame ID"<<getFrameId(bsm);
sendDown(Ack);
}
else
{
EV<<"Received FrameId"<<bsm->getWsmData();
std::string str( bsm->getWsmData());
int FrameId= std::atoi(str.c_str());
checkIds(FrameId);
}
}}
【问题讨论】: