HubCtlManager.h
1 #pragma once
2 
3 #include <mutex>
4 #include <string>
5 #include <vector>
6 #include "dpyError.h"
7 
8 namespace dpyHubCtrl {
9 
11 enum portAction
12 {
13  POWER_KEEP = -1,
14  POWER_OFF = 0,
15  POWER_ON = 1,
16  POWER_CYCLE = 2
17 };
18 
20 enum portStatus
21 {
22  ERROR = -1,
23  OFF = 0,
24  POWER = 1,
25 };
26 
28 struct deviceInfo
29 {
30  std::string vendor;
31  std::string product;
32  std::string serial;
33  std::string description;
34 };
35 
38 {
39  portStatus status;
41 };
42 
44 struct hubInfo
45 {
46  int bcd_usb;
47  int nports;
48  int ppps;
49  int actionable;
50  std::string container_id;
51  std::string vendor;
52  std::string location;
53  int level;
55  std::vector<hubPortDeviceInfo> portsInfo;
56 };
57 
58 }
65 {
66 private:
67 
72 
73  std::mutex mMux;
74  int hub_count = 0;
75  int getPortStatus(struct hub_info * hub, int portmask, std::vector<dpyHubCtrl::hubPortDeviceInfo> & portsInfo);
76 
77 public:
81  virtual ~HubCtrlManager();
82 
83  HubCtrlManager(const HubCtrlManager&) = delete;
84  HubCtrlManager& operator=(const HubCtrlManager &) = delete;
85  HubCtrlManager(HubCtrlManager &&) = delete;
86  HubCtrlManager & operator=(HubCtrlManager &&) = delete;
87 
88  boost::system::error_code changePowerState(std::string hub, int port, dpyHubCtrl::portAction state);
89  int findHubs(std::vector<dpyHubCtrl::hubInfo> & hub_info);
90 
95  static auto& getInstance()
96  {
97  static HubCtrlManager instance;
98  return instance;
99  }
100 
101 };
@ OFF
Shutdown.
Definition: scmTypes.h:27
Class to control USB Hubs.
Definition: HubCtlManager.h:64
portStatus status
USB status.
Definition: HubCtlManager.h:39
int nports
Number of port in usb.
Definition: HubCtlManager.h:47
int actionable
true if this hub is subject to action
Definition: HubCtlManager.h:49
@ POWER_ON
Power On.
Definition: mcuApi.h:47
USB HUB information.
Definition: HubCtlManager.h:44
std::string vendor
USB port vendor id.
Definition: HubCtlManager.h:30
deviceInfo device_info
USB information about connected device.
Definition: HubCtlManager.h:40
std::string description
USB port description.
Definition: HubCtlManager.h:33
deviceInfo device_info
HUB information.
Definition: HubCtlManager.h:54
USB port information.
Definition: HubCtlManager.h:37
std::string product
USB port product id.
Definition: HubCtlManager.h:31
USB device information.
Definition: HubCtlManager.h:28
std::string container_id
container ID as hex string
Definition: HubCtlManager.h:50
static auto & getInstance()
Definition: HubCtlManager.h:95
@ ERROR
ERROR.
Definition: mcuApi.h:89
int ppps
Per Port Power Switching)
Definition: HubCtlManager.h:48
HubCtrlManager & operator=(const HubCtrlManager &)=delete
Delete assignation constructor.
std::string vendor
Id vendor.
Definition: HubCtlManager.h:51
std::string location
Location in soc.
Definition: HubCtlManager.h:52
int level
Signal level.
Definition: HubCtlManager.h:53
virtual ~HubCtrlManager()
Destructor.
int bcd_usb
USB specification release number in binary-coded decimal. A value of 0x0200 indicates USB 2....
Definition: HubCtlManager.h:46
std::vector< hubPortDeviceInfo > portsInfo
Information about ports.
Definition: HubCtlManager.h:55
std::string serial
USB port serial number.
Definition: HubCtlManager.h:32