SATDevices.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #ifndef __SAT_QUERIER__
  2. #define __SAT_QUERIER__
  3. #pragma once
  4. #include "CritSection.h"
  5. #include "SATProtocol.h"
  6. namespace SATDEV{
  7. // 设备类型;
  8. enum DEVICE_TYPE{
  9. Virtual,
  10. Usb,
  11. Reticle
  12. };
  13. // 设备状态;
  14. enum DEVICE_STATUS{
  15. Online,
  16. Offline,
  17. Dropline,
  18. Unauthorized
  19. };
  20. // 设备使用状态;
  21. enum DEVICE_USAGE_STATUS{
  22. Idle,
  23. InUse
  24. };
  25. // 设备信息;
  26. typedef struct __DEVICE__ {
  27. int nType; // 0=虚拟, 1=usb, 2=网线;
  28. std::string strName; // 设备名称(IP:端口号);
  29. // 离线时刻:超过指定时长删除该设备,线程实时刷新离线时刻;
  30. ULONGLONG ulOfflineTime;
  31. int nStatus; // 设备状态:0=在线,1=offline, 2=掉线(drop line);
  32. int nUsageState; // 设备使用状态:0=空闲,1=使用;
  33. }STDevice, *pSTDevice;
  34. // 安卓设备adb连接:USB连接、网线连接;
  35. typedef struct __DEVICE_INFO__ {
  36. STDevice dev;
  37. //////////////////////////////////////////////////////////////////////////
  38. // 附加项;
  39. int nStatus; // 设备状态:0表示空闲,1表示繁忙;
  40. std::string strSoftVersion; // 软件版本;
  41. std::string strModel; // 软件模型;
  42. std::string strHardVersion; // 硬件版本;
  43. std::string strManu; // 软件菜单;
  44. }STDeviceInfo, *pSTDeviceInfo;
  45. }
  46. class CSATDevices
  47. {
  48. CSATDevices(void);
  49. public:
  50. // 单例对象模式;
  51. static CSATDevices* GetInstance()
  52. {
  53. static CSATDevices* pInstance = NULL;
  54. if ( pInstance == NULL )
  55. {
  56. pInstance = new CSATDevices;
  57. }
  58. return pInstance;
  59. }
  60. ~CSATDevices(void);
  61. protected:
  62. // 线程控制句柄;
  63. HANDLE m_hEvent;
  64. // 线程句柄;
  65. HANDLE m_hWorkThread;
  66. // 是否启动安卓设备;
  67. static bool s_bEnableAndroid;
  68. // 离线擦除时长,单位毫秒;
  69. static ULONGLONG s_ulEraseDuration;
  70. // 线程锁;
  71. static ThreadSection s_ThreadSection;
  72. // 安卓设备列表;
  73. static std::vector<SATDEV::STDevice> s_vtDevices;
  74. // 自动添加adb线程是否结束;
  75. static bool s_bAutoAddAdbThreadFinished;
  76. // 其他接口;
  77. public:
  78. // 工作开始函数;
  79. void StartWork();
  80. // 工作结束函数;
  81. void EndofWork();
  82. // 工作线程;
  83. static DWORD WINAPI WorkThread(LPVOID lpVoid);
  84. const std::vector<SATDEV::STDevice>& GetDeviceList() const {return s_vtDevices;};
  85. // 删除设备;
  86. static void DelDevices(std::string name);
  87. // 添加网线连接设备;
  88. static void AddReticleDevices(std::string ip);
  89. static void AddVirtualDevices(std::string name);
  90. // 设备是否存在;
  91. static bool IsDeviceExist(SATDEV::STDevice &stDevice);
  92. // 设备是否下线;
  93. static bool IsDevicesOffline(SATDEV::STDevice &stDevice, std::vector<SATDEV::STDevice> &vtDevices);
  94. // 是否新设备;
  95. static bool IsNewDevices(SATDEV::STDevice &stDevice);
  96. // 获取当前设备列表;
  97. static void GetCurrentDevices(std::vector<SATDEV::STDevice> &vtDevices);
  98. // 重连所有设备;
  99. static void ReConnectAllDevices();
  100. // 设置设备使用状态;
  101. static void SetDeviceUsageStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
  102. // 附加设备名到缓存中;
  103. static int AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[SATPROTO::MAX_DEVS]);
  104. // 保存设备状态到配置文件中;
  105. static void SaveDeviceStatus2Config(SATDEV::STDevice &stDevice);
  106. static void SaveAllDevicesStatus2Config();
  107. // 异步连接adb设备;
  108. static SOCKET ConnectAdbDevice(std::string ip, int port);
  109. // 检测adb 套接字是否连接;
  110. static bool CheckAdbSocket(SOCKET sock);
  111. // 关闭socket;
  112. static void CloseAdbSocket(SOCKET sock);
  113. // 自动检测adb并添加;
  114. static DWORD WINAPI AddAdbThread(LPVOID lpVoid);
  115. };
  116. #endif // __SAT_QUERIER__