Ejemplo n.º 1
0
        /*
         * import sbp_piksi
         * link.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0mode\0SBP\0')
         *
         * import sbp_piksi
         * self.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0baudrate\0%s\0' % ('1000000'.encode('ascii')))
         *
         * import sbp_piksi
         * self.link.send_message(sbp_piksi.SETTINGS, 'uart_uarta\0sbp_message_mask\0%s\0' % ('65535'.encode('ascii')))
         *
         * import sbp_piksi
         * self.link.send_message(sbp_piksi.RESET, '')
         */

        static void Main(string[] args)
        {
            Console.Clear();

            if (args.Length < 3)
            {
                Console.WriteLine("Piksi v0.1.4.1 beta By Michael Oborne");
                Console.WriteLine("Copyright Michael Oborne 2015");
                Console.WriteLine("Usage: program.exe outputformat source destination");
                Console.WriteLine("outputformat = rtcm, sbp, trimble, rinex");
                Console.WriteLine("rtcm = read sbp from source and output rtcm to destination");
                Console.WriteLine("sbp = read rtcm from source and output sbp to destination");
                Console.WriteLine("trimble = read sbp from source and output trimble rt17 to destination");
                Console.WriteLine("rinex = read sbp from source file and output rinex to destination file (Files only)");
                Console.WriteLine();
                Console.WriteLine("Port 9876 streams all received piksi data to it");
                Console.WriteLine();
                Console.WriteLine("source/destination can be 'COM? 115200' or 'tcp://*****:*****@host/source' or 'tcp://0.0.0.0:989'");

                Console.ReadLine();
                return;
            }

            string outmode = args[0];

            // rinex output
            if (outmode.ToLower() == "rinex")
            {
                using (rinexoutput = new StreamWriter(args[2]))
                {
                    using (rinexoutput2 = new StreamWriter(args[2].Replace(".obs", "") + ".relay.obs"))
                    {
                        string header = @"     3.02           OBSERVATION DATA    M: Mixed            RINEX VERSION / TYPE
                                                            MARKER NAME         
                                                            MARKER NUMBER       
                                                            MARKER TYPE         
                                                            OBSERVER / AGENCY   
                                                            REC # / TYPE / VERS 
                                                            ANT # / TYPE        
        0.0000        0.0000        0.0000                  APPROX POSITION XYZ 
        0.0000        0.0000        0.0000                  ANTENNA: DELTA H/E/N
G    4 C1C L1C D1C S1C                                      SYS / # / OBS TYPES 
G                                                           SYS / PHASE SHIFT   
                                                            END OF HEADER       ";

                        rinexoutput.WriteLine(header);
                        rinexoutput2.WriteLine(header);

                        piksi.ObsMessage += pkrinex_ObsMessage;

                        piksi.consoleoutput = false;

                        DateTime reporttime = DateTime.MinValue;

                        if (args[1].ToLower().EndsWith("json"))
                        {
                            using (StreamReader sr = new StreamReader(new BufferedStream(File.OpenRead(args[1]), 1024 * 1024 * 4)))
                            {
                                long length = sr.BaseStream.Length;

                                while (!sr.EndOfStream)
                                {
                                    double percent = (sr.BaseStream.Position / (double)length) * 100.0;

                                    if (reporttime.Second != DateTime.Now.Second)
                                    {
                                        Console.WriteLine(percent);
                                        reporttime = DateTime.Now;
                                    }

                                    string line = sr.ReadLine();
                                    var    item = JSON.getpacket(line);

                                    piksi.ProcessMessage(item);
                                }
                            }
                        }
                        else
                        {
                            using (BinaryReader br = new BinaryReader(new BufferedStream(File.OpenRead(args[1]), 1024 * 1024 * 4)))
                            {
                                long length = br.BaseStream.Length;

                                while (br.BaseStream.Position < length)
                                {
                                    double percent = (br.BaseStream.Position / (double)length) * 100.0;

                                    if (reporttime.Second != DateTime.Now.Second)
                                    {
                                        Console.WriteLine(percent);
                                        reporttime = DateTime.Now;
                                    }

                                    piksi.read(br.ReadByte());
                                }
                            }
                        }
                    }
                }

                return;
            }

            rawpiksi.Start();
            rawpiksi.BeginAcceptTcpClient(rawpiksiAcceptCallBack, rawpiksi);

            // process other commands
            int    nextarg = 2;
            string port    = args[1];

            // input
            if (port.ToLower().Contains("tcp://0.0.0.0"))
            {
                inputstream = new TCPServer(int.Parse(port.Split(':')[2]));
                nextarg     = 2;
            }
            else if (port.ToLower().Contains("tcp://"))
            {
                inputstream = new TCPClient(port.ToLower().Replace("tcp://", ""), int.Parse(port.Split(':')[2]));
                nextarg     = 2;
            }
            else if (port.ToLower().Contains("ntrip://"))
            {
                inputstream = new NTRIP(port.Replace("ntrip://", ""));

                nextarg = 2;
            }
            else
            {
                int baudrate = int.Parse(args[2]);
                inputstream = new SerialPort(port, baudrate);

                nextarg = 3;
            }

            try
            {
                inputstream.Open();
            }
            catch
            {
                Console.WriteLine("Failed to open input");
                return;
            }

            string portout = args[nextarg];

            // output
            if (portout.ToLower().Contains("tcp://0.0.0.0"))
            {
                deststream = new TCPServer(int.Parse(portout.Split(':')[2]));
                nextarg    = 2;
            }
            else if (portout.ToLower().Contains("tcp://"))
            {
                deststream = new TCPClient(portout.ToLower().Replace("tcp://", ""), int.Parse(portout.Split(':')[2]));
                nextarg++;
            }
            else if (portout.ToLower().Contains("ntrip://"))
            {
                deststream = new NTRIP(portout.Replace("ntrip://", ""));

                nextarg++;
            }
            else
            {
                int baudrate = int.Parse(args[nextarg + 1]);
                deststream = new SerialPort(portout, baudrate);

                nextarg = nextarg + 2;
            }

            System.Threading.Thread th = new System.Threading.Thread(UI);
            //th.Start();

            try
            {
                deststream.Open();
            }
            catch
            {
                Console.WriteLine("Failed to open output");
                return;
            }

            if (outmode.ToLower() == "trimble")
            {
                piksi.ObsMessage += pktrimble_ObsMessage;
                piksi.EphMessage += pktrimble_EphMessage;

                DateTime ephdeadline = DateTime.Now.AddSeconds(12);

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        piksi.read((byte)inputstream.ReadByte());
                    }

                    if (ephdeadline < DateTime.Now)
                    {
                        string[] files = Directory.GetFiles(".", "*.eph");
                        foreach (var ephfile in files)
                        {
                            var info = new FileInfo(ephfile);

                            // check age
                            if (info.LastWriteTime.AddHours(4) < DateTime.Now)
                            {
                                continue;
                            }

                            byte[] ephbytes = File.ReadAllBytes(ephfile);

                            piksi.piksimsg msg = new piksi.piksimsg();

                            msg.payload = ephbytes;

                            pktrimble_EphMessage(msg, null);
                        }

                        ephdeadline = DateTime.Now.AddSeconds(30);
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            // sbp to rtcm
            if (outmode.ToLower() == "rtcm")
            {
                piksi.ObsMessage += pkrtcm_ObsMessage;
                piksi.EphMessage += pkrtcm_EphMessage;

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        piksi.read((byte)inputstream.ReadByte());
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            if (outmode.ToLower() == "sbp")
            {
                rtcm.ObsMessage     += rtcm_ObsMessage;
                rtcm.BasePosMessage += rtcm_BasePosMessage;

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        rtcm.Read((byte)inputstream.ReadByte());
                    }


                    while (deststream.dataToRead)
                    {
                        byte[] buffer = new byte[1024];
                        int    read   = deststream.Read(buffer, 0, buffer.Length);
                        if (rawpiksiclient != null && rawpiksiclient.Connected)
                        {
                            try
                            {
                                rawpiksiclient.Client.Send(buffer, read, SocketFlags.None);
                                //piksi.read((byte)deststream.ReadByte());

                                if (rawpiksiclient.Client.Available > 0)
                                {
                                    read = rawpiksiclient.Client.Receive(buffer, buffer.Length, SocketFlags.None);
                                    deststream.Write(buffer, 0, read);
                                }
                            }
                            catch
                            {
                            }
                        }
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            Console.ReadLine();
        }
Ejemplo n.º 2
0
        /*
import sbp_piksi
link.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0mode\0SBP\0')

import sbp_piksi
self.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0baudrate\0%s\0' % ('1000000'.encode('ascii')))
         
import sbp_piksi
self.link.send_message(sbp_piksi.SETTINGS, 'uart_uarta\0sbp_message_mask\0%s\0' % ('65535'.encode('ascii')))

import sbp_piksi
self.link.send_message(sbp_piksi.RESET, '')
         */

        static void Main(string[] args)
        {
            Console.Clear();

            if (args.Length < 3)
            {
                Console.WriteLine("Piksi v0.1.4.1 beta By Michael Oborne");
                Console.WriteLine("Copyright Michael Oborne 2015");
                Console.WriteLine("Usage: program.exe outputformat source destination");
                Console.WriteLine("outputformat = rtcm, sbp, trimble, rinex");
                Console.WriteLine("rtcm = read sbp from source and output rtcm to destination");
                Console.WriteLine("sbp = read rtcm from source and output sbp to destination");
                Console.WriteLine("trimble = read sbp from source and output trimble rt17 to destination");
                Console.WriteLine("rinex = read sbp from source file and output rinex to destination file (Files only)");
                Console.WriteLine();
                Console.WriteLine("Port 9876 streams all received piksi data to it");
                Console.WriteLine();
                Console.WriteLine("source/destination can be 'COM? 115200' or 'tcp://*****:*****@host/source' or 'tcp://0.0.0.0:989'");
                
                Console.ReadLine();
                return;
            }

            string outmode = args[0];

            // rinex output
            if (outmode.ToLower() == "rinex")
            {
                using (rinexoutput = new StreamWriter(args[2]))
                {
                    using (rinexoutput2 = new StreamWriter(args[2].Replace(".obs","") + ".relay.obs"))
                    {

                        string header = @"     3.02           OBSERVATION DATA    M: Mixed            RINEX VERSION / TYPE
                                                            MARKER NAME         
                                                            MARKER NUMBER       
                                                            MARKER TYPE         
                                                            OBSERVER / AGENCY   
                                                            REC # / TYPE / VERS 
                                                            ANT # / TYPE        
        0.0000        0.0000        0.0000                  APPROX POSITION XYZ 
        0.0000        0.0000        0.0000                  ANTENNA: DELTA H/E/N
G    4 C1C L1C D1C S1C                                      SYS / # / OBS TYPES 
G                                                           SYS / PHASE SHIFT   
                                                            END OF HEADER       ";

                        rinexoutput.WriteLine(header);
                        rinexoutput2.WriteLine(header);

                        piksi.ObsMessage += pkrinex_ObsMessage;

                        piksi.consoleoutput = false;

                        DateTime reporttime = DateTime.MinValue;

                        if (args[1].ToLower().EndsWith("json"))
                        {
                            using (StreamReader sr = new StreamReader(new BufferedStream(File.OpenRead(args[1]), 1024 * 1024 * 4)))
                            {
                                long length = sr.BaseStream.Length;

                                while (!sr.EndOfStream)
                                {
                                    double percent = (sr.BaseStream.Position / (double)length) * 100.0;

                                    if (reporttime.Second != DateTime.Now.Second)
                                    {
                                        Console.WriteLine(percent);
                                        reporttime = DateTime.Now;
                                    }

                                    string line = sr.ReadLine();
                                    var item = JSON.getpacket(line);

                                    piksi.ProcessMessage(item);
                                }
                            }
                        }
                        else
                        {
                            using (BinaryReader br = new BinaryReader(new BufferedStream(File.OpenRead(args[1]), 1024 * 1024 * 4)))
                            {
                                long length = br.BaseStream.Length;

                                while (br.BaseStream.Position < length)
                                {
                                    double percent = (br.BaseStream.Position / (double)length) * 100.0;

                                    if (reporttime.Second != DateTime.Now.Second)
                                    {
                                        Console.WriteLine(percent);
                                        reporttime = DateTime.Now;
                                    }

                                    piksi.read(br.ReadByte());
                                }
                            }
                        }
                    }
                }

                return;
            }

            rawpiksi.Start();
            rawpiksi.BeginAcceptTcpClient(rawpiksiAcceptCallBack, rawpiksi);
            
            // process other commands
            int nextarg = 2;
            string port = args[1];

            // input
            if (port.ToLower().Contains("tcp://0.0.0.0"))
            {
                inputstream = new TCPServer(int.Parse(port.Split(':')[2]));
                nextarg = 2;
            } 
            else if (port.ToLower().Contains("tcp://"))
            {
                inputstream = new TCPClient(port.ToLower().Replace("tcp://",""), int.Parse(port.Split(':')[2]));
                nextarg = 2;
            } 
            else if (port.ToLower().Contains("ntrip://"))
            {
                inputstream = new NTRIP(port.Replace("ntrip://", ""));

                nextarg = 2;
            }
            else
            {
                int baudrate = int.Parse(args[2]);
                inputstream = new SerialPort(port,baudrate);

                nextarg = 3;            
            }

            try
            {
                inputstream.Open();
            }
            catch
            {
                Console.WriteLine("Failed to open input");
                return;
            }

            string portout = args[nextarg];
            // output
            if (portout.ToLower().Contains("tcp://0.0.0.0"))
            {
                deststream = new TCPServer(int.Parse(portout.Split(':')[2]));
                nextarg = 2;
            }
            else if (portout.ToLower().Contains("tcp://"))
            {
                deststream = new TCPClient(portout.ToLower().Replace("tcp://", ""), int.Parse(portout.Split(':')[2]));
                nextarg++;
            }
            else if (portout.ToLower().Contains("ntrip://"))
            {
                deststream = new NTRIP(portout.Replace("ntrip://", ""));

                nextarg++;
            }
            else
            {
                int baudrate = int.Parse(args[nextarg + 1]);
                deststream = new SerialPort(portout, baudrate);

                nextarg = nextarg + 2;
            }

            System.Threading.Thread th = new System.Threading.Thread(UI);
            //th.Start();

            try
            { 
                deststream.Open();
            }
            catch
            {
                Console.WriteLine("Failed to open output");
                return;
            }

            if (outmode.ToLower() == "trimble")
            {
                piksi.ObsMessage += pktrimble_ObsMessage;
                piksi.EphMessage += pktrimble_EphMessage;

                DateTime ephdeadline = DateTime.Now.AddSeconds(12);

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        piksi.read((byte)inputstream.ReadByte());
                    }

                    if (ephdeadline < DateTime.Now)
                    {
                        string[] files = Directory.GetFiles(".", "*.eph");
                        foreach (var ephfile in files)
                        {
                            var info = new FileInfo(ephfile);

                            // check age
                            if (info.LastWriteTime.AddHours(4) < DateTime.Now)
                                continue;

                            byte[] ephbytes = File.ReadAllBytes(ephfile);

                            piksi.piksimsg msg = new piksi.piksimsg();

                            msg.payload = ephbytes;

                            pktrimble_EphMessage(msg, null);
                        }

                        ephdeadline = DateTime.Now.AddSeconds(30);
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            // sbp to rtcm
            if (outmode.ToLower() == "rtcm")
            {
                piksi.ObsMessage += pkrtcm_ObsMessage;
                piksi.EphMessage += pkrtcm_EphMessage;

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        piksi.read((byte)inputstream.ReadByte());
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            if (outmode.ToLower() == "sbp")
            {
                rtcm.ObsMessage += rtcm_ObsMessage;
                rtcm.BasePosMessage += rtcm_BasePosMessage;

                while (true)
                {
                    while (inputstream.dataToRead)
                    {
                        rtcm.Read((byte)inputstream.ReadByte());
                    }


                     while (deststream.dataToRead)
                    {
                         byte[] buffer = new byte[1024];
                         int read = deststream.Read(buffer,0,buffer.Length);
                         if (rawpiksiclient != null && rawpiksiclient.Connected)
                        {
                            try
                            {
                                rawpiksiclient.Client.Send(buffer, read, SocketFlags.None);
                                //piksi.read((byte)deststream.ReadByte());

                                if (rawpiksiclient.Client.Available > 0)
                                {
                                    read = rawpiksiclient.Client.Receive(buffer, buffer.Length, SocketFlags.None);
                                    deststream.Write(buffer, 0, read);
                                }
                            }
                            catch
                            {
                                
                            }
                        }
                    }

                    System.Threading.Thread.Sleep(5);
                }
            }

            Console.ReadLine();
        }