@SuppressWarnings("ConstantConditions")
	@NonNull
	public <E extends ProfileReadResponse> E awaitValid(@NonNull final E response)
			throws RequestFailedException, InvalidDataException, DeviceDisconnectedException,
			BluetoothDisabledException, InvalidRequestException, InterruptedException,
			CancellationException{
		final E result = await(response);
		if (result != null && !result.isValid()) {
			throw new InvalidDataException(result);
		}
		return result;
	}
Similar to {@link #await(Class)}, but if the response class extends
{@link ProfileReadResponse} and the received response is invalid, an exception is thrown.
This allows to keep all error handling in one place.

@param response the result object.
@param <E>      a response class that extends {@link ProfileReadResponse}.
@return Object with a valid response.
@throws IllegalStateException       thrown when you try to call this method from
                                    the main (UI) thread.
@throws InterruptedException        thrown when the timeout occurred before the
                                    characteristic value has changed.
@throws CancellationException       thrown when the request has been cancelled.
@throws RequestFailedException      thrown when the trigger request has failed.
@throws DeviceDisconnectedException thrown when the device disconnected before the
                                    notification or indication was received.
@throws BluetoothDisabledException  thrown when the Bluetooth adapter has been disabled.
@throws InvalidRequestException     thrown when the request was called before the device was
                                    connected at least once (unknown device).
@throws InvalidDataException        thrown when the received data were not valid (that is when
                                    {@link ProfileReadResponse#onDataReceived(BluetoothDevice, Data)}
                                    failed to parse the data correctly and called
                                    {@link ProfileReadResponse#onInvalidDataReceived(BluetoothDevice, Data)}).
ble/src/main/java/no/nordicsemi/android/ble/WaitForValueChangedRequest.java