@Override
	final void onRequestTimeout(@NonNull final BluetoothDevice device, @NonNull final TimeoutableRequest tr) {
		if (tr instanceof final SleepRequest sr) {
			sr.notifySuccess(device);
		} else {
			log(Log.WARN, () -> "Request timed out");
		}
		if (request instanceof final TimeoutableRequest r) {
			r.notifyFail(device, FailCallback.REASON_TIMEOUT);
		}
		if (awaitingRequest != null) {
			awaitingRequest.notifyFail(device, FailCallback.REASON_TIMEOUT);
			awaitingRequest = null;
		}
		tr.notifyFail(device, FailCallback.REASON_TIMEOUT);
		if (tr.type == Request.Type.CONNECT) {
			connectRequest = null;
			internalDisconnect(ConnectionObserver.REASON_TIMEOUT);
			// The method above will call mGattCallback.nextRequest(true) so we have to return here.
			return;
		}
		if (tr.type == Request.Type.DISCONNECT) {
			close();
			return;
		}
		nextRequest(request == null || request.finished);
	}
Enqueues the given request at the front of the the init or task queue, depending
on whether the initialization is in progress, or not.
<p>
This method sets the {@link #operationInProgress} to false, assuming the newly added
request will be executed immediately after this method ends.

@param request the request to be added.
ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java