Expose min and max frequency in HoymilesRadio_CMT
This commit is contained in:
parent
6ea34b331d
commit
50ce7f014d
@ -14,6 +14,12 @@
|
|||||||
// offset from initalized CMT base frequency to Hoy base frequency in channels
|
// offset from initalized CMT base frequency to Hoy base frequency in channels
|
||||||
#define CMT_BASE_CH_OFFSET860 ((860000000 - HOY_BASE_FREQ) / CMT2300A_ONE_STEP_SIZE / FH_OFFSET)
|
#define CMT_BASE_CH_OFFSET860 ((860000000 - HOY_BASE_FREQ) / CMT2300A_ONE_STEP_SIZE / FH_OFFSET)
|
||||||
|
|
||||||
|
// frequency can not be lower than actual initailized base freq
|
||||||
|
#define CMT_MIN_FREQ_KHZ ((HOY_BASE_FREQ + (CMT_BASE_CH_OFFSET860 >= 1 ? CMT_BASE_CH_OFFSET860 : 1) * CMT2300A_ONE_STEP_SIZE * FH_OFFSET) / 1000)
|
||||||
|
|
||||||
|
// =923500, 0xFF does not work
|
||||||
|
#define CMT_MAX_FREQ_KHZ ((HOY_BASE_FREQ + 0xFE * CMT2300A_ONE_STEP_SIZE * FH_OFFSET) / 1000)
|
||||||
|
|
||||||
String HoymilesRadio_CMT::cmtChToFreq(const uint8_t channel)
|
String HoymilesRadio_CMT::cmtChToFreq(const uint8_t channel)
|
||||||
{
|
{
|
||||||
return String((HOY_BASE_FREQ + (CMT_BASE_CH_OFFSET860 + channel) * FH_OFFSET * CMT2300A_ONE_STEP_SIZE) / 1000000.0, 2) + " MHz";
|
return String((HOY_BASE_FREQ + (CMT_BASE_CH_OFFSET860 + channel) * FH_OFFSET * CMT2300A_ONE_STEP_SIZE) / 1000000.0, 2) + " MHz";
|
||||||
@ -34,11 +40,9 @@ uint8_t HoymilesRadio_CMT::cmtFreqToChan(const String& func_name, const String&
|
|||||||
func_name.c_str(), var_name.c_str(), freq_kHz / 1000.0);
|
func_name.c_str(), var_name.c_str(), freq_kHz / 1000.0);
|
||||||
return 0xFF; // ERROR
|
return 0xFF; // ERROR
|
||||||
}
|
}
|
||||||
const uint32_t min_Freq_kHz = (HOY_BASE_FREQ + (CMT_BASE_CH_OFFSET860 >= 1 ? CMT_BASE_CH_OFFSET860 : 1) * CMT2300A_ONE_STEP_SIZE * FH_OFFSET) / 1000; // frequency can not be lower than actual initailized base freq
|
if (freq_kHz < CMT_MIN_FREQ_KHZ || freq_kHz > CMT_MAX_FREQ_KHZ) {
|
||||||
const uint32_t max_Freq_kHz = (HOY_BASE_FREQ + 0xFE * CMT2300A_ONE_STEP_SIZE * FH_OFFSET) / 1000; // =923500, 0xFF does not work
|
|
||||||
if (freq_kHz < min_Freq_kHz || freq_kHz > max_Freq_kHz) {
|
|
||||||
Hoymiles.getMessageOutput()->printf("%s %s %.2f MHz is out of Hoymiles/CMT range! (%.2f MHz - %.2f MHz)\r\n",
|
Hoymiles.getMessageOutput()->printf("%s %s %.2f MHz is out of Hoymiles/CMT range! (%.2f MHz - %.2f MHz)\r\n",
|
||||||
func_name.c_str(), var_name.c_str(), freq_kHz / 1000.0, min_Freq_kHz / 1000.0, max_Freq_kHz / 1000.0);
|
func_name.c_str(), var_name.c_str(), freq_kHz / 1000.0, CMT_MIN_FREQ_KHZ / 1000.0, CMT_MAX_FREQ_KHZ / 1000.0);
|
||||||
return 0xFF; // ERROR
|
return 0xFF; // ERROR
|
||||||
}
|
}
|
||||||
if (freq_kHz < 863000 || freq_kHz > 870000) {
|
if (freq_kHz < 863000 || freq_kHz > 870000) {
|
||||||
@ -453,6 +457,16 @@ bool HoymilesRadio_CMT::isConnected()
|
|||||||
return _radio->isChipConnected();
|
return _radio->isChipConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t HoymilesRadio_CMT::getMinFrequency()
|
||||||
|
{
|
||||||
|
return CMT_MIN_FREQ_KHZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t HoymilesRadio_CMT::getMaxFrequency()
|
||||||
|
{
|
||||||
|
return CMT_MAX_FREQ_KHZ;
|
||||||
|
}
|
||||||
|
|
||||||
void ARDUINO_ISR_ATTR HoymilesRadio_CMT::handleInt1()
|
void ARDUINO_ISR_ATTR HoymilesRadio_CMT::handleInt1()
|
||||||
{
|
{
|
||||||
_packetSent = true;
|
_packetSent = true;
|
||||||
|
|||||||
@ -51,6 +51,9 @@ public:
|
|||||||
|
|
||||||
bool isConnected();
|
bool isConnected();
|
||||||
|
|
||||||
|
static uint32_t getMinFrequency();
|
||||||
|
static uint32_t getMaxFrequency();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ARDUINO_ISR_ATTR handleInt1();
|
void ARDUINO_ISR_ATTR handleInt1();
|
||||||
void ARDUINO_ISR_ATTR handleInt2();
|
void ARDUINO_ISR_ATTR handleInt2();
|
||||||
|
|||||||
@ -129,11 +129,14 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root["cmt_frequency"].as<uint32_t>() < 860000 || root["cmt_frequency"].as<uint32_t>() > 923000 || root["cmt_frequency"].as<uint32_t>() % 250 > 0) {
|
if (root["cmt_frequency"].as<uint32_t>() < Hoymiles.getRadioCmt()->getMinFrequency()
|
||||||
|
|| root["cmt_frequency"].as<uint32_t>() > Hoymiles.getRadioCmt()->getMaxFrequency()
|
||||||
|
|| root["cmt_frequency"].as<uint32_t>() % 250 > 0) {
|
||||||
|
|
||||||
retMsg["message"] = "Invalid CMT frequency setting!";
|
retMsg["message"] = "Invalid CMT frequency setting!";
|
||||||
retMsg["code"] = WebApiError::DtuInvalidCmtFrequency;
|
retMsg["code"] = WebApiError::DtuInvalidCmtFrequency;
|
||||||
retMsg["param"]["min"] = 860000;
|
retMsg["param"]["min"] = Hoymiles.getRadioCmt()->getMinFrequency();
|
||||||
retMsg["param"]["max"] = 923000;
|
retMsg["param"]["max"] = Hoymiles.getRadioCmt()->getMaxFrequency();
|
||||||
response->setLength();
|
response->setLength();
|
||||||
request->send(response);
|
request->send(response);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user