mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-12 01:23:52 +00:00
finish TODO for checking bluetooth availability
This commit is contained in:
@@ -51,6 +51,7 @@ export function didConnect(): BleDeviceDidConnectAction {
|
||||
|
||||
export enum BleDeviceFailToConnectReasonType {
|
||||
NoWebBluetooth = 'ble.device.didFailToConnect.noWebBluetooth',
|
||||
NoBluetooth = 'ble.device.didFailToConnect.noBluetooth',
|
||||
Canceled = 'ble.device.didFailToConnect.canceled',
|
||||
NoGatt = 'ble.device.didFailToConnect.noGatt',
|
||||
NoService = 'ble.device.didFailToConnect.noService',
|
||||
@@ -63,6 +64,8 @@ type Reason<T extends BleDeviceFailToConnectReasonType> = {
|
||||
|
||||
export type BleDeviceFailToConnectNoWebBluetoothReason = Reason<BleDeviceFailToConnectReasonType.NoWebBluetooth>;
|
||||
|
||||
export type BleDeviceFailToConnectNoBluetoothReason = Reason<BleDeviceFailToConnectReasonType.NoBluetooth>;
|
||||
|
||||
export type BleDeviceFailToConnectCanceledReason = Reason<BleDeviceFailToConnectReasonType.Canceled>;
|
||||
|
||||
export type BleDeviceFailToConnectNoGattReason = Reason<BleDeviceFailToConnectReasonType.NoGatt>;
|
||||
@@ -75,6 +78,7 @@ export type BleDeviceFailToConnectUnknownReason = Reason<BleDeviceFailToConnectR
|
||||
|
||||
export type BleDeviceDidFailToConnectReason =
|
||||
| BleDeviceFailToConnectNoWebBluetoothReason
|
||||
| BleDeviceFailToConnectNoBluetoothReason
|
||||
| BleDeviceFailToConnectCanceledReason
|
||||
| BleDeviceFailToConnectNoGattReason
|
||||
| BleDeviceFailToConnectNoServiceReason
|
||||
|
||||
@@ -79,6 +79,8 @@ export function disconnect(): BootloaderConnectionDisconnectAction {
|
||||
export enum BootloaderConnectionFailureReason {
|
||||
/** Web Bluetooth is not available */
|
||||
NoWebBluetooth = 'no-web-bluetooth',
|
||||
/** Bluetooth is not available */
|
||||
NoBluetooth = 'no-bluetooth',
|
||||
/** Connected but failed to find the bootloader GATT service */
|
||||
GattServiceNotFound = 'gatt-service-not-found',
|
||||
/** The connection was canceled */
|
||||
@@ -93,6 +95,8 @@ type Reason<T extends BootloaderConnectionFailureReason> = {
|
||||
|
||||
export type BootloaderConnectionFailToConnectNoWebBluetoothReason = Reason<BootloaderConnectionFailureReason.NoWebBluetooth>;
|
||||
|
||||
export type BootloaderConnectionFailToConnectNoBluetoothReason = Reason<BootloaderConnectionFailureReason.NoBluetooth>;
|
||||
|
||||
export type BootloaderConnectionFailToConnectGattServiceNotFoundReason = Reason<BootloaderConnectionFailureReason.GattServiceNotFound>;
|
||||
|
||||
export type BootloaderConnectionFailToConnectCanceledReason = Reason<BootloaderConnectionFailureReason.Canceled>;
|
||||
@@ -103,6 +107,7 @@ export type BootloaderConnectionFailToConnectUnknownReason = Reason<BootloaderCo
|
||||
|
||||
export type BootloaderConnectionDidFailToConnectReason =
|
||||
| BootloaderConnectionFailToConnectNoWebBluetoothReason
|
||||
| BootloaderConnectionFailToConnectNoBluetoothReason
|
||||
| BootloaderConnectionFailToConnectGattServiceNotFoundReason
|
||||
| BootloaderConnectionFailToConnectCanceledReason
|
||||
| BootloaderConnectionFailToConnectUnknownReason;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"gattPermission": "The web browser did not give permission to use Bluetooth Low Energy",
|
||||
"gattServiceNotFound": "Connected to hub but failed to get {serviceName} service. Try removing the \"{hubName}\" device in your OS Bluetooth settings, then try again.",
|
||||
"noWebBluetooth": "This web browser does not support Web Bluetooth or it is not enabled.",
|
||||
"noBluetooth": "No Bluetooth adapter could be found. Bluetooth won't work.",
|
||||
"unexpectedError": "Unexpected error while trying to connect: {errorMessage}"
|
||||
},
|
||||
"editor": {
|
||||
|
||||
@@ -10,6 +10,7 @@ export enum MessageId {
|
||||
BleGattPermission = 'ble.gattPermission',
|
||||
BleGattServiceNotFound = 'ble.gattServiceNotFound',
|
||||
BleNoWebBluetooth = 'ble.noWebBluetooth',
|
||||
BleNoBluetooth = 'ble.noBluetooth',
|
||||
FlashFirmwareTimedOut = 'flashFirmware.timedOut',
|
||||
FlashFirmwareBleError = 'flashFirmware.bleError',
|
||||
FlashFirmwareDisconnected = 'flashFirmware.disconnected',
|
||||
|
||||
@@ -70,7 +70,11 @@ function* connect(_action: BleDeviceConnectAction): Generator {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: check navigator.bluetooth.getAvailability()
|
||||
const available = yield* call(() => navigator.bluetooth.getAvailability());
|
||||
if (!available) {
|
||||
yield* put(didFailToConnect({ reason: Reason.NoBluetooth }));
|
||||
return;
|
||||
}
|
||||
|
||||
let device: BluetoothDevice;
|
||||
try {
|
||||
|
||||
@@ -45,7 +45,11 @@ function* connect(_action: BootloaderConnectionAction): Generator {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: check navigator.bluetooth.getAvailability()
|
||||
const available = yield* call(() => navigator.bluetooth.getAvailability());
|
||||
if (!available) {
|
||||
yield* put(didFailToConnect(Reason.NoBluetooth));
|
||||
return;
|
||||
}
|
||||
|
||||
let device: BluetoothDevice;
|
||||
try {
|
||||
|
||||
@@ -28,6 +28,7 @@ import notification from './notification';
|
||||
|
||||
test.each([
|
||||
bleDidFailToConnect({ reason: BleDeviceFailToConnectReasonType.NoWebBluetooth }),
|
||||
bleDidFailToConnect({ reason: BleDeviceFailToConnectReasonType.NoBluetooth }),
|
||||
bleDidFailToConnect({ reason: BleDeviceFailToConnectReasonType.NoGatt }),
|
||||
bleDidFailToConnect({ reason: BleDeviceFailToConnectReasonType.NoService }),
|
||||
bleDidFailToConnect({
|
||||
@@ -38,6 +39,7 @@ test.each([
|
||||
message: 'test',
|
||||
}),
|
||||
bootloaderDidFailToConnect(BootloaderConnectionFailureReason.NoWebBluetooth),
|
||||
bootloaderDidFailToConnect(BootloaderConnectionFailureReason.NoBluetooth),
|
||||
bootloaderDidFailToConnect(BootloaderConnectionFailureReason.GattServiceNotFound),
|
||||
storageChanged('test'),
|
||||
didFailToCompile(['reason']),
|
||||
|
||||
@@ -171,6 +171,9 @@ function* showBleDeviceDidFailToConnectError(
|
||||
hubName: 'Pybricks Hub',
|
||||
});
|
||||
break;
|
||||
case BleDeviceFailToConnectReasonType.NoBluetooth:
|
||||
yield* showSingleton(Level.Error, MessageId.BleNoBluetooth);
|
||||
break;
|
||||
case BleDeviceFailToConnectReasonType.NoWebBluetooth:
|
||||
yield* showSingleton(
|
||||
Level.Error,
|
||||
@@ -207,6 +210,9 @@ function* showBootloaderDidFailToConnectError(
|
||||
),
|
||||
);
|
||||
break;
|
||||
case BootloaderConnectionFailureReason.NoBluetooth:
|
||||
yield* showSingleton(Level.Error, MessageId.BleNoBluetooth);
|
||||
break;
|
||||
case BootloaderConnectionFailureReason.Unknown:
|
||||
yield* showUnexpectedError(MessageId.BleUnexpectedError, action.err);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user