16 m_DispatchingMode(eCoupled),
17 m_MaximalPendingEvents(2),
19 m_pIMUDevice(pIMUDevice),
22 m_LastCycleReferenceTimeStamp(
CTimeStamp::s_Zero),
23 m_LastFusedCycleReferenceTimeStamp(
CTimeStamp::s_Zero),
24 m_LastIntegratedStateReferenceTimeStamp(
CTimeStamp::s_Zero),
25 m_LastCustomEventReferenceTimeStamp(
CTimeStamp::s_Zero)
27 pthread_mutex_init(&m_DispatchingModeMutex,
nullptr);
28 pthread_mutex_init(&m_MaximalPendingEventsMutex,
nullptr);
29 pthread_mutex_init(&m_EventFlagsMutex,
nullptr);
30 pthread_mutex_init(&m_IMUDeviceMutex,
nullptr);
31 pthread_mutex_init(&m_EventsQueueMutex,
nullptr);
32 pthread_mutex_init(&m_LastStartTimeStampMutex,
nullptr);
33 pthread_mutex_init(&m_LastStopTimeStampMutex,
nullptr);
34 pthread_mutex_init(&m_LastCycleReferenceTimeStampMutex,
nullptr);
35 pthread_mutex_init(&m_LastFusedCycleReferenceTimeStampMutex,
nullptr);
36 pthread_mutex_init(&m_LastIntegratedStateReferenceTimeStampMutex,
nullptr);
37 pthread_mutex_init(&m_LastCustomEventReferenceTimeStampMutex,
nullptr);
41 m_DispatchingMode(eCoupled),
42 m_MaximalPendingEvents(2),
44 m_pIMUDevice(nullptr),
48 m_LastCycleReferenceTimeStamp(
CTimeStamp::s_Zero),
49 m_LastFusedCycleReferenceTimeStamp(
CTimeStamp::s_Zero),
50 m_LastIntegratedStateReferenceTimeStamp(
CTimeStamp::s_Zero),
51 m_LastCustomEventReferenceTimeStamp(
CTimeStamp::s_Zero)
53 pthread_mutex_init(&m_DispatchingModeMutex,
nullptr);
54 pthread_mutex_init(&m_MaximalPendingEventsMutex,
nullptr);
55 pthread_mutex_init(&m_EventFlagsMutex,
nullptr);
56 pthread_mutex_init(&m_IMUDeviceMutex,
nullptr);
57 pthread_mutex_init(&m_EventsQueueMutex,
nullptr);
58 pthread_mutex_init(&m_LastStartTimeStampMutex,
nullptr);
59 pthread_mutex_init(&m_LastStopTimeStampMutex,
nullptr);
60 pthread_mutex_init(&m_LastCycleReferenceTimeStampMutex,
nullptr);
61 pthread_mutex_init(&m_LastFusedCycleReferenceTimeStampMutex,
nullptr);
62 pthread_mutex_init(&m_LastIntegratedStateReferenceTimeStampMutex,
nullptr);
63 pthread_mutex_init(&m_LastCustomEventReferenceTimeStampMutex,
nullptr);
78 m_pIMUDevice = pIMUDevice;
86 const uint32_t EventFlagsCurrentState = m_EventFlags;
88 return EventFlagsCurrentState;
95 m_DispatchingMode = Mode;
105 return DispatchingModeCurrentState;
111 if ((MaximalPendingEvents > 1) && (MaximalPendingEvents != m_MaximalPendingEvents))
114 m_MaximalPendingEvents = MaximalPendingEvents;
128 const uint32_t MaximalPendingEventsCurrentState = m_MaximalPendingEvents;
130 return MaximalPendingEventsCurrentState;
137 m_EventFlags = Enabled ? (m_EventFlags |
Type) : (m_EventFlags & (~
Type));
145 const uint32_t EventHandlingFlagsCurrentState = m_EventFlags;
147 return EventHandlingFlagsCurrentState;
154 const bool HandelEvent = Event.
GetEventType() & m_EventFlags;
163 if (m_EventsQueue.size() == m_MaximalPendingEvents)
165 m_EventsQueue.pop_front();
168 m_EventsQueue.push_back(Event);
175 gettimeofday(&m_LastCycleReferenceTimeStamp,
nullptr);
181 gettimeofday(&m_LastFusedCycleReferenceTimeStamp,
nullptr);
187 gettimeofday(&m_LastIntegratedStateReferenceTimeStamp,
nullptr);
193 gettimeofday(&m_LastCustomEventReferenceTimeStamp,
nullptr);
199 gettimeofday(&m_LastStartTimeStamp,
nullptr);
205 gettimeofday(&m_LastStopTimeStamp,
nullptr);
222 if (m_EventsQueue.size())
225 m_EventsQueue.pop_front();
240 m_LastStartTimeStamp = Reference;
244 m_LastStopTimeStamp = Reference;
248 m_LastCycleReferenceTimeStamp = Reference;
252 m_LastFusedCycleReferenceTimeStamp = Reference;
256 m_LastIntegratedStateReferenceTimeStamp = Reference;
260 m_LastCustomEventReferenceTimeStamp = Reference;
268 timeval TimeStampCurrentState = m_LastStartTimeStamp;
270 return TimeStampCurrentState;
277 timeval TimeStampCurrentState = m_LastStopTimeStamp;
279 return TimeStampCurrentState;
286 timeval TimeStampCurrentState = m_LastCycleReferenceTimeStamp;
288 return TimeStampCurrentState;
295 timeval TimeStampCurrentState = m_LastFusedCycleReferenceTimeStamp;
297 return TimeStampCurrentState;
304 timeval TimeStampCurrentState = m_LastIntegratedStateReferenceTimeStamp;
306 return TimeStampCurrentState;
313 timeval TimeStampCurrentState = m_LastCustomEventReferenceTimeStamp;
315 return TimeStampCurrentState;
319 IIMUEventDispatcher::PurgeEvents()
323 if (m_EventsQueue.size() >= m_MaximalPendingEvents)
325 const uint32_t TotalEventsToRemove =
326 (uint32_t(m_EventsQueue.size()) - m_MaximalPendingEvents) + 1;
328 for (uint32_t i = 0; i < TotalEventsToRemove; ++i)
330 m_EventsQueue.pop_front();