SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SENSGps.cpp
Go to the documentation of this file.
1 #include "SENSGps.h"
2 #include <Utils.h>
3 #include <algorithm>
4 
6 {
7  const std::lock_guard<std::mutex> lock(_llaMutex);
8  return _location;
9 }
10 
12 {
13  //estimate time before running into lock
14  SENSTimePt timePt = SENSClock::now();
15 
16  {
17  const std::lock_guard<std::mutex> lock(_llaMutex);
18  _location = location;
19  _timePt = timePt;
20  }
21 
22  {
23  std::lock_guard<std::mutex> lock(_listenerMutex);
24  for (SENSGpsListener* l : _listeners)
25  l->onGps(timePt, location);
26  }
27 }
28 
30 {
31  std::lock_guard<std::mutex> lock(_listenerMutex);
32  if (std::find(_listeners.begin(), _listeners.end(), listener) == _listeners.end())
33  _listeners.push_back(listener);
34 }
35 
37 {
38  std::lock_guard<std::mutex> lock(_listenerMutex);
39  for (auto it = _listeners.begin(); it != _listeners.end(); ++it)
40  {
41  if (*it == listener)
42  {
43  _listeners.erase(it);
44  break;
45  }
46  }
47 }
48 
50 {
51  return _permissionGranted;
52 }
53 
54 void SENSGps::registerPermissionListener(std::function<void(void)> listener)
55 {
56  {
57  std::lock_guard<std::mutex> lock(_permissionListenerMutex);
58  _permissionListeners.push_back(listener);
59  }
60  //inform about initial state
62 }
63 
65 {
66  std::lock_guard<std::mutex> lock(_permissionListenerMutex);
67  for (auto listener : _permissionListeners)
68  listener();
69 }
70 
71 void SENSGps::updatePermission(bool granted)
72 {
73  _permissionGranted = granted;
75 }
76 
77 //-----------------------------------------------------------------------------
78 
80 {
82 }
83 
85 {
86  if (_running)
87  return false;
88 
89  Utils::log("SENSDummyGps", "start");
91  _running = true;
92  return true;
93 }
94 
96 {
97  Utils::log("SENSDummyGps", "stop");
99  _running = false;
100 }
101 
103 {
104  _stop = false;
105  _thread = std::thread(&SENSDummyGps::run, this);
106 }
107 
109 {
110  _stop = true;
111  if (_thread.joinable())
112  _thread.join();
113 }
114 
116 {
117  int i = 0;
118  while (true)
119  {
120  std::this_thread::sleep_for(std::chrono::seconds(1));
121  if (_stop)
122  break;
123 
124  i++;
125  i = i % _dummyLocs.size();
126 
128  }
129 }
std::chrono::high_resolution_clock::time_point SENSTimePt
Definition: SENS.h:57
void stopSimulation()
Definition: SENSGps.cpp:108
std::vector< SENSGps::Location > _dummyLocs
Definition: SENSGps.h:93
void stop() override
Definition: SENSGps.cpp:95
void run()
Definition: SENSGps.cpp:115
std::atomic_bool _stop
Definition: SENSGps.h:91
void startSimulation()
Definition: SENSGps.cpp:102
bool start() override
Definition: SENSGps.cpp:84
std::thread _thread
Definition: SENSGps.h:90
void updatePermission(bool granted)
Definition: SENSGps.cpp:71
Location _location
Definition: SENSGps.h:51
bool _running
Definition: SENSGps.h:46
void setLocation(SENSGps::Location location)
Definition: SENSGps.cpp:11
SENSTimePt _timePt
Definition: SENSGps.h:50
std::mutex _listenerMutex
Definition: SENSGps.h:55
void registerPermissionListener(std::function< void(void)> listener)
Definition: SENSGps.cpp:54
void registerListener(SENSGpsListener *listener)
Definition: SENSGps.cpp:29
std::mutex _permissionListenerMutex
Definition: SENSGps.h:57
std::vector< SENSGpsListener * > _listeners
Definition: SENSGps.h:54
void unregisterListener(SENSGpsListener *listener)
Definition: SENSGps.cpp:36
std::vector< std::function< void(void)> > _permissionListeners
Definition: SENSGps.h:58
void informPermissionListeners()
Definition: SENSGps.cpp:64
Location getLocation() const
Definition: SENSGps.cpp:5
std::mutex _llaMutex
Definition: SENSGps.h:52
bool permissionGranted() const
Definition: SENSGps.cpp:49
std::atomic_bool _permissionGranted
Definition: SENSGps.h:47
void log(const char *tag, const char *format,...)
logs a formatted string platform independently
Definition: Utils.cpp:1100