// 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 attached_ports_; mutable std::mutex mutex_; std::atomic sequence_{0}; }; // 全局单例访问(导出函数使用) MonitorManager& GetMonitorManager(); } // namespace commkit