62 lines
1.9 KiB
C++
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);
|
|
}
|
|
}
|
|
} |