@@ -5,8 +5,10 @@ import 'package:flutter/foundation.dart';
55import 'package:pslab/communication/commands_proto.dart' ;
66import 'package:pslab/communication/handler/base.dart' ;
77import 'package:pslab/communication/packet_handler.dart' ;
8+ import 'package:pslab/communication/peripherals/dac_channel.dart' ;
89import 'package:pslab/communication/socket_client.dart' ;
910import 'package:pslab/others/logger_service.dart' ;
11+ import 'package:pslab/providers/board_state_provider.dart' ;
1012import 'package:pslab/providers/locator.dart' ;
1113
1214import 'analogChannel/analog_acquisition_channel.dart' ;
@@ -35,6 +37,7 @@ class ScienceLab {
3537 Map <String , String > waveType = {};
3638 List <AnalogAcquisitionChannel > aChannels = [];
3739 List <DigitalChannel > dChannels = [];
40+ Map <String , DACChannel > dacChannels = {};
3841 static final double capacitorDischargeVoltage = 0.01 * 3.3 ;
3942
4043 late CommunicationHandler mCommunicationHandler;
@@ -115,6 +118,17 @@ class ScienceLab {
115118 squareWaveFrequency['SQR2' ] = 0.0 ;
116119 squareWaveFrequency['SQR3' ] = 0.0 ;
117120 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['PV2' ] = DACChannel ('PV2' , [- 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['PV2' ] = DACChannel ('PV2' , [- 3.3 , 3.3 ], 2 , 2 );
130+ dacChannels['PV1' ] = DACChannel ('PV1' , [- 5 , 5 ], 3 , 3 );
131+ }
118132
119133 if (isConnected ()) {
120134 await runInitSequence (true );
@@ -1024,6 +1038,58 @@ class ScienceLab {
10241038 return null;
10251039 }
10261040
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+
10271093 Future <void > servo4(
10281094 double ? angle1,
10291095 double ? angle2,
0 commit comments