summaryrefslogtreecommitdiffstats
path: root/lib/vehicle-signals
diff options
context:
space:
mode:
authorOpenEmbedded <oe.patch@oe>2023-09-13 14:37:41 +0000
committerScott Murray <scott.murray@konsulko.com>2023-09-14 14:34:04 -0400
commite389b9fa646f90d50e853c2dbf870cdf9f9b80b7 (patch)
tree9d7b93e3e6e300a7e40dd03993ed8da129c98369 /lib/vehicle-signals
parentadc3fca51b9ebfc23b503126065d97d692d0ec64 (diff)
Rework to use KUKSA.val databroker gRPC API
Rework to move from the WebSocket API with the older KUKSA.val server to the gRPC "VAL" API of the databroker. Changes include: - All VISS WebSocket API code has been removed, and the signal providers replumbed to be driven by a new VssClient class with a dashboard-specific child class to hold all the gRPC API handling. - The generated code for the VAL API and its dependencies has been checked in under lib/generated, as there still does not seem to be a good way to generate it during the Flutter build. - The configuration file is now expected to be "dashboard.yaml" instead of "dashboard.yaml". The authorization token field name has been renamed to "authorization", and there are new "use-tls" and "ca-certificate" configuration fields. TLS is disabled by default for now, and the default CA certificate is /etc/kuksa.val/CA.pem. - Bumped minimum SDK version to 2.18 in pubspec.yaml to enable "super" keyword support. This matches what the version was set to in flutter-homescreen. - Removed .dart_tool generated output that had been checked in, and added .gitignore file from flutter-homescreen so that things will hopefully stay clean in the future. Bug-AGL: SPEC-4762 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: Ie23091b759458b5a131bc2d85e62925238839166
Diffstat (limited to 'lib/vehicle-signals')
-rw-r--r--lib/vehicle-signals/intial_connection.dart38
-rw-r--r--lib/vehicle-signals/onBoarding_page.dart61
-rw-r--r--lib/vehicle-signals/vehicle_config.dart39
-rw-r--r--lib/vehicle-signals/vehicle_methods.dart183
-rw-r--r--lib/vehicle-signals/vss_client.dart113
-rw-r--r--lib/vehicle-signals/vss_path.dart (renamed from lib/vehicle-signals/vehicle_server_path.dart)0
-rw-r--r--lib/vehicle-signals/vss_provider.dart147
-rw-r--r--lib/vehicle-signals/vss_signal_providers.dart (renamed from lib/vehicle-signals/vss_providers.dart)32
8 files changed, 275 insertions, 338 deletions
diff --git a/lib/vehicle-signals/intial_connection.dart b/lib/vehicle-signals/intial_connection.dart
deleted file mode 100644
index 8e79979..0000000
--- a/lib/vehicle-signals/intial_connection.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-import 'dart:io';
-import 'package:dashboard_app/vehicle-signals/vehicle_config.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-
-import 'onBoarding_page.dart';
-
-class InitialScreen extends ConsumerWidget {
- InitialScreen({Key? key, required this.client}) : super(key: key);
- final HttpClient client;
- late WebSocket socket;
-
- @override
- Widget build(BuildContext context, ref) {
- final sockConnect = ref.watch(sockConnectprovider(client));
-
- return sockConnect.when(
- data: (socket) {
- this.socket = socket;
- this.socket.pingInterval = const Duration(seconds: 2);
- return OnBoardingPage(client: client, socket: this.socket);
- },
- error: (e, stk) {
- print(e);
- ref.refresh(sockConnectprovider(client));
- return const Scaffold(
- backgroundColor: Colors.black,
- body: Center(child: Text('error',style: TextStyle(color: Colors.white),)),
- );
- },
- loading: () => const Scaffold(
- backgroundColor: Colors.black,
- body: Center(child: Text('loading',style: TextStyle(color: Colors.white))),
- ),
- );
- }
-} \ No newline at end of file
diff --git a/lib/vehicle-signals/onBoarding_page.dart b/lib/vehicle-signals/onBoarding_page.dart
deleted file mode 100644
index 6009c54..0000000
--- a/lib/vehicle-signals/onBoarding_page.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-import 'dart:async';
-import 'dart:io';
-
-import 'package:dashboard_app/vehicle-signals/vehicle_config.dart';
-import 'package:dashboard_app/vehicle-signals/vehicle_methods.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-
-import '../HomePage.dart';
-
-class OnBoardingPage extends ConsumerStatefulWidget {
- const OnBoardingPage({Key? key, required this.client, required this.socket})
- : super(key: key);
- final WebSocket socket;
- final HttpClient client;
-
- @override
- ConsumerState<OnBoardingPage> createState() => _OnBoardingPageState();
-}
-
-class _OnBoardingPageState extends ConsumerState<OnBoardingPage> {
- late Timer _timer;
-
-
- @override
- void initState() {
- super.initState();
- VISS.init(widget.socket,ref);
- _timer = Timer.periodic(const Duration(seconds: 2), (timer) {
-
- if (widget.socket.readyState == 3) {
- ref.refresh(sockConnectprovider(widget.client));
- }
- });
- WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
- widget.socket.listen(
- (data) {
- VISS.parseData(ref, data);
-
- },
- onError: (e, stk) {
- print(e.toString());
- ref.refresh(sockConnectprovider(widget.client));
- },
- );
- });
- }
-
- @override
- void dispose() {
- super.dispose();
- _timer.cancel();
- widget.socket.close(786887, "Connection lost with server!");
- }
-
- @override
- Widget build(BuildContext context) {
- return const HomePage();
- }
-} \ No newline at end of file
diff --git a/lib/vehicle-signals/vehicle_config.dart b/lib/vehicle-signals/vehicle_config.dart
deleted file mode 100644
index 59682c4..0000000
--- a/lib/vehicle-signals/vehicle_config.dart
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:dashboard_app/config.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:http/http.dart' as http;
-
-
-
-final sockConnectprovider = FutureProvider.family<WebSocket, HttpClient>(
- (ref, client) => connect(client,ref));
-
-
-
-Future<HttpClient> initializeClient() async {
-
-
- SecurityContext ctx = SecurityContext.defaultContext;
-
- HttpClient client = HttpClient(context: ctx)
- ..findProxy = null
- ..badCertificateCallback = (cert, host, port) {
- return true;
- };
- return client;
-}
-
-
-
-Future<WebSocket> connect(HttpClient client, ref) async {
- final config = ref.read(ConfigStateprovider);
- WebSocket socket = await WebSocket.connect(
- "wss://${config.hostname}:${config.port}",
- customClient: client);
- return socket;
-}
-
-
diff --git a/lib/vehicle-signals/vehicle_methods.dart b/lib/vehicle-signals/vehicle_methods.dart
deleted file mode 100644
index 8259450..0000000
--- a/lib/vehicle-signals/vehicle_methods.dart
+++ /dev/null
@@ -1,183 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:dashboard_app/vehicle-signals/vss_providers.dart';
-import 'package:dashboard_app/vehicle-signals/vehicle_server_path.dart';
-import 'package:dashboard_app/config.dart';
-import 'package:flutter_riverpod/flutter_riverpod.dart';
-
-class VISS {
- static const requestId = "test-id";
- static void init(WebSocket socket, WidgetRef ref) {
- authorize(socket, ref);
- subscribe(socket, ref, VSSPath.vehicleSpeed);
- subscribe(socket, ref, VSSPath.vehicleEngineSpeed);
- subscribe(socket, ref, VSSPath.vehicleFuelLevel);
- subscribe(socket, ref, VSSPath.vehicleFrontLeftTire);
- subscribe(socket, ref, VSSPath.vehicleFrontRightTire);
- subscribe(socket, ref, VSSPath.vehicleRearLeftTire);
- subscribe(socket, ref, VSSPath.vehicleRearRightTire);
- subscribe(socket, ref, VSSPath.vehicleIsChildLockActiveLeft);
- subscribe(socket, ref, VSSPath.vehicleIsChildLockActiveRight);
- subscribe(socket, ref, VSSPath.vehicleFuelRate);
- subscribe(socket, ref, VSSPath.vehicleInsideTemperature);
- subscribe(socket, ref, VSSPath.vehicleOutsideTemperature);
- }
-
- static void update(WebSocket socket, WidgetRef ref) {
- get(socket, ref, VSSPath.vehicleSpeed);
- get(socket, ref, VSSPath.vehicleEngineSpeed);
- get(socket, ref, VSSPath.vehicleFuelLevel);
- get(socket, ref, VSSPath.vehicleOutsideTemperature);
- get(socket, ref, VSSPath.vehicleFrontLeftTire);
- get(socket, ref, VSSPath.vehicleFrontRightTire);
- get(socket, ref, VSSPath.vehicleRearLeftTire);
- get(socket, ref, VSSPath.vehicleRearRightTire);
- get(socket, ref, VSSPath.vehicleIsChildLockActiveLeft);
- get(socket, ref, VSSPath.vehicleIsChildLockActiveRight);
- get(socket, ref, VSSPath.vehicleFuelRate);
- get(socket, ref, VSSPath.vehicleInsideTemperature);
- }
-
- static void authorize(WebSocket socket, WidgetRef ref) {
- final config = ref.read(ConfigStateprovider);
-
- Map<String, dynamic> map = {
- "action": "authorize",
- "tokens": config.kuksaAuthToken,
- "requestId": requestId
- };
- socket.add(jsonEncode(map));
- }
-
- static void get(WebSocket socket, WidgetRef ref, String path) {
- final config = ref.read(ConfigStateprovider);
-
- Map<String, dynamic> map = {
- "action": "get",
- "tokens": config.kuksaAuthToken,
- "path": path,
- "requestId": requestId
- };
- socket.add(jsonEncode(map));
- }
-
- static void set(WebSocket socket, WidgetRef ref, String path, String value) {
- final config = ref.read(ConfigStateprovider);
- Map<String, dynamic> map = {
- "action": "set",
- "tokens": config.kuksaAuthToken,
- "path": path,
- "requestId": requestId,
- "value": value
- };
- socket.add(jsonEncode(map));
- }
-
- static void subscribe(WebSocket socket, WidgetRef ref, String path) {
- final config = ref.read(ConfigStateprovider);
-
- Map<String, dynamic> map = {
- "action": "subscribe",
- "tokens": config.kuksaAuthToken,
- "path": path,
- "requestId": requestId
- };
- socket.add(jsonEncode(map));
- }
-
- static void parseData(WidgetRef ref, String data) {
- Map<String, dynamic> dataMap = jsonDecode(data);
- if (dataMap["action"] == "subscription" || dataMap["action"] == "get") {
- if (dataMap.containsKey("data")) {
- if ((dataMap["data"] as Map<String, dynamic>).containsKey("dp") &&
- (dataMap["data"] as Map<String, dynamic>).containsKey("path")) {
- String path = dataMap["data"]["path"];
- Map<String, dynamic> dp = dataMap["data"]["dp"];
- if (dp.containsKey("value")) {
- if (dp["value"] != "---") {
- switch (path) {
- case VSSPath.vehicleSpeed:
- ref
- .read(vehicleSignalSpeedProvider.notifier)
- .update(speed: dp["value"]);
- break;
- case VSSPath.vehicleEngineSpeed:
- ref
- .read(vehicleSignalEngineSpeedProvider.notifier)
- .update(speed: dp["value"].toDouble());
- break;
- case VSSPath.vehicleFuelLevel:
- ref
- .read(vehicleSignalFuelLevelProvider.notifier)
- .update(level: dp["value"]);
- break;
- case VSSPath.vehicleFuelRate:
- ref
- .read(vehicleSignalFuelRateProvider.notifier)
- .update(rate: dp["value"]);
- break;
- case VSSPath.vehicleFrontLeftTire:
- ref
- .read(vehicleSignalFrontLeftTirePressureProvider.notifier)
- .update(pressure: dp["value"]);
- break;
- case VSSPath.vehicleFrontRightTire:
- ref
- .read(
- vehicleSignalFrontRightTirePressureProvider.notifier)
- .update(pressure: dp["value"]);
- break;
- case VSSPath.vehicleRearLeftTire:
- ref
- .read(vehicleSignalRearLeftTirePressureProvider.notifier)
- .update(pressure: dp["value"]);
- break;
- case VSSPath.vehicleRearRightTire:
- ref
- .read(vehicleSignalRearRightTirePressureProvider.notifier)
- .update(pressure: dp["value"]);
- break;
- case VSSPath.vehicleIsChildLockActiveLeft:
- ref
- .read(vehicleSignalLeftChildLockActiveProvider.notifier)
- .update(engaged: dp["value"]);
- break;
- case VSSPath.vehicleIsChildLockActiveRight:
- ref
- .read(vehicleSignalRightChildLockActiveProvider.notifier)
- .update(engaged: dp["value"]);
- break;
- case VSSPath.vehicleInsideTemperature:
- ref
- .read(vehicleSignalInsideTempProvider.notifier)
- .update(temp: dp["value"]);
- break;
- case VSSPath.vehicleOutsideTemperature:
- ref
- .read(vehicleSignalOutsideTempProvider.notifier)
- .update(temp: dp["value"]);
- break;
- default:
- print("$path Not Available yet!");
- }
- } else {
- print("ERROR:Value not available yet! Set Value of $path");
- }
- } else {
- print("ERROR:'value': Key not found!");
- }
- } else if ((!dataMap["data"] as Map<String, dynamic>)
- .containsKey("path")) {
- print("ERROR:'path':key not found !");
- } else if ((dataMap["data"] as Map<String, dynamic>)
- .containsKey("dp")) {
- print("ERROR:'dp':key not found !");
- }
- } else {
- print("ERROR:'data':key not found!");
- }
- }
- }
-}
diff --git a/lib/vehicle-signals/vss_client.dart b/lib/vehicle-signals/vss_client.dart
new file mode 100644
index 0000000..ed79e99
--- /dev/null
+++ b/lib/vehicle-signals/vss_client.dart
@@ -0,0 +1,113 @@
+// SPDX-License-Identifier: Apache-2.0
+import 'dart:io';
+import 'package:meta/meta.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:grpc/grpc.dart';
+import 'package:dashboard_app/generated/kuksa/val/v1/val.pbgrpc.dart';
+import 'package:dashboard_app/generated/kuksa/val/v1/types.pb.dart';
+import 'package:dashboard_app/config.dart';
+
+abstract class VssClient {
+ final KuksaConfig config;
+ final ClientChannel channel;
+ final VALClient stub;
+ final Ref ref;
+
+ // Extenders will likely override this
+ final List<String> signals = [];
+
+ VssClient({required this.config, required this.channel, required this.stub, required this.ref});
+
+ // Abstract method extenders must implement
+ void handleSignalUpdates(EntryUpdate update);
+
+ void run() async {
+ if (signals.isEmpty)
+ return;
+
+ var request = SubscribeRequest();
+ for (var i = 0; i < signals.length; i++) {
+ var entry = SubscribeEntry();
+ entry.path = signals[i];
+ entry.fields.add(Field.FIELD_PATH);
+ entry.fields.add(Field.FIELD_VALUE);
+ request.entries.add(entry);
+ }
+
+ try {
+ Map<String, String> metadata = {};
+ if (config.authorization.isNotEmpty) {
+ metadata = {'authorization': "Bearer ${config.authorization}" };
+ }
+ var responseStream = stub.subscribe(request, options: CallOptions(metadata: metadata));
+ await for (var response in responseStream) {
+ for (var update in response.updates) {
+ if (!(update.hasEntry() && update.entry.hasPath()))
+ continue;
+ handleSignalUpdates(update);
+ }
+ }
+ } catch (e) {
+ print(e);
+ }
+ }
+
+ void setUint32(String path, int value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..uint32 = value;
+ set(path, dp, actuator);
+ }
+
+ void setInt32(String path, int value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..int32 = value;
+ set(path, dp, actuator);
+ }
+
+ void setBool(String path, bool value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..bool_12 = value;
+ set(path, dp, actuator);
+ }
+
+ void setString(String path, String value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..string = value;
+ set(path, dp, actuator);
+ }
+
+ void setFloat(String path, double value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..float = value;
+ set(path, dp, actuator);
+ }
+
+ void setDouble(String path, double value, [bool actuator = true]) async {
+ var dp = Datapoint()
+ ..double_18 = value;
+ set(path, dp, actuator);
+ }
+
+ void set(String path, Datapoint dp, bool actuator) async {
+ var entry = DataEntry()
+ ..path = path;
+ var update = EntryUpdate();
+ if (actuator) {
+ entry.actuatorTarget = dp;
+ update.fields.add(Field.FIELD_ACTUATOR_TARGET);
+ } else {
+ entry.value = dp;
+ update.fields.add(Field.FIELD_VALUE);
+ }
+ update.entry = entry;
+ var request = SetRequest();
+ request.updates.add(update);
+ Map<String, String> metadata = {};
+ if (config.authorization.isNotEmpty) {
+ metadata = {'authorization': "Bearer ${config.authorization}" };
+ }
+ await stub.set(request, options: CallOptions(metadata: metadata));
+ }
+
+}
diff --git a/lib/vehicle-signals/vehicle_server_path.dart b/lib/vehicle-signals/vss_path.dart
index 822e304..822e304 100644
--- a/lib/vehicle-signals/vehicle_server_path.dart
+++ b/lib/vehicle-signals/vss_path.dart
diff --git a/lib/vehicle-signals/vss_provider.dart b/lib/vehicle-signals/vss_provider.dart
new file mode 100644
index 0000000..c3724ca
--- /dev/null
+++ b/lib/vehicle-signals/vss_provider.dart
@@ -0,0 +1,147 @@
+// SPDX-License-Identifier: Apache-2.0
+import 'dart:io';
+import 'package:meta/meta.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:grpc/grpc.dart';
+import 'package:dashboard_app/generated/kuksa/val/v1/val.pbgrpc.dart';
+import 'package:dashboard_app/generated/kuksa/val/v1/types.pb.dart';
+import 'package:dashboard_app/config.dart';
+import 'package:dashboard_app/vehicle-signals/vss_client.dart';
+import 'package:dashboard_app/vehicle-signals/vss_path.dart';
+import 'package:dashboard_app/vehicle-signals/vss_signal_providers.dart';
+
+class DashboardVssClient extends VssClient {
+ @override
+ final List<String> signals = [
+ VSSPath.vehicleSpeed,
+ VSSPath.vehicleEngineSpeed,
+ VSSPath.vehicleFuelLevel,
+ VSSPath.vehicleFrontLeftTire,
+ VSSPath.vehicleFrontRightTire,
+ VSSPath.vehicleRearLeftTire,
+ VSSPath.vehicleRearRightTire,
+ VSSPath.vehicleIsChildLockActiveLeft,
+ VSSPath.vehicleIsChildLockActiveRight,
+ VSSPath.vehicleFuelRate,
+ VSSPath.vehicleInsideTemperature,
+ VSSPath.vehicleOutsideTemperature
+ ];
+
+ DashboardVssClient({required super.config, required super.channel, required super.stub, required super.ref});
+
+ @override
+ void handleSignalUpdates(EntryUpdate update) {
+ switch (update.entry.path) {
+ case VSSPath.vehicleSpeed:
+ if (update.entry.value.hasFloat()) {
+ ref
+ .read(vehicleSignalSpeedProvider.notifier)
+ .update(speed: update.entry.value.float);
+ }
+ break;
+ case VSSPath.vehicleEngineSpeed:
+ if (update.entry.value.hasFloat()) {
+ ref
+ .read(vehicleSignalEngineSpeedProvider.notifier)
+ .update(speed: update.entry.value.float);
+ }
+ break;
+ case VSSPath.vehicleFuelLevel:
+ if (update.entry.value.hasUint32()) {
+ ref
+ .read(vehicleSignalFuelLevelProvider.notifier)
+ .update(level: update.entry.value.uint32);
+ }
+ break;
+ case VSSPath.vehicleFuelRate:
+ if (update.entry.value.hasFloat()) {
+ ref
+ .read(vehicleSignalFuelRateProvider.notifier)
+ .update(rate: update.entry.value.float);
+ }
+ break;
+ case VSSPath.vehicleFrontLeftTire:
+ if (update.entry.value.hasUint32()) {
+ ref
+ .read(vehicleSignalFrontLeftTirePressureProvider.notifier)
+ .update(pressure: update.entry.value.uint32);
+ }
+ break;
+ case VSSPath.vehicleFrontRightTire:
+ if (update.entry.value.hasUint32()) {
+ ref
+ .read(vehicleSignalFrontRightTirePressureProvider.notifier)
+ .update(pressure: update.entry.value.uint32);
+ }
+ break;
+ case VSSPath.vehicleRearLeftTire:
+ if (update.entry.value.hasUint32()) {
+ ref
+ .read(vehicleSignalRearLeftTirePressureProvider.notifier)
+ .update(pressure: update.entry.value.uint32);
+ }
+ break;
+ case VSSPath.vehicleRearRightTire:
+ if (update.entry.value.hasUint32()) {
+ ref
+ .read(vehicleSignalRearRightTirePressureProvider.notifier)
+ .update(pressure: update.entry.value.uint32);
+ }
+ break;
+ case VSSPath.vehicleIsChildLockActiveLeft:
+ if (update.entry.value.hasBool_12()) {
+ ref
+ .read(vehicleSignalLeftChildLockActiveProvider.notifier)
+ .update(engaged: update.entry.value.bool_12);
+ }
+ break;
+ case VSSPath.vehicleIsChildLockActiveRight:
+ if (update.entry.value.hasBool_12()) {
+ ref
+ .read(vehicleSignalRightChildLockActiveProvider.notifier)
+ .update(engaged: update.entry.value.bool_12);
+ }
+ break;
+ case VSSPath.vehicleInsideTemperature:
+ if (update.entry.value.hasFloat()) {
+ ref
+ .read(vehicleSignalInsideTempProvider.notifier)
+ .update(temp: update.entry.value.float);
+ }
+ break;
+ case VSSPath.vehicleOutsideTemperature:
+ if (update.entry.value.hasFloat()) {
+ ref
+ .read(vehicleSignalOutsideTempProvider.notifier)
+ .update(temp: update.entry.value.float);
+ }
+ break;
+ default:
+ print("ERROR: Unexpected path ${update.entry.path}");
+ break;
+ }
+ }
+}
+
+final vssClientProvider = Provider((ref) {
+ var config = ref.read(kuksaConfigProvider);
+ debugPrint("Using ${config.hostname}:${config.port}");
+ ChannelCredentials creds;
+ if (config.use_tls && config.ca_certificate.isNotEmpty) {
+ print("Using TLS");
+ if (config.tls_server_name.isNotEmpty)
+ creds = ChannelCredentials.secure(certificates: config.ca_certificate, authority: config.tls_server_name);
+ else
+ creds = ChannelCredentials.secure(certificates: config.ca_certificate);
+ } else {
+ creds = ChannelCredentials.insecure();
+ }
+ final channel = ClientChannel(config.hostname,
+ port: config.port,
+ options: ChannelOptions(credentials: creds));
+
+ final stub = VALClient(channel);
+
+ return DashboardVssClient(config: config, channel: channel, stub: stub, ref: ref);
+});
diff --git a/lib/vehicle-signals/vss_providers.dart b/lib/vehicle-signals/vss_signal_providers.dart
index 6900bdc..7c48dc3 100644
--- a/lib/vehicle-signals/vss_providers.dart
+++ b/lib/vehicle-signals/vss_signal_providers.dart
@@ -1,6 +1,4 @@
// SPDX-License-Identifier: Apache-2.0
-//import 'dart:ffi';
-//import 'dart:io';
import 'package:meta/meta.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -68,9 +66,9 @@ final vehicleSignalEngineSpeedProvider = StateNotifierProvider<
class VehicleSignalFuelLevel {
const VehicleSignalFuelLevel({required this.level});
- final double level;
+ final int level;
- VehicleSignalFuelLevel copyWith({double? level}) {
+ VehicleSignalFuelLevel copyWith({int? level}) {
return VehicleSignalFuelLevel(level: level ?? this.level);
}
}
@@ -82,7 +80,7 @@ class VehicleSignalFuelLevelNotifier
static final VehicleSignalFuelLevel _initialValue =
VehicleSignalFuelLevel(level: 90);
- void update({double? level}) {
+ void update({int? level}) {
state = state.copyWith(level: level);
}
}
@@ -128,9 +126,9 @@ final vehicleSignalFuelRateProvider =
class VehicleSignalFrontLeftTirePressure {
const VehicleSignalFrontLeftTirePressure({required this.pressure});
- final double pressure;
+ final int pressure;
- VehicleSignalFrontLeftTirePressure copyWith({double? pressure}) {
+ VehicleSignalFrontLeftTirePressure copyWith({int? pressure}) {
return VehicleSignalFrontLeftTirePressure(
pressure: pressure ?? this.pressure);
}
@@ -143,7 +141,7 @@ class VehicleSignalFrontLeftTirePressureNotifier
static final VehicleSignalFrontLeftTirePressure _initialValue =
VehicleSignalFrontLeftTirePressure(pressure: 32);
- void update({double? pressure}) {
+ void update({int? pressure}) {
state = state.copyWith(pressure: pressure);
}
}
@@ -160,9 +158,9 @@ final vehicleSignalFrontLeftTirePressureProvider = StateNotifierProvider<
class VehicleSignalFrontRightTirePressure {
const VehicleSignalFrontRightTirePressure({required this.pressure});
- final double pressure;
+ final int pressure;
- VehicleSignalFrontRightTirePressure copyWith({double? pressure}) {
+ VehicleSignalFrontRightTirePressure copyWith({int? pressure}) {
return VehicleSignalFrontRightTirePressure(
pressure: pressure ?? this.pressure);
}
@@ -175,7 +173,7 @@ class VehicleSignalFrontRightTirePressureNotifier
static final VehicleSignalFrontRightTirePressure _initialValue =
VehicleSignalFrontRightTirePressure(pressure: 32);
- void update({double? pressure}) {
+ void update({int? pressure}) {
state = state.copyWith(pressure: pressure);
}
}
@@ -192,9 +190,9 @@ final vehicleSignalFrontRightTirePressureProvider = StateNotifierProvider<
class VehicleSignalRearLeftTirePressure {
const VehicleSignalRearLeftTirePressure({required this.pressure});
- final double pressure;
+ final int pressure;
- VehicleSignalRearLeftTirePressure copyWith({double? pressure}) {
+ VehicleSignalRearLeftTirePressure copyWith({int? pressure}) {
return VehicleSignalRearLeftTirePressure(
pressure: pressure ?? this.pressure);
}
@@ -207,7 +205,7 @@ class VehicleSignalRearLeftTirePressureNotifier
static final VehicleSignalRearLeftTirePressure _initialValue =
VehicleSignalRearLeftTirePressure(pressure: 33);
- void update({double? pressure}) {
+ void update({int? pressure}) {
state = state.copyWith(pressure: pressure);
}
}
@@ -224,9 +222,9 @@ final vehicleSignalRearLeftTirePressureProvider = StateNotifierProvider<
class VehicleSignalRearRightTirePressure {
const VehicleSignalRearRightTirePressure({required this.pressure});
- final double pressure;
+ final int pressure;
- VehicleSignalRearRightTirePressure copyWith({double? pressure}) {
+ VehicleSignalRearRightTirePressure copyWith({int? pressure}) {
return VehicleSignalRearRightTirePressure(
pressure: pressure ?? this.pressure);
}
@@ -239,7 +237,7 @@ class VehicleSignalRearRightTirePressureNotifier
static final VehicleSignalRearRightTirePressure _initialValue =
VehicleSignalRearRightTirePressure(pressure: 34);
- void update({double? pressure}) {
+ void update({int? pressure}) {
state = state.copyWith(pressure: pressure);
}
}