diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp index 6c889205..4fd88357 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.cpp +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.cpp @@ -199,7 +199,7 @@ enumCMTresult HoymilesRadio_CMT::cmtProcess(void) cmtRxTimeoutCnt++; } else { uint32_t invSerial = cmtTxBuffer[1] << 24 | cmtTxBuffer[2] << 16 | cmtTxBuffer[3] << 8 | cmtTxBuffer[4]; // read inverter serial from last Tx buffer - cmtSwitchInvAndDtuFreq(invSerial, HOY_BOOT_FREQ / 1000, HOYMILES_CMT_WORK_FREQ); + cmtSwitchInvAndDtuFreq(invSerial, HOY_BOOT_FREQ / 1000, _inverterTargetFrequency); } nRes = CMT_RX_TIMEOUT; @@ -306,7 +306,7 @@ void HoymilesRadio_CMT::init(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int _radio->begin(); - cmtSwitchDtuFreq(HOYMILES_CMT_WORK_FREQ); // start dtu at work freqency, for fast Rx if inverter is already on and frequency switched + cmtSwitchDtuFreq(_inverterTargetFrequency); // start dtu at work freqency, for fast Rx if inverter is already on and frequency switched if (_radio->isChipConnected()) { Hoymiles.getMessageOutput()->println("Connection successful"); @@ -436,6 +436,15 @@ void HoymilesRadio_CMT::setPALevel(int8_t paLevel) } } +void HoymilesRadio_CMT::setInverterTargetFrequency(uint32_t frequency) +{ + _inverterTargetFrequency = frequency; + if (!_isInitialized) { + return; + } + cmtSwitchDtuFreq(_inverterTargetFrequency); +} + bool HoymilesRadio_CMT::isConnected() { if (!_isInitialized) { diff --git a/lib/Hoymiles/src/HoymilesRadio_CMT.h b/lib/Hoymiles/src/HoymilesRadio_CMT.h index 9c2ddb3f..f4218c14 100644 --- a/lib/Hoymiles/src/HoymilesRadio_CMT.h +++ b/lib/Hoymiles/src/HoymilesRadio_CMT.h @@ -13,6 +13,10 @@ // number of fragments hold in buffer #define FRAGMENT_BUFFER_SIZE 30 +#ifndef HOYMILES_CMT_WORK_FREQ +#define HOYMILES_CMT_WORK_FREQ 865000 +#endif + /* CMT states */ typedef enum { CMT_STATE_IDLE = 0, @@ -43,6 +47,7 @@ public: void init(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int8_t pin_fcs, int8_t pin_gpio2, int8_t pin_gpio3); void loop(); void setPALevel(int8_t paLevel); + void setInverterTargetFrequency(uint32_t frequency); bool isConnected(); @@ -64,6 +69,8 @@ private: TimeoutHelper _rxTimeout; TimeoutHelper _txTimeout; + uint32_t _inverterTargetFrequency = HOYMILES_CMT_WORK_FREQ; + String cmtChToFreq(const uint8_t channel); void cmtSwitchChannel(const uint8_t channel); uint8_t cmtFreqToChan(const String& func_name, const String& var_name, const uint32_t freq_kHz); diff --git a/platformio.ini b/platformio.ini index 87fe8151..ecf1632d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -56,7 +56,6 @@ build_flags = ${env.build_flags} -DHOYMILES_PIN_IRQ=16 -DHOYMILES_PIN_CE=4 -DHOYMILES_PIN_CS=5 - -DHOYMILES_CMT_WORK_FREQ=865000 [env:olimex_esp32_poe]