public async Task <IAxLE> ConnectToKnownDevice(string serial, bool timeout = true)
        {
            var delayTask = Task.Delay(1000);

            var ct           = new CancellationTokenSource();
            var device       = _devices[serial];
            var conntectTask = _ble.ConnectToKnownDevice(device.Id, ct.Token);

            IDevice bleDevice;

            if (timeout)
            {
                Task result;
                try
                {
                    result = await Task.WhenAny(conntectTask, delayTask);
                }
                catch (Exception e)
                {
                    throw new ConnectException(e);
                }
                if (result == delayTask)
                {
                    ct.Cancel();
                    throw new DeviceNotInRangeException();
                }

                bleDevice = (IDevice)result;
            }
            else
            {
                try
                {
                    bleDevice = await conntectTask;
                }
                catch (Exception e)
                {
                    throw new ConnectException(e);
                }
            }

            return(await CreateAxLE(bleDevice, serial));
        }