Merge pull request #433 from locnho/pda-ps6-swg-prog-fix

Fix failure setting SWG percent
master
sfeakes 2025-06-14 15:49:40 -05:00 committed by GitHub
commit 0518337472
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 43 additions and 24 deletions

View File

@ -44,7 +44,7 @@ bool waitForPDAMessageHighlight(struct aqualinkdata *aq_data, int highlighIndex,
bool waitForPDAMessageType(struct aqualinkdata *aq_data, unsigned char mtype, int numMessageReceived);
bool waitForPDAMessageTypes(struct aqualinkdata *aq_data, unsigned char mtype1, unsigned char mtype2, int numMessageReceived);
bool waitForPDAMessageTypesOrMenu(struct aqualinkdata *aq_data, unsigned char mtype1, unsigned char mtype2, int numMessageReceived, char *text, int line);
bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu);
bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu, bool home_first);
bool wait_pda_selected_item(struct aqualinkdata *aq_data);
bool waitForPDAnextMenu(struct aqualinkdata *aq_data);
bool loopover_devices(struct aqualinkdata *aq_data);
@ -247,7 +247,7 @@ bool loopover_devices(struct aqualinkdata *aq_data) {
int i;
int index = -1;
if (! goto_pda_menu(aq_data, PM_EQUIPTMENT_CONTROL)) {
if (! goto_pda_menu(aq_data, PM_EQUIPTMENT_CONTROL, false)) {
LOG(PDA_LOG,LOG_ERR, "loopover_devices :- can't goto PM_EQUIPTMENT_CONTROL menu\n");
//cleanAndTerminateThread(threadCtrl);
return false;
@ -460,7 +460,7 @@ bool _select_pda_menu_item(struct aqualinkdata *aq_data, char *menuText, bool wa
// and 6594 - AquaLink RS Control Panel Installation Manual
// https://www.jandy.com/-/media/zodiac/global/downloads/0748-91071/6594.pdf
bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu) {
bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu, bool home_first) {
bool ret = true;
int cnt = 0;
@ -477,6 +477,25 @@ bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu) {
waitForPDAMessageType(aq_data,CMD_PDA_HIGHLIGHT,15);
}
if (home_first) {
//
// Before start, put back to home menu. Otherwise may get timing issue.
// We can be sending SELECT at EQUIPMNET menu while PDA immediate fall back to HOME
// menu. Also going back to HOME with first menu item highlighted seems to be
// more stable.
send_pda_cmd(KEY_PDA_BACK);
if (!waitForPDAnextMenu(aq_data)) {
LOG(PDA_LOG,LOG_ERR, "PDA goto menu: can't find HOME menu\n");
return false;
}
if (pda_m_type() == PM_HOME && pda_m_hlightindex() != 4) {
send_pda_cmd(KEY_PDA_BACK);
if (!waitForPDAnextMenu(aq_data)) {
LOG(PDA_LOG,LOG_ERR, "PDA goto menu: can't find HOME menu\n");
return false;
}
}
}
while (ret && (pda_m_type() != menu) && cnt <= 5) {
switch (menu) {
@ -639,7 +658,7 @@ void *set_aqualink_PDA_device_on_off( void *ptr )
LOG(PDA_LOG,LOG_INFO, "PDA Device On/Off, device '%s', state %d\n",aq_data->aqbuttons[device].label,state);
if (! goto_pda_menu(aq_data, PM_EQUIPTMENT_CONTROL)) {
if (! goto_pda_menu(aq_data, PM_EQUIPTMENT_CONTROL, true)) {
LOG(PDA_LOG,LOG_ERR, "PDA Device On/Off :- can't find EQUIPTMENT CONTROL menu\n");
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -711,7 +730,7 @@ void *get_aqualink_PDA_device_status( void *ptr )
waitForSingleThreadOrTerminate(threadCtrl, AQ_PDA_DEVICE_STATUS);
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
if (! loopover_devices(aq_data)) {
LOG(PDA_LOG,LOG_ERR, "PDA Device Status :- failed\n");
@ -783,7 +802,7 @@ void *set_aqualink_PDA_init( void *ptr )
pda_reset_sleep();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
@ -820,7 +839,7 @@ void *set_aqualink_PDA_wakeinit( void *ptr )
bool _get_PDA_freeze_protect_temp(struct aqualinkdata *aq_data) {
if ( _PDA_Type == PDA) {
if (! goto_pda_menu(aq_data, PM_FREEZE_PROTECT)) {
if (! goto_pda_menu(aq_data, PM_FREEZE_PROTECT, true)) {
return false;
}
/* select the freeze protect temp to see which devices are enabled by freeze
@ -836,10 +855,10 @@ bool _get_PDA_freeze_protect_temp(struct aqualinkdata *aq_data) {
bool _get_PDA_aqualink_pool_spa_heater_temps(struct aqualinkdata *aq_data) {
// Get heater setpoints
if (! goto_pda_menu(aq_data, PM_SET_TEMP)) {
if (! goto_pda_menu(aq_data, PM_SET_TEMP, true)) {
LOG(PDA_LOG,LOG_ERR, "Could not get heater setpoints, trying again!\n");
// Going to try this twice.
if (! goto_pda_menu(aq_data, PM_SET_TEMP)) {
if (! goto_pda_menu(aq_data, PM_SET_TEMP, false)) {
return false;
}
}
@ -1052,7 +1071,7 @@ void *set_PDA_aqualink_SWG_setpoint(void *ptr) {
int val = atoi((char*)threadCtrl->thread_args);
val = setpoint_check(SWG_SETPOINT, val, aq_data);
if (! goto_pda_menu(aq_data, PM_AQUAPURE)) {
if (! goto_pda_menu(aq_data, PM_AQUAPURE, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding SWG setpoints menu\n");
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -1074,7 +1093,7 @@ void *set_PDA_aqualink_SWG_setpoint(void *ptr) {
}
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -1091,7 +1110,7 @@ void *set_PDA_aqualink_boost(void *ptr)
int val = atoi((char*)threadCtrl->thread_args);
if (! goto_pda_menu(aq_data, PM_BOOST)) {
if (! goto_pda_menu(aq_data, PM_BOOST, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding BOOST menu\n");
return false;
}
@ -1114,7 +1133,7 @@ void *set_PDA_aqualink_boost(void *ptr)
}
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
return ptr;
}
@ -1149,7 +1168,7 @@ bool set_PDA_aqualink_heater_setpoint(struct aqualinkdata *aq_data, int val, boo
return true;
}
if (! goto_pda_menu(aq_data, PM_SET_TEMP)) {
if (! goto_pda_menu(aq_data, PM_SET_TEMP, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding heater setpoints menu\n");
return false;
}
@ -1174,7 +1193,7 @@ void *set_aqualink_PDA_pool_heater_temps( void *ptr )
set_PDA_aqualink_heater_setpoint(aq_data, val, true);
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -1194,7 +1213,7 @@ void *set_aqualink_PDA_spa_heater_temps( void *ptr )
set_PDA_aqualink_heater_setpoint(aq_data, val, false);
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -1216,7 +1235,7 @@ void *set_aqualink_PDA_freeze_protectsetpoint( void *ptr )
if (_PDA_Type != PDA) {
LOG(PDA_LOG,LOG_INFO, "In PDA AquaPalm mode, freezepoints not supported\n");
//return false;
} else if (! goto_pda_menu(aq_data, PM_FREEZE_PROTECT)) {
} else if (! goto_pda_menu(aq_data, PM_FREEZE_PROTECT, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding freeze protect setpoints menu\n");
//return false;
} else if (! set_PDA_numeric_field_value(aq_data, val, aq_data->frz_protect_set_point, NULL, 1)) {
@ -1227,7 +1246,7 @@ void *set_aqualink_PDA_freeze_protectsetpoint( void *ptr )
}
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
cleanAndTerminateThread(threadCtrl);
return ptr;
@ -1242,7 +1261,7 @@ void *set_PDA_aqualink_time( void *ptr )
waitForSingleThreadOrTerminate(threadCtrl, AQ_PDA_SET_TIME);
if (! goto_pda_menu(aq_data, PM_SET_TIME)) {
if (! goto_pda_menu(aq_data, PM_SET_TIME, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding set time menu\n");
goto f_end;
}
@ -1302,7 +1321,7 @@ Debug: PDA: PDA Menu Line 9 = to continue.
waitForPDAnextMenu(aq_data);
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
f_end:
@ -1326,7 +1345,7 @@ void *get_PDA_aqualink_aux_labels( void *ptr ) {
LOG(PDA_LOG,LOG_INFO, "Finding PDA labels, (BETA ONLY)\n");
if (! goto_pda_menu(aq_data, PM_AUX_LABEL)) {
if (! goto_pda_menu(aq_data, PM_AUX_LABEL, true)) {
LOG(PDA_LOG,LOG_ERR, "Error finding aux label menu\n");
goto f_end;
}
@ -1341,7 +1360,7 @@ void *get_PDA_aqualink_aux_labels( void *ptr ) {
// Read first page of devices and make some assumptions.
waitfor_pda_queue2empty();
goto_pda_menu(aq_data, PM_HOME);
goto_pda_menu(aq_data, PM_HOME, false);
f_end: