xbmc
Peripheral.h
1 /*
2  * Copyright (C) 2005-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 "games/controllers/ControllerTypes.h"
12 #include "input/joysticks/interfaces/IInputProvider.h"
13 #include "input/keyboard/interfaces/IKeyboardInputProvider.h"
14 #include "input/mouse/interfaces/IMouseInputProvider.h"
15 #include "peripherals/PeripheralTypes.h"
16 
17 #include <map>
18 #include <set>
19 #include <string>
20 #include <vector>
21 
22 class CDateTime;
23 class CSetting;
24 class IKeymap;
25 
26 namespace KODI
27 {
28 namespace JOYSTICK
29 {
30 class IButtonMapper;
31 class IDriverHandler;
32 class IDriverReceiver;
33 class IInputHandler;
34 } // namespace JOYSTICK
35 
36 namespace KEYBOARD
37 {
38 class IKeyboardDriverHandler;
39 }
40 
41 namespace MOUSE
42 {
43 class IMouseDriverHandler;
44 }
45 } // namespace KODI
46 
47 namespace PERIPHERALS
48 {
49 class CAddonButtonMapping;
50 class CGUIDialogPeripheralSettings;
51 class CPeripheralBus;
52 class CPeripherals;
53 
54 typedef enum
55 {
56  STATE_SWITCH_TOGGLE,
57  STATE_ACTIVATE_SOURCE,
58  STATE_STANDBY
59 } CecStateChange;
60 
64 {
65  friend class CGUIDialogPeripheralSettings;
66 
67 public:
68  CPeripheral(CPeripherals& manager, const PeripheralScanResult& scanResult, CPeripheralBus* bus);
69  ~CPeripheral(void) override;
70 
71  bool operator==(const CPeripheral& right) const;
72  bool operator!=(const CPeripheral& right) const;
73  bool operator==(const PeripheralScanResult& right) const;
74  bool operator!=(const PeripheralScanResult& right) const;
75 
76  const std::string& FileLocation(void) const { return m_strFileLocation; }
77  const std::string& Location(void) const { return m_strLocation; }
78  int VendorId(void) const { return m_iVendorId; }
79  const char* VendorIdAsString(void) const { return m_strVendorId.c_str(); }
80  int ProductId(void) const { return m_iProductId; }
81  const char* ProductIdAsString(void) const { return m_strProductId.c_str(); }
82  PeripheralType Type(void) const { return m_type; }
83  PeripheralBusType GetBusType(void) const { return m_busType; }
84  const std::string& DeviceName(void) const { return m_strDeviceName; }
85  bool IsHidden(void) const { return m_bHidden; }
86  void SetHidden(bool bSetTo = true) { m_bHidden = bSetTo; }
87  const std::string& GetVersionInfo(void) const { return m_strVersionInfo; }
88 
93  virtual std::string GetIcon() const;
94 
100  bool HasFeature(const PeripheralFeature feature) const;
101 
106  void GetFeatures(std::vector<PeripheralFeature>& features) const;
107 
112  bool Initialise(void);
113 
119  virtual bool InitialiseFeature(const PeripheralFeature feature) { return true; }
120 
124  virtual void OnUserNotification() {}
125 
131  virtual bool TestFeature(PeripheralFeature feature) { return false; }
132 
137  virtual void OnSettingChanged(const std::string& strChangedSetting) {}
138 
142  virtual void OnDeviceRemoved(void) {}
143 
148  virtual void GetSubdevices(PeripheralVector& subDevices) const;
149 
153  virtual bool IsMultiFunctional(void) const;
154 
161  virtual void AddSetting(const std::string& strKey,
162  const std::shared_ptr<const CSetting>& setting,
163  int order);
164 
170  virtual bool HasSetting(const std::string& strKey) const;
171 
175  virtual bool HasSettings(void) const;
176 
180  virtual bool HasConfigurableSettings(void) const;
181 
187  virtual const std::string GetSettingString(const std::string& strKey) const;
188  virtual bool SetSetting(const std::string& strKey, const std::string& strValue);
189  virtual void SetSettingVisible(const std::string& strKey, bool bSetTo);
190  virtual bool IsSettingVisible(const std::string& strKey) const;
191 
192  virtual int GetSettingInt(const std::string& strKey) const;
193  virtual bool SetSetting(const std::string& strKey, int iValue);
194 
195  virtual bool GetSettingBool(const std::string& strKey) const;
196  virtual bool SetSetting(const std::string& strKey, bool bValue);
197 
198  virtual float GetSettingFloat(const std::string& strKey) const;
199  virtual bool SetSetting(const std::string& strKey, float fValue);
200 
201  virtual void PersistSettings(bool bExiting = false);
202  virtual void LoadPersistedSettings(void);
203  virtual void ResetDefaultSettings(void);
204 
205  virtual std::vector<std::shared_ptr<CSetting>> GetSettings(void) const;
206 
207  virtual bool ErrorOccured(void) const { return m_bError; }
208 
209  virtual void RegisterJoystickDriverHandler(KODI::JOYSTICK::IDriverHandler* handler,
210  bool bPromiscuous)
211  {
212  }
213  virtual void UnregisterJoystickDriverHandler(KODI::JOYSTICK::IDriverHandler* handler) {}
214 
215  virtual void RegisterKeyboardDriverHandler(KODI::KEYBOARD::IKeyboardDriverHandler* handler,
216  bool bPromiscuous)
217  {
218  }
219  virtual void UnregisterKeyboardDriverHandler(KODI::KEYBOARD::IKeyboardDriverHandler* handler) {}
220 
221  virtual void RegisterMouseDriverHandler(KODI::MOUSE::IMouseDriverHandler* handler,
222  bool bPromiscuous)
223  {
224  }
225  virtual void UnregisterMouseDriverHandler(KODI::MOUSE::IMouseDriverHandler* handler) {}
226 
227  // implementation of IInputProvider
228  void RegisterInputHandler(KODI::JOYSTICK::IInputHandler* handler, bool bPromiscuous) override;
229  void UnregisterInputHandler(KODI::JOYSTICK::IInputHandler* handler) override;
230 
231  // implementation of IKeyboardInputProvider
232  void RegisterKeyboardHandler(KODI::KEYBOARD::IKeyboardInputHandler* handler,
233  bool bPromiscuous) override;
234  void UnregisterKeyboardHandler(KODI::KEYBOARD::IKeyboardInputHandler* handler) override;
235 
236  // implementation of IMouseInputProvider
237  void RegisterMouseHandler(KODI::MOUSE::IMouseInputHandler* handler, bool bPromiscuous) override;
238  void UnregisterMouseHandler(KODI::MOUSE::IMouseInputHandler* handler) override;
239 
240  virtual void RegisterJoystickButtonMapper(KODI::JOYSTICK::IButtonMapper* mapper);
241  virtual void UnregisterJoystickButtonMapper(KODI::JOYSTICK::IButtonMapper* mapper);
242 
243  virtual KODI::JOYSTICK::IDriverReceiver* GetDriverReceiver() { return nullptr; }
244 
245  virtual IKeymap* GetKeymap(const std::string& controllerId) { return nullptr; }
246 
252  virtual CDateTime LastActive();
253 
259  virtual KODI::GAME::ControllerPtr ControllerProfile() const { return m_controllerProfile; }
260 
266  virtual void SetControllerProfile(const KODI::GAME::ControllerPtr& controller)
267  {
268  m_controllerProfile = controller;
269  }
270 
271 protected:
272  virtual void ClearSettings(void);
273 
274  CPeripherals& m_manager;
275  PeripheralType m_type;
276  PeripheralBusType m_busType;
277  PeripheralBusType m_mappedBusType;
278  std::string m_strLocation;
279  std::string m_strDeviceName;
280  std::string m_strSettingsFile;
281  std::string m_strFileLocation;
282  int m_iVendorId;
283  std::string m_strVendorId;
284  int m_iProductId;
285  std::string m_strProductId;
286  std::string m_strVersionInfo;
287  bool m_bInitialised = false;
288  bool m_bHidden = false;
289  bool m_bError = false;
290  std::vector<PeripheralFeature> m_features;
291  PeripheralVector m_subDevices;
292  std::map<std::string, PeripheralDeviceSetting> m_settings;
293  std::set<std::string> m_changedSettings;
294  CPeripheralBus* m_bus;
295  std::map<KODI::JOYSTICK::IInputHandler*, std::unique_ptr<KODI::JOYSTICK::IDriverHandler>>
296  m_inputHandlers;
298  std::unique_ptr<KODI::KEYBOARD::IKeyboardDriverHandler>>
299  m_keyboardHandlers;
300  std::map<KODI::MOUSE::IMouseInputHandler*, std::unique_ptr<KODI::MOUSE::IMouseDriverHandler>>
301  m_mouseHandlers;
302  std::map<KODI::JOYSTICK::IButtonMapper*, std::unique_ptr<CAddonButtonMapping>> m_buttonMappers;
303  KODI::GAME::ControllerPtr m_controllerProfile;
304 };
305 } // namespace PERIPHERALS
Interface for classes that can map buttons to Kodi actions.
Definition: IButtonMapper.h:19
Definition: PeripheralTypes.h:318
Definition: IInputHandler.h:16
Interface for classes that can provide mouse input.
Definition: IMouseInputProvider.h:21
Interface for classes that can provide input.
Definition: IInputProvider.h:21
Definition: RetroPlayerInput.h:15
virtual void OnUserNotification()
Briefly activate a feature to notify the user.
Definition: Peripheral.h:124
Definition: GUIDialogPeripheralSettings.h:19
Interface defining methods to handle joystick events for raw driver elements (buttons, hats, axes)
Definition: IDriverHandler.h:21
Interface for mapping buttons to Kodi actions.
Definition: IKeymap.h:22
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
Interface for handling input events for keyboards.
Definition: IKeyboardInputHandler.h:27
virtual KODI::GAME::ControllerPtr ControllerProfile() const
Get the controller profile that best represents this peripheral.
Definition: Peripheral.h:259
virtual void SetControllerProfile(const KODI::GAME::ControllerPtr &controller)
Set the controller profile for this peripheral.
Definition: Peripheral.h:266
Definition: AudioDecoder.h:18
Interface for classes that can provide keyboard input.
Definition: IKeyboardInputProvider.h:21
std::shared_ptr< CController > ControllerPtr
Smart pointer to a game controller (CController)
Definition: ControllerTypes.h:25
Interface for handling mouse events.
Definition: IMouseInputHandler.h:23
virtual bool InitialiseFeature(const PeripheralFeature feature)
Initialise one of the features of this peripheral.
Definition: Peripheral.h:119
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
Interface for handling input events for game controllers.
Definition: IInputHandler.h:25
Definition: PeripheralBus.h:34
Interface for handling mouse driver events.
Definition: IMouseDriverHandler.h:21
virtual bool TestFeature(PeripheralFeature feature)
Briefly test one of the features of this peripheral.
Definition: Peripheral.h:131
virtual void OnSettingChanged(const std::string &strChangedSetting)
Called when a setting changed.
Definition: Peripheral.h:137
Button mapper interface to assign the driver&#39;s raw button/hat/axis elements to physical joystick feat...
Definition: IButtonMapper.h:33
Interface for handling keyboard events.
Definition: IKeyboardDriverHandler.h:21
Definition: Peripheral.h:61
Interface for sending input events to joystick drivers.
Definition: IDriverReceiver.h:19
Definition: Peripherals.h:53
virtual void OnDeviceRemoved(void)
Called when this device is removed, before calling the destructor.
Definition: Peripheral.h:142