Exemplo n.º 1
0
        ///////////////////////////////
        // Serial Parser + Stuff
        ///////////////////////////////
        public void ProcessMessage(byte type, byte[] data, byte len)
        {
            // data
            if (type == 0x20)
            {
                SCommHopeRFDataA2Avion commDataHopeRF = (SCommHopeRFDataA2Avion)Comm.FromBytes(data, new SCommHopeRFDataA2Avion());

                RelayedData = commDataHopeRF;

                // save to file
                logStreamRF.Write(data, 0, data.Length);

                // filter data
                formMain.FilteredRoll  = 0.99 * formMain.FilteredRoll + 0.01 * RelayedData.dRoll;
                formMain.FilteredPitch = 0.99 * formMain.FilteredPitch + 0.01 * RelayedData.dPitch;
                formMain.FilteredYaw   = 0.99 * formMain.FilteredYaw + 0.01 * RelayedData.dYaw;

                formMain.DisplayRelayedData(RelayedData);
            }
            if (type == 0x62)
            {
                // Parameters structure
                SParameters parametersDataHopeRF = (SParameters)Comm.FromBytes(data, new SParameters());

                // Display
                formMain.DisplayParams(parametersDataHopeRF);
            }
        }
Exemplo n.º 2
0
        public static unsafe void ExtractLogFile(string filename)
        {
            // open txt file
            StreamWriter sw = File.CreateText("matlab.txt");

            // create header
            sw.Write("Loop ");
            sw.Write("Voltage FuelLevel CurrentA TotalCharge_mAh ");
            sw.Write("MagX MagY MagZ ");
            sw.Write("AccX AccY AccZ ");
            sw.Write("Roll Pitch Yaw ");
            sw.Write("dRoll dPitch dYaw ");
            sw.Write("Pressure Temperature Altitude Vertspeed ");
            sw.Write("PWM1 PWM2 PWM3 PWM4 ");
            sw.Write("NumSV VelN VelE VelD HeightMSL HorizontalAccuracy ");
            for (int i = 0; i != 10; i++)
            {
                sw.Write("D{0} ", i);
            }
            sw.WriteLine("Mode HopeRXRSSI HopeRXFrameCnt HopeRSSI ");
            sw.WriteLine("");

            SCommEthData data      = new SCommEthData();
            FileStream   logStream = File.OpenRead(filename);
            int          size      = Marshal.SizeOf(data);

            byte[] dataArray = new byte[size];
            while (logStream.Read(dataArray, 0, size) > 0)
            {
                data = (SCommEthData)Comm.FromBytes(dataArray, new SCommEthData());
                sw.Write("{0} ", data.LoopCounter);
                sw.Write("{0} {1} {2} {3} ", data.BatteryVoltage, data.FuelLevel, data.BatteryCurrentA, data.BatteryTotalCharge_mAh);
                sw.Write("{0} {1} {2} ", data.MagX, data.MagY, data.MagZ);
                sw.Write("{0} {1} {2} ", data.AccX, data.AccY, data.AccZ);
                sw.Write("{0} {1} {2} ", data.Roll, data.Pitch, data.Yaw);
                sw.Write("{0} {1} {2} ", data.dRoll, data.dPitch, data.dYaw);
                sw.Write("{0} {1} {2} {3} ", data.Pressure, data.Temperature, data.Altitude, data.Vertspeed);
                sw.Write("{0} {1} {2} {3} ", data.MotorThrusts[0], data.MotorThrusts[1], data.MotorThrusts[2], data.MotorThrusts[3]);
                sw.Write("{0} {1} {2} {3} {4} {5} ", data.NumSV, data.VelN / 1000.0, data.VelE / 1000.0, data.VelD / 1000.0, data.HeightMSL / 1000.0, data.HorizontalAccuracy / 1000.0);
                for (int i = 0; i != 10; i++)
                {
                    sw.Write("{0} ", data.TuningData[i]);
                }
                sw.Write("{0} {1} {2} {3} ", data.ActualMode, data.HopeRXRSSI, data.HopeRXFrameCount, data.HopeRSSI);
                sw.WriteLine("");
            }

            sw.Close();
        }
