public override async Task <byte[]> ReadValueAsyncInternal(ButtplugDeviceReadOptions aOptions,
                                                                   CancellationToken aToken = default(CancellationToken))
        {
            if (!_device.CanRead)
            {
                return(new byte[] { });
            }

            var oldTimeout = 0;

            if (aOptions.Timeout < int.MaxValue)
            {
                oldTimeout          = _device.ReadTimeout;
                _device.ReadTimeout = (int)aOptions.Timeout;
            }

            //var bytesToRead = _device.Length;
            var input      = new byte[aOptions.ReadLength];
            var readLength = 0;

            try
            {
                while (readLength < aOptions.ReadLength)
                {
                    readLength += await _device.ReadAsync(input, readLength, (int)aOptions.ReadLength - readLength);
                }
            }
            finally
            {
                if (aOptions.Timeout < int.MaxValue)
                {
                    _device.ReadTimeout = oldTimeout;
                }
            }

            return(input);
        }