private void lla_fix(TsipPacket tp)
        {
            Debug.Print("Packet 84 (LLA fix):");

            position.Latitude = tp.GetNextDouble();
            position.Longitude = tp.GetNextDouble();
            position.Altitude = tp.GetNextDouble();

            Double clock_bias = tp.GetNextDouble();
            Single time_of_fix = tp.GetNextSingle();

            raise_position_change();
        }
        private void ecef_fix(TsipPacket tp)
        {
            Debug.Print("Packet 83 (XYZ ECEF):");

            Double x = tp.GetNextDouble();
            Double y = tp.GetNextDouble();
            Double z = tp.GetNextDouble();
            Double clock_bias = tp.GetNextDouble();
            Single time_of_fix = tp.GetNextSingle();
        }
 private void datums(TsipPacket tp)
 {
     Debug.Print("Packet 8F.15 (Datums)");
     int index = tp.GetNextWord();
     double dx = tp.GetNextDouble();
     double dy = tp.GetNextDouble();
     double dz = tp.GetNextDouble();
     double a_axis = tp.GetNextDouble();
     double ecc = tp.GetNextDouble();
 }
        private void secondary_timing(TsipPacket tp)
        {
            Debug.Print(":0x8F.AC (Secondary Timing)");

            byte spare;
            try
            {
                receiver_mode = (ReceiverMode)tp.GetNextByte();
            }
            catch
            {
                receiver_mode = ReceiverMode.Unknown;
            }
            try
            {
                discipline_mode = (DiscipliningMode)tp.GetNextByte();
            }
            catch
            {
                discipline_mode = DiscipliningMode.Unknown;
            }
            survey_progress = tp.GetNextByte(); // 0-100%

            holdover = tp.GetNextDWord(); // seconds

            critical_alarms = tp.GetNextWord();
            minor_alarms = tp.GetNextWord();
            try
            {
                gps_status = (ReceiverStatus)tp.GetNextByte();
            }
            catch
            {
                gps_status = ReceiverStatus.Unknown;
            }

            try
            {
                discipline = (DiscipliningActivity)tp.GetNextByte();
            }
            catch
            {
                discipline = DiscipliningActivity.Unknown;
            }

            spare = tp.GetNextByte();
            spare = tp.GetNextByte();

            pps_offset = tp.GetNextSingle();  // in nano seconds (ns)

            osc_offset = tp.GetNextSingle();  // in parts per billion (ppb)

            dac_value = tp.GetNextDWord();
            dac_voltage = tp.GetNextSingle(); // in V
            temperature = tp.GetNextSingle(); // in C

            position.Latitude = tp.GetNextDouble();
            position.Longitude = tp.GetNextDouble();
            position.Altitude = tp.GetNextDouble();

            if (SecondaryTimingChanged != null)
                SecondaryTimingChanged(this, null);

            raise_position_change();

            clear_sat_tracking(); //??
        }
        private void raw_data(TsipPacket tp)
        {
            byte prn = tp.GetNextByte();
            prn--;
            if (prn > 31)
            {
                unknown_msg(tp);
                return;
            }

            //Debug.Print(":0x5A    (Raw Measurement Data prn = {0} )", prn);

            Satellites[prn].SampleLength = tp.GetNextSingle();
            Satellites[prn].SignalLevel = tp.GetNextSingle();
            Satellites[prn].CodePhase = tp.GetNextSingle();
            Satellites[prn].Doppler = tp.GetNextSingle();
            Satellites[prn].RawTime = tp.GetNextDouble();
            Satellites[prn].Tracked = true;
        }
        private void pps_settings(TsipPacket tp)
        {
            Debug.Print("Packet 8F.4A (PPS settings):");

            byte pps_enabled = tp.GetNextByte();
            byte pps_rsvd = tp.GetNextByte();
            byte pps_polarity = tp.GetNextByte();
            Double cable_delay = tp.GetNextDouble();
            Single bias_threshold = tp.GetNextSingle();

            unit_pps = (pps_enabled != 0);
            unit_cable_delay = (cable_delay / 1.0E-9);
        }