I tried to modify the veins TraCIDemo11p.cc and other related files but I can not send both the wsm data message and the new message data_rakez message at the same time. Is it possible to send two messages within the TracIDemo11p.cc?
I have attach the code ; Please help me on this issue. Also i would like to know how to know what is inside the data packet. Do i need to install win cap to trace the messages.
void TraCIDemo11p::onBeacon(WaveShortMessage* wsm) {
}
void TraCIDemo11p::onData(WaveShortMessage* wsm) {
findHost()->getDisplayString().updateWith("r=8,green"); //Modified=> r=16
annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), traci->getPositionAt(simTime()), "blue"));
if (traci->getRoadId()[0] != ':') traci->commandChangeRoute(wsm->getWsmData(), 9999);
if (!sentMessage) sendMessage(wsm->getWsmData());
}
void TraCIDemo11p::sendMessage(std::string blockedRoadId) {
sentMessage = true;
t_channel channel = dataOnSch ? type_SCH : type_CCH;
WaveShortMessage* wsm = prepareWSM("data", dataLengthBits, channel, dataPriority, -1,2);
wsm->setWsmData(blockedRoadId.c_str());
sendWSM(wsm);
}
// ---------------//added data_rakez----------------------------------------------------------
void TraCIDemo11p::onData1(WaveShortMessage* wsm) {
findHost()->getDisplayString().updateWith("r=24,green"); //Modified=> r=16
annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), traci->getPositionAt(simTime()), "blue"));
if (traci->getRoadId()[0] != ':') traci->commandChangeRoute(wsm->getWsmData(), 9999);
if (!sentMessage) sendMessage1(wsm->getWsmData());
}
//-------------------------
void TraCIDemo11p::sendMessage1(std::string data_rakezz) {
sentMessage = true;
t_channel channel = dataOnSch ? type_SCH : type_CCH;
WaveShortMessage* wsm = prepareWSM("data_rakezshre", dataLengthBits, channel, dataPriority, -1,2); //data_rakez
wsm->setWsmData(data_rakezz.c_str());
sendWSM(wsm);
}
void TraCIDemo11p::receiveSignal(cComponent* source, simsignal_t signalID, cObject* obj) {
Enter_Method_Silent();
if (signalID == mobilityStateChangedSignal) {
handlePositionUpdate1(obj);
}
else if (signalID == parkingStateChangedSignal) {
handleParkingUpdate(obj);
}
}
//added--------------
void TraCIDemo11p::handlePositionUpdate1(cObject* obj) {
BaseWaveApplLayer::handlePositionUpdate(obj);
// stopped for for at least 10s?
if (traci->getSpeed() < 1) {
if (simTime() - lastDroveAt >= 10) {
findHost()->getDisplayString().updateWith("r=16,red");
if (!sentMessage) sendMessage1(traci->getRoadId());
}
}
else {
lastDroveAt = simTime();
}
}
void TraCIDemo11p::sendWSM1(WaveShortMessage* wsm) {
if (isParking && !sendWhileParking) return;
sendDelayedDown(wsm,individualOffset);
}
Thank you.