From 2a09d550e5aaeb8c86a123e16af8fa55cd98f6b5 Mon Sep 17 00:00:00 2001 From: Jonas Bark Date: Mon, 27 Oct 2025 14:05:09 +0100 Subject: [PATCH] Click V2 adjustments --- lib/bluetooth/connection.dart | 11 ++++- lib/bluetooth/devices/zwift/constants.dart | 2 - .../devices/zwift/zwift_clickv2.dart | 17 ++++++- lib/bluetooth/devices/zwift/zwift_ride.dart | 44 ++++++++++--------- lib/utils/keymap/buttons.dart | 3 +- 5 files changed, 50 insertions(+), 27 deletions(-) diff --git a/lib/bluetooth/connection.dart b/lib/bluetooth/connection.dart index e2fc52d..7c85eca 100644 --- a/lib/bluetooth/connection.dart +++ b/lib/bluetooth/connection.dart @@ -71,7 +71,7 @@ class Connection { if (kDebugMode) { print('Scan result: ${result.name} - ${result.deviceId}'); } - + final scanResult = BluetoothDevice.fromScanResult(result); if (scanResult != null) { @@ -99,7 +99,14 @@ class Connection { device.processCharacteristic(characteristicUuid, value); } }; - // ... + + UniversalBle.onConnectionChange = (String deviceId, bool isConnected, String? error) { + final device = bluetoothDevices.firstOrNullWhere((e) => e.device.deviceId == deviceId); + if (device != null && !isConnected) { + // allow reconnection + _lastScanResult.removeWhere((d) => d.deviceId == deviceId); + } + }; } Future performScanning() async { diff --git a/lib/bluetooth/devices/zwift/constants.dart b/lib/bluetooth/devices/zwift/constants.dart index d426c9f..4f0feb1 100644 --- a/lib/bluetooth/devices/zwift/constants.dart +++ b/lib/bluetooth/devices/zwift/constants.dart @@ -124,8 +124,6 @@ class ZwiftButtons { static const ControllerButton shiftDownLeft = ControllerButton( 'shiftDownLeft', action: InGameAction.shiftDown, - icon: Icons.remove, - color: Colors.black, ); static const ControllerButton powerUpLeft = ControllerButton('powerUpLeft', action: InGameAction.shiftDown); diff --git a/lib/bluetooth/devices/zwift/zwift_clickv2.dart b/lib/bluetooth/devices/zwift/zwift_clickv2.dart index 29a5845..345b25e 100644 --- a/lib/bluetooth/devices/zwift/zwift_clickv2.dart +++ b/lib/bluetooth/devices/zwift/zwift_clickv2.dart @@ -7,7 +7,22 @@ import 'package:swift_control/pages/markdown.dart'; import 'package:swift_control/widgets/warning.dart'; class ZwiftClickV2 extends ZwiftRide { - ZwiftClickV2(super.scanResult) : super(isBeta: true); + ZwiftClickV2(super.scanResult) + : super( + isBeta: true, + availableButtons: [ + ZwiftButtons.navigationLeft, + ZwiftButtons.navigationRight, + ZwiftButtons.navigationUp, + ZwiftButtons.navigationDown, + ZwiftButtons.a, + ZwiftButtons.b, + ZwiftButtons.y, + ZwiftButtons.z, + ZwiftButtons.shiftUpLeft, + ZwiftButtons.shiftUpRight, + ], + ); @override List get startCommand => ZwiftConstants.RIDE_ON + ZwiftConstants.RESPONSE_START_CLICK_V2; diff --git a/lib/bluetooth/devices/zwift/zwift_ride.dart b/lib/bluetooth/devices/zwift/zwift_ride.dart index 7c13540..2ed986d 100644 --- a/lib/bluetooth/devices/zwift/zwift_ride.dart +++ b/lib/bluetooth/devices/zwift/zwift_ride.dart @@ -18,28 +18,30 @@ class ZwiftRide extends ZwiftDevice { /// analog drift or light touches. static const int analogPaddleThreshold = 25; - ZwiftRide(super.scanResult, {super.isBeta}) + ZwiftRide(super.scanResult, {super.isBeta, List? availableButtons}) : super( - availableButtons: [ - ZwiftButtons.navigationLeft, - ZwiftButtons.navigationRight, - ZwiftButtons.navigationUp, - ZwiftButtons.navigationDown, - ZwiftButtons.a, - ZwiftButtons.b, - ZwiftButtons.y, - ZwiftButtons.z, - ZwiftButtons.shiftUpLeft, - ZwiftButtons.shiftDownLeft, - ZwiftButtons.shiftUpRight, - ZwiftButtons.shiftDownRight, - ZwiftButtons.powerUpLeft, - ZwiftButtons.powerUpRight, - ZwiftButtons.onOffLeft, - ZwiftButtons.onOffRight, - ZwiftButtons.paddleLeft, - ZwiftButtons.paddleRight, - ], + availableButtons: + availableButtons ?? + [ + ZwiftButtons.navigationLeft, + ZwiftButtons.navigationRight, + ZwiftButtons.navigationUp, + ZwiftButtons.navigationDown, + ZwiftButtons.a, + ZwiftButtons.b, + ZwiftButtons.y, + ZwiftButtons.z, + ZwiftButtons.shiftUpLeft, + ZwiftButtons.shiftDownLeft, + ZwiftButtons.shiftUpRight, + ZwiftButtons.shiftDownRight, + ZwiftButtons.powerUpLeft, + ZwiftButtons.powerUpRight, + ZwiftButtons.onOffLeft, + ZwiftButtons.onOffRight, + ZwiftButtons.paddleLeft, + ZwiftButtons.paddleRight, + ], ); @override diff --git a/lib/utils/keymap/buttons.dart b/lib/utils/keymap/buttons.dart index ad1aaf8..c08dec2 100644 --- a/lib/utils/keymap/buttons.dart +++ b/lib/utils/keymap/buttons.dart @@ -1,3 +1,4 @@ +import 'package:dartx/dartx.dart'; import 'package:flutter/material.dart'; import 'package:swift_control/bluetooth/devices/elite/elite_square.dart'; import 'package:swift_control/bluetooth/devices/elite/elite_sterzo.dart'; @@ -65,5 +66,5 @@ class ControllerButton { ...ZwiftButtons.values, ...EliteSquareButtons.values, ...WahooKickrShiftButtons.values, - ]; + ].distinct().toList(); }