public static async Task <BcSerialPort> CreateByBcIdAsync(string bcId) { var allPorts = await GetBcSerialPortsAsync(); BcSerialPort port = allPorts.FirstOrDefault(p => p.Info?.ID == bcId); return(port); }
public BcSerialPortDetail(BcSerialPort parent) { System.Diagnostics.Debug.Assert(parent != null); _parent = parent; var aqs = SerialDevice.GetDeviceSelector(_parent.Com); var task = DeviceInformation.FindAllAsync(aqs); while (task.Status != Windows.Foundation.AsyncStatus.Completed) { Task.Delay(1); } var devices = task.GetResults(); var di = devices.FirstOrDefault(d => d.IsEnabled); if (di is null) { di = devices.FirstOrDefault(); } // no device? _info = di; if (di?.Properties != null) { const string PROP_DEVICEID = "System.Devices.DeviceInstanceId"; if (di.Properties.ContainsKey(PROP_DEVICEID)) { DeviceID = di.Properties[PROP_DEVICEID] as string; } } //if (BcDeviceType.Dongle.IsTypeByID(_info?.Id)) //{ // // check device using FTDI wrapper // FTDI ftdi = new FTDI(); // uint deviceCount = 0; // FTDI.FT_STATUS status = ftdi.GetNumberOfDevices(ref deviceCount); // Get the number of FTDI devices connected to the computer. // if (status == FTDI.FT_STATUS.FT_OK && deviceCount>0) // { // FTDI.FT_DEVICE_INFO_NODE[] deviceList = new FTDI.FT_DEVICE_INFO_NODE[deviceCount]; // Allocate a storage array for a device info list. // status = ftdi.GetDeviceList(deviceList); // var port = deviceList.FirstOrDefault(); // string c; // ftdi.GetCOMPort(out c); // ftdi.OpenByLocation(port.LocId); // ftdi.GetCOMPort(out c); // } //} }
public static async Task <BcSerialPort[]> GetBcSerialPortsAsync() { string[] comPorts = SerialPort.GetPortNames(); List <BcSerialPort> clowns = new List <BcSerialPort>(); foreach (var com in comPorts) { BcSerialPort port = await CreateAsync(com); if (port != null) { clowns.Add(port); } } return(clowns.ToArray()); }
public static BcEventMessage CreateFromMessage(MqttMessage message, BcSerialPort gateway = null) { if (string.IsNullOrEmpty(message?.Topic)) { return(null); } if (message.Topic.StartsWith("/")) { return(null); } var parts = message.Topic.Split('/'); BcEventMessage bc = new BcEventMessage(); bc.GatewayId = gateway?.Info?.ID; if (parts.Length > 0) { bc.NodeId = parts[0]; } if (parts.Length > 1) { bc.SensorName = parts[1]; } if (parts.Length > 2) { bc.SensorAddress = parts[2]; } if (parts.Length > 3) { bc.EventName = parts[3]; } bc.Value = message.Payload; return(bc); }
public static async Task <BcSerialPort> CreateAsync(string portName) { BcSerialPort port = null; string selector = SerialDevice.GetDeviceSelector(portName); var task = DeviceInformation.FindAllAsync(selector); while (task.Status == Windows.Foundation.AsyncStatus.Started) { await Task.Delay(20); } var devices = task.GetResults(); if (devices.Any(d => d.IsEnabled && (d.Id.Contains(BcDeviceType.Core.ID)))) { port = new BcSerialPort(portName, BcDeviceType.Core); } else if (devices.Any(d => d.IsEnabled && d.Id.Contains(BcDeviceType.Dongle.ID))) { port = new BcSerialPort(portName, BcDeviceType.Dongle); } return(port); }