diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 2147729..76c1c8a 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -17,10 +17,15 @@ public: bool isInitialized(); template - T* enqueCommand() + void enqueCommand(std::shared_ptr cmd) { - _commandQueue.push(std::make_shared()); - return static_cast(_commandQueue.back().get()); + _commandQueue.push(cmd); + } + + template + std::shared_ptr prepareCommand() + { + return std::make_shared(); } protected: diff --git a/lib/Hoymiles/src/inverters/HMS_Abstract.cpp b/lib/Hoymiles/src/inverters/HMS_Abstract.cpp index 326ac83..f67ff11 100644 --- a/lib/Hoymiles/src/inverters/HMS_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HMS_Abstract.cpp @@ -18,9 +18,10 @@ bool HMS_Abstract::sendChangeChannelRequest() return false; } - ChannelChangeCommand* cmdChannel = _radio->enqueCommand(); + auto cmdChannel = _radio->prepareCommand(); cmdChannel->setChannel(HoymilesRadio_CMT::getChannelFromFrequency(Hoymiles.getRadioCmt()->getInverterTargetFrequency())); cmdChannel->setTargetAddress(serial()); + _radio->enqueCommand(cmdChannel); return true; }; diff --git a/lib/Hoymiles/src/inverters/HMT_Abstract.cpp b/lib/Hoymiles/src/inverters/HMT_Abstract.cpp index b561ee7..c345be9 100644 --- a/lib/Hoymiles/src/inverters/HMT_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HMT_Abstract.cpp @@ -20,9 +20,10 @@ bool HMT_Abstract::sendChangeChannelRequest() return false; } - ChannelChangeCommand* cmdChannel = _radio->enqueCommand(); + auto cmdChannel = _radio->prepareCommand(); cmdChannel->setChannel(HoymilesRadio_CMT::getChannelFromFrequency(Hoymiles.getRadioCmt()->getInverterTargetFrequency())); cmdChannel->setTargetAddress(serial()); + _radio->enqueCommand(cmdChannel); return true; }; \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HM_Abstract.cpp b/lib/Hoymiles/src/inverters/HM_Abstract.cpp index 097fffe..c40ad44 100644 --- a/lib/Hoymiles/src/inverters/HM_Abstract.cpp +++ b/lib/Hoymiles/src/inverters/HM_Abstract.cpp @@ -29,9 +29,10 @@ bool HM_Abstract::sendStatsRequest() time_t now; time(&now); - RealTimeRunDataCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setTime(now); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); return true; } @@ -60,9 +61,10 @@ bool HM_Abstract::sendAlarmLogRequest(bool force) time_t now; time(&now); - AlarmDataCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setTime(now); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); EventLog()->setLastAlarmRequestSuccess(CMD_PENDING); return true; @@ -82,13 +84,15 @@ bool HM_Abstract::sendDevInfoRequest() time_t now; time(&now); - DevInfoAllCommand* cmdAll = _radio->enqueCommand(); + auto cmdAll = _radio->prepareCommand(); cmdAll->setTime(now); cmdAll->setTargetAddress(serial()); + _radio->enqueCommand(cmdAll); - DevInfoSimpleCommand* cmdSimple = _radio->enqueCommand(); + auto cmdSimple = _radio->prepareCommand(); cmdSimple->setTime(now); cmdSimple->setTargetAddress(serial()); + _radio->enqueCommand(cmdSimple); return true; } @@ -107,9 +111,10 @@ bool HM_Abstract::sendSystemConfigParaRequest() time_t now; time(&now); - SystemConfigParaCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setTime(now); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); SystemConfigPara()->setLastLimitRequestSuccess(CMD_PENDING); return true; @@ -128,9 +133,10 @@ bool HM_Abstract::sendActivePowerControlRequest(float limit, PowerLimitControlTy _activePowerControlLimit = limit; _activePowerControlType = type; - ActivePowerControlCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setActivePowerLimit(limit, type); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); SystemConfigPara()->setLastLimitCommandSuccess(CMD_PENDING); return true; @@ -153,9 +159,10 @@ bool HM_Abstract::sendPowerControlRequest(bool turnOn) _powerState = 0; } - PowerControlCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setPowerOn(turnOn); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); PowerCommand()->setLastPowerCommandSuccess(CMD_PENDING); return true; @@ -169,9 +176,10 @@ bool HM_Abstract::sendRestartControlRequest() _powerState = 2; - PowerControlCommand* cmd = _radio->enqueCommand(); + auto cmd = _radio->prepareCommand(); cmd->setRestart(); cmd->setTargetAddress(serial()); + _radio->enqueCommand(cmd); PowerCommand()->setLastPowerCommandSuccess(CMD_PENDING); return true;