Exemplo n.º 3
0
        public static unsafe void ExtractLogFileRF(string filename)
        {
            // open txt file
            StreamWriter sw = File.CreateText("matlabRF.txt");

            // create header
            sw.Write("Loop ");
            sw.Write("Voltage CurrentA TotalCharge_mAh ");
            sw.Write("Roll Pitch Yaw ");
            sw.Write("dRoll dPitch dYaw ");
            sw.Write("Altitude Vertspeed ");
            sw.Write("NumSV VelN VelE ");
            sw.Write("HopeRXRSSI HopeTXRSSI ");
            sw.WriteLine("PWM1 PWM2 PWM3 PWM4 ");

            SCommHopeRFDataA2Avion data      = new SCommHopeRFDataA2Avion();
            FileStream             logStream = File.OpenRead(filename);
            int size = Marshal.SizeOf(data);

            byte[] dataArray = new byte[size];
            while (logStream.Read(dataArray, 0, size) > 0)
            {
                data = (SCommHopeRFDataA2Avion)Comm.FromBytes(dataArray, new SCommHopeRFDataA2Avion());
                sw.Write("{0} ", data.LoopCounter);
                sw.Write("{0} {1} {2} ", data.BatteryVoltage, data.BatteryCurrentA, data.BatteryTotalCharge_mAh);
                sw.Write("{0} {1} {2} ", data.Roll, data.Pitch, data.Yaw);
                sw.Write("{0} {1} {2} ", data.dRoll, data.dPitch, data.dYaw);
                sw.Write("{0} {1} ", data.Altitude, data.Vertspeed);
                sw.Write("{0} {1} {2} ", data.NumSV, data.VelN / 1000.0, data.VelE / 1000.0);
                sw.Write("{0} {1} ", data.HopeRXRSSI, data.HopeTXRSSI);
                sw.Write("{0} {1} {2} {3} ", data.MotorThrusts[0], data.MotorThrusts[1], data.MotorThrusts[2], data.MotorThrusts[3]);
                sw.WriteLine("");
            }

            sw.Close();
        }
Exemplo n.º 4
0
        ///////////////////////////////
        // DATA PARSER
        ///////////////////////////////
        public unsafe void Update()
        {
            ///////////////////////////////
            // Process Serial Data
            ///////////////////////////////
            commMgr.Update(10);

            ///////////////////////////////
            // Process Ethernet Data
            ///////////////////////////////
            if (udp == null)
            {
                return;
            }

            // Get data from UDP
            while (udp.Available > 0)
            {
                // get data
                IPEndPoint endP  = new IPEndPoint(IPAddress.Any, 0); // any port of the sender
                byte[]     bytes = udp.Receive(ref endP);

                // process data
                ReceivedPacketsCounter++;
                if (PacketIsValid(bytes))
                {
                    // remove header
                    byte[] withoutHeader = bytes.Skip(3).ToArray();
                    switch (bytes[2])
                    {
                    case 0x20:
                        // data
                        SCommEthData commData = (SCommEthData)Comm.FromBytes(withoutHeader, new SCommEthData());
                        MainSystemData = commData;

                        // filter data
                        formMain.FilteredRoll  = 0.9998 * formMain.FilteredRoll + 0.0002 * MainSystemData.dRoll;
                        formMain.FilteredPitch = 0.9998 * formMain.FilteredPitch + 0.0002 * MainSystemData.dPitch;
                        formMain.FilteredYaw   = 0.9998 * formMain.FilteredYaw + 0.0002 * MainSystemData.dYaw;

                        for (int i = 0; i != 10; i++)
                        {
                            formMain.FilteredTuningData[i]     = 0.999 * formMain.FilteredTuningData[i] + 0.001 * Math.Abs(commData.TuningData[i] - formMain.FilteredTuningLastData[i]);
                            formMain.FilteredTuningLastData[i] = commData.TuningData[i];
                        }

                        logStream.Write(withoutHeader, 0, withoutHeader.Length);
                        break;

                    case 0x62:     // get params data
                        SParameters p = (SParameters)Comm.FromBytes(withoutHeader, new SParameters());

                        // Display
                        formMain.DisplayParams(p);
                        break;
                    }
                }
            }

            // send PING
            if (++PingCounter > 20)
            {
                PingCounter = 0;
                byte[] lp = BitConverter.GetBytes(LocalPort); // send port
                SendData(0x10, lp);
            }

            // GUI update
            formMain.DisplaySystemData(ReceivedPacketsCounter, MainSystemData);

            // Update assist now
            byte[] toSend = assistNow.Update(MainSystemData.AssistNextChunkToSend);
            if (toSend != null)
            {
                SendData(0x30, toSend);
            }
        }