public IList <Gh615Packet.TrackFileHeader> ReadTrackHeaders(IJobMonitor monitor)
        {
            monitor.PercentComplete = 0;
            monitor.StatusText      = CommonResources.Text.Devices.ImportJob_Status_OpeningDevice;

            Int16[] tracks = new Int16[2];

            GlobalsatPacket getHeadersPacket = PacketFactory.GetTrackFileHeaders();
            Gh615Packet     response         = (Gh615Packet)SendPacket(getHeadersPacket);

            return(response.UnpackTrackHeaders());
        }
        public IList <Gh615Packet.TrackFileSection> ReadTracks(IList <Gh615Packet.TrackFileHeader> tracks, IJobMonitor monitor)
        {
            if (tracks.Count == 0)
            {
                return(new Gh615Packet.TrackFileSection[0]);
            }

            float         totalPoints  = 0;
            IList <Int16> trackIndexes = new List <Int16>();

            foreach (Gh615Packet.TrackFileHeader header in tracks)
            {
                totalPoints += header.TrackPointCount;
                trackIndexes.Add(header.TrackPointIndex);
            }
            float pointsRead = 0;

            IList <Gh615Packet.TrackFileSection> trackSections = new List <Gh615Packet.TrackFileSection>();
            GlobalsatPacket getFilesPacket = PacketFactory.GetTrackFileSections(trackIndexes);
            GlobalsatPacket getNextPacket  = PacketFactory.GetNextTrackSection();
            Gh615Packet     data           = (Gh615Packet)SendPacket(getFilesPacket);

            monitor.PercentComplete = 0;

            Gh615Packet.TrackFileSection trackSection;
            do
            {
                trackSection = data.UnpackTrackSection();
                if (trackSection != null)
                {
                    pointsRead += trackSection.EndPointIndex - trackSection.StartPointIndex + 1;

                    DateTime time           = trackSection.StartTime.ToLocalTime();
                    string   statusProgress = time.ToShortDateString() + " " + time.ToShortTimeString();
                    monitor.StatusText      = String.Format(CommonResources.Text.Devices.ImportJob_Status_Reading, statusProgress);
                    monitor.PercentComplete = pointsRead / totalPoints;

                    trackSections.Add(trackSection);
                    data = (Gh615Packet)SendPacket(getNextPacket);
                }
            } while (trackSection != null);

            monitor.PercentComplete = 1;
            return(trackSections);
        }