11import 'dart:typed_data' ;
22
3- import 'package:flutter_libserialport/flutter_libserialport .dart' ;
3+ import 'package:flusbserial/flusbserial .dart' ;
44import 'package:pslab/communication/handler/base.dart' ;
55import 'package:pslab/others/logger_service.dart' ;
66
@@ -9,7 +9,7 @@ class DesktopUSBCommunicationHandler implements CommunicationHandler {
99 static const int pslabProductIdV5 = 223 ;
1010 static const int pslabVendorIdV6 = 0x10C4 ;
1111 static const int pslabProductIdV6 = 0xEA60 ;
12- SerialPort ? mPort ;
12+ UsbSerialDevice ? mDevice ;
1313
1414 @override
1515 bool connected = false ;
@@ -19,22 +19,22 @@ class DesktopUSBCommunicationHandler implements CommunicationHandler {
1919
2020 @override
2121 void close () {
22- if (! connected || mPort == null ) return ;
23- mPort ? .close ();
22+ if (! connected || mDevice == null ) return ;
23+ mDevice ? .close ();
2424 connected = false ;
2525 }
2626
2727 @override
2828 Future <void > initialize () async {
29- List < String > addresses = SerialPort .availablePorts ;
30- for ( final address in addresses) {
31- final port = SerialPort (address);
32- if ((port .vendorId == pslabVendorIdV5 &&
33- port .productId == pslabProductIdV5) ||
34- (port .vendorId == pslabVendorIdV6 &&
35- port .productId == pslabProductIdV6)) {
29+ UsbSerialDevice . init () ;
30+ List < UsbDevice > availableDevices = await UsbSerialDevice . listDevices ();
31+ for ( final device in availableDevices) {
32+ if ((device .vendorId == pslabVendorIdV5 &&
33+ device .productId == pslabProductIdV5) ||
34+ (device .vendorId == pslabVendorIdV6 &&
35+ device .productId == pslabProductIdV6)) {
3636 deviceFound = true ;
37- mPort = port ;
37+ mDevice = UsbSerialDevice . createDevice (device) ;
3838 break ;
3939 }
4040 }
@@ -60,11 +60,11 @@ class DesktopUSBCommunicationHandler implements CommunicationHandler {
6060 if (! deviceFound) {
6161 throw Exception ("Device not connected" );
6262 }
63- mPort ? . openReadWrite ();
64- mPort ? .config.baudRate = 1000000 ;
65- mPort ? .config.bits = 8 ;
66- mPort ? .config.stopBits = 1 ;
67- mPort ? .config.parity = SerialPortParity .none ;
63+ await mDevice ? . open ();
64+ await mDevice ? . setBaudRate ( 1000000 ) ;
65+ await mDevice ? . setDataBits ( UsbSerialInterface .dataBits8) ;
66+ await mDevice ? . setStopBits ( UsbSerialInterface .stopBits1) ;
67+ await mDevice ? . setParity ( UsbSerialInterface .parityNone) ;
6868 connected = true ;
6969 }
7070
@@ -74,14 +74,16 @@ class DesktopUSBCommunicationHandler implements CommunicationHandler {
7474 int bytesToBeReadTemp = bytesToRead;
7575 try {
7676 while (numBytesRead < bytesToRead) {
77- Uint8List receivedData = mPort! .read (bytesToBeReadTemp, timeout: 0 );
78- int readNow = receivedData.length;
77+ Uint8List ? receivedData =
78+ await mDevice? .read (bytesToBeReadTemp, timeoutMillis);
79+ int ? readNow = receivedData? .length;
80+ logger.d ("Received chunk: $receivedData " );
7981 if (readNow == 0 ) {
8082 logger.e ("Read Error: $bytesToBeReadTemp " );
8183 return numBytesRead;
8284 } else {
83- int readLength = readNow.clamp (0 , bytesToBeReadTemp);
84- dest.setRange (numBytesRead, numBytesRead + readLength, receivedData);
85+ int readLength = readNow! .clamp (0 , bytesToBeReadTemp);
86+ dest.setRange (numBytesRead, numBytesRead + readLength, receivedData! );
8587 numBytesRead += readLength;
8688 bytesToBeReadTemp -= readLength;
8789 }
@@ -96,7 +98,6 @@ class DesktopUSBCommunicationHandler implements CommunicationHandler {
9698
9799 @override
98100 void write (Uint8List src, int timeoutMillis) {
99- mPort? .write (src, timeout: 0 );
100- mPort? .flush ();
101+ mDevice? .write (src, timeoutMillis);
101102 }
102103}
0 commit comments