我正在尝试在收到消息时将Ack发送到节点。我能够获得帧ID,无法弄清楚如何在我的消息中包含此帧ID并进行广播?任何指针?它会有所帮助。感谢。
更新:这是我想要做的事情,当在功能BaseWaveApplLayer :: handleLowerMsg中的RSU收到消息时,我正在提取帧ID并发送Ack。我面临的问题是在使用sendDown时,我收到的错误是已经安排了一个事件被发送。如何正确安排消息?我正在使用sendDown(msg)。
我没有得到正确的帧ID,我使用了encapsulatedFrame id,但它给出了不同的值,我如何从BasicSafetyMessage或cMessage获取frameid?
代码:
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);
}
}}
答案 0 :(得分:0)
您需要创建一个新的消息类型,将frameId
添加为参数以确认为参数。在接收器上,您可以将它的值与您发送的数据包进行比较。请参阅OMNeT ++ user manual以了解如何创建新消息。另请参阅this post以获取一些提示。