LCOV - code coverage report
Current view: top level - src/microsim/devices - MSDevice_BTsender.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 90.0 % 50 45
Test Date: 2024-11-22 15:46:21 Functions: 100.0 % 10 10

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2013-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    MSDevice_BTsender.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Michael Behrisch
      17              : /// @date    14.08.2013
      18              : ///
      19              : // A BT sender
      20              : /****************************************************************************/
      21              : #include <config.h>
      22              : 
      23              : #include <utils/common/StringUtils.h>
      24              : #include <utils/options/OptionsCont.h>
      25              : #include <utils/iodevices/OutputDevice.h>
      26              : #include <utils/vehicle/SUMOVehicle.h>
      27              : #include <microsim/MSNet.h>
      28              : #include <microsim/MSLane.h>
      29              : #include <microsim/MSEdge.h>
      30              : #include <microsim/MSVehicle.h>
      31              : #include <microsim/transportables/MSTransportable.h>
      32              : #include "MSDevice_Tripinfo.h"
      33              : #include "MSDevice_BTsender.h"
      34              : #include "MSDevice_BTreceiver.h"
      35              : 
      36              : 
      37              : // ===========================================================================
      38              : // static members
      39              : // ===========================================================================
      40              : std::map<std::string, MSDevice_BTsender::VehicleInformation*> MSDevice_BTsender::sVehicles;
      41              : 
      42              : 
      43              : // ===========================================================================
      44              : // method definitions
      45              : // ===========================================================================
      46              : // ---------------------------------------------------------------------------
      47              : // static initialisation methods
      48              : // ---------------------------------------------------------------------------
      49              : void
      50        43644 : MSVehicleDevice_BTsender::insertOptions(OptionsCont& oc) {
      51        87288 :     insertDefaultAssignmentOptions("btsender", "Communication", oc);
      52        43644 : }
      53              : 
      54              : 
      55              : void
      56      5104373 : MSVehicleDevice_BTsender::buildVehicleDevices(SUMOVehicle& v, std::vector<MSVehicleDevice*>& into) {
      57     10208746 :     if (equippedByDefaultAssignmentOptions(OptionsCont::getOptions(), "btsender", v, false)) {
      58          366 :         MSVehicleDevice_BTsender* device = new MSVehicleDevice_BTsender(v, "btsender_" + v.getID());
      59          366 :         into.push_back(device);
      60              :     }
      61      5104373 : }
      62              : 
      63              : void
      64        43644 : MSTransportableDevice_BTsender::insertOptions(OptionsCont& oc) {
      65        87288 :     insertDefaultAssignmentOptions("btsender", "Communication", oc, true);
      66        43644 : }
      67              : 
      68              : 
      69              : void
      70       501966 : MSTransportableDevice_BTsender::buildDevices(MSTransportable& t, std::vector<MSTransportableDevice*>& into) {
      71      1003932 :     if (equippedByDefaultAssignmentOptions(OptionsCont::getOptions(), "btsender", t, false, true)) {
      72          132 :         MSTransportableDevice_BTsender* device = new MSTransportableDevice_BTsender(t, "btsender_" + t.getID());
      73          132 :         into.push_back(device);
      74              :         MSDevice_BTreceiver::hasSendingPersons();
      75              :     }
      76       501966 : }
      77              : 
      78              : void
      79        40275 : MSDevice_BTsender::cleanup() {
      80              :     std::map<std::string, MSDevice_BTsender::VehicleInformation*>::iterator i;
      81        40449 :     for (i = sVehicles.begin(); i != sVehicles.end(); i++) {
      82          174 :         delete i->second;
      83              :     }
      84        40275 : }
      85              : 
      86              : 
      87              : // ---------------------------------------------------------------------------
      88              : // MSDevice_BTsender-methods
      89              : // ---------------------------------------------------------------------------
      90              : 
      91              : 
      92          498 : MSDevice_BTsender::~MSDevice_BTsender() {
      93          498 : }
      94              : 
      95              : std::string
      96       373936 : MSDevice_BTsender::getLocation(const SUMOTrafficObject& o) {
      97       373936 :     return o.getLane() == nullptr ? o.getEdge()->getID() : o.getLane()->getID();
      98              : }
      99              : 
     100              : bool
     101         4182 : MSDevice_BTsender::notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* /* enteredLane */) {
     102         4182 :     if (reason == MSMoveReminder::NOTIFICATION_DEPARTED && sVehicles.find(veh.getID()) == sVehicles.end()) {
     103          498 :         sVehicles[veh.getID()] = new VehicleInformation(veh.getID());
     104          498 :         sVehicles[veh.getID()]->route.push_back(veh.getEdge());
     105              :     }
     106         4182 :     if (reason == MSMoveReminder::NOTIFICATION_TELEPORT && sVehicles.find(veh.getID()) != sVehicles.end()) {
     107            0 :         sVehicles[veh.getID()]->amOnNet = true;
     108              :     }
     109         4182 :     if (reason == MSMoveReminder::NOTIFICATION_TELEPORT || reason == MSMoveReminder::NOTIFICATION_JUNCTION) {
     110         1190 :         sVehicles[veh.getID()]->route.push_back(veh.getEdge());
     111              :     }
     112         8364 :     sVehicles[veh.getID()]->updates.push_back(VehicleState(veh.getSpeed(), veh.getPosition(), getLocation(veh), veh.getPositionOnLane(), veh.getRoutePosition()));
     113         4182 :     return true;
     114              : }
     115              : 
     116              : 
     117              : bool
     118       174128 : MSDevice_BTsender::notifyMove(SUMOTrafficObject& veh, double /* oldPos */, double newPos, double newSpeed) {
     119       174128 :     if (sVehicles.find(veh.getID()) == sVehicles.end()) {
     120            0 :         WRITE_WARNINGF(TL("btsender: Can not update position of vehicle '%' which is not on the road."), veh.getID());
     121            0 :         return true;
     122              :     }
     123       348256 :     sVehicles[veh.getID()]->updates.push_back(VehicleState(newSpeed, veh.getPosition(), getLocation(veh), newPos, veh.getRoutePosition()));
     124       174128 :     return true;
     125              : }
     126              : 
     127              : 
     128              : bool
     129         4002 : MSDevice_BTsender::notifyLeave(SUMOTrafficObject& veh, double /* lastPos */, MSMoveReminder::Notification reason, const MSLane* /* enteredLane */) {
     130         4002 :     if (reason < MSMoveReminder::NOTIFICATION_TELEPORT) {
     131              :         return true;
     132              :     }
     133          318 :     if (sVehicles.find(veh.getID()) == sVehicles.end()) {
     134            0 :         WRITE_WARNINGF(TL("btsender: Can not update position of vehicle '%' which is not on the road."), veh.getID());
     135            0 :         return true;
     136              :     }
     137          636 :     sVehicles[veh.getID()]->updates.push_back(VehicleState(veh.getSpeed(), veh.getPosition(), getLocation(veh), veh.getPositionOnLane(), veh.getRoutePosition()));
     138              :     if (reason >= MSMoveReminder::NOTIFICATION_TELEPORT) {
     139          318 :         sVehicles[veh.getID()]->amOnNet = false;
     140              :     }
     141          318 :     if (reason >= MSMoveReminder::NOTIFICATION_ARRIVED) {
     142          318 :         sVehicles[veh.getID()]->amOnNet = false;
     143          318 :         sVehicles[veh.getID()]->haveArrived = true;
     144              :     }
     145              :     return true;
     146              : }
     147              : 
     148              : 
     149              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1