SUMO - Simulation of Urban MObility
MSDevice_BTreceiver.h
Go to the documentation of this file.
1 /****************************************************************************/
8 // A BT receiver
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
11 // Copyright (C) 2013-2015 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 #ifndef MSDevice_BTreceiver_h
22 #define MSDevice_BTreceiver_h
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include "MSDevice.h"
35 #include "MSDevice_BTsender.h"
36 #include <microsim/MSNet.h>
37 #include <utils/common/SUMOTime.h>
38 #include <utils/common/Command.h>
40 
41 
42 // ===========================================================================
43 // class declarations
44 // ===========================================================================
45 class SUMOVehicle;
46 
47 
48 // ===========================================================================
49 // class definitions
50 // ===========================================================================
57 class MSDevice_BTreceiver : public MSDevice {
58 public:
62  static void insertOptions(OptionsCont& oc);
63 
64 
75  static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSDevice*>& into);
76 
77 
81  static SUMOReal getRange() {
82  return myRange;
83  }
84 
85 
86 
87 public:
90 
91 
92 
95 
104  bool notifyEnter(SUMOVehicle& veh, Notification reason);
105 
106 
120  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed);
121 
122 
133  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, Notification reason);
135 
136 
137 
141  class MeetingPoint {
142  public:
149  const MSDevice_BTsender::VehicleState& _seenState)
150  : t(_t), observerState(_observerState), seenState(_seenState) {}
151 
154 
155  public:
157  const SUMOReal t;
162 
163  private:
166 
167  };
168 
169 
170 
174  class SeenDevice {
175  public:
179  SeenDevice(const MeetingPoint& meetingBegin_)
180  : meetingBegin(meetingBegin_), meetingEnd(0), lastView(meetingBegin_.t), nextView(-1.) {}
181 
184  delete meetingEnd;
185  for (std::vector<MeetingPoint*>::iterator i = recognitionPoints.begin(); i != recognitionPoints.end(); ++i) {
186  delete *i;
187  }
188  recognitionPoints.clear();
189  }
190 
191 
192  public:
202  std::vector<MeetingPoint*> recognitionPoints;
204  std::string receiverRoute;
206  std::string senderRoute;
207 
208  private:
211 
212  };
213 
214 
215 
220  static void cleanUp(std::map<std::string, SeenDevice*>& c, std::map<std::string, std::vector<SeenDevice*> >& s);
221 
222 
223 
224 protected:
230  MSDevice_BTreceiver(SUMOVehicle& holder, const std::string& id);
231 
232 
233 
234 private:
236  static bool myWasInitialised;
237 
240 
243 
244 
249  public:
254  VehicleInformation(const std::string& id, const SUMOReal _range) : MSDevice_BTsender::VehicleInformation(id), range(_range) {}
255 
258 
261 
263  std::map<std::string, SeenDevice*> currentlySeen;
264 
266  std::map<std::string, std::vector<SeenDevice*> > seen;
267 
268  private:
271 
274 
275  };
276 
277 
278 
282  class BTreceiverUpdate : public Command {
283  public:
286 
289 
294  SUMOTime execute(SUMOTime currentTime);
295 
296 
302 
303 
311  void enterRange(SUMOReal atOffset, const MSDevice_BTsender::VehicleState& receiverState,
312  const std::string& senderID, const MSDevice_BTsender::VehicleState& senderState,
313  std::map<std::string, SeenDevice*>& currentlySeen);
314 
315 
323  void leaveRange(VehicleInformation& receiverInfo, const MSDevice_BTsender::VehicleState& receiverState,
325  SUMOReal tOffset);
326 
327 
328 
329 
336  void addRecognitionPoint(const SUMOReal tEnd, const MSDevice_BTsender::VehicleState& receiverState,
337  const MSDevice_BTsender::VehicleState& senderState,
338  SeenDevice* senderDevice) const;
339 
340 
346  void writeOutput(const std::string& id, const std::map<std::string, std::vector<SeenDevice*> >& seen,
347  bool allRecognitions);
348 
349 
350 
351 
352  };
353 
354 
355  static SUMOReal inquiryDelaySlots(const int backoffLimit);
356 
359 
361  static std::map<std::string, VehicleInformation*> sVehicles;
362 
363 
364 
365 private:
368 
371 
372 
373 };
374 
375 #endif
376 
377 /****************************************************************************/
378 
std::string receiverRoute
string of travelled receiver edges
const MeetingPoint meetingBegin
Description of the meeting's begin.
VehicleInformation(const std::string &id, const SUMOReal _range)
Constructor.
const MSDevice_BTsender::VehicleState seenState
The state the seen vehicle had at the time.
SeenDevice(const MeetingPoint &meetingBegin_)
Constructor.
Notification
Definition of a vehicle state.
std::vector< MeetingPoint * > recognitionPoints
List of recognition points.
static MTRand sRecognitionRNG
A random number generator used to determine whether the opposite was recognized.
VehicleInformation & operator=(const VehicleInformation &)
Invalidated assignment operator.
MSDevice_BTreceiver & operator=(const MSDevice_BTreceiver &)
Invalidated assignment operator.
bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, Notification reason)
Moves (the known) vehicle from running to arrived vehicles' list.
SUMOReal lastView
Last recognition point.
Base (microsim) event class.
Definition: Command.h:61
MSDevice_BTreceiver(SUMOVehicle &holder, const std::string &id)
Constructor.
std::map< std::string, std::vector< SeenDevice * > > seen
The past episodes of removed vehicle.
static SUMOReal myRange
The range of the device.
static SUMOReal inquiryDelaySlots(const int backoffLimit)
Class representing a single seen device.
std::string senderRoute
string of travelled sender edges
Representation of a vehicle.
Definition: SUMOVehicle.h:65
static bool myWasInitialised
Whether the bt-system was already initialised.
A single movement state of the vehicle.
SUMOReal nextView
Next possible recognition point.
void writeOutput(const std::string &id, const std::map< std::string, std::vector< SeenDevice * > > &seen, bool allRecognitions)
Writes the output.
static void cleanUp(std::map< std::string, SeenDevice * > &c, std::map< std::string, std::vector< SeenDevice * > > &s)
Clears the given containers deleting the stored items.
bool notifyEnter(SUMOVehicle &veh, Notification reason)
Adds the vehicle to running vehicles if it (re-) enters the network.
~MSDevice_BTreceiver()
Destructor.
SUMOTime execute(SUMOTime currentTime)
Performs the update.
static std::map< std::string, VehicleInformation * > sVehicles
The list of arrived receivers.
void leaveRange(VehicleInformation &receiverInfo, const MSDevice_BTsender::VehicleState &receiverState, MSDevice_BTsender::VehicleInformation &senderInfo, const MSDevice_BTsender::VehicleState &senderState, SUMOReal tOffset)
Removes the sender from the currently seen devices to past episodes.
Stores the information of a vehicle.
const SUMOReal t
The time of the meeting.
Abstract in-vehicle device.
Definition: MSDevice.h:69
Holds the information about exact positions/speeds/time of the begin/end of a meeting.
SeenDevice & operator=(const SeenDevice &)
Invalidated assignment operator.
void enterRange(SUMOReal atOffset, const MSDevice_BTsender::VehicleState &receiverState, const std::string &senderID, const MSDevice_BTsender::VehicleState &senderState, std::map< std::string, SeenDevice * > &currentlySeen)
Informs the receiver about a sender entering it's radius.
void addRecognitionPoint(const SUMOReal tEnd, const MSDevice_BTsender::VehicleState &receiverState, const MSDevice_BTsender::VehicleState &senderState, SeenDevice *senderDevice) const
Adds a point of recognition.
std::map< std::string, SeenDevice * > currentlySeen
The map of devices seen by the vehicle at removal time.
static SUMOReal myOffTime
The offtime of the device.
A storage for options typed value containers)
Definition: OptionsCont.h:108
int SUMOTime
Definition: SUMOTime.h:43
MeetingPoint(SUMOReal _t, const MSDevice_BTsender::VehicleState &_observerState, const MSDevice_BTsender::VehicleState &_seenState)
Constructor.
const SUMOReal range
Recognition range of the vehicle.
#define SUMOReal
Definition: config.h:218
Stores the information of a vehicle.
void updateVisibility(VehicleInformation &receiver, MSDevice_BTsender::VehicleInformation &sender)
Rechecks the visibility for a given receiver/sender pair.
static SUMOReal getRange()
Returns the configured range.
MeetingPoint * meetingEnd
Description of the meeting's end.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSDevice * > &into)
Build devices for the given vehicle, if needed.
const MSDevice_BTsender::VehicleState observerState
The state the observer had at the time.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTreceiver-options.
bool notifyMove(SUMOVehicle &veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed)
Checks whether the reminder still has to be notified about the vehicle moves.
MeetingPoint & operator=(const MeetingPoint &)
Invalidated assignment operator.