SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SENSGps Class Referenceabstract

#include <SENSGps.h>

Inheritance diagram for SENSGps:
[legend]

Classes

struct  Location
 

Public Member Functions

virtual ~SENSGps ()
 
virtual bool start ()=0
 
virtual void stop ()=0
 
Location getLocation () const
 
bool isRunning ()
 
bool permissionGranted () const
 
void registerListener (SENSGpsListener *listener)
 
void unregisterListener (SENSGpsListener *listener)
 
void registerPermissionListener (std::function< void(void)> listener)
 
void updatePermission (bool granted)
 

Protected Member Functions

void setLocation (SENSGps::Location location)
 
void informPermissionListeners ()
 

Protected Attributes

bool _running = false
 
std::atomic_bool _permissionGranted {false}
 

Private Attributes

SENSTimePt _timePt
 
Location _location
 
std::mutex _llaMutex
 
std::vector< SENSGpsListener * > _listeners
 
std::mutex _listenerMutex
 
std::mutex _permissionListenerMutex
 
std::vector< std::function< void(void)> > _permissionListeners
 

Detailed Description

Definition at line 14 of file SENSGps.h.

Constructor & Destructor Documentation

◆ ~SENSGps()

virtual SENSGps::~SENSGps ( )
inlinevirtual

Definition at line 25 of file SENSGps.h.

25 {}

Member Function Documentation

◆ getLocation()

SENSGps::Location SENSGps::getLocation ( ) const

Definition at line 5 of file SENSGps.cpp.

6 {
7  const std::lock_guard<std::mutex> lock(_llaMutex);
8  return _location;
9 }
Location _location
Definition: SENSGps.h:51
std::mutex _llaMutex
Definition: SENSGps.h:52

◆ informPermissionListeners()

void SENSGps::informPermissionListeners ( )
protected

Definition at line 64 of file SENSGps.cpp.

65 {
66  std::lock_guard<std::mutex> lock(_permissionListenerMutex);
67  for (auto listener : _permissionListeners)
68  listener();
69 }
std::mutex _permissionListenerMutex
Definition: SENSGps.h:57
std::vector< std::function< void(void)> > _permissionListeners
Definition: SENSGps.h:58

◆ isRunning()

bool SENSGps::isRunning ( )
inline

Definition at line 32 of file SENSGps.h.

32 { return _running; }
bool _running
Definition: SENSGps.h:46

◆ permissionGranted()

bool SENSGps::permissionGranted ( ) const

Definition at line 49 of file SENSGps.cpp.

50 {
51  return _permissionGranted;
52 }
std::atomic_bool _permissionGranted
Definition: SENSGps.h:47

◆ registerListener()

void SENSGps::registerListener ( SENSGpsListener listener)

Definition at line 29 of file SENSGps.cpp.

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 }
std::mutex _listenerMutex
Definition: SENSGps.h:55
std::vector< SENSGpsListener * > _listeners
Definition: SENSGps.h:54

◆ registerPermissionListener()

void SENSGps::registerPermissionListener ( std::function< void(void)>  listener)

Definition at line 54 of file SENSGps.cpp.

55 {
56  {
57  std::lock_guard<std::mutex> lock(_permissionListenerMutex);
58  _permissionListeners.push_back(listener);
59  }
60  //inform about initial state
62 }
void informPermissionListeners()
Definition: SENSGps.cpp:64

◆ setLocation()

void SENSGps::setLocation ( SENSGps::Location  location)
protected

Definition at line 11 of file SENSGps.cpp.

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 }
std::chrono::high_resolution_clock::time_point SENSTimePt
Definition: SENS.h:57
SENSTimePt _timePt
Definition: SENSGps.h:50

◆ start()

virtual bool SENSGps::start ( )
pure virtual

◆ stop()

virtual void SENSGps::stop ( )
pure virtual

◆ unregisterListener()

void SENSGps::unregisterListener ( SENSGpsListener listener)

Definition at line 36 of file SENSGps.cpp.

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 }

◆ updatePermission()

void SENSGps::updatePermission ( bool  granted)

Definition at line 71 of file SENSGps.cpp.

72 {
73  _permissionGranted = granted;
75 }

Member Data Documentation

◆ _listenerMutex

std::mutex SENSGps::_listenerMutex
private

Definition at line 55 of file SENSGps.h.

◆ _listeners

std::vector<SENSGpsListener*> SENSGps::_listeners
private

Definition at line 54 of file SENSGps.h.

◆ _llaMutex

std::mutex SENSGps::_llaMutex
mutableprivate

Definition at line 52 of file SENSGps.h.

◆ _location

Location SENSGps::_location
private

Definition at line 51 of file SENSGps.h.

◆ _permissionGranted

std::atomic_bool SENSGps::_permissionGranted {false}
protected

Definition at line 47 of file SENSGps.h.

◆ _permissionListenerMutex

std::mutex SENSGps::_permissionListenerMutex
mutableprivate

Definition at line 57 of file SENSGps.h.

◆ _permissionListeners

std::vector<std::function<void(void)> > SENSGps::_permissionListeners
private

Definition at line 58 of file SENSGps.h.

◆ _running

bool SENSGps::_running = false
protected

Definition at line 46 of file SENSGps.h.

◆ _timePt

SENSTimePt SENSGps::_timePt
private

Definition at line 50 of file SENSGps.h.


The documentation for this class was generated from the following files: