Skip to content

Commit ac5b708

Browse files
authored
feat: implement doors buttons (#47)
* refactor: moved function ids related to authorization to a separate enum * feat: cabin light control * feat: battery temperature and voltage parameters autoupdate * chore: change ChargingScreen's layout * feat: add 2gis's new app package id * chore: use MediaQuery instead of Screen on Statistic item * chore: allow data input for one axis joystick user defined button * chore: format integers to hex in user defined button fields * chore: invert y axis on YAxisJoystickButton * feat: implemented door buttons * feat: implemented trunk and hood joysticks * chore: remove duplicated tiles from CarInfoScreen * chore: make buttons on CarWidget bigger * chore: v0.15.0+31
1 parent b215eb8 commit ac5b708

File tree

59 files changed

+2051
-1205
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2051
-1205
lines changed

android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<package android:name="net.osmand" />
2727
<package android:name="net.osmand.plus" />
2828
<package android:name="ru.dublgis.dgismobile" />
29+
<package android:name="com.dss.doublegis" />
2930
<package android:name="com.tencent.map" />
3031
<package android:name="com.here.app.maps" />
3132
<package android:name="com.huawei.maps.app" />

lib/app/scopes/flows/selected_data_source_scope.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,17 @@ class SelectedDataSourceScope extends AutoRouter {
128128
..subscribeToLowBeam()
129129
..subscribeToTurnSignals()
130130
..subscribeToReverseLight()
131-
..subscribeToBrakeLight(),
131+
..subscribeToBrakeLight()
132+
..subscribeToCabinLight(),
132133
lazy: false,
133134
),
135+
BlocProvider(
136+
create: (context) => DoorsCubit(
137+
dataSource: context.read(),
138+
)
139+
..subscribeToLeftDoor()
140+
..subscribeToRightDoor(),
141+
),
134142
BlocProvider(
135143
create: (context) {
136144
context.read<OutgoingPackagesCubit>().subscribeTo(

lib/data/services/data_source/demo_data_source.dart

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ class DemoDataSource extends DataSource
338338
..voidOn<BrakeLightParameterId>(() {
339339
_sendSetBoolUint8ResultCallback(const BrakeLightParameterId());
340340
})
341+
..voidOn<CabinLightParameterId>(() {
342+
_sendSetBoolUint8ResultCallback(const CabinLightParameterId());
343+
})
341344
..voidOn<HighBeamParameterId>(() {
342345
_sendSetBoolUint8ResultCallback(const HighBeamParameterId());
343346
})
@@ -373,8 +376,16 @@ class DemoDataSource extends DataSource
373376
);
374377
})
375378
..voidOn<CustomParameterId>(() {
376-
if (parameterId.value == 0x00E0) {
377-
subscriptionCallbacks.add(_sendBackLightsBlocInfoCallback);
379+
switch (parameterId.value) {
380+
case 0x00E0:
381+
subscriptionCallbacks.add(_sendBackLightsBlocInfoCallback);
382+
break;
383+
case ButtonFunctionId.leftDoorId:
384+
_sendDoorToggleResultCallback(ButtonFunctionId.leftDoor);
385+
break;
386+
case ButtonFunctionId.rightDoorId:
387+
_sendDoorToggleResultCallback(ButtonFunctionId.rightDoor);
388+
break;
378389
}
379390
});
380391

@@ -509,6 +520,12 @@ class DemoDataSource extends DataSource
509520
package.boolData,
510521
);
511522
})
523+
..voidOn<CabinLightParameterId>(() {
524+
_sendSetBoolUint8ResultCallback(
525+
const CabinLightParameterId(),
526+
package.boolData,
527+
);
528+
})
512529
..voidOn<HighBeamParameterId>(() {
513530
_sendSetBoolUint8ResultCallback(
514531
const HighBeamParameterId(),
@@ -556,6 +573,13 @@ class DemoDataSource extends DataSource
556573
const CustomImageParameterId(),
557574
package.data[1],
558575
);
576+
})
577+
// Doors
578+
..voidOn<LeftDoorParameterId>(() {
579+
_sendDoorToggleResultCallback(ButtonFunctionId.leftDoor);
580+
})
581+
..voidOn<RightDoorParameterId>(() {
582+
_sendDoorToggleResultCallback(ButtonFunctionId.rightDoor);
559583
});
560584

561585
return const Result.value(null);
@@ -1060,6 +1084,25 @@ class DemoDataSource extends DataSource
10601084
);
10611085
}
10621086

