#include "driver.h" Driver::Driver() { currentDriverTable = new DriverTable(); nextDriverTable = new DriverTable(); debug = false; } Driver::~Driver() { delete currentDriverTable; delete nextDriverTable; } void Driver::setDebug(bool debug) { this->debug = debug; } void Driver::getSTANDBYTable(DriverTable* driverTable) { //打开所有传感器 driverTable->depth1 = 1; driverTable->depth2 = 1; driverTable->depth3 = 1; driverTable->overDeep1 = 1; driverTable->overDeep2 = 1; driverTable->ctd1 = 1; driverTable->ctd2 = 1; driverTable->soundVeloc = 1; driverTable->commMast = 1; driverTable->ins = 1; driverTable->ntp = 1; driverTable->inputWaterSensor1 = 1; driverTable->inputWaterSensor2 = 1; driverTable->inputWaterSensor3 = 1; //关闭所有负载 driverTable->photoSensor = 0; driverTable->electSensor = 0; driverTable->launchControler = 0; driverTable->sideSonar = 0; driverTable->buoyage = 0; //关闭所有水声设备 driverTable->singleBeamSonar1 = 0; driverTable->singleBeamSonar2 = 0; driverTable->singleBeamSonar3 = 0; driverTable->singleBeamSonar4 = 0; driverTable->singleBeamSonar5 = 0; driverTable->singleBeamSonar6 = 0; driverTable->singleBeamSonar7 = 0; driverTable->singleBeamSonar8 = 0; driverTable->DVL = 0; driverTable->forwardSonar = 0; driverTable->lowFreqSonar = 0; driverTable->USBL = 0; //关闭所有执行机构 driverTable->bowCover1 = 0; driverTable->bowCover2 = 0; driverTable->bowCover3 = 0; driverTable->bowCover4 = 0; driverTable->bowCover5 = 0; driverTable->bowCover6 = 0; driverTable->bowRudderDeploy = 0; driverTable->bowRudderServo1 = 0; driverTable->bowRudderServo2 = 0; driverTable->bowWaterInet1 = 0; driverTable->bowWaterInet2 = 0; driverTable->bowWaterInet3 = 0; driverTable->bowWaterInet4 = 0; driverTable->bowWaterInet5 = 0; driverTable->bowWaterInet6 = 0; driverTable->bowWaterInet7 = 0; driverTable->bowWaterInet8 = 0; driverTable->waterInject = 0; driverTable->mastLiftingServo = 0; driverTable->buoyancyAdjust1 = 0; driverTable->buoyancyAdjust2 = 0; driverTable->buoyancyAdjust3 = 0; driverTable->buoyancyAdjust4 = 0; driverTable->buoyancyAdjust5 = 0; driverTable->sternRudderServo1 = 0; driverTable->sternRudderServo2 = 0; driverTable->sternRudderServo3 = 0; driverTable->sternRudderServo4 = 0; driverTable->thruster = 0; driverTable->bowThrow = 0; driverTable->sternThrow = 0; } void Driver::getSHORE_BASED_READYable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = 1; driverTable->depth2 = 1; driverTable->depth3 = 1; driverTable->overDeep1 = 1; driverTable->overDeep2 = 1; driverTable->ctd1 = 1; driverTable->ctd2 = 1; driverTable->soundVeloc = 1; driverTable->commMast = 1; driverTable->ins = 1; driverTable->ntp = 1; driverTable->inputWaterSensor1 = 1; driverTable->inputWaterSensor2 = 1; driverTable->inputWaterSensor3 = 1; // 允许启动负载 // 关闭xcz driverTable->photoSensor = 0; driverTable->electSensor = 0; driverTable->launchControler = 0; driverTable->sideSonar = 0; driverTable->buoyage = 0; // 关闭所有水声设备 driverTable->singleBeamSonar1 = 0; driverTable->singleBeamSonar2 = 0; driverTable->singleBeamSonar3 = 0; driverTable->singleBeamSonar4 = 0; driverTable->singleBeamSonar5 = 0; driverTable->singleBeamSonar6 = 0; driverTable->singleBeamSonar7 = 0; driverTable->singleBeamSonar8 = 0; driverTable->DVL = 0; driverTable->forwardSonar = 0; driverTable->lowFreqSonar = 0; driverTable->USBL = 0; // 打开必要的执行机构 driverTable->bowCover1 = 1; driverTable->bowCover2 = 1; driverTable->bowCover3 = 1; driverTable->bowCover4 = 1; driverTable->bowCover5 = 1; driverTable->bowCover6 = 1; driverTable->bowRudderDeploy = 1; driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo2 = 1; driverTable->bowWaterInet1 = 1; driverTable->bowWaterInet2 = 1; driverTable->bowWaterInet3 = 1; driverTable->bowWaterInet4 = 1; driverTable->bowWaterInet5 = 1; driverTable->bowWaterInet6 = 1; driverTable->bowWaterInet7 = 1; driverTable->bowWaterInet8 = 1; driverTable->waterInject = 1; driverTable->mastLiftingServo = 1; driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust2 = 1; driverTable->buoyancyAdjust3 = 1; driverTable->buoyancyAdjust4 = 1; driverTable->buoyancyAdjust5 = 1; driverTable->sternRudderServo1 = 1; driverTable->sternRudderServo2 = 1; driverTable->sternRudderServo3 = 1; driverTable->sternRudderServo4 = 1; driverTable->thruster = 1; driverTable->bowThrow = 1; driverTable->sternThrow = 1; } void Driver::getWATER_BASED_READYable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = 1; driverTable->depth2 = 1; driverTable->depth3 = 1; driverTable->overDeep1 = 1; driverTable->overDeep2 = 1; driverTable->ctd1 = 1; driverTable->ctd2 = 1; driverTable->soundVeloc = 1; driverTable->commMast = 1; driverTable->ins = 1; driverTable->ntp = 1; driverTable->inputWaterSensor1 = 1; driverTable->inputWaterSensor2 = 1; driverTable->inputWaterSensor3 = 1; // 允许启动负载 driverTable->photoSensor = 0; driverTable->electSensor = 0; driverTable->launchControler = 0; driverTable->sideSonar = 0; driverTable->buoyage = 0; // 所有水声设备待机 driverTable->singleBeamSonar1 = 0; driverTable->singleBeamSonar2 = 0; driverTable->singleBeamSonar3 = 0; driverTable->singleBeamSonar4 = 0; driverTable->singleBeamSonar5 = 0; driverTable->singleBeamSonar6 = 0; driverTable->singleBeamSonar7 = 0; driverTable->singleBeamSonar8 = 0; driverTable->DVL = 0; driverTable->forwardSonar = 0; driverTable->lowFreqSonar = 0; driverTable->USBL = 0; // 打开必要的执行机构 driverTable->bowCover1 = 1; driverTable->bowCover2 = 1; driverTable->bowCover3 = 1; driverTable->bowCover4 = 1; driverTable->bowCover5 = 1; driverTable->bowCover6 = 1; driverTable->bowRudderDeploy = 1; driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo2 = 1; driverTable->bowWaterInet1 = 1; driverTable->bowWaterInet2 = 1; driverTable->bowWaterInet3 = 1; driverTable->bowWaterInet4 = 1; driverTable->bowWaterInet5 = 1; driverTable->bowWaterInet6 = 1; driverTable->bowWaterInet7 = 1; driverTable->bowWaterInet8 = 1; driverTable->waterInject = 1; driverTable->mastLiftingServo = 1; driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust2 = 1; driverTable->buoyancyAdjust3 = 1; driverTable->buoyancyAdjust4 = 1; driverTable->buoyancyAdjust5 = 1; driverTable->sternRudderServo1 = 1; driverTable->sternRudderServo2 = 1; driverTable->sternRudderServo3 = 1; driverTable->sternRudderServo4 = 1; driverTable->thruster = 1; driverTable->bowThrow = 1; driverTable->sternThrow = 1; } void Driver::getCRUISE_MODEable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = 1; driverTable->depth2 = 1; driverTable->depth3 = 1; driverTable->overDeep1 = 1; driverTable->overDeep2 = 1; driverTable->ctd1 = 1; driverTable->ctd2 = 1; driverTable->soundVeloc = 1; driverTable->commMast = 1; driverTable->ins = 1; driverTable->ntp = 1; driverTable->inputWaterSensor1 = 1; driverTable->inputWaterSensor2 = 1; driverTable->inputWaterSensor3 = 1; // 所有负载设备关机 driverTable->photoSensor = 0; driverTable->electSensor = 0; driverTable->launchControler = 0; driverTable->sideSonar = 0; driverTable->buoyage = 0; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = 0; driverTable->bowCover2 = 0; driverTable->bowCover3 = 0; driverTable->bowCover4 = 0; driverTable->bowCover5 = 0; driverTable->bowCover6 = 0; driverTable->bowRudderDeploy = 1; driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo2 = 1; driverTable->bowWaterInet1 = 0; driverTable->bowWaterInet2 = 0; driverTable->bowWaterInet3 = 0; driverTable->bowWaterInet4 = 0; driverTable->bowWaterInet5 = 0; driverTable->bowWaterInet6 = 0; driverTable->bowWaterInet7 = 0; driverTable->bowWaterInet8 = 0; driverTable->waterInject = 0; driverTable->mastLiftingServo = 1; driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust2 = 1; driverTable->buoyancyAdjust3 = 1; driverTable->buoyancyAdjust4 = 1; driverTable->buoyancyAdjust5 = 1; driverTable->sternRudderServo1 = 1; driverTable->sternRudderServo2 = 1; driverTable->sternRudderServo3 = 1; driverTable->sternRudderServo4 = 1; driverTable->thruster = 1; driverTable->bowThrow = 1; driverTable->sternThrow = 1; } void Driver::getHIGH_SPEED_MODEable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_POWER_OFF; driverTable->electSensor = DRIVER_POWER_OFF; driverTable->launchControler = DRIVER_POWER_OFF; driverTable->sideSonar = DRIVER_POWER_OFF; driverTable->buoyage = DRIVER_POWER_OFF; // 打开必要的执行机构,只打开操纵机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_POWER_OFF; driverTable->bowCover2 = DRIVER_POWER_OFF; driverTable->bowCover3 = DRIVER_POWER_OFF; driverTable->bowCover4 = DRIVER_POWER_OFF; driverTable->bowCover5 = DRIVER_POWER_OFF; driverTable->bowCover6 = DRIVER_POWER_OFF; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_POWER_OFF; driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF; driverTable->buoyancyAdjust2 = DRIVER_POWER_OFF; driverTable->buoyancyAdjust3 = DRIVER_POWER_OFF; driverTable->buoyancyAdjust4 = DRIVER_POWER_OFF; driverTable->buoyancyAdjust5 = DRIVER_POWER_OFF; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } // 上浮下潜与巡航模式一致 void Driver::getASCEND_DESCENDable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_POWER_OFF; driverTable->electSensor = DRIVER_POWER_OFF; driverTable->launchControler = DRIVER_POWER_OFF; driverTable->sideSonar = DRIVER_POWER_OFF; driverTable->buoyage = DRIVER_POWER_OFF; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_POWER_OFF; driverTable->bowCover2 = DRIVER_POWER_OFF; driverTable->bowCover3 = DRIVER_POWER_OFF; driverTable->bowCover4 = DRIVER_POWER_OFF; driverTable->bowCover5 = DRIVER_POWER_OFF; driverTable->bowCover6 = DRIVER_POWER_OFF; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust4 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust5 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } // 浮标调整与巡航模式一致 void Driver::getBUOYANCY_ADJUSTable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_POWER_OFF; driverTable->electSensor = DRIVER_POWER_OFF; driverTable->launchControler = DRIVER_POWER_OFF; driverTable->sideSonar = DRIVER_POWER_OFF; driverTable->buoyage = DRIVER_POWER_OFF; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_POWER_OFF; driverTable->bowCover2 = DRIVER_POWER_OFF; driverTable->bowCover3 = DRIVER_POWER_OFF; driverTable->bowCover4 = DRIVER_POWER_OFF; driverTable->bowCover5 = DRIVER_POWER_OFF; driverTable->bowCover6 = DRIVER_POWER_OFF; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust4 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust5 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } // 水下侦查 void Driver::getUNDERWATER_RECONable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_POWER_OFF; driverTable->electSensor = DRIVER_POWER_OFF; driverTable->launchControler = DRIVER_POWER_OFF; driverTable->sideSonar = DRIVER_STANDBY; driverTable->buoyage = DRIVER_POWER_OFF; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_POWER_OFF; driverTable->bowCover2 = DRIVER_POWER_OFF; driverTable->bowCover3 = DRIVER_POWER_OFF; driverTable->bowCover4 = DRIVER_POWER_OFF; driverTable->bowCover5 = DRIVER_POWER_OFF; driverTable->bowCover6 = DRIVER_POWER_OFF; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_POWER_OFF; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust4 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust5 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } // 水面探测 void Driver::getSURFACE_RECONable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_STANDBY; driverTable->electSensor = DRIVER_STANDBY; driverTable->launchControler = DRIVER_POWER_OFF; driverTable->sideSonar = DRIVER_POWER_OFF; driverTable->buoyage = DRIVER_POWER_OFF; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_POWER_OFF; driverTable->bowCover2 = DRIVER_POWER_OFF; driverTable->bowCover3 = DRIVER_POWER_OFF; driverTable->bowCover4 = DRIVER_POWER_OFF; driverTable->bowCover5 = DRIVER_POWER_OFF; driverTable->bowCover6 = DRIVER_POWER_OFF; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust4 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust5 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } void Driver::getDJ_MODEable(DriverTable* driverTable) { // 打开所有传感器 driverTable->depth1 = DRIVER_FULL_POWER_ON; driverTable->depth2 = DRIVER_FULL_POWER_ON; driverTable->depth3 = DRIVER_FULL_POWER_ON; driverTable->overDeep1 = DRIVER_FULL_POWER_ON; driverTable->overDeep2 = DRIVER_FULL_POWER_ON; driverTable->ctd1 = DRIVER_FULL_POWER_ON; driverTable->ctd2 = DRIVER_FULL_POWER_ON; driverTable->soundVeloc = DRIVER_FULL_POWER_ON; driverTable->commMast = DRIVER_FULL_POWER_ON; driverTable->ins = DRIVER_FULL_POWER_ON; driverTable->ntp = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON; driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON; // 所有负载设备关机 driverTable->photoSensor = DRIVER_POWER_OFF; driverTable->electSensor = DRIVER_POWER_OFF; driverTable->launchControler = DRIVER_FULL_POWER_ON; driverTable->sideSonar = DRIVER_POWER_OFF; driverTable->buoyage = DRIVER_STANDBY; // 打开必要的执行机构 // 关闭非必要的执行机构 driverTable->bowCover1 = DRIVER_FULL_POWER_ON; driverTable->bowCover2 = DRIVER_FULL_POWER_ON; driverTable->bowCover3 = DRIVER_FULL_POWER_ON; driverTable->bowCover4 = DRIVER_FULL_POWER_ON; driverTable->bowCover5 = DRIVER_FULL_POWER_ON; driverTable->bowCover6 = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet3 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet4 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet5 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet6 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet7 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet8 = DRIVER_FULL_POWER_ON; driverTable->waterInject = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust4 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust5 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; driverTable->thruster = DRIVER_FULL_POWER_ON; driverTable->bowThrow = DRIVER_FULL_POWER_ON; driverTable->sternThrow = DRIVER_FULL_POWER_ON; } std::string Driver::saveDriverTableToJson(const DriverTable* driverTable) { Json::Value root; // 添加所有成员到json root["depth1_uint8"] = driverTable->depth1; root["depth2_uint8"] = driverTable->depth2; root["depth3_uint8"] = driverTable->depth3; root["overDeep1_uint8"] = driverTable->overDeep1; root["overDeep2_uint8"] = driverTable->overDeep2; root["ctd1_uint8"] = driverTable->ctd1; root["ctd2_uint8"] = driverTable->ctd2; root["soundVeloc_uint8"] = driverTable->soundVeloc; root["commDev_uint8"] = driverTable->commMast; root["ins_uint8"] = driverTable->ins; root["ntp_uint8"] = driverTable->ntp; root["inputWaterSensor1_uint8"] = driverTable->inputWaterSensor1; root["inputWaterSensor2_uint8"] = driverTable->inputWaterSensor2; root["inputWaterSensor3_uint8"] = driverTable->inputWaterSensor3; root["singleBeamSonar1_uint8"] = driverTable->singleBeamSonar1; root["singleBeamSonar2_uint8"] = driverTable->singleBeamSonar2; root["singleBeamSonar3_uint8"] = driverTable->singleBeamSonar3; root["singleBeamSonar4_uint8"] = driverTable->singleBeamSonar4; root["singleBeamSonar5_uint8"] = driverTable->singleBeamSonar5; root["singleBeamSonar6_uint8"] = driverTable->singleBeamSonar6; root["singleBeamSonar7_uint8"] = driverTable->singleBeamSonar7; root["singleBeamSonar8_uint8"] = driverTable->singleBeamSonar8; root["forwardSonar_uint8"] = driverTable->forwardSonar; root["DVL_uint8"] = driverTable->DVL; root["lowFreqSonar_uint8"] = driverTable->lowFreqSonar; root["USBL_uint8"] = driverTable->USBL; root["bowCover1_uint8"] = driverTable->bowCover1; root["bowCover2_uint8"] = driverTable->bowCover2; root["bowCover3_uint8"] = driverTable->bowCover3; root["bowCover4_uint8"] = driverTable->bowCover4; root["bowCover5_uint8"] = driverTable->bowCover5; root["bowCover6_uint8"] = driverTable->bowCover6; root["bowRudderDeploy_uint8"] = driverTable->bowRudderDeploy; root["bowRudderServo1_uint8"] = driverTable->bowRudderServo1; root["bowRudderServo2_uint8"] = driverTable->bowRudderServo2; root["bowWaterInet1_uint8"] = driverTable->bowWaterInet1; root["bowWaterInet2_uint8"] = driverTable->bowWaterInet2; root["bowWaterInet3_uint8"] = driverTable->bowWaterInet3; root["bowWaterInet4_uint8"] = driverTable->bowWaterInet4; root["bowWaterInet5_uint8"] = driverTable->bowWaterInet5; root["bowWaterInet6_uint8"] = driverTable->bowWaterInet6; root["bowWaterInet7_uint8"] = driverTable->bowWaterInet7; root["bowWaterInet8_uint8"] = driverTable->bowWaterInet8; root["waterInject_uint8"] = driverTable->waterInject; root["mastLiftingServo_uint8"] = driverTable->mastLiftingServo; root["buoyancyAdjust1_uint8"] = driverTable->buoyancyAdjust1; root["buoyancyAdjust2_uint8"] = driverTable->buoyancyAdjust2; root["buoyancyAdjust3_uint8"] = driverTable->buoyancyAdjust3; root["buoyancyAdjust4_uint8"] = driverTable->buoyancyAdjust4; root["buoyancyAdjust5_uint8"] = driverTable->buoyancyAdjust5; root["sternRudderServo1_uint8"] = driverTable->sternRudderServo1; root["sternRudderServo2_uint8"] = driverTable->sternRudderServo2; root["sternRudderServo3_uint8"] = driverTable->sternRudderServo3; root["sternRudderServo4_uint8"] = driverTable->sternRudderServo4; root["thruster_uint8"] = driverTable->thruster; root["bowThrow_uint8"] = driverTable->bowThrow; root["sternThrow_uint8"] = driverTable->sternThrow; root["photoSensor_uint8"] = driverTable->photoSensor; root["electSensor_uint8"] = driverTable->electSensor; root["launchControler_uint8"] = driverTable->launchControler; root["sideSonar_uint8"] = driverTable->sideSonar; root["buoyage_uint8"] = driverTable->buoyage; return root.toStyledString(); } std::string Driver::getDriverTableJson() { return saveDriverTableToJson(currentDriverTable); } std::string Driver::getSubDisCmdJson(const DriverTable* driverTable) { return saveDriverTableToJson(currentDriverTable); } std::string Driver::getDriveStateJson(const DriverTable* driverTable) { return saveDriverTableToJson(currentDriverTable); } int Driver::SafeReadUInt(const Json::Value& root, const std::string& key, unsigned char& value) { if (!root.isMember(key)) { // std::cerr << "错误: 缺少字段 " << key << std::endl; return -1; // 返回-1表示缺少字段 } if (!root[key].isUInt()) { std::cerr << "错误: 字段 " << key << " 数据类型不正确,应为无符号整数" << std::endl; return -2; // 返回-2表示数据类型错误 } value = root[key].asUInt(); return 0; // 成功读取 } vector Driver::loadDriverIdFromJson(const std::string &strJson) { Json::CharReaderBuilder builder; Json::Value root; std::string errs; vector driverCmd; // 解析JSON字符串 std::istringstream s(strJson); if (!Json::parseFromStream(builder, s, &root, &errs)) { std::cerr << "JSON解析失败: " << errs << std::endl; return driverCmd; } // 设备字段名到ID的映射 const std::map fieldToId = { {"depth1_uint8", 18}, {"depth2_uint8", 19}, {"depth3_uint8", 20}, {"overDeep1_uint8", 21}, {"overDeep2_uint8", 22}, {"ctd1_uint8", 23}, {"ctd2_uint8", 24}, {"soundVeloc_uint8", 25}, {"commDev_uint8", 40}, {"ins_uint8", 57}, {"ntp_uint8", 58}, {"inputWaterSensor1_uint8", 59}, {"inputWaterSensor2_uint8", 60}, {"inputWaterSensor3_uint8", 61}, {"singleBeamSonar1_uint8", 0}, {"singleBeamSonar2_uint8", 1}, {"singleBeamSonar3_uint8", 2}, {"singleBeamSonar4_uint8", 3}, {"singleBeamSonar5_uint8", 4}, {"singleBeamSonar6_uint8", 5}, {"singleBeamSonar7_uint8", 6}, {"singleBeamSonar8_uint8", 7}, {"forwardSonar_uint8", 8}, {"DVL_uint8", 43}, {"lowFreqSonar_uint8", 36}, {"USBL_uint8", 42}, {"bowCover1_uint8", 9}, {"bowCover2_uint8", 10}, {"bowCover3_uint8", 11}, {"bowCover4_uint8", 12}, {"bowCover5_uint8", 13}, {"bowCover6_uint8", 14}, {"bowRudderDeploy_uint8", 15}, {"bowRudderServo1_uint8", 16}, {"bowRudderServo2_uint8", 17}, {"bowWaterInet1_uint8", 27}, {"bowWaterInet2_uint8", 28}, {"bowWaterInet3_uint8", 29}, {"bowWaterInet4_uint8", 30}, {"bowWaterInet5_uint8", 31}, {"bowWaterInet6_uint8", 32}, {"bowWaterInet7_uint8", 33}, {"bowWaterInet8_uint8", 34}, {"waterInject_uint8", 26}, {"mastLiftingServo_uint8_uint8", 41}, {"buoyancyAdjust1_uint8", 44}, {"buoyancyAdjust2_uint8", 45}, {"buoyancyAdjust3_uint8", 46}, {"buoyancyAdjust4_uint8", 47}, {"buoyancyAdjust5_uint8", 48}, {"sternRudderServo1_uint8", 49}, {"sternRudderServo2_uint8", 50}, {"sternRudderServo3_uint8", 51}, {"sternRudderServo4_uint8", 52}, {"thruster_uint8", 53}, {"bowThrow_uint8", 54}, {"sternThrow_uint8", 55}, {"photoSensor_uint8", 38}, {"electSensor_uint8", 39}, {"launchControler_uint8", 37}, {"sideSonar_uint8", 35}, {"buoyage_uint8", 56} }; for (const auto& [field, id] : fieldToId) { if (root.isMember(field)) { unsigned char newValue = root[field].asUInt(); DriverCommand cmd; cmd.id = id; cmd.cmd = newValue; driverCmd.push_back(cmd); } } return driverCmd; } int Driver::loadDriverTableFromJson(const std::string &strJson, DriverTable& table) { Json::CharReaderBuilder builder; Json::Value root; std::string errs; // 解析JSON字符串 std::istringstream s(strJson); if (!Json::parseFromStream(builder, s, &root, &errs)) { std::cerr << "JSON解析失败: " << errs << std::endl; return -3; // 解析失败 } // 读取 JSON 数据并填充结构体,逐个字段检查 int error_code = 0; error_code = SafeReadUInt(root, "depth1_uint8", table.depth1); error_code = SafeReadUInt(root, "depth2_uint8", table.depth2); error_code = SafeReadUInt(root, "depth3_uint8", table.depth3); // error_code = SafeReadUInt(root, "overDeep1_uint8", table.overDeep1); // if (error_code != 0) return error_code; // error_code = SafeReadUInt(root, "overDeep2_uint8", table.overDeep2); // if (error_code != 0) return error_code; error_code = SafeReadUInt(root, "ctd1_uint8", table.ctd1); error_code = SafeReadUInt(root, "ctd2_uint8", table.ctd2); error_code = SafeReadUInt(root, "soundVeloc_uint8", table.soundVeloc); error_code = SafeReadUInt(root, "commDev_uint8", table.commMast); error_code = SafeReadUInt(root, "ins_uint8", table.ins); error_code = SafeReadUInt(root, "ntp_uint8", table.ntp); error_code = SafeReadUInt(root, "inputWaterSensor1_uint8", table.inputWaterSensor1); error_code = SafeReadUInt(root, "inputWaterSensor2_uint8", table.inputWaterSensor2); error_code = SafeReadUInt(root, "inputWaterSensor3_uint8", table.inputWaterSensor3); // 水声设备 error_code = SafeReadUInt(root, "singleBeamSonar1_uint8", table.singleBeamSonar1); error_code = SafeReadUInt(root, "singleBeamSonar2_uint8", table.singleBeamSonar2); error_code = SafeReadUInt(root, "singleBeamSonar3_uint8", table.singleBeamSonar3); error_code = SafeReadUInt(root, "singleBeamSonar4_uint8", table.singleBeamSonar4); error_code = SafeReadUInt(root, "singleBeamSonar5_uint8", table.singleBeamSonar5); error_code = SafeReadUInt(root, "singleBeamSonar6_uint8", table.singleBeamSonar6); error_code = SafeReadUInt(root, "singleBeamSonar7_uint8", table.singleBeamSonar7); error_code = SafeReadUInt(root, "singleBeamSonar8_uint8", table.singleBeamSonar8); error_code = SafeReadUInt(root, "forwardSonar_uint8", table.forwardSonar); error_code = SafeReadUInt(root, "DVL_uint8", table.DVL); error_code = SafeReadUInt(root, "lowFreqSonar_uint8", table.lowFreqSonar); error_code = SafeReadUInt(root, "USBL_uint8", table.USBL); // 执行机构 error_code = SafeReadUInt(root, "bowWaterInet1_uint8", table.bowWaterInet1); error_code = SafeReadUInt(root, "bowWaterInet2_uint8", table.bowWaterInet2); error_code = SafeReadUInt(root, "bowWaterInet3_uint8", table.bowWaterInet3); error_code = SafeReadUInt(root, "bowWaterInet4_uint8", table.bowWaterInet4); error_code = SafeReadUInt(root, "bowWaterInet5_uint8", table.bowWaterInet5); error_code = SafeReadUInt(root, "bowWaterInet6_uint8", table.bowWaterInet6); error_code = SafeReadUInt(root, "bowWaterInet7_uint8", table.bowWaterInet7); error_code = SafeReadUInt(root, "bowWaterInet8_uint8", table.bowWaterInet8); error_code = SafeReadUInt(root, "bowRudderDeploy_uint8", table.bowRudderDeploy); error_code = SafeReadUInt(root, "bowRudderServo1_uint8", table.bowRudderServo1); error_code = SafeReadUInt(root, "bowRudderServo2_uint8", table.bowRudderServo2); error_code = SafeReadUInt(root, "bowCover1_uint8", table.bowCover1); error_code = SafeReadUInt(root, "bowCover2_uint8", table.bowCover2); error_code = SafeReadUInt(root, "bowCover3_uint8", table.bowCover3); error_code = SafeReadUInt(root, "bowCover4_uint8", table.bowCover4); error_code = SafeReadUInt(root, "bowCover5_uint8", table.bowCover5); error_code = SafeReadUInt(root, "bowCover6_uint8", table.bowCover6); error_code = SafeReadUInt(root, "waterInject_uint8", table.waterInject); error_code = SafeReadUInt(root, "mastLiftingServo_uint8", table.mastLiftingServo); error_code = SafeReadUInt(root, "buoyancyAdjust1_uint8", table.buoyancyAdjust1); error_code = SafeReadUInt(root, "buoyancyAdjust2_uint8", table.buoyancyAdjust2); error_code = SafeReadUInt(root, "buoyancyAdjust3_uint8", table.buoyancyAdjust3); error_code = SafeReadUInt(root, "buoyancyAdjust4_uint8", table.buoyancyAdjust4); error_code = SafeReadUInt(root, "buoyancyAdjust5_uint8", table.buoyancyAdjust5); error_code = SafeReadUInt(root, "sternRudderServo1_uint8", table.sternRudderServo1); error_code = SafeReadUInt(root, "sternRudderServo2_uint8", table.sternRudderServo2); error_code = SafeReadUInt(root, "sternRudderServo3_uint8", table.sternRudderServo3); error_code = SafeReadUInt(root, "sternRudderServo4_uint8", table.sternRudderServo4); error_code = SafeReadUInt(root, "thruster_uint8", table.thruster); error_code = SafeReadUInt(root, "bowThrow_uint8", table.bowThrow); error_code = SafeReadUInt(root, "sternThrow_uint8", table.sternThrow); // 负载 error_code = SafeReadUInt(root, "photoSensor_uint8", table.photoSensor); error_code = SafeReadUInt(root, "electSensor_uint8", table.electSensor); error_code = SafeReadUInt(root, "launchControler_uint8", table.launchControler); error_code = SafeReadUInt(root, "sideSonar_uint8", table.sideSonar); error_code = SafeReadUInt(root, "buoyage_uint8", table.buoyage); return 0; // 返回0表示所有数据成功读取 }