public static CustomSerialPort GetSerialPort(ArduinoTypes SerialType) { FindSerialPorts(); List <CustomSerialPort> WorkingPorts = serialPorts.Where(x => x.PortOpen == false && x.IsMatched == false).ToList(); foreach (var ClosedPort in WorkingPorts) { try { ClosedPort.Open(); ClosedPort.PortOpen = true; } catch (IOException) { } } CustomSerialPort FoundSerialPort = SearchForSerialPorts(SerialType); // Close all opened Serialports WorkingPorts = serialPorts.Where(x => x.PortOpen == false && x.IsMatched == false).ToList(); foreach (var Port in WorkingPorts) { if (Port != FoundSerialPort) { Port.PortOpen = false; Port.Close(); } } return(FoundSerialPort); }
private static CustomSerialPort serialHandler(ArduinoTypes SerialType, CustomSerialPort serialPort) { try { string Data = null; try { Data = serialPort.ReadLine(); //TODO threw an overflow exception on logdata new } catch (InvalidOperationException) { return(null); } Console.WriteLine($"[{serialPort.PortName}] Checking... ({SerialType.ToString()})"); // Console.WriteLine($"DATA: {Data}"); if (SerialType == ArduinoTypes.INS) { if (Data.Contains("AC") || Data.Contains("GY")) { Console.WriteLine($"[{serialPort.PortName}] Matched!"); return(serialPort); } } else if (SerialType == ArduinoTypes.POZYX) { if (Data.Contains("PO")) { Console.WriteLine($"[{serialPort.PortName}] Matched!"); return(serialPort); } } return(null); } catch (TimeoutException) { Console.WriteLine($"[{serialPort.PortName}] Timeout... Skipping"); return(null); } }
private static CustomSerialPort SearchForSerialPorts(ArduinoTypes SerialType) { CustomSerialPort FoundSerialPort = null; while (FoundSerialPort == null) { foreach (var currentSerialPort in serialPorts) { if (FoundSerialPort == null) { CustomSerialPort serialPort = serialHandler(SerialType, currentSerialPort); if (serialPort != null) { FoundSerialPort = serialPort; OpenSerialPorts.Add(FoundSerialPort); } } } } FoundSerialPort.IsMatched = true; return(FoundSerialPort); }