/// <summary>
        /// Takes all necessary steps to close _serialGPSDevice.
        /// </summary>
        private async void CloseAndDisposeSerialGPS()
        {
            try
            {
                await _serialGPSDevice.CloseAsync();

                _serialGPSDevice.SerialDevice.Dispose();
                //_serialGPSDevice = null;
            }
            catch (Exception ex)
            {
                //If the SerialDevice.Dispose() throws an error, it is ignored
            }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            SerialPort       serialDev;
            SerialPortDevice gps;

            // serial configs
            serialDev          = new SerialPort();
            serialDev.PortName = Environment.GetEnvironmentVariable("GPS_SERIAL_PORT");
            serialDev.BaudRate = 9600;
            gps = new SerialPortDevice(serialDev);

            // set listener
            gps.MessageReceived += OnNmeaMessageReceived;
            gps.OpenAsync();

            // on ctrl+c close connection
            Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) =>
            {
                gps.CloseAsync();
            };

            // wait for gps inputs
            Thread.Sleep(Timeout.Infinite);
        }
Esempio n. 3
0
        private static void Main()
        {
            ConcurrentStack <string> stack = new ConcurrentStack <string>();

            GetPorts().ForEach(Console.WriteLine);


            var portName = "COM4";
            var baudRate = 9600;

            #region Read Gps

            using var serialPort    = new SerialPort(portName, baudRate);
            using var device        = new SerialPortDevice(serialPort);
            device.MessageReceived += (sender, e) =>
            {
                switch (e.Message.MessageType)
                {
                case "GPGLL":
                    if (e.Message is Gll gll)
                    {
                        //Console.WriteLine(gll.ToString());
                        stack.Push(gll.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                case "GPRMC":
                    if (e.Message is Rmc rmc)
                    {
                        //Console.WriteLine(rmc.ToString());
                        stack.Push(rmc.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                case "GPVTG":
                    if (e.Message is Vtg vtg)
                    {
                        //Console.WriteLine(vtg.ToString());
                        stack.Push(vtg.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                case "GPGGA":
                    if (e.Message is Gga gga)
                    {
                        //Console.WriteLine(gga.ToString());
                        stack.Push(gga.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                case "GPGSA":
                    if (e.Message is Gsa gsa)
                    {
                        //Console.WriteLine(gsa.ToString());
                        stack.Push(gsa.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                case "GPGSV":
                    if (e.Message is Gsv gsv)
                    {
                        //Console.WriteLine(gsv.ToString());
                        stack.Push(gsv.ToString());
                    }
                    else
                    {
                        Debugger.Break();
                    }
                    return;

                default:
                    var type = e.Message.MessageType;
                    Console.WriteLine($"Type of : {type}");
                    return;
                }
            };
            var task = device.OpenAsync();
            Console.WriteLine("Running");


            #endregion

            #region Console Write Task

            var cts         = new CancellationTokenSource();
            var consoleTask = Task.Factory.StartNew(() => ConsoleWriter(cts.Token, stack));
            #endregion

            // Shutdown
            Console.WriteLine("press to exit");
            Console.ReadKey();
            device.CloseAsync();
            cts.Cancel();
            consoleTask.Wait();
            Console.WriteLine("alles ende");
        }