@@ -5,8 +5,10 @@ import 'package:flutter/foundation.dart';
5
5
import 'package:pslab/communication/commands_proto.dart' ;
6
6
import 'package:pslab/communication/handler/base.dart' ;
7
7
import 'package:pslab/communication/packet_handler.dart' ;
8
+ import 'package:pslab/communication/peripherals/dac_channel.dart' ;
8
9
import 'package:pslab/communication/socket_client.dart' ;
9
10
import 'package:pslab/others/logger_service.dart' ;
11
+ import 'package:pslab/providers/board_state_provider.dart' ;
10
12
import 'package:pslab/providers/locator.dart' ;
11
13
12
14
import 'analogChannel/analog_acquisition_channel.dart' ;
@@ -35,6 +37,7 @@ class ScienceLab {
35
37
Map <String , String > waveType = {};
36
38
List <AnalogAcquisitionChannel > aChannels = [];
37
39
List <DigitalChannel > dChannels = [];
40
+ Map <String , DACChannel > dacChannels = {};
38
41
static final double capacitorDischargeVoltage = 0.01 * 3.3 ;
39
42
40
43
late CommunicationHandler mCommunicationHandler;
@@ -115,6 +118,17 @@ class ScienceLab {
115
118
squareWaveFrequency['SQR2' ] = 0.0 ;
116
119
squareWaveFrequency['SQR3' ] = 0.0 ;
117
120
squareWaveFrequency['SQR4' ] = 0.0 ;
121
+ if (getIt <BoardStateProvider >().pslabVersion == 6 ) {
122
+ dacChannels['PCS' ] = DACChannel ('PCS' , [0 , 3.3 ], 0 , 0 );
123
+ dacChannels['PV3' ] = DACChannel ('PV3' , [0 , 3.3 ], 1 , 1 );
124
+ dacChannels['PC2' ] = DACChannel ('PC2' , [- 3.3 , 3.3 ], 2 , 0 );
125
+ dacChannels['PV1' ] = DACChannel ('PV1' , [- 5 , 5 ], 3 , 1 );
126
+ } else {
127
+ dacChannels['PCS' ] = DACChannel ('PCS' , [0 , 3.3 ], 0 , 0 );
128
+ dacChannels['PV3' ] = DACChannel ('PV3' , [0 , 3.3 ], 1 , 1 );
129
+ dacChannels['PC2' ] = DACChannel ('PC2' , [- 3.3 , 3.3 ], 2 , 2 );
130
+ dacChannels['PV1' ] = DACChannel ('PV1' , [- 5 , 5 ], 3 , 3 );
131
+ }
118
132
119
133
if (isConnected ()) {
120
134
await runInitSequence (true );
@@ -1024,6 +1038,58 @@ class ScienceLab {
1024
1038
return null ;
1025
1039
}
1026
1040
1041
+ Future <void > setVoltage (String channel, double voltage) async {
1042
+ DACChannel dacChannel = dacChannels[channel]! ;
1043
+ int v = dacChannel.vToCode (voltage).toInt ();
1044
+ try {
1045
+ mPacketHandler.sendByte (mCommandsProto.dac);
1046
+ mPacketHandler.sendByte (mCommandsProto.setPower);
1047
+ mPacketHandler.sendByte (dacChannel.channelCode);
1048
+ mPacketHandler.sendInt (v);
1049
+ await mPacketHandler.getAcknowledgement ();
1050
+ } catch (e) {
1051
+ logger.e ("Error in setVoltage: $e " );
1052
+ }
1053
+ }
1054
+
1055
+ Future <void > setCurrent (double current) async {
1056
+ DACChannel dacChannel = dacChannels['PCS' ]! ;
1057
+ int v = (3300 - dacChannel.vToCode (current)).toInt ();
1058
+ try {
1059
+ mPacketHandler.sendByte (mCommandsProto.dac);
1060
+ mPacketHandler.sendByte (mCommandsProto.setPower);
1061
+ mPacketHandler.sendByte (dacChannel.channelCode);
1062
+ mPacketHandler.sendInt (v);
1063
+ await mPacketHandler.getAcknowledgement ();
1064
+ } catch (e) {
1065
+ logger.e ("Error in setCurrent: $e " );
1066
+ }
1067
+ }
1068
+
1069
+ Future <void > setPV1 (double voltage) async {
1070
+ if (isConnected ()) {
1071
+ await setVoltage ('PV1' , voltage);
1072
+ }
1073
+ }
1074
+
1075
+ Future <void > setPV2 (double voltage) async {
1076
+ if (isConnected ()) {
1077
+ await setVoltage ('PV2' , voltage);
1078
+ }
1079
+ }
1080
+
1081
+ Future <void > setPV3 (double voltage) async {
1082
+ if (isConnected ()) {
1083
+ await setVoltage ('PV3' , voltage);
1084
+ }
1085
+ }
1086
+
1087
+ Future <void > setPCS (double current) async {
1088
+ if (isConnected ()) {
1089
+ await setCurrent (current);
1090
+ }
1091
+ }
1092
+
1027
1093
Future <void > servo4 (
1028
1094
double ? angle1,
1029
1095
double ? angle2,
0 commit comments