1087+
Future<void> _sendDoorToggleResultCallback(
1088+
ButtonFunctionId functionId, [
1089+
bool? requiredResult,
1090+
]) async {
1091+
await Future<void>.delayed(const Duration(milliseconds: 100));
1092+
final rand = randomBool;
1093+
final _requiredResult = requiredResult ?? rand;
1094+
1095+
_sendPackage(
1096+
DataSourceIncomingPackage.fromConvertible(
1097+
secondConfigByte: 0x95, // 10010101(incoming 0x15)
1098+
parameterId: functionId.value,
1099+
convertible: DoorBody(
1100+
isOpen: generateRandomErrors() ? randomBool : _requiredResult,
1101+
),
1102+
),
1103+
);
1104+
}
1105+
10631106
Future<void> _sendSetUint8ResultCallback(
10641107
DataSourceParameterId parameterId, [
10651108
int? requiredResult,

lib/domain/data_source/blocs/battery_data_cubit.dart

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import 'dart:async';
2+
13
import 'package:bloc/bloc.dart';
24
import 'package:equatable/equatable.dart';
35
import 'package:meta/meta.dart';
46
import 'package:pixel_app_flutter/domain/data_source/data_source.dart';
57
import 'package:pixel_app_flutter/domain/data_source/models/package/incoming/incoming_data_source_packages.dart';
8+
import 'package:pixel_app_flutter/domain/data_source/models/package/outgoing/outgoing_data_source_packages.dart';
69
import 'package:pixel_app_flutter/domain/data_source/models/package_data/package_data.dart';
710
import 'package:re_seedwork/re_seedwork.dart';
811

@@ -163,6 +166,10 @@ class BatteryDataCubit extends Cubit<BatteryDataState>
163166
BlocLoggerMixin<DataSourcePackage, BatteryDataState> {
164167
BatteryDataCubit({
165168
required this.dataSource,
169+
this.temperatureUpdateDuration = kDefaultTemperatureUpdateDuration,
170+
this.voltageUpdateDuration = kDefaultVoltageUpdateDuration,
171+
this.temperatureParametersId = kDefaultTemperatureParameterIds,
172+
this.voltageParametersId = kDefaultVoltageParameterIds,
166173
}) : super(const BatteryDataState.initial()) {
167174
subscribe<DataSourceIncomingPackage>(dataSource.packageStream, (value) {
168175
value
@@ -274,6 +281,89 @@ class BatteryDataCubit extends Cubit<BatteryDataState>
274281
const DataSourceParameterId.maxTemperature(),
275282
};
276283

284+
static const kDefaultTemperatureUpdateDuration = Duration(seconds: 3);
285+
static const kDefaultVoltageUpdateDuration = Duration(seconds: 3);
286+
277287
@protected
278288
final DataSource dataSource;
289+
290+
@protected
291+
final Duration temperatureUpdateDuration;
292+
293+
@protected
294+
final Duration voltageUpdateDuration;
295+
296+
@protected
297+
final List<DataSourceParameterId> temperatureParametersId;
298+
299+
@protected
300+
final List<DataSourceParameterId> voltageParametersId;
301+
302+
@visibleForTesting
303+
static const kDefaultVoltageParameterIds = [
304+
DataSourceParameterId.lowVoltageMinMaxDelta(),
305+
DataSourceParameterId.lowVoltageOneToThree(),
306+
DataSourceParameterId.lowVoltageFourToSix(),
307+
DataSourceParameterId.lowVoltageSevenToNine(),
308+
DataSourceParameterId.lowVoltageTenToTwelve(),
309+
DataSourceParameterId.lowVoltageThirteenToFifteen(),
310+
DataSourceParameterId.lowVoltageSixteenToEighteen(),
311+
DataSourceParameterId.lowVoltageNineteenToTwentyOne(),
312+
DataSourceParameterId.lowVoltageTwentyTwoToTwentyFour(),
313+
DataSourceParameterId.lowVoltageTwentyFiveToTwentySeven(),
314+
DataSourceParameterId.lowVoltageTwentyEightToThirty(),
315+
DataSourceParameterId.lowVoltageThirtyOneToThirtyThree(),
316+
];
317+
318+
@visibleForTesting
319+
static const kDefaultTemperatureParameterIds = [
320+
DataSourceParameterId.temperatureFirstBatch(),
321+
DataSourceParameterId.temperatureSecondBatch(),
322+
DataSourceParameterId.temperatureThirdBatch(),
323+
];
324+
325+
@visibleForTesting
326+
Timer? temperatureTimer;
327+
328+
@visibleForTesting
329+
Timer? voltageTimer;
330+
331+
void startUpdatingTemperature() {
332+
cancelUpdatingTemperature();
333+
_sendValueRequestPackages(temperatureParametersId);
334+
temperatureTimer = Timer.periodic(temperatureUpdateDuration, (timer) {
335+
_sendValueRequestPackages(temperatureParametersId);
336+
});
337+
}
338+
339+
void startUpdatingVoltage() {
340+
cancelUpdatingVoltage();
341+
_sendValueRequestPackages(voltageParametersId);
342+
voltageTimer = Timer.periodic(voltageUpdateDuration, (timer) {
343+
_sendValueRequestPackages(voltageParametersId);
344+
});
345+
}
346+
347+
void cancelUpdatingTemperature() {
348+
temperatureTimer?.cancel();
349+
temperatureTimer = null;
350+
}
351+
352+
void cancelUpdatingVoltage() {
353+
voltageTimer?.cancel();
354+
voltageTimer = null;
355+
}
356+
357+
void _sendValueRequestPackages(List<DataSourceParameterId> ids) {
358+
for (final id in ids) {
359+
final package = OutgoingValueRequestPackage(parameterId: id);
360+
dataSource.sendPackage(package);
361+
}
362+
}
363+
364+
@override
365+
Future<void> close() {
366+
cancelUpdatingTemperature();
367+
return super.close();
368+
}
279369
}

0 commit comments

Comments
 (0)