private void Fetch()
        {
            var reader = _dataConn.GetReader();
            var lenBuffer = new byte[2];

            while (_started)
            {
                try
                {
                    if (_device.WaitForPacket(_dataConn))
                    {
                        reader.ReadExact(lenBuffer, 0, lenBuffer.Length);
                        var len=EndianReader.ReadUInt16Big(lenBuffer, 0);
                        var header = new byte[10];
                        reader.ReadExact(header, 0, header.Length);
                        var payload = new byte[len - header.Length];
                        reader.ReadExact(payload, 0, payload.Length);

                        var mtp2 = new Mtp2Packet(header, payload);
                        OnPacketReceived(mtp2);
                    }
                }
                catch (Exception e)
                {
                    OnFailed(e);
                }
            }

            _waitHandle.Set();
        }
 private void PacketReceived(object sender, Mtp2Packet e)
 {
     _writer.WriteUnsafe(e.Seconds, e.Microseconds, e.Payload);
 }
 private void OnPacketReceived(Mtp2Packet packet)
 {
     if (_started && PacketReceived != null)
         PacketReceived(this, packet);
 }