Implement property in HoymilesRadio_CMT to set the frequency during runtime

This commit is contained in:
Thomas Basler 2023-03-30 19:45:16 +02:00
parent 70b85fad6f
commit 5e11f0b854
3 changed files with 18 additions and 3 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -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]