xbmc
EventScanner.h
1 /*
2  * Copyright (C) 2016-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "EventLockHandle.h"
12 #include "EventPollHandle.h"
13 #include "PeripheralTypes.h"
14 #include "threads/CriticalSection.h"
15 #include "threads/Event.h"
16 #include "threads/Thread.h"
17 
18 #include <chrono>
19 #include <set>
20 
21 namespace PERIPHERALS
22 {
23 class IEventScannerCallback;
24 
32 {
33 public:
34  explicit CEventScanner(IEventScannerCallback& callback);
35 
36  ~CEventScanner() override = default;
37 
38  void Start();
39  void Stop();
40 
41  EventPollHandlePtr RegisterPollHandle();
42 
46  EventLockHandlePtr RegisterLock();
47 
48  // implementation of IEventPollCallback
49  void Activate(CEventPollHandle& handle) override;
50  void Deactivate(CEventPollHandle& handle) override;
51  void HandleEvents(bool bWait) override;
52  void Release(CEventPollHandle& handle) override;
53 
54  // implementation of IEventLockCallback
55  void ReleaseLock(CEventLockHandle& handle) override;
56 
57 protected:
58  // implementation of CThread
59  void Process() override;
60 
61 private:
62  std::chrono::milliseconds GetScanIntervalMs() const;
63 
64  // Construction parameters
65  IEventScannerCallback& m_callback;
66 
67  // Event parameters
68  std::set<void*> m_activeHandles;
69  std::set<void*> m_activeLocks;
70  CEvent m_scanEvent;
71  CEvent m_scanFinishedEvent;
72  mutable CCriticalSection m_handleMutex;
73  CCriticalSection m_lockMutex;
74  CCriticalSection m_pollMutex; // Prevent two poll handles from polling at once
75 };
76 } // namespace PERIPHERALS
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: Thread.h:44
Definition: RetroPlayerInput.h:15
Class to scan for peripheral events.
Definition: EventScanner.h:31
Handle returned by the event scanner to control scan timing.
Definition: EventPollHandle.h:35
Callback implemented by event scanner.
Definition: EventPollHandle.h:18
Handle returned by the event scanner to disable event processing.
Definition: EventLockHandle.h:31
EventLockHandlePtr RegisterLock()
Acquire a lock that prevents event processing while held.
Definition: EventScanner.cpp:103
Definition: IEventScannerCallback.h:13
Callback implemented by event scanner.
Definition: EventLockHandle.h:18