Skip to content

Commit c61ee9f

Browse files
authored
Merge pull request #2 from Kamoool/AddedSerialUtils
Added serial utils
2 parents edefe4f + 83dd01f commit c61ee9f

6 files changed

Lines changed: 267 additions & 283 deletions

File tree

lib/model/serial_utils.dart

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import 'dart:io';
2+
import 'dart:typed_data';
3+
import 'package:flutter_libserialport/flutter_libserialport.dart';
4+
import 'package:qs_ds_app/model/settings_repository.dart';
5+
6+
class SerialPortUtils {
7+
SerialPort serialPort;
8+
late Function()? notify;
9+
static SerialPortUtils? instance;
10+
late bool stopListener;
11+
12+
SerialPortUtils.internal({required this.serialPort}) {
13+
SerialPortConfig config = SerialPortConfig();
14+
config.baudRate = 9600;
15+
config.bits = 8;
16+
config.stopBits = 1;
17+
config.parity = SerialPortParity.none;
18+
config.dtr = SerialPortDtr.on;
19+
config.setFlowControl(SerialPortFlowControl.none);
20+
serialPort.openReadWrite();
21+
serialPort.config = config;
22+
stopListener = false;
23+
attachPortListener();
24+
}
25+
26+
factory SerialPortUtils({SerialPort? serialPort}) {
27+
if (instance == null && serialPort != null) {
28+
instance = SerialPortUtils.internal(serialPort: serialPort);
29+
}
30+
return instance!;
31+
}
32+
33+
void setNotify(Function() notify) {
34+
this.notify = notify;
35+
}
36+
37+
void disconnect() {
38+
stopListener = true;
39+
sendString('E');
40+
serialPort.close();
41+
serialPort.dispose();
42+
instance = null;
43+
}
44+
45+
void cut(){
46+
sendString('C');
47+
}
48+
49+
void blip(){
50+
sendString('B');
51+
}
52+
53+
void readData(){
54+
sendString('R');
55+
}
56+
57+
void saveSettings(){
58+
sendString(SettingsRepository().generateSaveSettings());
59+
}
60+
61+
void resetSettings(){
62+
sendString('W');
63+
}
64+
65+
void sendString(String string) {
66+
serialPort.write(Uint8List.fromList('$string\n'.codeUnits), timeout: 100);
67+
}
68+
69+
Future<void> attachPortListener() async {
70+
final reader = SerialPortReader(serialPort);
71+
var b = BytesBuilder();
72+
reader.stream.listen((Uint8List data) {
73+
b.add(data);
74+
if (String.fromCharCodes(b.toBytes()).contains('\r\n')) {
75+
List<String> stringList =
76+
String.fromCharCodes(b.toBytes()).split('\r\n');
77+
b.clear();
78+
if (stringList[stringList.length - 1] == '') {
79+
for (int i = 0; i < stringList.length - 1; i++) {
80+
SettingsRepository().parseValues(stringList[i]);
81+
notify!();
82+
}
83+
} else {
84+
b.add(
85+
Uint8List.fromList(stringList[stringList.length - 1].codeUnits));
86+
for (int i = 0; i < stringList.length - 1; i++) {
87+
SettingsRepository().parseValues(stringList[i]);
88+
notify!();
89+
}
90+
}
91+
}
92+
if (stopListener) {
93+
reader.close();
94+
}
95+
});
96+
}
97+
}

lib/model/settings_repository.dart

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:flutter/material.dart';
2-
32
import '../model/setting.dart';
43

54
class SettingsRepository {
@@ -83,51 +82,12 @@ class SettingsRepository {
8382
final Setting postDelayQS = Setting(SettingType.PostDelayQS, '500');
8483
final Setting postDelayDS = Setting(SettingType.PostDelayDS, '500');
8584

86-
factory SettingsRepository(){
85+
factory SettingsRepository() {
8786
return instance;
8887
}
8988

9089
SettingsRepository.internal() {
91-
// settingsMap = {
92-
// SettingType.RPM: Setting(SettingType.RPM, '1234'),
93-
// SettingType.Sensor: Setting(SettingType.Sensor, '120'),
94-
// SettingType.MajorVersion: Setting(SettingType.MajorVersion, '1'),
95-
// SettingType.MinorVersion: Setting(SettingType.MinorVersion, '9'),
96-
// SettingType.QSType: Setting(SettingType.QSType, '1'),
97-
// SettingType.DSType: Setting(SettingType.DSType, '1'),
98-
// SettingType.QSEnable: Setting(SettingType.QSEnable, '1'),
99-
// SettingType.DSEnable: Setting(SettingType.DSEnable, '1'),
100-
// SettingType.PushCheckQS: Setting(SettingType.PushCheckQS, '1'),
101-
// SettingType.Pulses: Setting(SettingType.Pulses, '2'),
102-
// SettingType.PreDelayQS: Setting(SettingType.PreDelayQS, '5'),
103-
// SettingType.CutTime1: Setting(SettingType.CutTime1, '70'),
104-
// SettingType.CutTime2: Setting(SettingType.CutTime2, '70'),
105-
// SettingType.CutTime3: Setting(SettingType.CutTime3, '70'),
106-
// SettingType.CutTime4: Setting(SettingType.CutTime4, '70'),
107-
// SettingType.CutTime5: Setting(SettingType.CutTime5, '70'),
108-
// SettingType.CutTime6: Setting(SettingType.CutTime6, '70'),
109-
// SettingType.CutTime7: Setting(SettingType.CutTime7, '70'),
110-
// SettingType.CutTime8: Setting(SettingType.CutTime8, '70'),
111-
// SettingType.QSForce: Setting(SettingType.QSForce, '100'),
112-
// SettingType.MinRPMQS: Setting(SettingType.MinRPMQS, '4000'),
113-
// SettingType.PreDelayDS: Setting(SettingType.PreDelayDS, '5'),
114-
// SettingType.BlipTime1: Setting(SettingType.BlipTime1, '80'),
115-
// SettingType.BlipTime2: Setting(SettingType.BlipTime2, '80'),
116-
// SettingType.BlipTime3: Setting(SettingType.BlipTime3, '80'),
117-
// SettingType.BlipTime4: Setting(SettingType.BlipTime4, '80'),
118-
// SettingType.BlipTime5: Setting(SettingType.BlipTime5, '80'),
119-
// SettingType.BlipTime6: Setting(SettingType.BlipTime6, '80'),
120-
// SettingType.BlipTime7: Setting(SettingType.BlipTime7, '80'),
121-
// SettingType.BlipTime8: Setting(SettingType.BlipTime8, '80'),
122-
// SettingType.DSForce: Setting(SettingType.DSForce, '100'),
123-
// SettingType.MinRPMDS: Setting(SettingType.MinRPMDS, '4000'),
124-
// SettingType.MaxRPMDS: Setting(SettingType.MinRPMQS, '10000'),
125-
// SettingType.PostDelayQS: Setting(SettingType.PostDelayQS, '500'),
126-
// SettingType.PostDelayDS: Setting(SettingType.PostDelayDS, '500'),
127-
// };
12890
settingsList = [
129-
// rpm,
130-
// sensorReading,
13191
majorVersion,
13292
minorVersion,
13393
qsType,

0 commit comments

Comments
 (0)