SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SENSGps.h
Go to the documentation of this file.
1 #ifndef SENS_GPS_H
2 #define SENS_GPS_H
3 
4 #include <thread>
5 #include <mutex>
6 #include <atomic>
7 #include <vector>
8 #include <functional>
9 
10 #include "SENS.h"
11 
12 class SENSGpsListener;
13 
14 class SENSGps
15 {
16 public:
17  struct Location
18  {
19  double latitudeDEG = 0;
20  double longitudeDEG = 0;
21  double altitudeM = 0;
22  float accuracyM = -1.f;
23  };
24 
25  virtual ~SENSGps() {}
26  //start gps sensor
27  virtual bool start() = 0;
28  virtual void stop() = 0;
29 
30  Location getLocation() const;
31 
32  bool isRunning() { return _running; }
33 
34  bool permissionGranted() const;
35 
36  void registerListener(SENSGpsListener* listener);
37  void unregisterListener(SENSGpsListener* listener);
38 
39  void registerPermissionListener(std::function<void(void)> listener);
40  void updatePermission(bool granted);
41 
42 protected:
43  void setLocation(SENSGps::Location location);
45 
46  bool _running = false;
47  std::atomic_bool _permissionGranted{false};
48 
49 private:
52  mutable std::mutex _llaMutex;
53 
54  std::vector<SENSGpsListener*> _listeners;
55  std::mutex _listenerMutex;
56 
57  mutable std::mutex _permissionListenerMutex;
58  std::vector<std::function<void(void)>> _permissionListeners;
59 };
60 
62 {
63 public:
64  virtual ~SENSGpsListener() {}
65  virtual void onGps(const SENSTimePt& timePt, const SENSGps::Location& loc) = 0;
66 };
67 
68 class SENSDummyGps : public SENSGps
69 {
70 public:
72  {
73  _permissionGranted = true;
74  }
75  ~SENSDummyGps();
76 
77  bool start() override;
78  void stop() override;
79 
81  {
82  _dummyLocs.push_back(loc);
83  }
84 
85 private:
86  void startSimulation();
87  void stopSimulation();
88  void run();
89 
90  std::thread _thread;
91  std::atomic_bool _stop{false};
92 
93  std::vector<SENSGps::Location> _dummyLocs;
94 };
95 
96 #endif
std::chrono::high_resolution_clock::time_point SENSTimePt
Definition: SENS.h:57
typedef void(SL_STDCALL *cbOnImGuiBuild)(SLScene *s
Callback function typedef for ImGui build function.
void stopSimulation()
Definition: SENSGps.cpp:108
SENSDummyGps()
Definition: SENSGps.h:71
std::vector< SENSGps::Location > _dummyLocs
Definition: SENSGps.h:93
void addDummyPos(SENSGps::Location loc)
Definition: SENSGps.h:80
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
bool isRunning()
Definition: SENSGps.h:32
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
virtual bool start()=0
void registerListener(SENSGpsListener *listener)
Definition: SENSGps.cpp:29
std::mutex _permissionListenerMutex
Definition: SENSGps.h:57
std::vector< SENSGpsListener * > _listeners
Definition: SENSGps.h:54
virtual void stop()=0
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
virtual ~SENSGps()
Definition: SENSGps.h:25
bool permissionGranted() const
Definition: SENSGps.cpp:49
std::atomic_bool _permissionGranted
Definition: SENSGps.h:47
virtual ~SENSGpsListener()
Definition: SENSGps.h:64
virtual void onGps(const SENSTimePt &timePt, const SENSGps::Location &loc)=0
float accuracyM
Definition: SENSGps.h:22
double latitudeDEG
Definition: SENSGps.h:19
double longitudeDEG
Definition: SENSGps.h:20
double altitudeM
Definition: SENSGps.h:21