Skip to content

Commit 6329383

Browse files
authored
Merge branch 'flutter' into soundmeter
2 parents 1f8cee9 + 52663df commit 6329383

14 files changed

Lines changed: 316 additions & 43 deletions

android/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
33
zipStoreBase=GRADLE_USER_HOME
44
zipStorePath=wrapper/dists
5-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
5+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip

android/settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pluginManagement {
1818

1919
plugins {
2020
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
21-
id "com.android.application" version "8.3.1" apply false
21+
id "com.android.application" version "8.10.1" apply false
2222
id "org.jetbrains.kotlin.android" version "2.1.21" apply false
2323
}
2424

assets/icons/ic_wifi_connected.png

23.3 KB
Loading
3.06 KB
Loading

lib/communication/packet_handler.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ import 'dart:convert';
33
import 'package:flutter/foundation.dart';
44
import 'package:pslab/communication/commands_proto.dart';
55
import 'package:pslab/communication/handler/base.dart';
6+
import 'package:pslab/communication/socket_client.dart';
67
import 'package:pslab/others/logger_service.dart';
8+
import 'package:pslab/others/science_lab_common.dart';
9+
import 'package:pslab/providers/locator.dart';
710

811
class PacketHandler {
912
late Uint8List _buffer;
1013
late bool _connected;
1114
late CommunicationHandler _mCommunicationHandler;
15+
late SocketClient _socketClient;
1216
static String version = '';
1317
late CommandsProto _mCommandsProto;
1418
int _timeout = 500, versionStringLength = 8;
@@ -18,12 +22,15 @@ class PacketHandler {
1822
_timeout = timeout;
1923
_mCommandsProto = CommandsProto();
2024
_mCommunicationHandler = communicationHandler;
21-
_connected = (_mCommunicationHandler.isConnected());
25+
_socketClient = getIt.get<SocketClient>();
26+
_connected = (getIt.get<ScienceLabCommon>().isWiFiConnected() ||
27+
_mCommunicationHandler.isConnected());
2228
_buffer = Uint8List(10000);
2329
}
2430

2531
bool isConnected() {
26-
_connected = (_mCommunicationHandler.isConnected());
32+
_connected = (getIt.get<ScienceLabCommon>().isWiFiConnected() ||
33+
_mCommunicationHandler.isConnected());
2734
return _connected;
2835
}
2936

@@ -145,13 +152,17 @@ class PacketHandler {
145152
if (_mCommunicationHandler.isConnected()) {
146153
bytesRead[0] =
147154
await _mCommunicationHandler.read(_buffer, bytesToRead, _timeout);
155+
} else if (getIt.get<ScienceLabCommon>().isWiFiConnected()) {
156+
bytesRead[0] = await _socketClient.read(_buffer, bytesToRead, _timeout);
148157
}
149158
return bytesRead[0];
150159
}
151160

152161
void _commonWrite(Uint8List data) {
153162
if (_mCommunicationHandler.isConnected()) {
154163
_mCommunicationHandler.write(data, _timeout);
164+
} else if (getIt.get<ScienceLabCommon>().isWiFiConnected()) {
165+
_socketClient.write(data, _timeout);
155166
}
156167
}
157168
}

lib/communication/science_lab.dart

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import 'package:flutter/foundation.dart';
33
import 'package:pslab/communication/commands_proto.dart';
44
import 'package:pslab/communication/handler/base.dart';
55
import 'package:pslab/communication/packet_handler.dart';
6+
import 'package:pslab/communication/socket_client.dart';
67
import 'package:pslab/others/logger_service.dart';
8+
import 'package:pslab/providers/locator.dart';
79

810
import 'analogChannel/analog_acquisition_channel.dart';
911
import 'analogChannel/analog_constants.dart';
@@ -33,12 +35,14 @@ class ScienceLab {
3335
List<DigitalChannel> dChannels = [];
3436

3537
late CommunicationHandler mCommunicationHandler;
38+
late SocketClient mSocketClient;
3639
late PacketHandler mPacketHandler;
3740
late CommandsProto mCommandsProto;
3841
late AnalogConstants mAnalogConstants;
3942

4043
ScienceLab(CommunicationHandler communicationHandler) {
4144
mCommunicationHandler = communicationHandler;
45+
mSocketClient = getIt.get<SocketClient>();
4246
mCommandsProto = CommandsProto();
4347
mAnalogConstants = AnalogConstants();
4448
}
@@ -57,8 +61,20 @@ class ScienceLab {
5761
}
5862
}
5963

64+
Future<void> connectWiFi() async {
65+
try {
66+
await mSocketClient.openConnection("192.168.4.1", 80);
67+
mPacketHandler = PacketHandler(500, mCommunicationHandler);
68+
} catch (e) {
69+
logger.e(e);
70+
}
71+
if (isConnected()) {
72+
await _initializeVariables();
73+
}
74+
}
75+
6076
bool isConnected() {
61-
return mCommunicationHandler.isConnected();
77+
return (mSocketClient.isConnected() || mCommunicationHandler.isConnected());
6278
}
6379

6480
bool isDeviceFound() {
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import 'dart:io';
2+
import 'dart:typed_data';
3+
4+
import 'package:pslab/others/logger_service.dart';
5+
6+
class SocketClient {
7+
late Socket _socket;
8+
late Stream<Uint8List> _socketStream;
9+
bool _connected = false;
10+
Future<void> openConnection(String host, int port) async {
11+
try {
12+
_socket = await Socket.connect(host, port);
13+
_connected = true;
14+
_socket.setOption(SocketOption.tcpNoDelay, true);
15+
_socketStream = _socket.asBroadcastStream();
16+
} catch (e) {
17+
logger.e("Error connecting to socket: $e");
18+
}
19+
}
20+
21+
Future<int> read(Uint8List dest, int bytesToRead, int timeoutMillis) async {
22+
int numBytesRead = 0;
23+
int bytesToBeReadTemp = bytesToRead;
24+
25+
try {
26+
await for (Uint8List receivedData
27+
in _socketStream.timeout(Duration(milliseconds: timeoutMillis))) {
28+
int readNow = receivedData.length;
29+
30+
if (readNow == 0) {
31+
logger.e("Read Error: $bytesToBeReadTemp");
32+
return numBytesRead;
33+
} else {
34+
int readLength = readNow.clamp(0, bytesToBeReadTemp);
35+
dest.setRange(numBytesRead, numBytesRead + readLength, receivedData);
36+
numBytesRead += readLength;
37+
bytesToBeReadTemp -= readLength;
38+
}
39+
40+
if (numBytesRead >= bytesToRead) {
41+
break;
42+
}
43+
}
44+
} catch (e) {
45+
logger.e("Exception during read: $e");
46+
}
47+
48+
logger.d("Bytes Read: $numBytesRead");
49+
return numBytesRead;
50+
}
51+
52+
void write(Uint8List src, int timeoutMillis) {
53+
_socket.add(src);
54+
}
55+
56+
bool isConnected() {
57+
return _connected;
58+
}
59+
60+
void setConnected(bool connected) {
61+
_connected = connected;
62+
}
63+
}

lib/others/science_lab_common.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import 'package:pslab/communication/handler/base.dart';
22
import 'package:pslab/communication/science_lab.dart';
3+
import 'package:pslab/communication/socket_client.dart';
34
import 'package:pslab/others/logger_service.dart';
45

56
class ScienceLabCommon {
67
static late ScienceLab _scienceLab;
78
static late CommunicationHandler communicationHandler;
9+
static late SocketClient _socketClient;
810

911
ScienceLabCommon(CommunicationHandler mCommunicationHandler) {
1012
communicationHandler = mCommunicationHandler;
1113
_scienceLab = ScienceLab(communicationHandler);
14+
_socketClient = _scienceLab.mSocketClient;
1215
}
1316

1417
ScienceLab getScienceLab() {
@@ -28,6 +31,11 @@ class ScienceLabCommon {
2831
return communicationHandler.initialize();
2932
}
3033

34+
Future<bool> openWiFiDevice() async {
35+
await _scienceLab.connectWiFi();
36+
return _socketClient.isConnected();
37+
}
38+
3139
void setConnected(bool connected) {
3240
communicationHandler.connected = connected;
3341
}
@@ -39,4 +47,12 @@ class ScienceLabCommon {
3947
bool isDeviceFound() {
4048
return communicationHandler.isDeviceFound();
4149
}
50+
51+
bool isWiFiConnected() {
52+
return _socketClient.isConnected();
53+
}
54+
55+
void setWiFiConnected(bool connected) {
56+
_socketClient.setConnected(connected);
57+
}
4258
}

lib/providers/board_state_provider.dart

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:connectivity_plus/connectivity_plus.dart';
12
import 'package:flutter/cupertino.dart';
23
import 'package:pslab/communication/science_lab.dart';
34
import 'package:pslab/constants.dart';
@@ -32,14 +33,33 @@ class BoardStateProvider extends ChangeNotifier {
3233
pslabIsConnected = await scienceLabCommon.openDevice();
3334
setPSLabVersionIDs();
3435
}
35-
} else if (usbEvent.event == UsbEvent.ACTION_USB_DETACHED) {
36+
} else if (usbEvent.event == UsbEvent.ACTION_USB_DETACHED &&
37+
!scienceLabCommon.isWiFiConnected()) {
3638
scienceLabCommon.setConnected(false);
3739
pslabIsConnected = false;
3840
pslabVersionID = 'Not Connected';
3941
notifyListeners();
4042
}
4143
},
4244
);
45+
46+
Connectivity()
47+
.onConnectivityChanged
48+
.listen((List<ConnectivityResult> results) {
49+
if (results.contains(ConnectivityResult.none)) {
50+
scienceLabCommon.setWiFiConnected(false);
51+
pslabIsConnected = false;
52+
pslabVersionID = 'Not Connected';
53+
notifyListeners();
54+
}
55+
});
56+
}
57+
}
58+
59+
Future<void> initializeWiFi() async {
60+
if (!pslabIsConnected) {
61+
pslabIsConnected = await scienceLabCommon.openWiFiDevice();
62+
setPSLabVersionIDs();
4363
}
4464
}
4565

lib/providers/locator.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:pslab/communication/handler/android_comms_handler.dart';
55
import 'package:pslab/communication/handler/base.dart';
66
import 'package:pslab/communication/handler/ios_comms_handler.dart';
77
import 'package:pslab/communication/science_lab.dart';
8+
import 'package:pslab/communication/socket_client.dart';
89
import 'package:pslab/others/science_lab_common.dart';
910
import 'package:pslab/providers/board_state_provider.dart';
1011

@@ -18,6 +19,7 @@ void setupLocator() {
1819
return IosNoOpCommunicationHandler();
1920
}
2021
});
22+
getIt.registerLazySingleton<SocketClient>(() => SocketClient());
2123
getIt.registerLazySingleton<ScienceLabCommon>(
2224
() => ScienceLabCommon(getIt.get<CommunicationHandler>()));
2325
getIt.registerLazySingleton<ScienceLab>(

0 commit comments

Comments
 (0)