Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
        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");
        }
Example #4
0
        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;
            }
        }