| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // MonitorManager.h - 端口/回调/句柄统一管理
- // 职责:协调 DriverClient 与 EventLoop,提供 7 个导出函数的底层实现
- #pragma once
- #include "pch.h"
- #include "DriverClient.h"
- #include "EventLoop.h"
- #include "../common/CommKitIoctl.h"
- namespace commkit {
- class MonitorManager {
- public:
- MonitorManager();
- ~MonitorManager();
- MonitorManager(const MonitorManager&) = delete;
- MonitorManager& operator=(const MonitorManager&) = delete;
- // ====== 对应 7 个导出函数的底层实现 ======
- // InitMonitor:校验 key、安装/检查驱动、打开设备、注册回调、启动事件循环
- bool InitMonitor(const std::wstring& key, TOnData callback);
- // Monitor:绑定指定串口
- bool MonitorPort(DWORD com_number);
- // Stop:解绑指定串口
- bool StopPort(DWORD com_number);
- // SetWrite_Data:向指定串口写数据
- bool WriteData(DWORD com_number, const char* buffer, int len);
- // SetRead_Data:从指定串口发起异步读请求
- bool ReadData(DWORD com_number, const char* buffer, int len);
- // FreeMonitor:解绑所有端口、停止事件循环、关闭驱动
- void FreeAll();
- // get_LastErrror:返回当前线程错误码
- int GetLastError() const;
- private:
- // 检查/安装驱动服务(管理员权限)
- // 返回值:true=已就绪;false=失败(错误码已设置)
- bool EnsureDriverReady();
- // 检查当前进程是否以管理员权限运行
- bool IsElevated() const;
- // 设置错误码(thread_local)
- void SetLastError(int code) const;
- // 状态
- bool initialized_ = false;
- std::wstring key_;
- TOnData callback_ = nullptr;
- DriverClient driver_client_;
- EventLoop event_loop_;
- std::set<DWORD> attached_ports_;
- mutable std::mutex mutex_;
- std::atomic<int> sequence_{0};
- };
- // 全局单例访问(导出函数使用)
- MonitorManager& GetMonitorManager();
- } // namespace commkit
|