mirror of https://github.com/sfeakes/AqualinkD.git
2.6.0 (dev 0.3)
parent
c3a15de5ab
commit
53c88deda2
31
Makefile
31
Makefile
|
@ -9,10 +9,10 @@
|
|||
#
|
||||
|
||||
# Valid flags for AQ_FLAGS
|
||||
AQ_RS16 = true
|
||||
#AQ_RS16 = true
|
||||
AQ_PDA = true
|
||||
AQ_ONETOUCH = true
|
||||
AQ_IAQTOUCH = true
|
||||
#AQ_ONETOUCH = true
|
||||
#AQ_IAQTOUCH = true
|
||||
AQ_MANAGER = true
|
||||
|
||||
#AQ_RS_EXTRA_OPTS = false
|
||||
|
@ -82,8 +82,9 @@ endif
|
|||
|
||||
# Main source files
|
||||
SRCS = aqualinkd.c utils.c config.c aq_serial.c aq_panel.c aq_programmer.c allbutton.c allbutton_aq_programmer.c net_services.c json_messages.c rs_msg_utils.c\
|
||||
onetouch.c onetouch_aq_programmer.c iaqtouch.c iaqtouch_aq_programmer.c iaqualink.c\
|
||||
devices_jandy.c packetLogger.c devices_pentair.c color_lights.c serialadapter.c aq_timer.c aq_scheduler.c web_config.c\
|
||||
serial_logger.c mongoose.c hassio.c simulator.c sensors.c aq_filesystem.c timespec_subtract.c
|
||||
serial_logger.c mongoose.c hassio.c simulator.c sensors.c aq_filesystem.c timespec_subtract.c
|
||||
|
||||
|
||||
AQ_FLAGS =
|
||||
|
@ -93,19 +94,19 @@ ifeq ($(AQ_PDA), true)
|
|||
AQ_FLAGS := $(AQ_FLAGS) -D AQ_PDA
|
||||
endif
|
||||
|
||||
ifeq ($(AQ_ONETOUCH), true)
|
||||
SRCS := $(SRCS) onetouch.c onetouch_aq_programmer.c
|
||||
AQ_FLAGS := $(AQ_FLAGS) -D AQ_ONETOUCH
|
||||
endif
|
||||
#ifeq ($(AQ_ONETOUCH), true)
|
||||
# SRCS := $(SRCS) onetouch.c onetouch_aq_programmer.c
|
||||
# AQ_FLAGS := $(AQ_FLAGS) -D AQ_ONETOUCH
|
||||
#endif
|
||||
|
||||
ifeq ($(AQ_IAQTOUCH), true)
|
||||
SRCS := $(SRCS) iaqtouch.c iaqtouch_aq_programmer.c iaqualink.c
|
||||
AQ_FLAGS := $(AQ_FLAGS) -D AQ_IAQTOUCH
|
||||
endif
|
||||
#ifeq ($(AQ_IAQTOUCH), true)
|
||||
# SRCS := $(SRCS) iaqtouch.c iaqtouch_aq_programmer.c iaqualink.c
|
||||
# AQ_FLAGS := $(AQ_FLAGS) -D AQ_IAQTOUCH
|
||||
#endif
|
||||
|
||||
ifeq ($(AQ_RS16), true)
|
||||
AQ_FLAGS := $(AQ_FLAGS) -D AQ_RS16
|
||||
endif
|
||||
#ifeq ($(AQ_RS16), true)
|
||||
# AQ_FLAGS := $(AQ_FLAGS) -D AQ_RS16
|
||||
#endif
|
||||
|
||||
ifeq ($(AQ_MEMCMP), true)
|
||||
AQ_FLAGS := $(AQ_FLAGS) -D AQ_MEMCMP
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -117,7 +117,7 @@ void setUnits(char *msg, struct aqualinkdata *aq_data)
|
|||
#define MSG_LOOP_POOL_TEMP (1 << 11)
|
||||
#define MSG_LOOP_SPA_TEMP (1 << 12)
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
int16_t RS16_endswithLEDstate(char *msg, struct aqualinkdata *aq_data)
|
||||
{
|
||||
char *sp;
|
||||
|
@ -173,7 +173,7 @@ int16_t RS16_endswithLEDstate(char *msg, struct aqualinkdata *aq_data)
|
|||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset);
|
||||
|
||||
|
@ -198,9 +198,9 @@ void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset)
|
|||
static aqledstate default_frz_protect_state = OFF;
|
||||
static bool boostInLastLoop = false;
|
||||
// NSF replace message with msg
|
||||
#ifdef AQ_RS16
|
||||
|
||||
int16_t rs16;
|
||||
#endif
|
||||
|
||||
|
||||
//msg = stripwhitespace(message);
|
||||
//strcpy(aq_data->last_message, msg);
|
||||
|
@ -301,7 +301,7 @@ void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset)
|
|||
if ((msg_loop & MSG_BATTERY_LOW) != MSG_BATTERY_LOW)
|
||||
aq_data->battery = OK;
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
//if ( _aqconfig_.rs_panel_size >= 16) {
|
||||
//if ( (int)PANEL_SIZE >= 16) { // NSF No idea why this fails on RS-4, but it does. Come back and find out why
|
||||
if ( PANEL_SIZE() >= 16 ) {
|
||||
|
@ -315,7 +315,7 @@ void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset)
|
|||
if ((msg_loop & MSG_RS16BUTTON) != MSG_RS16BUTTON)
|
||||
aq_data->aqbuttons[16].led->state = OFF;
|
||||
}
|
||||
#endif
|
||||
|
||||
msg_loop = 0;
|
||||
return;
|
||||
}
|
||||
|
@ -540,7 +540,7 @@ void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset)
|
|||
// Process any button states (fake LED) for RS12 and above keypads
|
||||
// Text will be button label on or off ie Aux_B2 off or WaterFall off
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
//else if ( _aqconfig_.rs_panel_size >= 16 && (rs16 = RS16_endswithLEDstate(msg)) != 0 )
|
||||
else if (PANEL_SIZE() >= 16 && (rs16 = RS16_endswithLEDstate(msg, aq_data)) != 0 )
|
||||
{
|
||||
|
@ -551,7 +551,7 @@ void _processMessage(char *message, struct aqualinkdata *aq_data, bool reset)
|
|||
// use the Onetouch or iAqua equiptment page for off.
|
||||
strcpy(aq_data->last_display_message, msg);
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (((msg[4] == ':') || (msg[6] == ':')) && (strncasecmp(msg, "AUX", 3) == 0) )
|
||||
{ // Should probable check we are in programming mode.
|
||||
// 'Aux3: No Label'
|
||||
|
|
|
@ -1100,10 +1100,11 @@ void send_cmd(unsigned char cmd)
|
|||
|
||||
LOG(ALLB_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller (programming)\n", _allb_pgm_command);
|
||||
}
|
||||
|
||||
void force_queue_delete()
|
||||
{
|
||||
if (_allb_pgm_command != NUL)
|
||||
LOG(ALLB_LOG, LOG_INFO, "Really bad coding, don't use this in release\n");
|
||||
//if (_allb_pgm_command != NUL)
|
||||
// LOG(ALLB_LOG, LOG_INFO, "Really bad coding, don't use this in release\n");
|
||||
|
||||
_allb_pgm_command = NUL;
|
||||
}
|
||||
|
|
|
@ -546,7 +546,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
|
|||
aqdata->aqbuttons[index].rssd_code = RS_SA_AUX7;
|
||||
index++;
|
||||
}
|
||||
#ifdef AQ_RS16
|
||||
|
||||
if (size >= 12) {// NSF This could be 10
|
||||
// AUX4 to AUX7 use different LED index & button key codes on RS12 & 16, so reset them
|
||||
aqdata->aqbuttons[index-4].led = &aqdata->aqualinkleds[2-1]; // Change
|
||||
|
@ -639,7 +639,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
|
|||
aqdata->aqbuttons[index].rssd_code = RS_SA_AUX15;
|
||||
index++;
|
||||
}
|
||||
#endif // AQ_RS16
|
||||
|
||||
|
||||
if (dual) {
|
||||
//Dual panel 2/6 has Aux6 so add that
|
||||
|
@ -699,10 +699,10 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
|
|||
aqdata->total_buttons = index;
|
||||
aqdata->virtual_button_start = 0;
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
aqdata->rs16_vbutton_start = 13 - (combo?0:1);
|
||||
aqdata->rs16_vbutton_end = 16 - (combo?0:1);
|
||||
#endif
|
||||
|
||||
#ifdef AQ_PDA
|
||||
aqdata->pool_heater_index = index-3;
|
||||
aqdata->spa_heater_index = index-2;
|
||||
|
@ -1228,442 +1228,3 @@ pump_detail *getPumpDetail(struct aqualinkdata *aqdata, int button)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef DO_NOT_COMPILE
|
||||
|
||||
|
||||
#ifdef AQ_RS16
|
||||
void initButtons_RS16(struct aqualinkdata *aqdata);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Link LED numbers to buttons, this is valid for RS8 and below, RS10 and above are different
|
||||
* need to update this code in future.
|
||||
*/
|
||||
|
||||
void initButtons(struct aqualinkdata *aqdata)
|
||||
{
|
||||
|
||||
aqdata->aqbuttons[0].led = &aqdata->aqualinkleds[7-1];
|
||||
aqdata->aqbuttons[0].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[0].label = name2label(BTN_PUMP);
|
||||
aqdata->aqbuttons[0].name = BTN_PUMP;
|
||||
aqdata->aqbuttons[0].code = KEY_PUMP;
|
||||
aqdata->aqbuttons[0].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[1].led = &aqdata->aqualinkleds[6-1];
|
||||
aqdata->aqbuttons[1].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[1].label = name2label(BTN_SPA);
|
||||
aqdata->aqbuttons[1].name = BTN_SPA;
|
||||
aqdata->aqbuttons[1].code = KEY_SPA;
|
||||
aqdata->aqbuttons[1].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[2].led = &aqdata->aqualinkleds[5-1];
|
||||
aqdata->aqbuttons[2].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[2].label = name2label(BTN_AUX1);
|
||||
aqdata->aqbuttons[2].name = BTN_AUX1;
|
||||
aqdata->aqbuttons[2].code = KEY_AUX1;
|
||||
aqdata->aqbuttons[2].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[3].led = &aqdata->aqualinkleds[4-1];
|
||||
aqdata->aqbuttons[3].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[3].label = name2label(BTN_AUX2);
|
||||
aqdata->aqbuttons[3].name = BTN_AUX2;
|
||||
aqdata->aqbuttons[3].code = KEY_AUX2;
|
||||
aqdata->aqbuttons[3].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[4].led = &aqdata->aqualinkleds[3-1];
|
||||
aqdata->aqbuttons[4].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[4].label = name2label(BTN_AUX3);
|
||||
aqdata->aqbuttons[4].name = BTN_AUX3;
|
||||
aqdata->aqbuttons[4].code = KEY_AUX3;
|
||||
aqdata->aqbuttons[4].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[9-1];
|
||||
aqdata->aqbuttons[5].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[5].label = name2label(BTN_AUX4);
|
||||
aqdata->aqbuttons[5].name = BTN_AUX4;
|
||||
aqdata->aqbuttons[5].code = KEY_AUX4;
|
||||
aqdata->aqbuttons[5].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[8-1];
|
||||
aqdata->aqbuttons[6].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[6].label = name2label(BTN_AUX5);
|
||||
aqdata->aqbuttons[6].name = BTN_AUX5;
|
||||
aqdata->aqbuttons[6].code = KEY_AUX5;
|
||||
aqdata->aqbuttons[6].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[12-1];
|
||||
aqdata->aqbuttons[7].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[7].label = name2label(BTN_AUX6);
|
||||
aqdata->aqbuttons[7].name = BTN_AUX6;
|
||||
aqdata->aqbuttons[7].code = KEY_AUX6;
|
||||
aqdata->aqbuttons[7].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[1-1];
|
||||
aqdata->aqbuttons[8].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[8].label = name2label(BTN_AUX7);
|
||||
aqdata->aqbuttons[8].name = BTN_AUX7;
|
||||
aqdata->aqbuttons[8].code = KEY_AUX7;
|
||||
aqdata->aqbuttons[8].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[15-1];
|
||||
aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[9].label = name2label(BTN_POOL_HTR);
|
||||
aqdata->aqbuttons[9].name = BTN_POOL_HTR;
|
||||
aqdata->aqbuttons[9].code = KEY_POOL_HTR;
|
||||
aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[17-1];
|
||||
aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[10].label = name2label(BTN_SPA_HTR);
|
||||
aqdata->aqbuttons[10].name = BTN_SPA_HTR;
|
||||
aqdata->aqbuttons[10].code = KEY_SPA_HTR;
|
||||
aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[19-1];
|
||||
aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[11].label = name2label(BTN_SOLAR_HTR);
|
||||
aqdata->aqbuttons[11].name = BTN_SOLAR_HTR;
|
||||
aqdata->aqbuttons[11].code = KEY_SOLAR_HTR;
|
||||
aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
#ifdef AQ_PDA
|
||||
aqdata->aqbuttons[0].pda_label = BTN_PDA_PUMP;
|
||||
aqdata->aqbuttons[1].pda_label = BTN_PDA_SPA;
|
||||
aqdata->aqbuttons[2].pda_label = BTN_PDA_AUX1;
|
||||
aqdata->aqbuttons[3].pda_label = BTN_PDA_AUX2;
|
||||
aqdata->aqbuttons[4].pda_label = BTN_PDA_AUX3;
|
||||
aqdata->aqbuttons[5].pda_label = BTN_PDA_AUX4;
|
||||
aqdata->aqbuttons[6].pda_label = BTN_PDA_AUX5;
|
||||
aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
|
||||
aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
|
||||
aqdata->aqbuttons[8].pda_label = BTN_PDA_AUX7;
|
||||
aqdata->aqbuttons[9].pda_label = BTN_PDA_POOL_HTR;
|
||||
aqdata->aqbuttons[10].pda_label = BTN_PDA_SPA_HTR;
|
||||
aqdata->aqbuttons[11].pda_label = BTN_PDA_SOLAR_HTR;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
void initButtons_RS16(struct aqualinkdata *aqdata)
|
||||
{
|
||||
// All buttons up to AUX4 are identical on all panels, so no need to change
|
||||
|
||||
// AUX4 to AUX7 use different LED index & button key codes on RS12 & 16.
|
||||
aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[2-1]; // Change
|
||||
aqdata->aqbuttons[5].code = KEY_RS16_AUX4;
|
||||
aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[11-1]; // Change
|
||||
aqdata->aqbuttons[6].code = KEY_RS16_AUX5;
|
||||
aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[10-1]; // Change
|
||||
aqdata->aqbuttons[7].code = KEY_RS16_AUX6;
|
||||
aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[9-1]; // change
|
||||
aqdata->aqbuttons[8].code = KEY_RS16_AUX7;
|
||||
|
||||
// AUX8 (B1) and beyone are either new or totally different on RS12 & 16
|
||||
|
||||
aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[8-1];
|
||||
aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[9].label = name2label(BTN_AUXB1); // AUX8
|
||||
aqdata->aqbuttons[9].name = BTN_AUXB1;
|
||||
aqdata->aqbuttons[9].code = KEY_AUXB1;
|
||||
aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[12-1];
|
||||
aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[10].label = name2label(BTN_AUXB2); // AUX9
|
||||
aqdata->aqbuttons[10].name = BTN_AUXB2;
|
||||
aqdata->aqbuttons[10].code = KEY_AUXB2;
|
||||
aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[1-1];
|
||||
aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[11].label = name2label(BTN_AUXB3); // AUX10
|
||||
aqdata->aqbuttons[11].name = BTN_AUXB3;
|
||||
aqdata->aqbuttons[11].code = KEY_AUXB3;
|
||||
aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[12].led = &aqdata->aqualinkleds[13-1];
|
||||
aqdata->aqbuttons[12].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[12].label = name2label(BTN_AUXB4); // AUX11
|
||||
aqdata->aqbuttons[12].name = BTN_AUXB4;
|
||||
aqdata->aqbuttons[12].code = KEY_AUXB4;
|
||||
aqdata->aqbuttons[12].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[13].led = &aqdata->aqualinkleds[21-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[13].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
|
||||
aqdata->aqbuttons[13].label = name2label(BTN_AUXB5);
|
||||
aqdata->aqbuttons[13].name = BTN_AUXB5;
|
||||
aqdata->aqbuttons[13].code = KEY_AUXB5;
|
||||
aqdata->aqbuttons[13].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[14].led = &aqdata->aqualinkleds[22-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[14].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
|
||||
aqdata->aqbuttons[14].label = name2label(BTN_AUXB6);
|
||||
aqdata->aqbuttons[14].name = BTN_AUXB6;
|
||||
aqdata->aqbuttons[14].code = KEY_AUXB6;
|
||||
aqdata->aqbuttons[14].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[15].led = &aqdata->aqualinkleds[23-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[15].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
|
||||
aqdata->aqbuttons[15].label = name2label(BTN_AUXB7);
|
||||
aqdata->aqbuttons[15].name = BTN_AUXB7;
|
||||
aqdata->aqbuttons[15].code = KEY_AUXB7;
|
||||
aqdata->aqbuttons[15].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[16].led = &aqdata->aqualinkleds[24-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[16].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
|
||||
aqdata->aqbuttons[16].label = name2label(BTN_AUXB8);
|
||||
aqdata->aqbuttons[16].name = BTN_AUXB8;
|
||||
aqdata->aqbuttons[16].code = KEY_AUXB8;
|
||||
aqdata->aqbuttons[16].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[17].led = &aqdata->aqualinkleds[15-1];
|
||||
aqdata->aqbuttons[17].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[17].label = name2label(BTN_POOL_HTR);
|
||||
aqdata->aqbuttons[17].name = BTN_POOL_HTR;
|
||||
aqdata->aqbuttons[17].code = KEY_POOL_HTR;
|
||||
aqdata->aqbuttons[17].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[18].led = &aqdata->aqualinkleds[17-1];
|
||||
aqdata->aqbuttons[18].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[18].label = name2label(BTN_SPA_HTR);
|
||||
aqdata->aqbuttons[18].name = BTN_SPA_HTR;
|
||||
aqdata->aqbuttons[18].code = KEY_SPA_HTR;
|
||||
aqdata->aqbuttons[18].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
aqdata->aqbuttons[19].led = &aqdata->aqualinkleds[19-1];
|
||||
aqdata->aqbuttons[19].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[19].label = name2label(BTN_SOLAR_HTR);
|
||||
aqdata->aqbuttons[19].name = BTN_SOLAR_HTR;
|
||||
aqdata->aqbuttons[19].code = KEY_SOLAR_HTR;
|
||||
aqdata->aqbuttons[19].dz_idx = DZ_NULL_IDX;
|
||||
|
||||
|
||||
#ifdef AQ_PDA
|
||||
aqdata->aqbuttons[9].pda_label = BTN_PDA_AUX1;
|
||||
aqdata->aqbuttons[10].pda_label = BTN_PDA_AUX2;
|
||||
aqdata->aqbuttons[11].pda_label = BTN_PDA_AUX3;
|
||||
aqdata->aqbuttons[12].pda_label = BTN_PDA_AUX4;
|
||||
aqdata->aqbuttons[13].pda_label = BTN_PDA_AUX5;
|
||||
aqdata->aqbuttons[14].pda_label = BTN_PDA_AUX6;
|
||||
aqdata->aqbuttons[15].pda_label = BTN_PDA_AUX7;
|
||||
aqdata->aqbuttons[16].pda_label = BTN_PDA_AUX7;
|
||||
aqdata->aqbuttons[17].pda_label = BTN_PDA_POOL_HTR;
|
||||
aqdata->aqbuttons[18].pda_label = BTN_PDA_SPA_HTR;
|
||||
aqdata->aqbuttons[19].pda_label = BTN_PDA_SOLAR_HTR;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void initButtons_OLD_RS16(struct aqualinkdata *aqdata)
|
||||
{
|
||||
aqdata->aqbuttons[0].led = &aqdata->aqualinkleds[7-1];
|
||||
aqdata->aqbuttons[0].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[0].label = name2label(BTN_PUMP);
|
||||
aqdata->aqbuttons[0].name = BTN_PUMP;
|
||||
aqdata->aqbuttons[0].code = KEY_PUMP;
|
||||
aqdata->aqbuttons[0].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[0].pda_label = BTN_PDA_PUMP;
|
||||
|
||||
aqdata->aqbuttons[1].led = &aqdata->aqualinkleds[6-1];
|
||||
aqdata->aqbuttons[1].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[1].label = name2label(BTN_SPA);
|
||||
aqdata->aqbuttons[1].name = BTN_SPA;
|
||||
aqdata->aqbuttons[1].code = KEY_SPA;
|
||||
aqdata->aqbuttons[1].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[1].pda_label = BTN_PDA_SPA;
|
||||
|
||||
aqdata->aqbuttons[2].led = &aqdata->aqualinkleds[5-1];
|
||||
aqdata->aqbuttons[2].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[2].label = name2label(BTN_AUX1);
|
||||
aqdata->aqbuttons[2].name = BTN_AUX1;
|
||||
aqdata->aqbuttons[2].code = KEY_AUX1;
|
||||
aqdata->aqbuttons[2].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[2].pda_label = BTN_PDA_AUX1;
|
||||
|
||||
aqdata->aqbuttons[3].led = &aqdata->aqualinkleds[4-1];
|
||||
aqdata->aqbuttons[3].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[3].label = name2label(BTN_AUX2);
|
||||
aqdata->aqbuttons[3].name = BTN_AUX2;
|
||||
aqdata->aqbuttons[3].code = KEY_AUX2;
|
||||
aqdata->aqbuttons[3].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[3].pda_label = BTN_PDA_AUX2;
|
||||
|
||||
aqdata->aqbuttons[4].led = &aqdata->aqualinkleds[3-1];
|
||||
aqdata->aqbuttons[4].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[4].label = BTN_AUX3;
|
||||
aqdata->aqbuttons[4].name = BTN_AUX3;
|
||||
aqdata->aqbuttons[4].code = KEY_AUX3;
|
||||
aqdata->aqbuttons[4].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[4].pda_label = BTN_PDA_AUX3;
|
||||
|
||||
aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[2-1]; // Change
|
||||
aqdata->aqbuttons[5].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[5].label = name2label(BTN_AUX4);
|
||||
aqdata->aqbuttons[5].name = BTN_AUX4;
|
||||
aqdata->aqbuttons[5].code = KEY_AUX4;
|
||||
aqdata->aqbuttons[5].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[5].pda_label = BTN_PDA_AUX4;
|
||||
|
||||
aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[11-1]; // Change
|
||||
aqdata->aqbuttons[6].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[6].label = name2label(BTN_AUX5);
|
||||
aqdata->aqbuttons[6].name = BTN_AUX5;
|
||||
aqdata->aqbuttons[6].code = KEY_AUX5;
|
||||
aqdata->aqbuttons[6].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[6].pda_label = BTN_PDA_AUX5;
|
||||
|
||||
aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[10-1]; // Change
|
||||
aqdata->aqbuttons[7].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[7].label = name2label(BTN_AUX6);
|
||||
aqdata->aqbuttons[7].name = BTN_AUX6;
|
||||
aqdata->aqbuttons[7].code = KEY_AUX6;
|
||||
aqdata->aqbuttons[7].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
|
||||
|
||||
aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[9-1]; // change
|
||||
aqdata->aqbuttons[8].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[8].label = name2label(BTN_AUX7);
|
||||
aqdata->aqbuttons[8].name = BTN_AUX7;
|
||||
aqdata->aqbuttons[8].code = KEY_AUX7;
|
||||
aqdata->aqbuttons[8].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[8].pda_label = BTN_PDA_AUX7;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[8-1];
|
||||
aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[9].label = name2label(BTN_AUXB1); // AUX8
|
||||
aqdata->aqbuttons[9].name = BTN_AUXB1;
|
||||
aqdata->aqbuttons[9].code = KEY_AUXB1;
|
||||
aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[9].pda_label = BTN_PDA_AUX1;
|
||||
|
||||
aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[12-1];
|
||||
aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[10].label = name2label(BTN_AUXB2); // AUX9
|
||||
aqdata->aqbuttons[10].name = BTN_AUXB2;
|
||||
aqdata->aqbuttons[10].code = KEY_AUXB2;
|
||||
aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[10].pda_label = BTN_PDA_AUX2;
|
||||
|
||||
aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[1-1];
|
||||
aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[11].label = name2label(BTN_AUXB3); // AUX10
|
||||
aqdata->aqbuttons[11].name = BTN_AUXB3;
|
||||
aqdata->aqbuttons[11].code = KEY_AUXB3;
|
||||
aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[11].pda_label = BTN_PDA_AUX3;
|
||||
|
||||
aqdata->aqbuttons[12].led = &aqdata->aqualinkleds[13-1];
|
||||
aqdata->aqbuttons[12].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[12].label = name2label(BTN_AUXB4); // AUX11
|
||||
aqdata->aqbuttons[12].name = BTN_AUXB4;
|
||||
aqdata->aqbuttons[12].code = KEY_AUXB4;
|
||||
aqdata->aqbuttons[12].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[12].pda_label = BTN_PDA_AUX4;
|
||||
|
||||
aqdata->aqbuttons[13].led = &aqdata->aqualinkleds[21-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[13].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[13].label = name2label(BTN_AUXB5);
|
||||
aqdata->aqbuttons[13].name = BTN_AUXB5;
|
||||
aqdata->aqbuttons[13].code = KEY_AUXB5;
|
||||
aqdata->aqbuttons[13].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[13].pda_label = BTN_PDA_AUX5;
|
||||
|
||||
aqdata->aqbuttons[14].led = &aqdata->aqualinkleds[22-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[14].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[14].label = name2label(BTN_AUXB6);
|
||||
aqdata->aqbuttons[14].name = BTN_AUXB6;
|
||||
aqdata->aqbuttons[14].code = KEY_AUXB6;
|
||||
aqdata->aqbuttons[14].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[14].pda_label = BTN_PDA_AUX6;
|
||||
|
||||
aqdata->aqbuttons[15].led = &aqdata->aqualinkleds[23-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[15].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[15].label = name2label(BTN_AUXB7);
|
||||
aqdata->aqbuttons[15].name = BTN_AUXB7;
|
||||
aqdata->aqbuttons[15].code = KEY_AUXB7;
|
||||
aqdata->aqbuttons[15].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[15].pda_label = BTN_PDA_AUX7;
|
||||
|
||||
aqdata->aqbuttons[16].led = &aqdata->aqualinkleds[24-1]; // doesn't actually exist
|
||||
aqdata->aqbuttons[16].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[16].label = name2label(BTN_AUXB8);
|
||||
aqdata->aqbuttons[16].name = BTN_AUXB8;
|
||||
aqdata->aqbuttons[16].code = KEY_AUXB8;
|
||||
aqdata->aqbuttons[16].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[16].pda_label = BTN_PDA_AUX7;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
aqdata->aqbuttons[17].led = &aqdata->aqualinkleds[15-1];
|
||||
aqdata->aqbuttons[17].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[17].label = name2label(BTN_POOL_HTR);
|
||||
aqdata->aqbuttons[17].name = BTN_POOL_HTR;
|
||||
aqdata->aqbuttons[17].code = KEY_POOL_HTR;
|
||||
aqdata->aqbuttons[17].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[17].pda_label = BTN_PDA_POOL_HTR;
|
||||
|
||||
aqdata->aqbuttons[18].led = &aqdata->aqualinkleds[17-1];
|
||||
aqdata->aqbuttons[18].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[18].label = name2label(BTN_SPA_HTR);
|
||||
aqdata->aqbuttons[18].name = BTN_SPA_HTR;
|
||||
aqdata->aqbuttons[18].code = KEY_SPA_HTR;
|
||||
aqdata->aqbuttons[18].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[18].pda_label = BTN_PDA_SPA_HTR;
|
||||
|
||||
aqdata->aqbuttons[19].led = &aqdata->aqualinkleds[19-1];
|
||||
aqdata->aqbuttons[19].led->state = LED_S_UNKNOWN;
|
||||
aqdata->aqbuttons[19].label = name2label(BTN_SOLAR_HTR);
|
||||
aqdata->aqbuttons[19].name = BTN_SOLAR_HTR;
|
||||
aqdata->aqbuttons[19].code = KEY_SOLAR_HTR;
|
||||
aqdata->aqbuttons[19].dz_idx = DZ_NULL_IDX;
|
||||
aqdata->aqbuttons[19].pda_label = BTN_PDA_SOLAR_HTR;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -121,12 +121,12 @@ int PANEL_SIZE();
|
|||
// FIX IS PROBABLY MAKE SURE LEDS IS SAME OR MORE.
|
||||
#define VIRTUAL_BUTTONS 0
|
||||
|
||||
#ifndef AQ_RS16
|
||||
#define TOTAL_BUTTONS 12+VIRTUAL_BUTTONS
|
||||
#else
|
||||
|
||||
//#define TOTAL_BUTTONS 12+VIRTUAL_BUTTONS
|
||||
|
||||
#define TOTAL_BUTTONS 20+VIRTUAL_BUTTONS // Biggest jandy panel
|
||||
// This needs to be called AFTER and as well as initButtons
|
||||
void initButtons_RS16(struct aqualinkdata *aqdata);
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -483,7 +483,7 @@ void _aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_dat
|
|||
return;
|
||||
}
|
||||
}
|
||||
#ifdef AQ_ONETOUCH
|
||||
|
||||
// reset any types if to onetouch if available and if one touch is quicker
|
||||
// At moment. onetouch is quicker for boost, and slower for heaters
|
||||
else if (isONET_ENABLED && isEXTP_ENABLED) {
|
||||
|
@ -513,8 +513,7 @@ void _aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_dat
|
|||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef AQ_IAQTOUCH
|
||||
|
||||
else if ((isIAQT_ENABLED && isEXTP_ENABLED) || isPDA_IAQT) {
|
||||
// IAQ Touch programming modes that should overite standard ones.
|
||||
switch (r_type){
|
||||
|
@ -553,7 +552,7 @@ void _aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_dat
|
|||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -820,7 +819,7 @@ const char *ptypeName(program_type type)
|
|||
case AQ_SET_RSSADAPTER_SPA_HEATER_TEMP:
|
||||
return "Set SerialAdapter Spa heater setpoint";
|
||||
break;
|
||||
#ifdef AQ_ONETOUCH
|
||||
|
||||
case AQ_SET_ONETOUCH_PUMP_RPM:
|
||||
return "Set OneTouch Pump RPM";
|
||||
break;
|
||||
|
@ -851,8 +850,7 @@ const char *ptypeName(program_type type)
|
|||
case AQ_SET_ONETOUCH_SPA_HEATER_TEMP:
|
||||
return "Set OneTouch Spa Heater Temp";
|
||||
break;
|
||||
#endif
|
||||
#ifdef AQ_IAQTOUCH
|
||||
|
||||
case AQ_SET_IAQTOUCH_PUMP_VS_PROGRAM:
|
||||
return "Set AqualinkTouch Touch Pump VS Program";
|
||||
break;
|
||||
|
@ -905,7 +903,7 @@ const char *ptypeName(program_type type)
|
|||
case AQ_SET_IAQLINK_SPA_HEATER_TEMP:
|
||||
return "Set iAqualink Pool Heater";
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef AQ_PDA
|
||||
case AQ_PDA_INIT:
|
||||
return "Init PDA";
|
||||
|
|
|
@ -175,7 +175,7 @@ void queueGetProgramData(emulation_type source_type, struct aqualinkdata *aq_dat
|
|||
void waitForSingleThreadOrTerminate(struct programmingThreadCtrl *threadCtrl, program_type type);
|
||||
void cleanAndTerminateThread(struct programmingThreadCtrl *threadCtrl);
|
||||
|
||||
//void force_queue_delete() // Yes I want compiler warning if this is used.
|
||||
void force_queue_delete(); // NSF This needs to be deleted (come back and fix)
|
||||
|
||||
|
||||
//bool push_aq_cmd(unsigned char cmd);
|
||||
|
|
|
@ -227,7 +227,7 @@ DEV_UNKNOWN_MASK = 0xF8; // Unknown mask, used to reset values
|
|||
#define KEY_OVERRIDE 0x1e
|
||||
#define KEY_ENTER 0x1d
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
//RS 12 & 16 are different from Aux4 to Aux7
|
||||
#define KEY_RS16_AUX4 0x14
|
||||
#define KEY_RS16_AUX5 0x03
|
||||
|
@ -243,7 +243,7 @@ DEV_UNKNOWN_MASK = 0xF8; // Unknown mask, used to reset values
|
|||
#define KEY_AUXB7 0x0d
|
||||
#define KEY_AUXB8 0x0c
|
||||
// End diff in RS12
|
||||
#endif
|
||||
|
||||
|
||||
#define BTN_PUMP "Filter_Pump"
|
||||
#define BTN_SPA "Spa"
|
||||
|
@ -264,7 +264,7 @@ DEV_UNKNOWN_MASK = 0xF8; // Unknown mask, used to reset values
|
|||
|
||||
#define BTN_VAUX "Aux_V" // A number will be appended
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
#define BTN_AUXB1 "Aux_B1"
|
||||
#define BTN_AUXB2 "Aux_B2"
|
||||
#define BTN_AUXB3 "Aux_B3"
|
||||
|
@ -273,7 +273,7 @@ DEV_UNKNOWN_MASK = 0xF8; // Unknown mask, used to reset values
|
|||
#define BTN_AUXB6 "Aux_B6"
|
||||
#define BTN_AUXB7 "Aux_B7"
|
||||
#define BTN_AUXB8 "Aux_B8"
|
||||
#endif
|
||||
|
||||
|
||||
#define BTN_PDA_PUMP "FILTER PUMP"
|
||||
#define BTN_PDA_SPA "SPA"
|
||||
|
@ -291,11 +291,10 @@ DEV_UNKNOWN_MASK = 0xF8; // Unknown mask, used to reset values
|
|||
|
||||
#define BUTTON_LABEL_LENGTH 20
|
||||
|
||||
#ifndef AQ_RS16
|
||||
#define TOTAL_LEDS 20
|
||||
#else
|
||||
|
||||
//#define TOTAL_LEDS 20
|
||||
#define TOTAL_LEDS 24 // Only 20 exist in control panel, but need space for the extra buttons on RS16 panel
|
||||
#endif
|
||||
|
||||
|
||||
// Index starting at 1
|
||||
#define POOL_HTR_LED_INDEX 15
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
#include "sensors.h"
|
||||
//#include "aq_panel.h" // Moved to later in file to overcome circular dependancy. (crappy I know)
|
||||
|
||||
#define isMASK_SET(bitmask, mask) ((bitmask & mask) == mask)
|
||||
#define setMASK(bitmask, mask) (bitmask |= mask)
|
||||
#define removeMASK(bitmask, mask) (bitmask &= ~mask)
|
||||
|
||||
#define SIGRESTART SIGUSR1
|
||||
|
||||
|
@ -120,15 +123,17 @@ struct programmingthread {
|
|||
//void *thread_args;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
typedef enum panel_status {
|
||||
CONNECTED,
|
||||
CHECKING_CONFIG,
|
||||
CONECTING,
|
||||
LOOKING_IDS,
|
||||
STARTING,
|
||||
SERIAL_ERROR, // Errors that stop reading serial port should be below this line
|
||||
NO_IDS_ERROR,
|
||||
} panel_status;
|
||||
*/
|
||||
|
||||
typedef enum action_type {
|
||||
NO_ACTION = -1,
|
||||
|
@ -199,14 +204,16 @@ typedef enum panel_vsp_status
|
|||
#define PUMP_NAME_LENGTH 30
|
||||
|
||||
// Overall Status of Aqualinkd
|
||||
/*
|
||||
#define CONNECTED ( 1<< 0 ) // All is good (every other mask should be cleared)
|
||||
#define NOT_CONNECTED ( 1 << 2 ) // Serial Error maybe renaem
|
||||
|
||||
#define CONNECTED ( 1 << 0 ) // All is good (every other mask should be cleared)
|
||||
#define NOT_CONNECTED ( 1 << 2 ) // Serial Error maybe rename
|
||||
#define AUTOCONFIGURE_ID ( 1 << 3 )
|
||||
#define AUTOCONFIGURE_PANEL ( 1 << 4 )
|
||||
#define CONNECTING ( 1 << 5 )
|
||||
#define ERROR_. // maybe covered in NOT_CONNECTED
|
||||
*/
|
||||
#define CHECKING_CONFIG ( 1 << 5 )
|
||||
//#define LOOKING_IDS ( 1 << 6 )
|
||||
#define CONNECTING ( 1 << 7 )
|
||||
#define ERROR_NO_DEVICE_ID ( 1 << 8 ) // maybe covered in NOT_CONNECTED
|
||||
#define ERROR_SERIAL ( 1 << 9 )
|
||||
|
||||
typedef struct pumpd
|
||||
{
|
||||
|
@ -289,7 +296,8 @@ typedef struct clightd
|
|||
|
||||
struct aqualinkdata
|
||||
{
|
||||
panel_status panelstatus;
|
||||
//panel_status panelstatus;
|
||||
uint16_t status_mask;
|
||||
char version[AQ_MSGLEN*2];
|
||||
char revision[AQ_MSGLEN];
|
||||
char date[AQ_MSGLEN];
|
||||
|
@ -365,10 +373,10 @@ struct aqualinkdata
|
|||
char slogger_ids[20];
|
||||
#endif
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
int rs16_vbutton_start;
|
||||
int rs16_vbutton_end;
|
||||
#endif
|
||||
|
||||
#ifdef AQ_PDA
|
||||
int pool_heater_index;
|
||||
int spa_heater_index;
|
||||
|
@ -385,4 +393,6 @@ struct aqualinkdata
|
|||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -87,6 +87,9 @@ bool _cmdln_nostartupcheck = false;
|
|||
int _rs_packet_timer;
|
||||
#endif
|
||||
|
||||
#define AddAQDstatusMask(mask) (_aqualink_data.status_mask |= mask)
|
||||
#define RemoveAQDstatusMask(mask) (_aqualink_data.status_mask &= ~mask)
|
||||
|
||||
|
||||
void main_loop();
|
||||
int startup(char *self, char *cfgFile);
|
||||
|
@ -493,294 +496,16 @@ int main(int argc, char *argv[])
|
|||
return startup(argv[0], cfgFile);
|
||||
}
|
||||
|
||||
int OLD_startup_OLD(char *self, char *cfgFile)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
_self = self;
|
||||
_cfgFile = cfgFile;
|
||||
//initButtons(&_aqualink_data);
|
||||
|
||||
sprintf(_aqualink_data.self, basename(self));
|
||||
clearDebugLogMask();
|
||||
read_config(&_aqualink_data, cfgFile);
|
||||
|
||||
// Sanity check on Device ID's against panel type
|
||||
if (isRS_PANEL) {
|
||||
if ( (_aqconfig_.device_id >= 0x08 && _aqconfig_.device_id <= 0x0B) || _aqconfig_.device_id == 0x00) {
|
||||
// We are good
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Device ID 0x%02hhx does not match RS panel, please check config!\n", _aqconfig_.device_id);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
} else if (isPDA_PANEL) {
|
||||
if ( (_aqconfig_.device_id >= 0x60 && _aqconfig_.device_id <= 0x63) || _aqconfig_.device_id == 0x33 ) {
|
||||
if ( _aqconfig_.device_id == 0x33 ) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Enabeling iAqualink protocol.\n");
|
||||
_aqconfig_.enable_iaqualink = true;
|
||||
}
|
||||
// We are good
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Device ID 0x%02hhx does not match PDA panel, please check config!\n", _aqconfig_.device_id);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Error unknown panel type, please check config!\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (_aqconfig_.rssa_device_id != 0x00) {
|
||||
if (_aqconfig_.rssa_device_id >= 0x48 && _aqconfig_.rssa_device_id <= 0x4B ) {
|
||||
// We are good
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_ERR, "RSSA Device ID 0x%02hhx does not match RS panel, please check config!\n", _aqconfig_.rssa_device_id);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
if (_aqconfig_.extended_device_id != 0x00) {
|
||||
if ( (_aqconfig_.extended_device_id >= 0x30 && _aqconfig_.extended_device_id <= 0x33) ||
|
||||
(_aqconfig_.extended_device_id >= 0x40 && _aqconfig_.extended_device_id <= 0x43) ) {
|
||||
// We are good
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Extended Device ID 0x%02hhx does not match OneTouch or AqualinkTouch ID, please check config!\n", _aqconfig_.extended_device_id);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
// Just so we catch the heaters, make all panels RS8 or RS16
|
||||
//_aqualink_data.total_buttons = _aqconfig_.rs_panel_size + 4; // This would be correct if we re-index heaters.
|
||||
#ifdef AQ_RS16
|
||||
if (_aqconfig_.rs_panel_size >= 12)
|
||||
_aqualink_data.total_buttons = 20;
|
||||
else
|
||||
#endif
|
||||
_aqualink_data.total_buttons = 12;
|
||||
*/
|
||||
|
||||
if (_cmdln_loglevel != -1)
|
||||
_aqconfig_.log_level = _cmdln_loglevel;
|
||||
|
||||
if (_cmdln_debugRS485)
|
||||
_aqconfig_.log_protocol_packets = true;
|
||||
|
||||
if (_cmdln_lograwRS485)
|
||||
_aqconfig_.log_raw_bytes = true;
|
||||
|
||||
|
||||
#ifdef AQ_MANAGER
|
||||
setLoggingPrms(_aqconfig_.log_level, _aqconfig_.deamonize, (_aqconfig_.display_warnings_web?_aqualink_data.last_display_message:NULL));
|
||||
#else
|
||||
if (_aqconfig_.display_warnings_web == true)
|
||||
setLoggingPrms(_aqconfig_.log_level, _aqconfig_.deamonize, _aqconfig_.log_file, _aqualink_data.last_display_message);
|
||||
else
|
||||
setLoggingPrms(_aqconfig_.log_level, _aqconfig_.deamonize, _aqconfig_.log_file, NULL);
|
||||
#endif
|
||||
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "%s v%s\n", AQUALINKD_NAME, AQUALINKD_VERSION);
|
||||
/*
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Panel set to %s%s-%d %s%s %s\n",
|
||||
isRS_PANEL?"RS":"",
|
||||
isPDA_PANEL?"PDA":"", // No need for both of these, but for error validation leave it in.
|
||||
PANEL_SIZE(),
|
||||
isCOMBO_PANEL?"Combo Pool/Spa":"",
|
||||
isSINGLE_DEV_PANEL?"Pool/Spa Only":"",
|
||||
isDUAL_EQPT_PANEL?"Dual Equipment":"");
|
||||
*/
|
||||
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Panel set to %s\n", getPanelString());
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config log_level = %d\n", _aqconfig_.log_level);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config device_id = 0x%02hhx\n", _aqconfig_.device_id);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config rssa_device_id = 0x%02hhx\n", _aqconfig_.rssa_device_id);
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config extra_device_id = 0x%02hhx\n", _aqconfig_.extended_device_id);
|
||||
if (_aqconfig_.extended_device_id >= JANDY_DEV_AQLNK_MIN && _aqconfig_.extended_device_id <= JANDY_DEV_AQLNK_MAX) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config enable_iaqualink = %s\n", bool2text(_aqconfig_.enable_iaqualink));
|
||||
}
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config extra_device_prog = %s\n", bool2text(_aqconfig_.extended_device_id_programming));
|
||||
#endif
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config serial_port = %s\n", _aqconfig_.serial_port);
|
||||
//LOG(AQUA_LOG,LOG_NOTICE, "Config rs_panel_size = %d\n", _aqconfig_.rs_panel_size);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config socket_port = %s\n", _aqconfig_.socket_port);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config web_directory = %s\n", _aqconfig_.web_directory);
|
||||
//LOG(AQUA_LOG,LOG_NOTICE, "Config read_all_devices = %s\n", bool2text(_aqconfig_.read_all_devices));
|
||||
//LOG(AQUA_LOG,LOG_NOTICE, "Config use_aux_labels = %s\n", bool2text(_aqconfig_.use_panel_aux_labels));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config override frz prot = %s\n", bool2text(_aqconfig_.override_freeze_protect));
|
||||
#ifndef MG_DISABLE_MQTT
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt server = %s\n", _aqconfig_.mqtt_server);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt DZ sub topic = %s\n", _aqconfig_.mqtt_dz_sub_topic);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt DZ pub topic = %s\n", _aqconfig_.mqtt_dz_pub_topic);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt AQ topic = %s\n", _aqconfig_.mqtt_aq_topic);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt user = %s\n", _aqconfig_.mqtt_user);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt passwd = %s\n", _aqconfig_.mqtt_passwd);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt timed update = %s\n", bool2text(_aqconfig_.mqtt_timed_update));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt HA dis topic = %s\n", _aqconfig_.mqtt_hass_discover_topic);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config mqtt ID = %s\n", _aqconfig_.mqtt_ID);
|
||||
if (_aqconfig_.dzidx_air_temp !=TEMP_UNKNOWN) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx water temp = %d\n", _aqconfig_.dzidx_air_temp);
|
||||
}
|
||||
if (_aqconfig_.dzidx_pool_water_temp !=TEMP_UNKNOWN) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx pool temp = %d\n", _aqconfig_.dzidx_pool_water_temp);
|
||||
}
|
||||
if (_aqconfig_.dzidx_spa_water_temp !=TEMP_UNKNOWN) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx spa temp = %d\n", _aqconfig_.dzidx_spa_water_temp);
|
||||
}
|
||||
if (_aqconfig_.dzidx_swg_percent !=TEMP_UNKNOWN) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx SWG Percent = %d\n", _aqconfig_.dzidx_swg_percent);
|
||||
}
|
||||
if (_aqconfig_.dzidx_swg_ppm !=TEMP_UNKNOWN) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx SWG PPM = %d\n", _aqconfig_.dzidx_swg_ppm);
|
||||
}
|
||||
#endif // MG_DISABLE_MQTT
|
||||
|
||||
#ifdef AQ_PDA
|
||||
if (isPDA_PANEL) {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config PDA Mode = %s\n", bool2text(isPDA_PANEL));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config PDA Sleep Mode = %s\n", bool2text(_aqconfig_.pda_sleep_mode));
|
||||
}
|
||||
#endif
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config force SWG = %s\n", bool2text(ENABLE_SWG));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config force PS setpoint = %s\n", bool2text(ENABLE_HEATERS));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config force Freeze Prot = %s\n", bool2text(ENABLE_FREEZEPROTECT));
|
||||
/* removed until domoticz has a better virtual thermostat
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx pool thermostat = %d\n", _aqconfig_.dzidx_pool_thermostat);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config idx spa thermostat = %d\n", _aqconfig_.dzidx_spa_thermostat);
|
||||
*/
|
||||
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config deamonize = %s\n", bool2text(_aqconfig_.deamonize));
|
||||
#ifndef AQ_MANAGER
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config log_file = %s\n", _aqconfig_.log_file);
|
||||
#endif
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config enable scheduler = %s\n", bool2text(_aqconfig_.enable_scheduler));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config light_pgm_mode = %.2f\n", _aqconfig_.light_programming_mode);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Debug RS485 protocol = %s\n", bool2text(_aqconfig_.log_protocol_packets));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Debug RS485 protocol raw = %s\n", bool2text(_aqconfig_.log_raw_bytes));
|
||||
|
||||
//LOG(AQUA_LOG,LOG_NOTICE, "Use PDA 4 auxiliary info = %s\n", bool2text(_aqconfig_.use_PDA_auxiliary));
|
||||
//LOG(AQUA_LOG,LOG_NOTICE, "Read Pentair Packets = %s\n", bool2text(_aqconfig_.read_pentair_packets));
|
||||
// logMessage (LOG_NOTICE, "Config serial_port = %s\n", config_parameters->serial_port);
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Display warnings in web = %s\n", bool2text(_aqconfig_.display_warnings_web));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Keep panel time in sync = %s\n", bool2text(_aqconfig_.sync_panel_time));
|
||||
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read SWG direct = %s\n", bool2text(READ_RSDEV_SWG));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read ePump direct = %s\n", bool2text(READ_RSDEV_ePUMP));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read vsfPump direct = %s\n", bool2text(READ_RSDEV_vsfPUMP));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read JXi heater direct = %s\n", bool2text(READ_RSDEV_JXI));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read LX heater direct = %s\n", bool2text(READ_RSDEV_LX));
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Read Chem Feeder direct = %s\n", bool2text(READ_RSDEV_CHEM));
|
||||
/*
|
||||
if (isAQS_START_PUMP_EVENT_ENABLED) {
|
||||
if (isAQS_USE_PUMP_TIME_FROM_CRON_ENABLED) {
|
||||
get_cron_pump_times();
|
||||
}
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Start Pump on events = %s %s %s\n",isAQS_POWER_ON_ENABED?"PowerON":"",AQS_FRZ_PROTECT_OFF?"FreezeProtect":"",AQS_BOOST_OFF?"Boost":"");
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Start Pump between times = %d:00 and %d:00\n",_aqconfig_.sched_chk_pumpon_hour,_aqconfig_.sched_chk_pumpoff_hour);
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Start Pump on events = %s\n", bool2text(false));
|
||||
}*/
|
||||
/*
|
||||
if (READ_RSDEV_SWG && _aqconfig_.swg_zero_ignore != DEFAULT_SWG_ZERO_IGNORE_COUNT)
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Ignore SWG 0 msg count = %d\n", _aqconfig_.swg_zero_ignore);
|
||||
*/
|
||||
if (_aqconfig_.ftdi_low_latency == true)
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Serial FTDI low latency = %s\n", bool2text(_aqconfig_.ftdi_low_latency));
|
||||
|
||||
if (_aqconfig_.frame_delay > 0)
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "RS485 Frame delay = %dms\n", _aqconfig_.frame_delay);
|
||||
|
||||
if (!_aqconfig_.device_pre_state) // Default is on, so only disply if off.
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Preset Device State = %s\n", bool2text(_aqconfig_.device_pre_state));
|
||||
|
||||
#ifdef AQ_NO_THREAD_NETSERVICE
|
||||
if (_aqconfig_.thread_netservices)
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Thread Network Services = %s\n", bool2text(_aqconfig_.thread_netservices));
|
||||
|
||||
if (_aqconfig_.rs_poll_speed < 0 && !_aqconfig_.thread_netservices) {
|
||||
LOG(AQUA_LOG,LOG_WARNING, "Negative RS Poll Speed is only valid when using Thread Network Services, resetting to %d\n",DEFAULT_POLL_SPEED_NON_THREADDED);
|
||||
_aqconfig_.rs_poll_speed = DEFAULT_POLL_SPEED_NON_THREADDED;
|
||||
}
|
||||
if (_aqconfig_.rs_poll_speed != DEFAULT_POLL_SPEED)
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "RS Poll Speed = %d\n", _aqconfig_.rs_poll_speed);
|
||||
#endif
|
||||
|
||||
//for (i = 0; i < TOTAL_BUTONS; i++)
|
||||
for (i = 0; i < _aqualink_data.total_buttons; i++)
|
||||
{
|
||||
//char ext[] = " VSP ID None | AL ID 0 ";
|
||||
char ext[40];
|
||||
ext[0] = '\0';
|
||||
for (j = 0; j < _aqualink_data.num_pumps; j++) {
|
||||
if (_aqualink_data.pumps[j].button == &_aqualink_data.aqbuttons[i]) {
|
||||
sprintf(ext, "VSP ID 0x%02hhx | PumpID %-1d | %s",
|
||||
_aqualink_data.pumps[j].pumpID,
|
||||
_aqualink_data.pumps[j].pumpIndex,
|
||||
_aqualink_data.pumps[j].pumpName[0]=='\0'?"":_aqualink_data.pumps[j].pumpName);
|
||||
}
|
||||
}
|
||||
for (j = 0; j < _aqualink_data.num_lights; j++) {
|
||||
if (_aqualink_data.lights[j].button == &_aqualink_data.aqbuttons[i]) {
|
||||
sprintf(ext,"Light Progm | CTYPE %-1d |",_aqualink_data.lights[j].lightType);
|
||||
}
|
||||
}
|
||||
if (isVBUTTON(_aqualink_data.aqbuttons[i].special_mask)) {
|
||||
if (_aqualink_data.aqbuttons[i].rssd_code != NUL) {
|
||||
sprintf(ext,"OneTouch %d |",_aqualink_data.aqbuttons[i].rssd_code - 15);
|
||||
}
|
||||
}
|
||||
if (_aqualink_data.aqbuttons[i].dz_idx > 0) {
|
||||
sprintf(ext+strlen(ext), "dzidx %-3d", _aqualink_data.aqbuttons[i].dz_idx);
|
||||
}
|
||||
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config BTN %-13s = label %-15s | %s\n",
|
||||
_aqualink_data.aqbuttons[i].name, _aqualink_data.aqbuttons[i].label, ext);
|
||||
|
||||
|
||||
if ( ((_aqualink_data.aqbuttons[i].special_mask & VIRTUAL_BUTTON) == VIRTUAL_BUTTON) &&
|
||||
((_aqualink_data.aqbuttons[i].special_mask & VS_PUMP ) != VS_PUMP) &&
|
||||
(_aqconfig_.extended_device_id < 0x30 || _aqconfig_.extended_device_id > 0x33 ) ){
|
||||
LOG(AQUA_LOG,LOG_WARNING, "Config error, extended_device_id must be on of the folowing (0x30,0x31,0x32,0x33) to use virtual button : '%s'",_aqualink_data.aqbuttons[i].label);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < _aqualink_data.num_sensors; i++)
|
||||
{
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Config Sensor %02d = label %-15s | %s\n", i+1, _aqualink_data.sensors[i].label, _aqualink_data.sensors[i].path);
|
||||
}
|
||||
/*
|
||||
for (i=0; i < _aqualink_data.total_buttons; i++)
|
||||
{
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Button index=%d, label=%s, code=0x%02hhx, rssd code=0x%02hhx\n",
|
||||
i,
|
||||
_aqualink_data.aqbuttons[i].label,
|
||||
_aqualink_data.aqbuttons[i].code,
|
||||
_aqualink_data.aqbuttons[i].rssd_code);
|
||||
}
|
||||
*/
|
||||
|
||||
if (_aqconfig_.deamonize == true)
|
||||
{
|
||||
char pidfile[256];
|
||||
// sprintf(pidfile, "%s/%s.pid",PIDLOCATION, basename(argv[0]));
|
||||
//sprintf(pidfile, "%s/%s.pid", "/run", basename(argv[0]));
|
||||
//sprintf(pidfile, "%s/%s.pid", "/run", basename(self));
|
||||
sprintf(pidfile, "%s/%s.pid", "/run", _aqualink_data.self);
|
||||
daemonise(pidfile, main_loop);
|
||||
}
|
||||
else
|
||||
{
|
||||
main_loop();
|
||||
}
|
||||
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
int startup(char *self, char *cfgFile)
|
||||
{
|
||||
_self = self;
|
||||
_cfgFile = cfgFile;
|
||||
|
||||
AddAQDstatusMask(CHECKING_CONFIG);
|
||||
AddAQDstatusMask(NOT_CONNECTED);
|
||||
|
||||
sprintf(_aqualink_data.self, basename(self));
|
||||
clearDebugLogMask();
|
||||
read_config(&_aqualink_data, cfgFile);
|
||||
|
@ -809,6 +534,8 @@ int startup(char *self, char *cfgFile)
|
|||
check_print_config(&_aqualink_data);
|
||||
|
||||
|
||||
// NSF Below probably should be moved into check_print_config()
|
||||
|
||||
// Sanity check on Device ID's against panel type
|
||||
if (isRS_PANEL) {
|
||||
if ( (_aqconfig_.device_id >= 0x08 && _aqconfig_.device_id <= 0x0B) || _aqconfig_.device_id == 0x00 || _aqconfig_.device_id == 0xFF) {
|
||||
|
@ -843,7 +570,7 @@ int startup(char *self, char *cfgFile)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
|
||||
if (_aqconfig_.extended_device_id != 0x00) {
|
||||
if ( (_aqconfig_.extended_device_id >= 0x30 && _aqconfig_.extended_device_id <= 0x33) ||
|
||||
(_aqconfig_.extended_device_id >= 0x40 && _aqconfig_.extended_device_id <= 0x43) /*||
|
||||
|
@ -854,7 +581,7 @@ int startup(char *self, char *cfgFile)
|
|||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
if (_aqconfig_.deamonize == true)
|
||||
|
@ -899,13 +626,10 @@ void caculate_ack_packet(int rs_fd, unsigned char *packet_buffer, emulation_type
|
|||
else
|
||||
send_extended_ack(rs_fd, 0x00, 0x00);*/
|
||||
break;
|
||||
#ifdef AQ_ONETOUCH
|
||||
case ONETOUCH:
|
||||
send_extended_ack(rs_fd, ACK_ONETOUCH, pop_ot_cmd(packet_buffer[PKT_CMD]));
|
||||
//DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"OneTouch Emulation type Processed packet in");
|
||||
break;
|
||||
#endif
|
||||
#ifdef AQ_IAQTOUCH
|
||||
case IAQTOUCH:
|
||||
if (packet_buffer[PKT_CMD] != CMD_IAQ_CTRL_READY)
|
||||
send_extended_ack(rs_fd, ACK_IAQ_TOUCH, pop_iaqt_cmd(packet_buffer[PKT_CMD]));
|
||||
|
@ -926,7 +650,6 @@ void caculate_ack_packet(int rs_fd, unsigned char *packet_buffer, emulation_type
|
|||
}
|
||||
remove_iaqualink_cmd();
|
||||
break;
|
||||
#endif
|
||||
#ifdef AQ_PDA
|
||||
case AQUAPDA:
|
||||
if (_aqconfig_.pda_sleep_mode && pda_shouldSleep()) {
|
||||
|
@ -1004,6 +727,8 @@ bool auto_configure(unsigned char* packet) {
|
|||
_aqconfig_.device_id = 0x00;
|
||||
_aqconfig_.rssa_device_id = 0x00;
|
||||
_aqconfig_.extended_device_id = 0x00;
|
||||
AddAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
//AddAQDstatusMask(AUTOCONFIGURE_PANEL); // Not implimented yet.
|
||||
}
|
||||
|
||||
|
||||
|
@ -1042,6 +767,7 @@ bool auto_configure(unsigned char* packet) {
|
|||
// We should have seen one complete probe cycle my now.
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Finished Autoconfigure using device_id=0x%02hhx rssa_device_id=0x%02hhx extended_device_id=0x%02hhx (%s iAqualink2/3)\n",
|
||||
_aqconfig_.device_id,_aqconfig_.rssa_device_id,_aqconfig_.extended_device_id, _aqconfig_.enable_iaqualink?"Enable":"Disable");
|
||||
RemoveAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
return true; // we can exit finally.
|
||||
}
|
||||
|
||||
|
@ -1105,7 +831,8 @@ void main_loop()
|
|||
int blank_read_reconnect = MAX_ZERO_READ_BEFORE_RECONNECT_BLOCKING; // Will get reset if non blocking
|
||||
bool auto_config_complete = true;
|
||||
|
||||
_aqualink_data.panelstatus = STARTING;
|
||||
//_aqualink_data.panelstatus = STARTING;
|
||||
AddAQDstatusMask(CHECKING_CONFIG);
|
||||
sprintf(_aqualink_data.last_display_message, "%s", "Connecting to Control Panel");
|
||||
_aqualink_data.is_display_message_programming = false;
|
||||
//_aqualink_data.simulate_panel = false;
|
||||
|
@ -1202,12 +929,13 @@ void main_loop()
|
|||
|
||||
if (rs_fd == -1) {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Error Aqualink setting serial port: %s\n", _aqconfig_.serial_port);
|
||||
_aqualink_data.panelstatus = SERIAL_ERROR;
|
||||
//_aqualink_data.panelstatus = SERIAL_ERROR;
|
||||
AddAQDstatusMask(ERROR_SERIAL);
|
||||
#ifndef AQ_CONTAINER
|
||||
exit(EXIT_FAILURE);
|
||||
#endif
|
||||
} else {
|
||||
_aqualink_data.panelstatus = LOOKING_IDS;
|
||||
//AddAQDstatusMask(CHECKING_CONFIG);
|
||||
}
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Listening to Aqualink RS8 on serial port: %s\n", _aqconfig_.serial_port);
|
||||
|
||||
|
@ -1226,50 +954,16 @@ void main_loop()
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
if (_aqconfig_.extended_device_id != 0x00)
|
||||
{
|
||||
#ifdef AQ_ONETOUCH
|
||||
if (_aqconfig_.extended_device_id >= 0x40 && _aqconfig_.extended_device_id <= 0x43)
|
||||
addPanelOneTouchInterface();
|
||||
else
|
||||
#endif
|
||||
#ifdef AQ_IAQTOUCH
|
||||
if (_aqconfig_.extended_device_id >= 0x30 && _aqconfig_.extended_device_id <= 0x33)
|
||||
addPanelIAQTouchInterface();
|
||||
else
|
||||
#endif
|
||||
{
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon has no valid extended_device_id, ignoring value '0x%02hhx' from cfg\n",_aqconfig_.extended_device_id);
|
||||
_aqconfig_.extended_device_id = 0x00;
|
||||
_aqconfig_.extended_device_id_programming = false;
|
||||
//set_extended_device_id_programming(false);
|
||||
}
|
||||
// Set probes to true for any device we are not searching for.
|
||||
|
||||
RemoveAQDstatusMask(CHECKING_CONFIG);
|
||||
|
||||
if (_aqconfig_.extended_device_id_programming == true && (isONET_ENABLED || isIAQT_ENABLED) )
|
||||
{
|
||||
changePanelToExtendedIDProgramming();
|
||||
}
|
||||
} else {
|
||||
got_probe_extended = true;
|
||||
// Just to stop any confusion from bad cfg enteries
|
||||
if (_aqconfig_.extended_device_id_programming == true)
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon has no valid extended_device_id, ignoring value 'extended_device_id_programming' from cfg\n");
|
||||
|
||||
_aqconfig_.extended_device_id_programming = false;
|
||||
//set_extended_device_id_programming(false);
|
||||
}
|
||||
#else
|
||||
// If no extended protocol, we can't test for probe
|
||||
got_probe_extended = true;
|
||||
#endif
|
||||
|
||||
// Enable or disable rs serial adapter interface.
|
||||
if (_aqconfig_.rssa_device_id != 0x00 /*&& _aqconfig_.rssa_device_id != 0xFF*/)
|
||||
addPanelRSserialAdapterInterface();
|
||||
else
|
||||
if (_aqconfig_.rssa_device_id == 0x00)
|
||||
got_probe_rssa = true;
|
||||
|
||||
|
||||
if (_aqconfig_.extended_device_id == 0x00)
|
||||
got_probe_extended = true;
|
||||
|
||||
if (_aqconfig_.device_id == 0x00) {
|
||||
LOG(AQUA_LOG,LOG_WARNING, "Searching for valid ID, please configure `device_id` for faster startup");
|
||||
}
|
||||
|
@ -1278,8 +972,12 @@ void main_loop()
|
|||
LOG(AQUA_LOG,LOG_NOTICE, "Waiting for Control Panel information\n\n");
|
||||
LOG(AQUA_LOG,LOG_WARNING, "Unsing Auto configure, this will take some time, (make sure to undate aqualinkd configuration to speed up startup!)\n");
|
||||
auto_config_complete = false;
|
||||
//_aqualink_data.panelstatus = LOOKING_IDS;
|
||||
AddAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
} else {
|
||||
LOG(AQUA_LOG,LOG_NOTICE, "Waiting for Control Panel probe\n");
|
||||
//_aqualink_data.panelstatus = CONECTING;
|
||||
AddAQDstatusMask(CONNECTING);
|
||||
}
|
||||
i=0;
|
||||
|
||||
|
@ -1314,15 +1012,20 @@ void main_loop()
|
|||
if (packet_length > 0 && auto_config_complete == false) {
|
||||
blank_read = 0;
|
||||
auto_config_complete = auto_configure(packet_buffer);
|
||||
AddAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
if (auto_config_complete) {
|
||||
got_probe = true;
|
||||
got_probe_rssa = true;
|
||||
got_probe_extended = true;
|
||||
//if (_aqconfig_.device_id != 0x00)
|
||||
got_probe = true;
|
||||
//if (_aqconfig_.rssa_device_id != 0x00)
|
||||
got_probe_rssa = true;
|
||||
//if (_aqconfig_.extended_device_id != 0x00)
|
||||
got_probe_extended = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (packet_length > 0 && _aqconfig_.device_id == 0x00) {
|
||||
blank_read = 0;
|
||||
AddAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
_aqconfig_.device_id = find_unused_address(packet_buffer);
|
||||
continue;
|
||||
}
|
||||
|
@ -1352,7 +1055,6 @@ void main_loop()
|
|||
}
|
||||
// NSF Should put some form of timeout here and exit.
|
||||
}
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
else if (packet_length > 0 && packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id && got_probe_extended == false) {
|
||||
blank_read = 0;
|
||||
if (packet_buffer[PKT_CMD] == CMD_PROBE) {
|
||||
|
@ -1366,7 +1068,7 @@ void main_loop()
|
|||
}
|
||||
// NSF Should put some form of timeout here and continue with no extended ID
|
||||
}
|
||||
#endif
|
||||
|
||||
else if (packet_length <= 0) {
|
||||
blank_read++;
|
||||
#ifdef AQ_NO_THREAD_NETSERVICE
|
||||
|
@ -1388,11 +1090,9 @@ void main_loop()
|
|||
if(!got_probe_rssa) {
|
||||
LOG(AQUA_LOG,LOG_ERR, "No probe on '0x%02hhx', giving up! (please check config)\n",_aqconfig_.rssa_device_id);
|
||||
}
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
if(!got_probe_extended) {
|
||||
LOG(AQUA_LOG,LOG_ERR, "No probe on '0x%02hhx', giving up! (please check config)\n",_aqconfig_.extended_device_id);
|
||||
}
|
||||
#endif
|
||||
stopPacketLogger();
|
||||
close_serial_port(rs_fd);
|
||||
stop_net_services();
|
||||
|
@ -1401,8 +1101,44 @@ void main_loop()
|
|||
}
|
||||
}
|
||||
|
||||
RemoveAQDstatusMask(AUTOCONFIGURE_ID);
|
||||
RemoveAQDstatusMask(NOT_CONNECTED);
|
||||
AddAQDstatusMask(CONNECTING);
|
||||
|
||||
|
||||
//At this point we should have correct ID and seen probes on those ID's.
|
||||
// Setup the panel
|
||||
if (_aqconfig_.device_id == 0x00) {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon has no valid device_id, can't connect to control panel");
|
||||
//_aqualink_data.panelstatus = NO_IDS_ERROR;
|
||||
RemoveAQDstatusMask(CONNECTING); // Not sure if we should remove this
|
||||
AddAQDstatusMask(ERROR_NO_DEVICE_ID);
|
||||
}
|
||||
|
||||
if (_aqconfig_.rssa_device_id >= 0x48 && _aqconfig_.rssa_device_id <= 0x49) {
|
||||
addPanelRSserialAdapterInterface();
|
||||
}
|
||||
|
||||
if (_aqconfig_.extended_device_id >= 0x40 && _aqconfig_.extended_device_id <= 0x43) {
|
||||
addPanelOneTouchInterface();
|
||||
} else if (_aqconfig_.extended_device_id >= 0x30 && _aqconfig_.extended_device_id <= 0x33) {
|
||||
addPanelIAQTouchInterface();
|
||||
}
|
||||
|
||||
// We can only get panel size info from extended ID
|
||||
if (_aqconfig_.extended_device_id != 0x00) {
|
||||
RemoveAQDstatusMask(AUTOCONFIGURE_PANEL);
|
||||
}
|
||||
|
||||
if (_aqconfig_.extended_device_id_programming == true && (isONET_ENABLED || isIAQT_ENABLED) )
|
||||
{
|
||||
changePanelToExtendedIDProgramming();
|
||||
} else if (_aqconfig_.extended_device_id_programming == true) {
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon has no valid extended_device_id, ignoring value '%s' from cfg\n",CFG_N_extended_device_id_programming);
|
||||
_aqconfig_.extended_device_id = 0x00;
|
||||
_aqconfig_.extended_device_id_programming = false;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* This is the main loop
|
||||
|
@ -1434,6 +1170,7 @@ void main_loop()
|
|||
sprintf(_aqualink_data.last_display_message, CONNECTION_ERROR);
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon waiting to connect to master device...\n");
|
||||
_aqualink_data.updated = true;
|
||||
AddAQDstatusMask(ERROR_SERIAL);
|
||||
broadcast_aqualinkstate_error(CONNECTION_ERROR);
|
||||
#ifdef AQ_NO_THREAD_NETSERVICE
|
||||
poll_net_services(1000);
|
||||
|
@ -1446,6 +1183,7 @@ void main_loop()
|
|||
sprintf(_aqualink_data.last_display_message, CONNECTION_ERROR);
|
||||
LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon looks like serial error, resetting.\n");
|
||||
_aqualink_data.updated = true;
|
||||
AddAQDstatusMask(ERROR_SERIAL);
|
||||
broadcast_aqualinkstate_error(CONNECTION_ERROR);
|
||||
close_serial_port(rs_fd);
|
||||
rs_fd = init_serial_port(_aqconfig_.serial_port);
|
||||
|
@ -1502,6 +1240,9 @@ void main_loop()
|
|||
}
|
||||
else if (packet_length > 0)
|
||||
{
|
||||
RemoveAQDstatusMask(ERROR_SERIAL);
|
||||
RemoveAQDstatusMask(CONNECTING);
|
||||
AddAQDstatusMask(CONNECTED);
|
||||
DEBUG_TIMER_START(&_rs_packet_timer);
|
||||
|
||||
blank_read = 0;
|
||||
|
@ -1518,9 +1259,7 @@ void main_loop()
|
|||
else if ( _aqualink_data.simulator_id == NUL
|
||||
&& packet_buffer[PKT_CMD] == CMD_PROBE
|
||||
&& packet_buffer[PKT_DEST] != _aqconfig_.device_id // Check no conflicting id's
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
&& packet_buffer[PKT_DEST] != _aqconfig_.extended_device_id // Check no conflicting id's
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (is_simulator_packet(&_aqualink_data, packet_buffer, packet_length)) {
|
||||
|
@ -1540,12 +1279,11 @@ void main_loop()
|
|||
if (packet_length > 0 && getProtocolType(packet_buffer) == JANDY && packet_buffer[PKT_DEST] != 0x00 &&
|
||||
(packet_buffer[PKT_DEST] == _aqconfig_.device_id ||
|
||||
packet_buffer[PKT_DEST] == _aqconfig_.rssa_device_id ||
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id ||
|
||||
packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id2
|
||||
#endif
|
||||
))
|
||||
{
|
||||
AddAQDstatusMask(CONNECTED);
|
||||
switch(getJandyDeviceType(packet_buffer[PKT_DEST])){
|
||||
case ALLBUTTON:
|
||||
_aqualink_data.updated = process_allbutton_packet(packet_buffer, packet_length, &_aqualink_data);
|
||||
|
|
|
@ -212,7 +212,6 @@ void init_parameters (struct aqconfig * parms)
|
|||
_cfgParams[_numCfgParams].valid_values = CFG_V_rssa_device_id;
|
||||
_cfgParams[_numCfgParams].default_value = (void *)&_dcfg_unknownHex;
|
||||
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
_numCfgParams++;
|
||||
_cfgParams[_numCfgParams].value_ptr = &_aqconfig_.extended_device_id_programming;
|
||||
_cfgParams[_numCfgParams].value_type = CFG_BOOL;
|
||||
|
@ -233,7 +232,6 @@ void init_parameters (struct aqconfig * parms)
|
|||
_cfgParams[_numCfgParams].name = CFG_N_enable_iaqualink;
|
||||
_cfgParams[_numCfgParams].valid_values = CFG_V_BOOL;
|
||||
_cfgParams[_numCfgParams].default_value = (void *)&_dcfg_false;
|
||||
#endif
|
||||
|
||||
_numCfgParams++;
|
||||
_cfgParams[_numCfgParams].value_ptr = &_aqconfig_.web_directory;
|
||||
|
@ -650,10 +648,10 @@ void init_parameters (struct aqconfig * parms)
|
|||
*/
|
||||
|
||||
/*
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
|
||||
parms->extended_device_id = NUL;
|
||||
parms->extended_device_id_programming = false;
|
||||
#endif
|
||||
|
||||
*/
|
||||
/*
|
||||
//sscanf(DEFAULT_DEVICE_ID, "0x%x", &parms->device_id);
|
||||
|
|
|
@ -48,13 +48,11 @@ struct aqconfig
|
|||
unsigned char device_id;
|
||||
unsigned char rssa_device_id;
|
||||
int16_t paneltype_mask;
|
||||
#if defined AQ_ONETOUCH || defined AQ_IAQTOUCH
|
||||
unsigned char extended_device_id;
|
||||
unsigned char extended_device_id2;
|
||||
bool extended_device_id_programming;
|
||||
bool enable_iaqualink;
|
||||
//bool enable_RS_device_value_print;
|
||||
#endif
|
||||
bool deamonize;
|
||||
#ifndef AQ_MANAGER // Need to uncomment and clean up referances in future.
|
||||
char *log_file;
|
||||
|
|
|
@ -462,11 +462,9 @@ void processPageButton(unsigned char *message, int length, struct aqualinkdata *
|
|||
if (isPDA_PANEL) {
|
||||
updateAQButtonFromPageButton(aq_data,button,0,aq_data->total_buttons);
|
||||
} else {
|
||||
#ifdef AQ_RS16
|
||||
if ( PANEL_SIZE() >= 16) {
|
||||
updateAQButtonFromPageButton(aq_data,button,aq_data->rs16_vbutton_start,aq_data->rs16_vbutton_end + 1);
|
||||
}
|
||||
#endif
|
||||
if ( isVirtualButtonEnabled() ) {
|
||||
updateAQButtonFromPageButton(aq_data,button,aq_data->virtual_button_start,aq_data->total_buttons);
|
||||
}
|
||||
|
|
|
@ -122,13 +122,33 @@ const char* _getStatus(struct aqualinkdata *aqdata, const char *blankmsg)
|
|||
rsm_isempy(aqdata->last_display_message,strlen(aqdata->last_display_message))==true?"yes":"no",
|
||||
aqdata->last_display_message);
|
||||
*/
|
||||
|
||||
// If only one bit set (conected) then ignore all these if's
|
||||
if (aqdata->status_mask != CONNECTED) {
|
||||
if ((aqdata->status_mask & ERROR_SERIAL) == ERROR_SERIAL)
|
||||
return "ERROR SERIAL CONNECTION";
|
||||
else if ((aqdata->status_mask & ERROR_NO_DEVICE_ID) == ERROR_NO_DEVICE_ID)
|
||||
return "ERROR NO DEVICE ID";
|
||||
else if ((aqdata->status_mask & CHECKING_CONFIG) == CHECKING_CONFIG)
|
||||
return "Checking Config";
|
||||
else if ((aqdata->status_mask & AUTOCONFIGURE_ID) == AUTOCONFIGURE_ID)
|
||||
return "Searching for free device ID's, Please wait!";
|
||||
else if ((aqdata->status_mask & AUTOCONFIGURE_PANEL) == AUTOCONFIGURE_PANEL)
|
||||
return "Getting Panel Information";
|
||||
else if ((aqdata->status_mask & CONNECTING) == CONNECTING)
|
||||
return "Connecting (waiting for control panel)";
|
||||
else if ((aqdata->status_mask & NOT_CONNECTED) == NOT_CONNECTED)
|
||||
return "NOT CONNECTED";
|
||||
}
|
||||
|
||||
if (aqdata->active_thread.thread_id != 0) {
|
||||
if (!aqdata->is_display_message_programming || rsm_isempy(aqdata->last_display_message,strlen(aqdata->last_display_message))){
|
||||
return programtypeDisplayName(aqdata->active_thread.ptype);
|
||||
}
|
||||
}
|
||||
|
||||
//if (aqdata->last_message != NULL && stristr(aqdata->last_message, "SERVICE") != NULL ) {
|
||||
|
||||
//if (aqdata->last_message != NULL && stristr(aqdata->last_message, "SERVICE") != NULL ) {
|
||||
if (aqdata->service_mode_state == ON) {
|
||||
return JSON_SERVICE;
|
||||
} else if (aqdata->service_mode_state == FLASH) {
|
||||
|
@ -553,6 +573,7 @@ int logleveljsonobject(int level, char* buffer)
|
|||
int length = sprintf(buffer, "{\"name\":\"%s\",\"id\":\"%d\",\"set\":\"%s\"},", loglevel2name(level), level,(getSystemLogLevel()==level?JSON_ON:JSON_OFF));
|
||||
return length;
|
||||
}
|
||||
|
||||
int build_aqualink_aqmanager_JSON(struct aqualinkdata *aqdata, char* buffer, int size)
|
||||
{
|
||||
memset(&buffer[0], 0, size);
|
||||
|
@ -560,7 +581,15 @@ int build_aqualink_aqmanager_JSON(struct aqualinkdata *aqdata, char* buffer, int
|
|||
|
||||
length += sprintf(buffer+length, "{\"type\": \"aqmanager\"");
|
||||
length += sprintf(buffer+length, ",\"deamonized\": \"%s\"", (_aqconfig_.deamonize?JSON_ON:JSON_OFF) );
|
||||
length += sprintf(buffer+length, ",\"config_editor\": \"yes\"");
|
||||
|
||||
if ( isMASK_SET(aqdata->status_mask,AUTOCONFIGURE_ID ) ||
|
||||
isMASK_SET(aqdata->status_mask,AUTOCONFIGURE_PANEL ) /*||
|
||||
isMASK_SET(aqdata->status_mask,CONNECTING )*/ )
|
||||
{
|
||||
length += sprintf(buffer+length, ",\"config_editor\": \"no\"");
|
||||
} else {
|
||||
length += sprintf(buffer+length, ",\"config_editor\": \"yes\"");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -1224,14 +1224,10 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float
|
|||
queueGetProgramData(ALLBUTTON, _aqualink_data);
|
||||
if(isRSSA_ENABLED)
|
||||
queueGetProgramData(RSSADAPTER, _aqualink_data);
|
||||
#ifdef AQ_ONETOUCH
|
||||
if(isONET_ENABLED)
|
||||
queueGetProgramData(ONETOUCH, _aqualink_data);
|
||||
#endif
|
||||
#ifdef AQ_IAQTOUCH
|
||||
if(isIAQT_ENABLED)
|
||||
queueGetProgramData(IAQTOUCH, _aqualink_data);
|
||||
#endif
|
||||
#ifdef AQ_PDA
|
||||
if(isPDA_PANEL)
|
||||
queueGetProgramData(AQUAPDA, _aqualink_data);
|
||||
|
@ -1472,7 +1468,10 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float
|
|||
// If Label = "Spa", "Spa_Heater" will turn on "Spa", so need to check '/' on label as next character
|
||||
//if (strncmp(ri1, _aqualink_data->aqbuttons[i].name, strlen(_aqualink_data->aqbuttons[i].name)) == 0 ||
|
||||
// (strncmp(ri1, _aqualink_data->aqbuttons[i].label, strlen(_aqualink_data->aqbuttons[i].label)) == 0 && ri1[strlen(_aqualink_data->aqbuttons[i].label)] == '/'))
|
||||
if ( uri_strcmp(ri1, _aqualink_data->aqbuttons[i].name) || uri_strcmp(ri1, _aqualink_data->aqbuttons[i].label) )
|
||||
//if ( uri_strcmp(ri1, _aqualink_data->aqbuttons[i].name) || uri_strcmp(ri1, _aqualink_data->aqbuttons[i].label) )
|
||||
|
||||
if ( uri_strcmp(ri1, _aqualink_data->aqbuttons[i].name) || uri_strcmp(ri1, _aqualink_data->aqbuttons[i].label) ||
|
||||
( isVBUTTON_ALTLABEL(_aqualink_data->aqbuttons[i].special_mask) && uri_strcmp(ri1, ((vbutton_detail *)_aqualink_data->aqbuttons[i].special_mask_ptr)->altlabel)) )
|
||||
{
|
||||
found = true;
|
||||
//create_panel_request(from, i, value, istimer);
|
||||
|
|
|
@ -47,9 +47,9 @@ void set_macro_status();
|
|||
void pump_update(struct aqualinkdata *aq_data, int updated);
|
||||
bool log_heater_setpoints(struct aqualinkdata *aq_data);
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
void rs16led_update(struct aqualinkdata *aq_data, int updated);
|
||||
#endif
|
||||
|
||||
|
||||
void print_onetouch_menu()
|
||||
{
|
||||
|
@ -532,7 +532,7 @@ bool get_aquapureinfo_from_menu(struct aqualinkdata *aq_data, int menuLineIdx)
|
|||
return rtn;
|
||||
}
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
bool get_RS16buttoninfo_from_menu(struct aqualinkdata *aq_data, int menuLineIdx)
|
||||
{
|
||||
for (int i = aq_data->rs16_vbutton_start; i <= aq_data->rs16_vbutton_end; i++)
|
||||
|
@ -548,7 +548,7 @@ bool get_RS16buttoninfo_from_menu(struct aqualinkdata *aq_data, int menuLineIdx)
|
|||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
For older Panel versions 0.1 and 0.2
|
||||
|
@ -592,12 +592,12 @@ bool log_qeuiptment_status_VP2(struct aqualinkdata *aq_data)
|
|||
rtn = get_aquapureinfo_from_menu(aq_data, i);
|
||||
} else if (rsm_strcmp(_menu[i],"Chemlink") == 0) {
|
||||
rtn = get_chemlinkinfo_from_menu(aq_data, i);
|
||||
#ifdef AQ_RS16
|
||||
|
||||
} else if (PANEL_SIZE() >= 16 ) {
|
||||
// Loop over RS 16 buttons.
|
||||
get_RS16buttoninfo_from_menu(aq_data, i);
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
return rtn;
|
||||
|
@ -630,7 +630,7 @@ bool log_qeuiptment_status(struct aqualinkdata *aq_data)
|
|||
} else if (rsm_strcmp(_menu[2],"Chemlink") == 0) {
|
||||
rtn = get_chemlinkinfo_from_menu(aq_data, 2);
|
||||
}
|
||||
#ifdef AQ_RS16
|
||||
|
||||
else if (PANEL_SIZE() >= 16 ) { // This fails on RS4, comeback and find out why. // Run over devices that have no status LED's on RS12&16 panels.
|
||||
//else if ( 16 <= (int)PANEL_SIZE ) {
|
||||
int i;
|
||||
|
@ -638,7 +638,7 @@ bool log_qeuiptment_status(struct aqualinkdata *aq_data)
|
|||
get_RS16buttoninfo_from_menu(aq_data, i);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -695,7 +695,7 @@ void pump_update(struct aqualinkdata *aq_data, int updated) {
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
void rs16led_update(struct aqualinkdata *aq_data, int updated) {
|
||||
//LOG(ONET_LOG,LOG_INFO, "******* VLED check %d ******\n",updated);
|
||||
const int bitmask[4] = {1,2,4,8};
|
||||
|
@ -718,7 +718,7 @@ void rs16led_update(struct aqualinkdata *aq_data, int updated) {
|
|||
//LOG(ONET_LOG,LOG_INFO, "******* Updated VLED status %d ******\n",updated);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
bool new_menu(struct aqualinkdata *aq_data)
|
||||
|
@ -766,10 +766,10 @@ bool new_menu(struct aqualinkdata *aq_data)
|
|||
if (last_menu_type == OTM_EQUIPTMENT_STATUS && menu_type != OTM_EQUIPTMENT_STATUS && !in_ot_programming_mode(aq_data) ) {
|
||||
// End of equiptment status chain of menus, reset any pump that wasn't listed in menus as long as we are not in programming mode
|
||||
pump_update(aq_data, -1);
|
||||
#ifdef AQ_RS16
|
||||
|
||||
if (PANEL_SIZE() >= 16)
|
||||
rs16led_update(aq_data, -1);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
last_menu_type = menu_type;
|
||||
|
|
|
@ -27,12 +27,12 @@ unsigned char getPoolSP2[] = {0x00,0x01,RS_SA_POOLSP2,0x05};
|
|||
unsigned char getSpaSP[] = {0x00,0x01,RS_SA_SPASP,0x05};
|
||||
//unsigned char getModel[] = {0x00,0x01,RS_SA_MODEL,0x05};
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
unsigned char getAux12[] = {0x00,0x01,0x00,RS_SA_AUX12};
|
||||
unsigned char getAux13[] = {0x00,0x01,0x00,RS_SA_AUX13};
|
||||
unsigned char getAux14[] = {0x00,0x01,0x00,RS_SA_AUX14};
|
||||
unsigned char getAux15[] = {0x00,0x01,0x00,RS_SA_AUX15};
|
||||
#endif
|
||||
|
||||
|
||||
// processLEDstate exists in allbutton.c
|
||||
//void processLEDstate(struct aqualinkdata *aq_data, unsigned char *packet, logmask_t from);
|
||||
|
@ -295,14 +295,14 @@ bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualin
|
|||
push_rssa_cmd(getSpaSP);
|
||||
else
|
||||
push_rssa_cmd(getPoolSP2);
|
||||
#ifdef AQ_RS16 // No status LED's for these, so get them on a poll cycle
|
||||
// No status LED's for these, so get them on a poll cycle
|
||||
if ( PANEL_SIZE() >= 16 ) {
|
||||
push_rssa_cmd(getAux12);
|
||||
push_rssa_cmd(getAux13);
|
||||
push_rssa_cmd(getAux14);
|
||||
push_rssa_cmd(getAux15);
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
cnt = 0;
|
||||
}
|
||||
|
@ -408,7 +408,7 @@ bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualin
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef AQ_RS16
|
||||
|
||||
if (packet[7] == RS_SA_AUX12) {
|
||||
LOG(RSSA_LOG,LOG_INFO,"AUX12 %d\n", packet[6]);
|
||||
rtn = setLEDstate(aq_data->aqbuttons[13].led, packet[6], aq_data);
|
||||
|
@ -423,7 +423,7 @@ bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualin
|
|||
LOG(RSSA_LOG,LOG_INFO,"AUX15 %d\n", packet[6]);
|
||||
rtn = setLEDstate(aq_data->aqbuttons[16].led, packet[6], aq_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
#define AQUALINKD_SHORT_NAME "AqualinkD"
|
||||
|
||||
// Use Magor . Minor . Patch
|
||||
#define AQUALINKD_VERSION "2.6.0 (dev 0.2)"
|
||||
#define AQUALINKD_VERSION "2.6.0 (dev 0.3)"
|
||||
|
|
|
@ -1291,6 +1291,10 @@
|
|||
enablebutton("editconfig");
|
||||
} else {
|
||||
disablebutton("editconfig");
|
||||
// This is disabled during startup, so get again if disabled
|
||||
setTimeout(function () {
|
||||
start_manager();
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue