//private byte[] nextPacket = null;

        /// <summary>
        /// Create reader object
        /// </summary>
        /// <param name="type">Type of the sensor</param>
        /// <param name="returnMode">Define return type for VLP-16, this variable is neglected for HDL-32E</param>
        /// <param name="indexFile">Index file path</param>
        /// <param name="pointFile">Point file path</param>
        private VelodyneReader(VelodyneSensorType type, ReturnMode returnMode, String indexFile, String pointFile)
        {
            this.IndexFile = indexFile;
            this.PointFile = pointFile;
            this.Sensor    = type;
            Indeces        = new List <IndexData>();

            if (!File.Exists(indexFile))
            {
                throw new FileNotFoundException("Index file does not exist!");
            }

            if (!File.Exists(pointFile))
            {
                throw new FileNotFoundException("Point file does not exist!");
            }

            if (type == VelodyneSensorType.HDL32E)
            {
                PacketInterpreter = new PacketInterpreterHDL32E();
            }
            else if (type == VelodyneSensorType.VLP16)
            {
                PacketInterpreter = new PacketInterpreterVLP16(returnMode);
            }
            else
            {
                throw new NotImplementedException();
            }
        }
        /// <summary>
        /// Open Velodyne reader object
        /// </summary>
        /// <param name="type">Type of the sensor</param>
        /// <param name="returnMode">Define return type for VLP-16, this variable is neglected for HDL-32E</param>
        /// <param name="indexFile">Index file path</param>
        /// <param name="pointFile">Point file path</param>
        /// <returns></returns>
        public static VelodyneReader Open(VelodyneSensorType type, ReturnMode returnMode, String indexFile, String pointFile)
        {
            VelodyneReader obj      = new VelodyneReader(type, returnMode, indexFile, pointFile);
            FileInfo       fi       = new FileInfo(indexFile);
            long           fileSize = fi.Length;

            obj.Indeces.Clear();

            byte[]       idxData = File.ReadAllBytes(obj.IndexFile);
            MemoryStream mem     = new MemoryStream(idxData);
            long         idx     = 0;

            using (BinaryReader reader = new BinaryReader(mem))
            {
                while (reader.BaseStream.Position != reader.BaseStream.Length)
                {
                    long     internalTimeTicks    = reader.ReadInt64();
                    DateTime internalTime         = new DateTime(internalTimeTicks);
                    long     packetTimeStampTicks = reader.ReadInt64();
                    DateTime packetTimeStamp      = new DateTime(packetTimeStampTicks);

                    long position = reader.ReadInt64();

                    byte[] nmeBytes = reader.ReadBytes(IndexData.NMEA_LENGTH);
                    String nmea     = Encoding.ASCII.GetString(nmeBytes);

                    obj.Indeces.Add(new IndexData(packetTimeStamp, internalTime, position, nmea));
                    idx++;

                    if (idx % 500 == 0)
                    {
                        ProgressReportEventArgs args = new ProgressReportEventArgs((((double)reader.BaseStream.Position / (double)fileSize) * 100.0), reader.BaseStream.Position, packetTimeStamp.ToUniversalTime());
                        OnReportProgress(args);
                    }
                }
            }

            obj.pointReader = new BinaryReader(File.Open(obj.PointFile, FileMode.Open));

            return(obj);
        }
 /// <summary>
 /// Create reader object
 /// </summary>
 /// <param name="type">Type of the sensor</param>
 /// <param name="indexFile">Index file path</param>
 /// <param name="pointFile">Point file path</param>
 private VelodyneReader(VelodyneSensorType type, String indexFile, String pointFile) : this(type, ReturnMode.AllReturns, indexFile, pointFile)
 {
 }
 /// <summary>
 /// Open Velodyne reader object
 /// </summary>
 /// <param name="type">Type of the sensor</param>
 /// <param name="returnMode">Define return type for VLP-16, this variable is neglected for HDL-32E</param>
 /// <param name="indexFile">Index file path</param>
 /// <param name="pointFile">Point file path</param>
 /// <returns></returns>
 public static VelodyneReader Open(VelodyneSensorType type, String indexFile, String pointFile)
 {
     return(Open(type, ReturnMode.AllReturns, indexFile, pointFile));
 }
 public VelodyneDataStream(Project project, string name, string shortName, string subFolder, VelodyneSensorType sensorType) : base(project, name, shortName, subFolder)
 {
     this.SensorType = sensorType;
 }