using DeviceService.Core; using DeviceService.Driver; using DeviceService.Entity; using System.Windows.Interop; namespace DeviceService.Device { [DeviceDesc("CAN")] public class CanDevice : NotifyBase, IDevice { private long _id; public long Id { get => _id; set { SetProperty(ref _id, value); } } private string _deviceId; public string DeviceId { get => _deviceId; set { SetProperty(ref _deviceId, value); } } private string _type = "CAN"; public string Type { get => _type; private set { SetProperty(ref _type, value); } } private string _brand; public string Brand { get => _brand; set { SetProperty(ref _brand, value); } } private string _connectStr; public string ConnectStr { get => _connectStr; set { SetProperty(ref _connectStr, value); } } private DeviceStatus _status; public DeviceStatus Status { get => _status; set { SetProperty(ref _status, value); } } private AccessType _accessType; public AccessType AccessType { get => _accessType; set { SetProperty(ref _accessType, value); } } private ICanDriver driver; public bool Init(out string msg) { msg = string.Empty; try { driver = DriverManager.Instance.CreateDriverByTypeAndBrand(Type, Brand); return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Open(out string msg) { if (driver == null) { msg = "设备尚未初始化或初始化失败。"; return false; } var res = driver.Open(out msg); if (res) { Status = DeviceStatus.Busy; } return res; } public bool Close(out string msg) { if (driver == null) { msg = "设备尚未初始化或初始化失败。"; return false; } var res = driver.Close(out msg); if (res) { Status = DeviceStatus.Idle; } return res; } public ResponseData HandleRequest(RequestData req) { try { if (req.DeviceId != DeviceId) { return new ResponseData { Success = false, Message = "设备ID不匹配" }; } if (string.Equals("open", req.Opt, StringComparison.OrdinalIgnoreCase)) { if (driver.Open(out string msg)) { return new ResponseData { Success = true, Message = msg }; } else { return new ResponseData { Success = false, Message = msg }; } } return new ResponseData { Success = false, Message = "无效的操作" }; } catch (Exception ex) { return new ResponseData { Success = false, Message = ex.Message }; } } } }