MonitorManager.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // MonitorManager.h - 端口/回调/句柄统一管理
  2. // 职责:协调 DriverClient 与 EventLoop,提供 7 个导出函数的底层实现
  3. #pragma once
  4. #include "pch.h"
  5. #include "DriverClient.h"
  6. #include "EventLoop.h"
  7. #include "../common/CommKitIoctl.h"
  8. namespace commkit {
  9. class MonitorManager {
  10. public:
  11. MonitorManager();
  12. ~MonitorManager();
  13. MonitorManager(const MonitorManager&) = delete;
  14. MonitorManager& operator=(const MonitorManager&) = delete;
  15. // ====== 对应 7 个导出函数的底层实现 ======
  16. // InitMonitor:校验 key、安装/检查驱动、打开设备、注册回调、启动事件循环
  17. bool InitMonitor(const std::wstring& key, TOnData callback);
  18. // Monitor:绑定指定串口
  19. bool MonitorPort(DWORD com_number);
  20. // Stop:解绑指定串口
  21. bool StopPort(DWORD com_number);
  22. // SetWrite_Data:向指定串口写数据
  23. bool WriteData(DWORD com_number, const char* buffer, int len);
  24. // SetRead_Data:从指定串口发起异步读请求
  25. bool ReadData(DWORD com_number, const char* buffer, int len);
  26. // FreeMonitor:解绑所有端口、停止事件循环、关闭驱动
  27. void FreeAll();
  28. // get_LastErrror:返回当前线程错误码
  29. int GetLastError() const;
  30. private:
  31. // 检查/安装驱动服务(管理员权限)
  32. // 返回值:true=已就绪;false=失败(错误码已设置)
  33. bool EnsureDriverReady();
  34. // 检查当前进程是否以管理员权限运行
  35. bool IsElevated() const;
  36. // 设置错误码(thread_local)
  37. void SetLastError(int code) const;
  38. // 状态
  39. bool initialized_ = false;
  40. std::wstring key_;
  41. TOnData callback_ = nullptr;
  42. DriverClient driver_client_;
  43. EventLoop event_loop_;
  44. std::set<DWORD> attached_ports_;
  45. mutable std::mutex mutex_;
  46. std::atomic<int> sequence_{0};
  47. };
  48. // 全局单例访问(导出函数使用)
  49. MonitorManager& GetMonitorManager();
  50. } // namespace commkit