public Dictionary <string, int> GetAvailablePortsAndAutoDiscover() { trackers = new Dictionary <string, int>(); foreach (string portName in SerialPortStream.GetPortNames()) { Console.WriteLine("Autodiscover port:"); Console.WriteLine(portName); try { autoDiscoverPort = new SerialPortStream(portName, 115200, 8, Parity.None, StopBits.One) { StopBits = StopBits.One, WriteTimeout = 1000, ReadTimeout = 3000 }; stopWatch = new Stopwatch(); stopWatch.Start(); autoDiscoverPort.DataReceived += SerialPortAutoDiscover; autoDiscoverPort.Open(); autoDiscoverPort.WriteLine(SerialMessageParser.Encode("DISCOVERY")); } catch (UnauthorizedAccessException) { autoDiscoverPort.Close(); } catch (System.IO.IOException) { autoDiscoverPort.Close(); } catch (TimeoutException) { autoDiscoverPort.Close(); } while (autoDiscoverPort.IsOpen) { if (stopWatch.ElapsedMilliseconds >= 3000) { autoDiscoverPort.Close(); } } autoDiscoverPort.Dispose(); } return(trackers); }
public List <PhysicalAddress> Collect() { macList.Clear(); StartSerialConnection(); Serial.WriteLine(SerialMessageParser.Encode("DISCOVERY")); Console.WriteLine("1"); serialState = SerialState.Initialize; while (serialState == SerialState.Initialize) { } System.Threading.Thread.Sleep(1000); Serial.Write(SerialMessageParser.Encode("COLLECT")); Console.WriteLine("2"); serialState = SerialState.Collecting; while (serialState == SerialState.Collecting || serialState == SerialState.Receiving) { } Console.WriteLine("99"); Serial.Close(); Serial.Dispose(); return(macList); }
private void SerialPortAutoDiscover(object sender, SerialDataReceivedEventArgs e) { Console.WriteLine("AutoDiscover readline"); Console.WriteLine(autoDiscoverPort); int nodeid = 0; //TODO try catch serial disconnected/notfound string data = autoDiscoverPort.ReadExisting(); if (SerialMessageParser.Parse(data).StartsWith("NodeMcu")) { data = SerialMessageParser.Parse(data); int.TryParse(SerialMessageParser.GetValue(data), out nodeid); Console.WriteLine(data); } if (nodeid != 0) { Console.WriteLine("NodeMCU found"); autoDiscoverPort.Write(SerialMessageParser.Encode("ACK")); trackers.Add(autoDiscoverPort.PortName, nodeid); autoDiscoverPort.Close(); } Console.WriteLine("yeet"); }
private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) { Console.WriteLine("3"); data = SerialMessageParser.Parse(Serial.ReadExisting()); Console.WriteLine(data); Console.WriteLine(ComPort); Console.WriteLine(serialState); if (data.Contains("HEARTBEAT")) { Serial.Write(SerialMessageParser.Encode("ACK")); data = ""; } switch (serialState) { case SerialState.Idle: break; case SerialState.Initialize: Console.WriteLine("6"); if (data.StartsWith("NodeMcu")) { Console.WriteLine("7"); Serial.Write(SerialMessageParser.Encode("ACK")); Console.WriteLine("Nodemcu ack"); serialState = SerialState.Idle; } else if (data.Contains("HEARTBEAT")) { Console.WriteLine("8"); Serial.Write(SerialMessageParser.Encode("ACK")); Serial.Write(SerialMessageParser.Encode("COLLECT")); serialState = SerialState.Collecting; } break; case SerialState.Collecting: Console.WriteLine("HALLO YEET HIER BEN IK"); Console.WriteLine(data); Console.WriteLine("9"); if (data.StartsWith("DONE:")) { Console.WriteLine("10"); Console.WriteLine("gedont"); Int32.TryParse(SerialMessageParser.GetValue(data), out countMacsForReceive); Serial.Write(SerialMessageParser.Encode("ACK")); Serial.Write(SerialMessageParser.Encode("SEND")); serialState = SerialState.Receiving; } break; case SerialState.Receiving: Console.WriteLine("11"); if (data.Contains("HEARTBEAT")) { Console.WriteLine("12"); Serial.Write(SerialMessageParser.Encode("ACK")); Serial.Write(SerialMessageParser.Encode("SEND")); } Console.WriteLine("Receiving"); if (data == "ACK") { Console.WriteLine("13"); Serial.Write(SerialMessageParser.Encode("ACK")); } if (data.StartsWith("MAC:")) { try { //data = data.Substring(4); //data = data.Replace(':', '-').ToUpper(); macList.Add(PhysicalAddress.Parse(data.Substring(4).Replace(':', '-').ToUpper())); Serial.Write(SerialMessageParser.Encode("ACK")); } catch (FormatException) { Serial.Write(SerialMessageParser.Encode("NACK")); } } else if (data == "FINISH") { //TODO check macList.Count == countMacsForReceive (not in WiFiTracker yet) serialState = SerialState.Idle; } break; default: break; } }