从RSU向静脉中的节点发送ACK

时间:2017-04-16 08:15:53

标签: omnet++ veins

我正在尝试在收到消息时将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);
    }

}}

1 个答案:

答案 0 :(得分:0)

您需要创建一个新的消息类型,将frameId添加为参数以确认为参数。在接收器上,您可以将它的值与您发送的数据包进行比较。请参阅OMNeT ++ user manual以了解如何创建新消息。另请参阅this post以获取一些提示。