예제 #1
0
        public void _adcpCodec_ProcessDataEvent(byte[] binaryEnsemble, DataSet.Ensemble ensemble)
        {
            // Display the data
            //SerialOutput += System.Text.Encoding.Default.GetString(binaryEnsemble);
            //if (SerialOutput.Length > 500)
            //{
            //    SerialOutput = SerialOutput.Substring(500, SerialOutput.Length - 500);
            //}

            // Pass the ensemble to the Output VM
            _outputVM.ReceiveEnsemble(ensemble);

            // Display the ensemble
            if (ensemble != null && ensemble.IsEnsembleAvail)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine("Ensemble Number: " + ensemble.EnsembleData.EnsembleNumber);
                sb.AppendLine("Date: " + ensemble.EnsembleData.EnsDateString);
                sb.AppendLine("Time: " + ensemble.EnsembleData.EnsTimeString);

                if (ensemble.IsBottomTrackAvail)
                {
                    sb.AppendLine("Status: " + ensemble.BottomTrackData.Status);
                    sb.AppendLine("Depth: " + ensemble.BottomTrackData.GetAverageRange());
                    sb.AppendLine("Boat Speed: " + ensemble.BottomTrackData.GetVelocityMagnitude());
                    sb.AppendLine("Boat Direction: " + ensemble.BottomTrackData.GetVelocityDirection(true));
                }

                sb.AppendLine("Pings: " + ensemble.EnsembleData.ActualPingCount);
                sb.AppendLine("First Ping Time: " + ensemble.AncillaryData.FirstPingTime);
                sb.AppendLine("Last Ping Time: " + ensemble.AncillaryData.LastPingTime);
                sb.AppendLine("Ping Time: " + (ensemble.AncillaryData.LastPingTime - ensemble.AncillaryData.FirstPingTime));
                sb.AppendLine("Temperature: " + ensemble.AncillaryData.WaterTemp);

                if (ensemble.IsAncillaryAvail)
                {
                    double tbp        = ensemble.AncillaryData.LastPingTime - ensemble.AncillaryData.FirstPingTime;
                    int    tbp_minute = (int)Math.Round(tbp / 60);
                    int    tbp_sec    = (int)Math.Truncate(tbp - (tbp_minute * 60));
                    int    tbp_hun    = (int)Math.Round((tbp - tbp_sec) * 100);
                    sb.AppendLine("TBP: " + tbp);
                    sb.AppendLine("TBP Minutes: " + tbp_minute);
                    sb.AppendLine("TBP Sec: " + tbp_sec);
                    sb.AppendLine("TBP Hun: " + tbp_hun);
                }

                if (ensemble.IsNmeaAvail)
                {
                    if (ensemble.NmeaData.IsGpggaAvail())
                    {
                        if (ensemble.NmeaData.IsGpggaAvail())
                        {
                            sb.AppendLine("Lat/Lon: " + ensemble.NmeaData.GPGGA.ToString());
                        }
                        if (ensemble.NmeaData.IsGphdtAvail())
                        {
                            sb.AppendLine("Gyro Heading: " + ensemble.NmeaData.GPHDT.ToString());
                        }
                        if (ensemble.NmeaData.IsGpvtgAvail())
                        {
                            sb.AppendLine("GPS Speed: " + ensemble.NmeaData.GPVTG.ToString());
                        }
                    }
                }

                AdcpDecodedOutput = sb.ToString();
            }
        }