Files
H100PowerManger/src/bck/pPowerManger/fsm/WaterBasedReady.cpp
T
2026-01-19 21:52:26 +08:00

62 lines
1.9 KiB
C++

#include "PowerManagerFsm.hpp"
void WaterBasedReady::entry() {
PowerManagerFsm::entry();
pm->workCondition = WorkCondition::CHANING;
PowerManagerFsm::handleCuriseWork();
//启动水声设备
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::DVL, (unsigned char)EquipmentCommand::ON);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::USBL, (unsigned char)EquipmentCommand::ON);
pm->m_upperCommManager->processPeriodicTasks();
pm->workCondition = WorkCondition::WATER_BASED_READY;
LOG_F(INFO, "进入水中备航状态");
}
// WaterBasedReady实现
void WaterBasedReady::react(MasterCommandEvent const &) {
PowerManagerFsm::handelPowerCmd();
PowerManagerFsm::handleModCmd();
PowerManagerFsm::handleWorkCmd();
}
void WaterBasedReady::react(DevCmdExt const &e)
{
int id = e.id;
int cmd = e.cmd;
if(underWterDevices.find(id) != underWterDevices.end())
{
if (pm->currentMod != PMMode::Debug)
{
if(pm->m_depth < OVER_DEPTH)
{
LOG_F(INFO, "水下设备操作上电保护 %d ", id);
return;
}
}
// 如果是前视声纳断电则先关机再断电
if(id == DeviceId::forwardSonar)
{
if(cmd == 0)
{
LOG_F(INFO,"前视声纳关机指令");
pm->sendNotification("uExternComm_frontSonarControl_cmd","0");
MOOSPause(10000);
}
}
LOG_F(INFO, "水声设备操作: %s,%d, %d", DeviceId::toString((DeviceId::Type)id), id, cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, (DeviceId::Type)id, (unsigned char)cmd);
}
else
{
if(pm->currentMod == PMMode::Normal)
{
LOG_F(INFO,"正常模式:操作禁止");
return;
}
else
{
PowerManagerFsm::react(e);
}
}
}