Refaktor model option reading

This commit is contained in:
Norbert Richter 2022-03-10 18:46:38 +01:00
parent 5c211d7e34
commit 0db6bdea6f
No known key found for this signature in database
GPG Key ID: 6628701A626FA674
1 changed files with 18 additions and 8 deletions

View File

@ -78,13 +78,13 @@
/*********************************************************************************************\
* Sugar Valley Modbus Register (* register are currently used)
* Sugar Valley Modbus Register (addresses marked with * are queried with each polling cycle)
* (see https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf)
\*********************************************************************************************/
enum NeoPoolRegister {
// addr Unit Description
// ------ ------ ------------------------------------------------------------
// MODBUS page (0x0000 - 0x002E - unknown - for internal use only)
// MODBUS page (0x00xx) - undocumented - for internal use
MBF_POWER_MODULE_VERSION = 0x0002, // 0x0002 undocumented - power module version (MSB=Major, LSB=Minor)
MBF_POWER_MODULE_NODEID = 0x0004, // 0x0004 undocumented - power module Node ID (6 register 0x0004 - 0x0009)
MBF_POWER_MODULE_REGISTER = 0x000C, // 0x000C undocumented - Writing an address in this register causes the power module register address to be read out into MBF_POWER_MODULE_DATA, see MBF_POWER_MODULE_REG_*
@ -595,6 +595,7 @@ bool neopool_first_read = true;
#endif // NEOPOOL_OPTIMIZE_READINGS
bool neopool_error = true;
uint16_t neopool_model_option;
uint16_t neopool_power_module_version;
uint16_t neopool_power_module_nodeid[6];
@ -613,10 +614,9 @@ struct {
const uint16_t cnt;
uint16_t *data;
} NeoPoolReg[] = {
// 8 entries each poll needs 2 sec for complete register set
// complete poll cycle needs 7x250 ms to read complete register set
{MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr},
{MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 1, nullptr},
{MBF_PAR_VERSION, MBF_PAR_MODEL - MBF_PAR_VERSION + 1, nullptr},
{MBF_PAR_TIME_LOW, MBF_PAR_FILT_GPIO - MBF_PAR_TIME_LOW + 1, nullptr},
{MBF_PAR_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr},
{MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr},
@ -981,7 +981,7 @@ void (* const NPCommand[])(void) PROGMEM = {
/*********************************************************************************************/
void NeoPool250ms(void) // Every 250 mSec
void NeoPoolPoll(void) // Every 250 mSec
{
if (!neopool_poll) {
return;
@ -1098,6 +1098,7 @@ bool NeoPoolInitData(void)
bool res = false;
neopool_error = true;
neopool_model_option = 0xFFFF;
neopool_power_module_version = 0;
memset(neopool_power_module_nodeid, 0, sizeof(neopool_power_module_nodeid));
for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) {
@ -1346,9 +1347,18 @@ uint32_t NeoPoolGetSpeedIndex(uint16_t speedvalue)
}
uint16_t NeoPoolModelOption(void)
{
if (0xFFFF == neopool_model_option) {
neopool_model_option = NeoPoolGetData(MBF_PAR_MODEL);
}
return neopool_model_option;
}
bool NeoPoolIsHydrolysis(void)
{
return (((NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_HIDRO)) ||
return (((NeoPoolModelOption() & MBMSK_MODEL_HIDRO)) ||
(NeoPoolGetData(MBF_HIDRO_STATUS) & (MBMSK_HIDRO_STATUS_CTRL_ACTIVE | MBMSK_HIDRO_STATUS_CTRL_ACTIVE)));
}
@ -1379,7 +1389,7 @@ bool NeoPoolIsConductivity(void)
bool NeoPoolIsIonization(void)
{
return (NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_ION);
return (NeoPoolModelOption() & MBMSK_MODEL_ION);
}
@ -2466,7 +2476,7 @@ bool Xsns83(uint8_t function)
} else if (neopool_active) {
switch (function) {
case FUNC_EVERY_250_MSECOND:
NeoPool250ms();
NeoPoolPoll();
break;
case FUNC_COMMAND:
result = DecodeCommand(kNPCommands, NPCommand);