Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
SharedMemory.hpp
Go to the documentation of this file.
1 #ifndef SHARED_MEMORY_HPP
2 #define SHARED_MEMORY_HPP
3 
4 #include <thread>
5 #include <mutex>
6 #include <memory>
7 #include <vector>
8 #include <utility>
9 #include <fcntl.h>
10 #include <map>
11 
12 // shared mutex
13 #include <semaphore.h>
14 
15 namespace com {
16 
17  struct SharedData {
18  int32_t tv_sec;
19  uint32_t tv_nsec;
20  uint8_t* data;
21  size_t dataSize;
22  };
23 
24  class SharedMemory {
25  private:
26  std::string m_shmName;
27  std::string m_semaphoreName;
28  int m_shmAddress = -1;
29  int m_shmSize = -1;
30 
31  sem_t* m_semaphore = nullptr;
32  void* m_sharedArea = nullptr;
33 
34  uint32_t m_lastDataSec = 0;
35  uint32_t m_lastDataNSec = 0;
36 
37  public:
38  SharedMemory(std::string name);
39  SharedMemory() = delete;
40  ~SharedMemory();
41 
42  size_t get_data_size();
43 
44  bool allocate(size_t sizeBytes);
45  bool deallocate();
46 
47  bool write_mutexed(com::SharedData const& data);
48 
49  bool is_new_data_available();
50  size_t read_mutexed(com::SharedData& data, size_t sizeToRead);
51 
52  private:
53  bool acquire_semaphore(bool timedWait = false);
54  bool release_semaphore();
55  };
56 
57 }
58 
59 #endif
com::SharedMemory::m_shmAddress
int m_shmAddress
Definition: SharedMemory.hpp:28
com::SharedMemory::m_semaphore
sem_t * m_semaphore
Definition: SharedMemory.hpp:31
com::SharedMemory::m_shmSize
int m_shmSize
Definition: SharedMemory.hpp:29
com::SharedMemory
Definition: SharedMemory.hpp:24
com::SharedMemory::acquire_semaphore
bool acquire_semaphore(bool timedWait=false)
Definition: SharedMemory.cpp:214
com::SharedData::data
uint8_t * data
Definition: SharedMemory.hpp:20
com::SharedMemory::~SharedMemory
~SharedMemory()
Definition: SharedMemory.cpp:30
com::SharedData::dataSize
size_t dataSize
Definition: SharedMemory.hpp:21
com::SharedMemory::SharedMemory
SharedMemory()=delete
com::SharedMemory::write_mutexed
bool write_mutexed(com::SharedData const &data)
Definition: SharedMemory.cpp:126
com::SharedMemory::get_data_size
size_t get_data_size()
Definition: SharedMemory.cpp:122
com::SharedData::tv_sec
int32_t tv_sec
Definition: SharedMemory.hpp:18
com::SharedData::tv_nsec
uint32_t tv_nsec
Definition: SharedMemory.hpp:19
com::SharedMemory::is_new_data_available
bool is_new_data_available()
Definition: SharedMemory.cpp:159
com::SharedMemory::allocate
bool allocate(size_t sizeBytes)
Definition: SharedMemory.cpp:34
com::SharedData
Definition: SharedMemory.hpp:17
com::SharedMemory::deallocate
bool deallocate()
Definition: SharedMemory.cpp:89
com::SharedMemory::read_mutexed
size_t read_mutexed(com::SharedData &data, size_t sizeToRead)
Definition: SharedMemory.cpp:183
com::SharedMemory::release_semaphore
bool release_semaphore()
Definition: SharedMemory.cpp:234
com::SharedMemory::m_semaphoreName
std::string m_semaphoreName
Definition: SharedMemory.hpp:27
com
Definition: SharedMemory.hpp:15
com::SharedMemory::m_shmName
std::string m_shmName
Definition: SharedMemory.hpp:26
com::SharedMemory::m_lastDataNSec
uint32_t m_lastDataNSec
Definition: SharedMemory.hpp:35
com::SharedMemory::m_sharedArea
void * m_sharedArea
Definition: SharedMemory.hpp:32
com::SharedMemory::m_lastDataSec
uint32_t m_lastDataSec
Definition: SharedMemory.hpp:34