From 6c9749f3e47a25b19f2b844150373fa0c43a8629 Mon Sep 17 00:00:00 2001 From: sfeakes Date: Sun, 26 Jul 2020 14:28:58 -0500 Subject: [PATCH] Version 2.2.0c --- Makefile | 114 ++++++---- README.md | 13 +- aq_programmer.c | 435 ++++++++++++++++++++++----------------- aq_programmer.h | 1 + aq_serial.c | 176 ++++++++++++---- aq_serial.h | 2 + aqualink.h | 6 +- aqualinkd.c | 154 ++++++++++---- config.c | 12 +- config.h | 3 +- debug_timer.c | 119 +++++++++++ debug_timer.h | 25 +++ devices_jandy.c | 2 + iaqtouch.c | 50 ++--- iaqtouch_aq_programmer.c | 70 +++++-- net_services.c | 263 ++++++++++++++++------- net_services.h | 2 + onetouch.c | 6 +- onetouch_aq_programmer.c | 4 +- packetLogger.c | 2 +- pda.c | 2 +- release/aqualinkd | Bin 392960 -> 383368 bytes release/aqualinkd.conf | 6 +- release/install.sh | 31 ++- release/serial_logger | Bin 38960 -> 39932 bytes serial_logger.c | 26 ++- utils.c | 86 ++++---- utils.h | 9 +- version.h | 2 +- web/controller.html | 13 ++ web/simple.html | 35 +++- 31 files changed, 1165 insertions(+), 504 deletions(-) create mode 100644 debug_timer.c create mode 100644 debug_timer.h diff --git a/Makefile b/Makefile index 14e031c..ed18865 100755 --- a/Makefile +++ b/Makefile @@ -1,45 +1,51 @@ # # Options +# +# make // standard everything +# make debug // Give standard binary just with debugging +# make aqdebug // Compile with extra aqualink debug information like timings +# make slog // Serial logger +# make // not documenting +# # Valid flags for AQ_FLAGS -#AQ_DEBUG = true AQ_RS16 = true AQ_PDA = true AQ_ONETOUCH = true AQ_IAQTOUCH = true #AQ_MEMCMP = true // Not implimented correctly yet. +# Get some system information +PI_OS_VERSION = $(shell cat /etc/os-release | grep VERSION= | cut -d\" -f2) +$(info OS: $(PI_OS_VERSION) ) +GLIBC_VERSION = $(shell ldd --version | grep ldd) +$(info GLIBC: $(GLIBC_VERSION) ) -# make EXFLAGS="-D BETA_PDA_AUTOLABEL" // Add compile flags -# # define the C compiler to use CC = gcc #LIBS := -lpthread -lm LIBS := -l pthread -l m -#LIBS := -lpthread -lwebsockets +#LIBS := -l pthread -l m -static # Take out -static, just for dev -# debug of not -#DBG = -g -O0 -fsanitize=address -#GCCFLAGS = -Wall -O3 - -# USe below to remove unused functions and global variables. -#LFLAGS = -Wl,--gc-sections,--print-gc-sections -#GCCFLAGS = -Wall -ffunction-sections -fdata-sections - -# define any compile-time flags +# Standard compile flags +GCCFLAGS = -Wall -O3 +#GCCFLAGS = -O3 #GCCFLAGS = -Wall -O3 -Wextra -#GCCFLAGS = -Wall -O3 -#GCCFLAGS = -Wall +#GCCFLAGS = -Wl,--gc-sections,--print-gc-sections +#GCCFLAGS = -Wall -O3 -ffunction-sections -fdata-sections -#CFLAGS = -Wall -g $(LIBS) -#CFLAGS = -Wall -g $(LIBS) -std=gnu11 -#CFLAGS = $(GCCFLAGS) $(DBG) $(AQ_FLAGS) $(LIBS) -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC -CFLAGS = $(GCCFLAGS) $(DBG) $(LIBS) -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC +# Standard debug flags +DGCCFLAGS = -Wall -O0 -g +# Aqualink Debug flags +#DBGFLAGS = -g -O0 -Wall -fsanitize=address -D AQ_DEBUG -D AQ_TM_DEBUG +DBGFLAGS = -g -O0 -Wall -D AQ_DEBUG -D AQ_TM_DEBUG + +# Mongoose flags +MGFLAGS = -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC -# Add inputs and outputs from these tool invocations to the build variables # define the C source files #SRCS = aqualinkd.c utils.c config.c aq_serial.c init_buttons.c aq_programmer.c net_services.c json_messages.c pda.c pda_menu.c \ @@ -47,41 +53,41 @@ CFLAGS = $(GCCFLAGS) $(DBG) $(LIBS) -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_ SRCS = aqualinkd.c utils.c config.c aq_serial.c aq_panel.c aq_programmer.c net_services.c json_messages.c rs_msg_utils.c\ devices_jandy.c packetLogger.c devices_pentair.c color_lights.c mongoose.c -DBG_SRC = timespec_subtract.c + +AQ_FLAGS = +# Add source and flags depending on protocols to support. ifeq ($(AQ_PDA), true) SRCS := $(SRCS) pda.c pda_menu.c pda_aq_programmer.c - CFLAGS := $(CFLAGS) -D AQ_PDA + AQ_FLAGS := $(AQ_FLAGS) -D AQ_PDA endif ifeq ($(AQ_ONETOUCH), true) SRCS := $(SRCS) onetouch.c onetouch_aq_programmer.c - CFLAGS := $(CFLAGS) -D AQ_ONETOUCH + AQ_FLAGS := $(AQ_FLAGS) -D AQ_ONETOUCH endif ifeq ($(AQ_IAQTOUCH), true) SRCS := $(SRCS) iaqtouch.c iaqtouch_aq_programmer.c - CFLAGS := $(CFLAGS) -D AQ_IAQTOUCH + AQ_FLAGS := $(AQ_FLAGS) -D AQ_IAQTOUCH endif ifeq ($(AQ_RS16), true) - CFLAGS := $(CFLAGS) -D AQ_RS16 + AQ_FLAGS := $(AQ_FLAGS) -D AQ_RS16 endif ifeq ($(AQ_MEMCMP), true) - CFLAGS := $(CFLAGS) -D AQ_MEMCMP + AQ_FLAGS := $(AQ_FLAGS) -D AQ_MEMCMP endif -ifeq ($(AQ_DEBUG), true) - DEBUG=true -endif - -# If run with `make DEBUG=true` add debug files and pass parameter for compile -ifeq ($(DEBUG), true) - SRCS := $(SRCS) $(DBG_SRC) - CFLAGS := -g -O0 $(CFLAGS) -D AQ_DEBUG -endif +# Put all flags together. +CFLAGS = $(GCCFLAGS) $(AQ_FLAGS) $(MGFLAGS) +DFLAGS = $(DGCCFLAGS) $(AQ_FLAGS) $(MGFLAGS) +DBG_CFLAGS = $(DBGFLAGS) $(AQ_FLAGS) $(MGFLAGS) +# Other sources. +#DBG_SRC = timespec_subtract.c debug_timer.c +DBG_SRC = debug_timer.c SL_SRC = serial_logger.c aq_serial.c utils.c packetLogger.c rs_msg_utils.c LR_SRC = log_reader.c aq_serial.c utils.c packetLogger.c PL_EXSRC = aq_serial.c @@ -89,6 +95,7 @@ PL_EXOBJ = aq_serial_player.o PL_SRC := $(filter-out aq_serial.c, $(SRCS)) OBJS = $(SRCS:.c=.o) +DBG_OBJS = $(DBG_SRC:.c=.o) SL_OBJS = $(SL_SRC:.c=.o) LR_OBJS = $(LR_SRC:.c=.o) @@ -99,27 +106,45 @@ MAIN = ./release/aqualinkd SLOG = ./release/serial_logger LOGR = ./release/log_reader PLAY = ./release/aqualinkd-player +DEBG = ./release/aqualinkd-debug -all: $(MAIN) - @echo: $(MAIN) have been compiled +all: $(MAIN) + $(info $(MAIN) has been compiled) + +# debug, Just change compile flags and call MAIN +debug: CFLAGS = $(DFLAGS) +debug: $(MAIN) + $(info $(MAIN) has been compiled) $(MAIN): $(OBJS) - $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS) + $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LIBS) + $(info $(MAIN) has been compiled) slog: $(SLOG) - @echo: $(SLOG) have been compiled + $(info $(SLOG) has been compiled) +$(SLOG): CFLAGS := $(CFLAGS) -D SERIAL_LOGGER $(SLOG): $(SL_OBJS) - $(CC) $(CFLAGS) $(INCLUDES) -o $(SLOG) $(SL_OBJS) -D SERIAL_LOGGER + $(CC) $(CFLAGS) $(INCLUDES) -o $(SLOG) $(SL_OBJS) + + +# Shouldn't need to use any of these options unless you're developing. + +aqdebug: $(DEBG) + $(info $(DEBG) has been compiled) + +$(DEBG): CFLAGS = $(DBG_CFLAGS) +$(DEBG): $(OBJS) $(DBG_OBJS) + $(CC) $(CFLAGS) $(INCLUDES) -o $(DEBG) $(OBJS) $(DBG_OBJS) $(DBGFLAGS) $(LIBS) logr: $(LOGR) - @echo: $(LOGR) have been compiled + $(info $(LOGR) has been compiled) $(LOGR): $(LR_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $(LOGR) $(LR_OBJS) player: $(PLAY) - @echo: $(PLAY) have been compiled + $(info $(PLAY) has been compiled) $(PL_EXOBJ): $(PL_EXSRC) $(CC) $(CFLAGS) -D PLAYBACK_MODE $(INCLUDES) -c $(PL_EXSRC) -o $(PL_EXOBJ) @@ -127,6 +152,7 @@ $(PL_EXOBJ): $(PL_EXSRC) $(PLAY): $(PL_OBJS) $(PL_EXOBJ) $(CC) $(CFLAGS) $(INCLUDES) -o $(PLAY) $(PL_OBJS) $(PL_EXOBJ) +# Fog github publishing .PHONY: git git: clean $(MAIN) $(SLOG) ./release/git_version.sh @@ -141,8 +167,8 @@ git: clean $(MAIN) $(SLOG) .PHONY: clean clean: - $(RM) *.o *~ $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) - $(RM) $(wildcard *.o) $(wildcard *~) $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) $(LOGR) $(PLAY) + $(RM) *.o *~ $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) $(DEBG) + $(RM) $(wildcard *.o) $(wildcard *~) $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) $(LOGR) $(PLAY) $(DEBG) depend: $(SRCS) makedepend $(INCLUDES) $^ diff --git a/README.md b/README.md index 0df29b0..e0c9347 100644 --- a/README.md +++ b/README.md @@ -76,13 +76,18 @@ Designed to mimic AqualinkRS6 All Button keypad and (like the keypad) is used to * Allow selecting of pre-defined VSP programs * Timed based actions (undecided on cron & AqualinkD or use Jandy programs ) * Put back some form of Jandy panel simulator. (existing was removed in V2.2.0) -* RS Serial protocol. AqualinkD has all Jandy control protocols except RS Serial. +* Add RS Serial protocol. AqualinkD has all Jandy control protocols except RS Serial. * Update homekit-aqualinkd to use new API & features. +* Add light programming to Aqualink Touch protocol. -# Update in (Pre) Release 2.2.0b +# Update in (Pre) Release 2.2.0c +* Cleaned up Makefile (and adding debug timings). +* Changed loggin infrastructure. +* Added expermental options for Pi4. * 2.2.0a (had some issues with compiler optimisation), please don't use or compile yourself. -* Fixed RS-4 bug. -* Increased timeout for startup probe +* Fixed RS-4 panel bug. +* Fixed some AqualinkTouch programming issues. +* Increased timeout for startup probe. * This release WILL require you to make aqualinkd.conf changes. Make sure to read wiki section https://github.com/sfeakes/AqualinkD/wiki#Version_2 * Extensive work to reduce CPU cycles and unnesessary logic. * iAqualink Touch protocol supported for VSP & extended programming. diff --git a/aq_programmer.c b/aq_programmer.c index 9c6bcb7..1a8cab3 100644 --- a/aq_programmer.c +++ b/aq_programmer.c @@ -119,13 +119,13 @@ unsigned char pop_ot_cmd(unsigned char receive_type) */ bool push_aq_cmd(unsigned char cmd) { - //logMessage(LOG_DEBUG, "push_aq_cmd '0x%02hhx'\n", cmd); + //LOG(PROG_LOG, LOG_DEBUG, "push_aq_cmd '0x%02hhx'\n", cmd); if (_stack_place < MAX_STACK) { _commands[_stack_place] = cmd; _stack_place++; } else { - logMessage(LOG_ERR, "Command queue overflow, too many unsent commands to RS control panel\n"); + LOG(PROG_LOG, LOG_ERR, "Command queue overflow, too many unsent commands to RS control panel\n"); return false; } @@ -147,19 +147,19 @@ unsigned char pop_aq_cmd(struct aqualinkdata *aq_data) if ( _pgm_command != NUL && aq_data->last_packet_type == CMD_STATUS) { cmd = _pgm_command; _pgm_command = NUL; - logMessage(LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx' (programming)\n", cmd); + LOG(PROG_LOG, LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx' (programming)\n", cmd); } else if (_pgm_command != NUL) { - logMessage(LOG_DEBUG_SERIAL, "RS Waiting to send cmd '0x%02hhx' (programming)\n", _pgm_command); + LOG(PROG_LOG, LOG_DEBUG_SERIAL, "RS Waiting to send cmd '0x%02hhx' (programming)\n", _pgm_command); } else { - logMessage(LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx' empty queue (programming)\n", cmd); + LOG(PROG_LOG, LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx' empty queue (programming)\n", cmd); } } else if (_stack_place > 0 && aq_data->last_packet_type == CMD_STATUS ) { cmd = _commands[0]; _stack_place--; - logMessage(LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx'\n", cmd); + LOG(PROG_LOG, LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx'\n", cmd); memmove(&_commands[0], &_commands[1], sizeof(unsigned char) * _stack_place ) ; } else { - logMessage(LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx'\n", cmd); + LOG(PROG_LOG, LOG_DEBUG_SERIAL, "RS SEND cmd '0x%02hhx'\n", cmd); } //printf("RSM sending cmd '0x%02hhx' in reply to '0x%02hhx'\n",cmd,aq_data->last_packet_type); @@ -181,19 +181,19 @@ unsigned char pop_aq_cmd_OLD(struct aqualinkdata *aq_data) ( _pgm_command != NUL && (aq_data->last_packet_type == CMD_STATUS || aq_data->last_packet_type == CMD_MSG_LONG) )) { cmd = _pgm_command; _pgm_command = NUL; - logMessage(LOG_DEBUG, "RS SEND cmd '0x%02hhx' (programming)\n", cmd); + LOG(PROG_LOG, LOG_DEBUG, "RS SEND cmd '0x%02hhx' (programming)\n", cmd); } else if (_pgm_command != NUL) { - logMessage(LOG_DEBUG, "RS Waiting to send cmd '0x%02hhx' (programming)\n", _pgm_command); + LOG(PROG_LOG, LOG_DEBUG, "RS Waiting to send cmd '0x%02hhx' (programming)\n", _pgm_command); } else { - logMessage(LOG_DEBUG, "RS SEND cmd '0x%02hhx' empty queue (programming)\n", cmd); + LOG(PROG_LOG, LOG_DEBUG, "RS SEND cmd '0x%02hhx' empty queue (programming)\n", cmd); } } else if (_stack_place > 0 && aq_data->last_packet_type == CMD_STATUS ) { cmd = _commands[0]; _stack_place--; - logMessage(LOG_DEBUG, "RS SEND cmd '0x%02hhx'\n", cmd); + LOG(PROG_LOG, LOG_DEBUG, "RS SEND cmd '0x%02hhx'\n", cmd); memmove(&_commands[0], &_commands[1], sizeof(unsigned char) * _stack_place ) ; } else { - logMessage(LOG_DEBUG, "RS SEND cmd '0x%02hhx'\n", cmd); + LOG(PROG_LOG, LOG_DEBUG, "RS SEND cmd '0x%02hhx'\n", cmd); } //printf("RSM sending cmd '0x%02hhx' in reply to '0x%02hhx'\n",cmd,aq_data->last_packet_type); @@ -306,9 +306,9 @@ int setpoint_check(int type, int value, struct aqualinkdata *aqdata) } if (rtn != value) - logMessage(LOG_WARNING, "Setpoint of %d for %s is outside range, using %d\n",value,type_msg,rtn); + LOG(PROG_LOG, LOG_WARNING, "Setpoint of %d for %s is outside range, using %d\n",value,type_msg,rtn); //else - // logMessage(LOG_NOTICE, "Setting setpoint of %s to %d\n",type_msg,rtn); + // LOG(PROG_LOG, LOG_NOTICE, "Setting setpoint of %s to %d\n",type_msg,rtn); return rtn; } @@ -334,7 +334,7 @@ void queueGetProgramData(emulation_type source_type, struct aqualinkdata *aq_dat aq_programmer(AQ_GET_IAQTOUCH_SETPOINTS, NULL, aq_data); if (_aqconfig_.use_panel_aux_labels) aq_programmer(AQ_GET_AUX_LABELS, NULL, aq_data); - //aq_programmer(AQ_GET_IAQTOUCH_AUX_LABELS, NULL, aq_data); + //aq_programmer(AQ_GET_IAQTOUCH_AUX_LABELS, NULL, aq_data); // This is not working yet #endif #ifdef AQ_PDA } else if ( source_type == AQUAPDA) { @@ -353,7 +353,7 @@ void queueGetProgramData(emulation_type source_type, struct aqualinkdata *aq_dat void kick_aq_program_thread(struct aqualinkdata *aq_data) { if (aq_data->active_thread.thread_id != 0) { - logMessage(LOG_DEBUG, "Kicking thread %d,%p message '%s'\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Kicking thread %d,%p message '%s'\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id,aq_data->last_message); pthread_cond_broadcast(&aq_data->active_thread.thread_cond); } } @@ -431,20 +431,20 @@ void kick_aq_program_thread(struct aqualinkdata *aq_data, emulation_type source_ if ( aq_data->active_thread.thread_id != 0 ) { if ( (source_type == ONETOUCH) && in_ot_programming_mode(aq_data)) { - logMessage(LOG_DEBUG, "Kicking OneTouch thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); + LOG(PROG_LOG, LOG_DEBUG, "Kicking OneTouch thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); pthread_cond_broadcast(&aq_data->active_thread.thread_cond); } else if (source_type == ALLBUTTON && !in_ot_programming_mode(aq_data)) { - logMessage(LOG_DEBUG, "Kicking RS thread %d,%p message '%s'\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Kicking RS thread %d,%p message '%s'\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id,aq_data->last_message); pthread_cond_broadcast(&aq_data->active_thread.thread_cond); } else if (source_type == IAQTOUCH && in_iaqt_programming_mode(aq_data)) { - logMessage(LOG_DEBUG, "Kicking IAQ Touch thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); + LOG(PROG_LOG, LOG_DEBUG, "Kicking IAQ Touch thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); pthread_cond_broadcast(&aq_data->active_thread.thread_cond); } #ifdef AQ_PDA else if (source_type == AQUAPDA && !in_ot_programming_mode(aq_data)) { - logMessage(LOG_DEBUG, "Kicking PDA thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); + LOG(PROG_LOG, LOG_DEBUG, "Kicking PDA thread %d,%p\n",aq_data->active_thread.ptype, aq_data->active_thread.thread_id); pthread_cond_broadcast(&aq_data->active_thread.thread_cond); } #endif @@ -455,6 +455,61 @@ void aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_data { struct programmingThreadCtrl *programmingthread = malloc(sizeof(struct programmingThreadCtrl)); + +/* + Seemed like a good idea to use lookuptable, but need to figure out a way to check program_type actually exists in array, + + //void* (*pf[])(void *ptr) = {get_freeze_protect_temp, get_freeze_protect_temp, get_freeze_protect_temp}; + //static const void * (*fun_lookup[])(void *ptr) = { + static void * (*function_lookup[])(void *ptr) = { + [AQ_GET_POOL_SPA_HEATER_TEMPS] = get_aqualink_pool_spa_heater_temps, + [AQ_GET_FREEZE_PROTECT_TEMP] = get_freeze_protect_temp, + [AQ_SET_TIME] = set_aqualink_time, + [AQ_SET_POOL_HEATER_TEMP] = set_aqualink_pool_heater_temps, + [AQ_SET_SPA_HEATER_TEMP] = set_aqualink_spa_heater_temps, + [AQ_SET_FRZ_PROTECTION_TEMP] = set_aqualink_freeze_heater_temps, + [AQ_GET_DIAGNOSTICS_MODEL] = get_aqualink_diag_model, + [AQ_GET_PROGRAMS] = get_aqualink_programs, + [AQ_SET_LIGHTPROGRAM_MODE] = set_aqualink_light_programmode, + [AQ_SET_LIGHTCOLOR_MODE] = set_aqualink_light_colormode, + [AQ_SET_SWG_PERCENT] = set_aqualink_SWG, + [AQ_GET_AUX_LABELS] = get_aqualink_aux_labels, + [AQ_SET_BOOST] = set_aqualink_boost, +#ifdef AQ_PDA + [AQ_PDA_INIT] = set_aqualink_PDA_init, + [AQ_PDA_DEVICE_STATUS] = get_aqualink_PDA_device_status, + [AQ_PDA_DEVICE_ON_OFF] = set_aqualink_PDA_device_on_off, + [AQ_PDA_WAKE_INIT] = set_aqualink_PDA_wakeinit, +#endif +#ifdef AQ_ONETOUCH + //[AQ_SET_PUMP_RPM] = , + //[AQ_SET_PUMP_VS_PROGRAM] = , + //[AQ_SET_ONETOUCH_MACRO] = , + [AQ_SET_ONETOUCH_PUMP_RPM] = set_aqualink_onetouch_pump_rpm, + [AQ_GET_ONETOUCH_SETPOINTS] = get_aqualink_onetouch_setpoints, + [AQ_SET_ONETOUCH_POOL_HEATER_TEMP] = set_aqualink_onetouch_pool_heater_temp, + [AQ_SET_ONETOUCH_SPA_HEATER_TEMP] = set_aqualink_onetouch_spa_heater_temp, + [AQ_SET_ONETOUCH_FREEZEPROTECT] = set_aqualink_onetouch_freezeprotect, + [AQ_SET_ONETOUCH_TIME] = set_aqualink_onetouch_time, + [AQ_SET_ONETOUCH_BOOST] = set_aqualink_onetouch_boost, + [AQ_SET_ONETOUCH_SWG_PERCENT] = set_aqualink_onetouch_swg_percent, +#endif +#ifdef AQ_IAQTOUCH + [AQ_SET_IAQTOUCH_PUMP_RPM] = set_aqualink_iaqtouch_pump_rpm, + [AQ_SET_IAQTOUCH_PUMP_VS_PROGRAM] = set_aqualink_iaqtouch_pump_vs_program, + [AQ_GET_IAQTOUCH_VSP_ASSIGNMENT] = set_aqualink_iaqtouch_vsp_assignments, + [AQ_GET_IAQTOUCH_SETPOINTS] = get_aqualink_iaqtouch_setpoints, + [AQ_GET_IAQTOUCH_AUX_LABELS] = get_aqualink_iaqtouch_aux_labels, + [AQ_SET_IAQTOUCH_SWG_PERCENT] = set_aqualink_iaqtouch_swg_percent, + [AQ_SET_IAQTOUCH_SWG_BOOST] = set_aqualink_iaqtouch_swg_boost, + [AQ_SET_IAQTOUCH_POOL_HEATER_TEMP] = set_aqualink_iaqtouch_pool_heater_temp, + [AQ_SET_IAQTOUCH_SPA_HEATER_TEMP] = set_aqualink_iaqtouch_spa_heater_temp, + [AQ_SET_IAQTOUCH_SET_TIME] = set_aqualink_iaqtouch_time, +#endif + [AQ_SET_BOOST] = set_aqualink_boost + }; +*/ + program_type type = r_type; if (r_type == AQ_SET_PUMP_RPM) { @@ -463,14 +518,14 @@ void aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_data else if (isIAQT_ENABLED) type = AQ_SET_IAQTOUCH_PUMP_RPM; else { - logMessage(LOG_ERR, "Can only change pump RPM with an extended device id\n",type); + LOG(PROG_LOG, LOG_ERR, "Can only change pump RPM with an extended device id\n",type); return; } } else if (r_type == AQ_SET_PUMP_VS_PROGRAM) { if (isIAQT_ENABLED) type = AQ_SET_IAQTOUCH_PUMP_VS_PROGRAM; else { - logMessage(LOG_ERR, "Can only change pump VS Program with an iAqualink Touch device id\n",type); + LOG(PROG_LOG, LOG_ERR, "Can only change pump VS Program with an iAqualink Touch device id\n",type); return; } } @@ -547,7 +602,7 @@ void aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_data type != AQ_GET_POOL_SPA_HEATER_TEMPS && type != AQ_SET_FRZ_PROTECTION_TEMP && type != AQ_SET_BOOST) { - logMessage(LOG_ERR, "Selected Programming mode '%d' not supported with PDA mode control panel\n",type); + LOG(PROG_LOG, LOG_ERR, "Selected Programming mode '%d' not supported with PDA mode control panel\n",type); return; } } @@ -562,150 +617,150 @@ void aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_data switch(type) { /* case AQ_SEND_CMD: - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller\n", &args[0]); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller\n", &args[0]); unsigned char cmd = (unsigned char) &args[0]; if (cmd == NUL) { - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller (NEW)\n", cmd); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller (NEW)\n", cmd); push_aq_cmd( cmd ); } else { - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller (OLD)\n", cmd); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller (OLD)\n", cmd); push_aq_cmd((unsigned char)*args); }*/ - //logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller\n", (unsigned char)*args); + //LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller\n", (unsigned char)*args); /* if(aq_data->active_thread.thread_id == 0) { // No need to thread a plane send if no active threads send_cmd( (unsigned char)*args, aq_data); } else if( pthread_create( &programmingthread->thread_id , NULL , threadded_send_cmd, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } */ //break; case AQ_GET_POOL_SPA_HEATER_TEMPS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_pool_spa_heater_temps, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_FREEZE_PROTECT_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , get_freeze_protect_temp, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_TIME: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_time, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_POOL_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_pool_heater_temps, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_SPA_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_spa_heater_temps, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_FRZ_PROTECTION_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_freeze_heater_temps, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_DIAGNOSTICS_MODEL: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_diag_model, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_PROGRAMS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_programs, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_LIGHTPROGRAM_MODE: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_light_programmode, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_LIGHTCOLOR_MODE: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_light_colormode, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_SWG_PERCENT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_SWG, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_AUX_LABELS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_aux_labels, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_BOOST: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_boost, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; #ifdef AQ_ONETOUCH case AQ_SET_ONETOUCH_PUMP_RPM: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_pump_rpm, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_ONETOUCH_SETPOINTS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_onetouch_setpoints, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_TIME: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_time, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_BOOST: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_boost, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_SWG_PERCENT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_swg_percent, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_POOL_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_pool_heater_temp, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_SPA_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_spa_heater_temp, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_ONETOUCH_FREEZEPROTECT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_onetouch_freezeprotect, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; @@ -713,101 +768,101 @@ void aq_programmer(program_type r_type, char *args, struct aqualinkdata *aq_data #ifdef AQ_IAQTOUCH case AQ_SET_IAQTOUCH_PUMP_RPM: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_pump_rpm, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_IAQTOUCH_VSP_ASSIGNMENT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_vsp_assignments, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_IAQTOUCH_SETPOINTS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_iaqtouch_setpoints, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_GET_IAQTOUCH_AUX_LABELS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_iaqtouch_aux_labels, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_SWG_PERCENT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_swg_percent, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_SWG_BOOST: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_swg_boost, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_POOL_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_pool_heater_temp, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_SPA_HEATER_TEMP: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_spa_heater_temp, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_SET_TIME: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_time, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_SET_IAQTOUCH_PUMP_VS_PROGRAM: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_iaqtouch_pump_vs_program, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } #endif #ifdef AQ_PDA case AQ_PDA_INIT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_PDA_init, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_PDA_WAKE_INIT: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_PDA_wakeinit, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_PDA_DEVICE_STATUS: if( pthread_create( &programmingthread->thread_id , NULL , get_aqualink_PDA_device_status, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; case AQ_PDA_DEVICE_ON_OFF: if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_PDA_device_on_off, (void*)programmingthread) < 0) { - logMessage (LOG_ERR, "could not create thread\n"); + LOG(PROG_LOG, LOG_ERR, "could not create thread\n"); return; } break; #endif default: - logMessage (LOG_ERR, "Didn't understand programming mode type\n"); + LOG(PROG_LOG, LOG_ERR, "Didn't understand programming mode type\n"); break; } if ( programmingthread->thread_id != 0 ) { - //logMessage (LOG_DEBUG, "********* DID pthread_detach %d\n",programmingthread->thread_id); + //LOG(PROG_LOG, LOG_DEBUG, "********* DID pthread_detach %d\n",programmingthread->thread_id); pthread_detach(programmingthread->thread_id); } else { - //logMessage (LOG_DEBUG, "********* DID NOT pthread_detach\n"); + //LOG(PROG_LOG, LOG_DEBUG, "********* DID NOT pthread_detach\n"); } } @@ -821,26 +876,26 @@ void waitForSingleThreadOrTerminate(struct programmingThreadCtrl *threadCtrl, pr i = 0; while (get_aq_cmd_length() > 0 && ( i++ <= tries) ) { - logMessage (LOG_DEBUG, "Thread %p (%s) sleeping, waiting command queue to empty\n", &threadCtrl->thread_id, ptypeName(type)); + LOG(PROG_LOG, LOG_DEBUG, "Thread %p (%s) sleeping, waiting command queue to empty\n", &threadCtrl->thread_id, ptypeName(type)); sleep(waitTime); } if (i >= tries) { - logMessage (LOG_ERR, "Thread %p (%s) timeout waiting, ending\n",&threadCtrl->thread_id,ptypeName(type)); + LOG(PROG_LOG, LOG_ERR, "Thread %p (%s) timeout waiting, ending\n",&threadCtrl->thread_id,ptypeName(type)); free(threadCtrl); pthread_exit(0); } while ( (threadCtrl->aq_data->active_thread.thread_id != 0) && ( i++ <= tries) ) { - //logMessage (LOG_DEBUG, "Thread %d sleeping, waiting for thread %d to finish\n", threadCtrl->thread_id, threadCtrl->aq_data->active_thread.thread_id); - logMessage (LOG_DEBUG, "Thread %p (%s) sleeping, waiting for thread %p (%s) to finish\n", + //LOG(PROG_LOG, LOG_DEBUG, "Thread %d sleeping, waiting for thread %d to finish\n", threadCtrl->thread_id, threadCtrl->aq_data->active_thread.thread_id); + LOG(PROG_LOG, LOG_DEBUG, "Thread %p (%s) sleeping, waiting for thread %p (%s) to finish\n", &threadCtrl->thread_id, ptypeName(type), threadCtrl->aq_data->active_thread.thread_id, ptypeName(threadCtrl->aq_data->active_thread.ptype)); sleep(waitTime); } if (i >= tries) { - //logMessage (LOG_ERR, "Thread %d timeout waiting, ending\n",threadCtrl->thread_id); - logMessage (LOG_ERR, "Thread %d,%p timeout waiting for thread %d,%p to finish\n", + //LOG(PROG_LOG, LOG_ERR, "Thread %d timeout waiting, ending\n",threadCtrl->thread_id); + LOG(PROG_LOG, LOG_ERR, "Thread %d,%p timeout waiting for thread %d,%p to finish\n", type, &threadCtrl->thread_id, threadCtrl->aq_data->active_thread.ptype, threadCtrl->aq_data->active_thread.thread_id); free(threadCtrl); @@ -856,9 +911,9 @@ void waitForSingleThreadOrTerminate(struct programmingThreadCtrl *threadCtrl, pr clock_gettime(CLOCK_REALTIME, &threadCtrl->aq_data->start_active_time); #endif - logMessage (LOG_NOTICE, "Programming: %s\n", ptypeName(threadCtrl->aq_data->active_thread.ptype)); + LOG(PROG_LOG, LOG_NOTICE, "Programming: %s, %d\n", ptypeName(threadCtrl->aq_data->active_thread.ptype), threadCtrl->aq_data->active_thread.ptype); - logMessage (LOG_DEBUG, "Thread %d,%p is active (%s)\n", + LOG(PROG_LOG, LOG_DEBUG, "Thread %d,%p is active (%s)\n", threadCtrl->aq_data->active_thread.ptype, threadCtrl->aq_data->active_thread.thread_id, ptypeName(threadCtrl->aq_data->active_thread.ptype)); @@ -867,12 +922,12 @@ void waitForSingleThreadOrTerminate(struct programmingThreadCtrl *threadCtrl, pr void cleanAndTerminateThread(struct programmingThreadCtrl *threadCtrl) { #ifndef AQ_DEBUG - logMessage(LOG_DEBUG, "Thread %d,%p (%s) finished\n",threadCtrl->aq_data->active_thread.ptype, threadCtrl->thread_id,ptypeName(threadCtrl->aq_data->active_thread.ptype)); + LOG(PROG_LOG, LOG_DEBUG, "Thread %d,%p (%s) finished\n",threadCtrl->aq_data->active_thread.ptype, threadCtrl->thread_id,ptypeName(threadCtrl->aq_data->active_thread.ptype)); #else struct timespec elapsed; clock_gettime(CLOCK_REALTIME, &threadCtrl->aq_data->last_active_time); timespec_subtract(&elapsed, &threadCtrl->aq_data->last_active_time, &threadCtrl->aq_data->start_active_time); - logMessage(LOG_NOTICE, "Thread %d,%p (%s) finished in %d.%03ld sec\n", + LOG(PROG_LOG, LOG_NOTICE, "Thread %d,%p (%s) finished in %d.%03ld sec\n", threadCtrl->aq_data->active_thread.ptype, threadCtrl->aq_data->active_thread.thread_id, ptypeName(threadCtrl->aq_data->active_thread.ptype), @@ -895,7 +950,7 @@ bool setAqualinkNumericField(struct aqualinkdata *aq_data, char *value_label, in } bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label, int value, int increment) { - logMessage(LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value); + LOG(PROG_LOG, LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value); //char leading[10]; // description of the field (POOL, SPA, FRZ) int current_val=-1; // integer value of the current set point //char trailing[10]; // the degrees and scale @@ -907,15 +962,15 @@ bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label do { if (waitForMessage(aq_data, searchBuf, 4) != true) { - logMessage(LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label); + LOG(PROG_LOG, LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label); cancel_menu(); return false; } -//logMessage(LOG_DEBUG,"WAITING for kick value=%d\n",current_val); +//LOG(PROG_LOG, LOG_DEBUG,"WAITING for kick value=%d\n",current_val); //sscanf(aq_data->last_message, "%s %d%s", leading, ¤t_val, trailing); //sscanf(aq_data->last_message, "%*[^0123456789]%d", ¤t_val); sscanf(&aq_data->last_message[val_len], "%*[^0123456789]%d", ¤t_val); - logMessage(LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value); + LOG(PROG_LOG, LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value); if(value > current_val) { // Increment the field. @@ -934,7 +989,7 @@ bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label } if (i++ >= 100) { - logMessage(LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', to '%d'\n",value_label,value); + LOG(PROG_LOG, LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', to '%d'\n",value_label,value); break; } } while(value != current_val); @@ -944,7 +999,7 @@ bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label bool OLD_setAqualinkNumericField_OLD(struct aqualinkdata *aq_data, char *value_label, int value) { // Works for everything but not SWG - logMessage(LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value); + LOG(PROG_LOG, LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value); char leading[10]; // description of the field (POOL, SPA, FRZ) int current_val; // integer value of the current set point char trailing[10]; // the degrees and scale @@ -955,13 +1010,13 @@ bool OLD_setAqualinkNumericField_OLD(struct aqualinkdata *aq_data, char *value_l do { if (waitForMessage(aq_data, searchBuf, 3) != true) { - logMessage(LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label); + LOG(PROG_LOG, LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label); cancel_menu(); return false; } -//logMessage(LOG_DEBUG,"WAITING for kick value=%d\n",current_val); +//LOG(PROG_LOG, LOG_DEBUG,"WAITING for kick value=%d\n",current_val); sscanf(aq_data->last_message, "%s %d%s", leading, ¤t_val, trailing); - logMessage(LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value); + LOG(PROG_LOG, LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value); if(value > current_val) { // Increment the field. @@ -1036,10 +1091,10 @@ STOP BOOST POOL } #endif - logMessage(LOG_DEBUG, "programming BOOST to %s\n", val==true?"On":"Off"); + LOG(PROG_LOG, LOG_DEBUG, "programming BOOST to %s\n", val==true?"On":"Off"); if ( select_menu_item(aq_data, "BOOST POOL") != true ) { - logMessage(LOG_WARNING, "Could not select BOOST POOL menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select BOOST POOL menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1059,16 +1114,16 @@ STOP BOOST POOL // This is a really bad hack, message sequence is out for boost for some reason, so as soon as we see stop message, force enter key. //_pgm_command = KEY_ENTER; send_cmd(KEY_ENTER); - logMessage(LOG_DEBUG, "**** FOUND STOP BOOST POOL ****\n"); + LOG(PROG_LOG, LOG_DEBUG, "**** FOUND STOP BOOST POOL ****\n"); //waitfor_queue2empty(); break; } else { - logMessage(LOG_DEBUG, "Find item in Menu: loop %d of %d looking for 'STOP BOOST POOL' received message '%s'\n",i,wait_messages,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Find item in Menu: loop %d of %d looking for 'STOP BOOST POOL' received message '%s'\n",i,wait_messages,aq_data->last_message); delay(200); if (stristr(aq_data->last_message, "STOP BOOST POOL") != NULL) { //_pgm_command = KEY_ENTER; send_cmd(KEY_ENTER); - logMessage(LOG_DEBUG, "**** FOUND STOP BOOST POOL ****\n"); + LOG(PROG_LOG, LOG_DEBUG, "**** FOUND STOP BOOST POOL ****\n"); break; } send_cmd(KEY_RIGHT); @@ -1088,7 +1143,7 @@ STOP BOOST POOL send_cmd(KEY_RIGHT); waitfor_queue2empty(); if ( select_sub_menu_item(aq_data, "STOP BOOST POOL") != true ) { - logMessage(LOG_WARNING, "Could not select STOP BOOST POOL menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select STOP BOOST POOL menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1125,10 +1180,10 @@ void *set_aqualink_SWG( void *ptr ) } #endif - //logMessage(LOG_NOTICE, "programming SWG percent to %d\n", val); + //LOG(PROG_LOG, LOG_NOTICE, "programming SWG percent to %d\n", val); if ( select_menu_item(aq_data, "SET AQUAPURE") != true ) { - logMessage(LOG_WARNING, "Could not select SET AQUAPURE menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET AQUAPURE menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1137,7 +1192,7 @@ void *set_aqualink_SWG( void *ptr ) // If spa is on, set SWG for spa, if not set SWG for pool if (aq_data->aqbuttons[SPA_INDEX].led->state != OFF) { if (select_sub_menu_item(aq_data, "SET SPA SP") != true) { - logMessage(LOG_WARNING, "Could not select SWG setpoint menu for SPA\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SWG setpoint menu for SPA\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1145,7 +1200,7 @@ void *set_aqualink_SWG( void *ptr ) setAqualinkNumericField_new(aq_data, "SPA SP", val, 5); } else { if (select_sub_menu_item(aq_data, "SET POOL SP") != true) { - logMessage(LOG_WARNING, "Could not select SWG setpoint menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SWG setpoint menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1158,7 +1213,7 @@ void *set_aqualink_SWG( void *ptr ) /* if (select_sub_menu_item(aq_data, "SET POOL SP") != true) { - logMessage(LOG_WARNING, "Could not select SWG setpoint menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SWG setpoint menu\n"); cancel_menu(aq_data); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1202,14 +1257,14 @@ void *get_aqualink_aux_labels( void *ptr ) #endif if ( select_menu_item(aq_data, "REVIEW") != true ) { - logMessage(LOG_WARNING, "Could not select REVIEW menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select REVIEW menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "AUX LABELS") != true) { - logMessage(LOG_WARNING, "Could not select AUX LABELS menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select AUX LABELS menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1239,7 +1294,7 @@ void *set_aqualink_light_colormode( void *ptr ) int typ = atoi(&buf[10]); if (btn < 0 || btn >= aq_data->total_buttons ) { - logMessage(LOG_ERR, "Can't program light mode on button %d\n", btn); + LOG(PROG_LOG, LOG_ERR, "Can't program light mode on button %d\n", btn); cleanAndTerminateThread(threadCtrl); return ptr; } @@ -1247,16 +1302,16 @@ void *set_aqualink_light_colormode( void *ptr ) aqkey *button = &aq_data->aqbuttons[btn]; unsigned char code = button->code; - //logMessage(LOG_NOTICE, "Light Programming #: %d, on button: %s, color light type: %d\n", val, button->label, typ); + //LOG(PROG_LOG, LOG_NOTICE, "Light Programming #: %d, on button: %s, color light type: %d\n", val, button->label, typ); mode_name = light_mode_name(typ, val-1); if (mode_name == NULL) { - logMessage(LOG_ERR, "Light Programming #: %d, on button: %s, color light type: %d, couldn't find mode name '%s'\n", val, button->label, typ, mode_name); + LOG(PROG_LOG, LOG_ERR, "Light Programming #: %d, on button: %s, color light type: %d, couldn't find mode name '%s'\n", val, button->label, typ, mode_name); cleanAndTerminateThread(threadCtrl); return ptr; } else { - logMessage(LOG_INFO, "Light Programming #: %d, on button: %s, color light type: %d, name '%s'\n", val, button->label, typ, mode_name); + LOG(PROG_LOG, LOG_INFO, "Light Programming #: %d, on button: %s, color light type: %d, name '%s'\n", val, button->label, typ, mode_name); } // Simply turn the light off if value is 0 @@ -1270,11 +1325,11 @@ void *set_aqualink_light_colormode( void *ptr ) // Needs to start programming sequence with light off if ( button->led->state == ON ) { - logMessage(LOG_INFO, "Light Programming Initial state on, turning off\n"); + LOG(PROG_LOG, LOG_INFO, "Light Programming Initial state on, turning off\n"); send_cmd(code); waitfor_queue2empty(); if ( !waitForMessage(threadCtrl->aq_data, "OFF", 5)) // Message like 'Aux3 Off' - logMessage(LOG_ERR, "Light Programming didn't receive OFF message\n"); + LOG(PROG_LOG, LOG_ERR, "Light Programming didn't receive OFF message\n"); } // Now turn on and wait for the message "color mode name<>*" @@ -1284,10 +1339,10 @@ void *set_aqualink_light_colormode( void *ptr ) do{ if ( !waitForMessage(threadCtrl->aq_data, "~*", 3)) - logMessage(LOG_ERR, "Light Programming didn't receive color light mode message\n"); + LOG(PROG_LOG, LOG_ERR, "Light Programming didn't receive color light mode message\n"); if (strncasecmp(aq_data->last_message, mode_name, strlen(mode_name)) == 0) { - logMessage(LOG_INFO, "Light Programming found color mode %s\n",mode_name); + LOG(PROG_LOG, LOG_INFO, "Light Programming found color mode %s\n",mode_name); send_cmd(KEY_ENTER); waitfor_queue2empty(); break; @@ -1303,7 +1358,7 @@ void *set_aqualink_light_colormode( void *ptr ) } while (i <= LIGHT_COLOR_OPTIONS); if (i == LIGHT_COLOR_OPTIONS) { - logMessage(LOG_ERR, "Light Programming didn't receive color light mode message for '%s'\n",mode_name); + LOG(PROG_LOG, LOG_ERR, "Light Programming didn't receive color light mode message for '%s'\n",mode_name); } cleanAndTerminateThread(threadCtrl); @@ -1330,7 +1385,7 @@ void *set_aqualink_light_programmode( void *ptr ) float pmode = atof(&buf[20]); if (btn < 0 || btn >= aq_data->total_buttons ) { - logMessage(LOG_ERR, "Can't program light mode on button %d\n", btn); + LOG(PROG_LOG, LOG_ERR, "Can't program light mode on button %d\n", btn); cleanAndTerminateThread(threadCtrl); return ptr; } @@ -1338,7 +1393,7 @@ void *set_aqualink_light_programmode( void *ptr ) aqkey *button = &aq_data->aqbuttons[btn]; unsigned char code = button->code; - logMessage(LOG_INFO, "Light Programming #: %d, on button: %s, with pause mode: %f (initial on=%d, initial off=%d)\n", val, button->label, pmode, iOn, iOff); + LOG(PROG_LOG, LOG_INFO, "Light Programming #: %d, on button: %s, with pause mode: %f (initial on=%d, initial off=%d)\n", val, button->label, pmode, iOn, iOff); // Simply turn the light off if value is 0 if (val <= 0) { @@ -1353,37 +1408,37 @@ void *set_aqualink_light_programmode( void *ptr ) // Needs to start programming sequence with light on, if off we need to turn on for 15 seconds // before we can send the next off. if ( button->led->state != ON ) { - logMessage(LOG_INFO, "Light Programming Initial state off, turning on for %d seconds\n",iOn); + LOG(PROG_LOG, LOG_INFO, "Light Programming Initial state off, turning on for %d seconds\n",iOn); send_cmd(code); delay(iOn * seconds); } - logMessage(LOG_INFO, "Light Programming turn off for %d seconds\n",iOff); + LOG(PROG_LOG, LOG_INFO, "Light Programming turn off for %d seconds\n",iOff); // Now need to turn off for between 11 and 14 seconds to reset light. send_cmd(code); delay(iOff * seconds); // Now light is reset, pulse the appropiate number of times to advance program. - logMessage(LOG_INFO, "Light Programming button pulsing on/off %d times\n", val); + LOG(PROG_LOG, LOG_INFO, "Light Programming button pulsing on/off %d times\n", val); // Program light in safe mode (slowley), or quick mode if (pmode > 0) { for (i = 1; i < (val * 2); i++) { - logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, i % 2 == 0 ? "Off" : "On", val); + LOG(PROG_LOG, LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, i % 2 == 0 ? "Off" : "On", val); send_cmd(code); delay(pmode * seconds); // 0.3 works, but using 0.4 to be safe } } else { for (i = 1; i < val; i++) { - logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "ON", val); + LOG(PROG_LOG, LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "ON", val); send_cmd(code); waitForButtonState(aq_data, button, ON, 2); - logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "OFF", val); + LOG(PROG_LOG, LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "OFF", val); send_cmd(code); waitForButtonState(aq_data, button, OFF, 2); } - logMessage(LOG_INFO, "Finished - Light Programming button press number %d - %s of %d\n", i, "ON", val); + LOG(PROG_LOG, LOG_INFO, "Finished - Light Programming button press number %d - %s of %d\n", i, "ON", val); send_cmd(code); } //waitForButtonState(aq_data, &aq_data->aqbuttons[btn], ON, 2); @@ -1429,11 +1484,11 @@ void *set_aqualink_pool_heater_temps( void *ptr ) menu_name = "SET POOL TEMP"; } - logMessage(LOG_DEBUG, "Setting pool heater setpoint to %d\n", val); + LOG(PROG_LOG, LOG_DEBUG, "Setting pool heater setpoint to %d\n", val); //setAqualinkTemp(aq_data, "SET TEMP", "SET POOL TEMP", NULL, "POOL", val); if ( select_menu_item(aq_data, "SET TEMP") != true ) { - logMessage(LOG_WARNING, "Could not select SET TEMP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET TEMP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1441,7 +1496,7 @@ void *set_aqualink_pool_heater_temps( void *ptr ) //if (select_sub_menu_item(aq_data, "SET POOL TEMP") != true) { if (select_sub_menu_item(aq_data, menu_name) != true) { - logMessage(LOG_WARNING, "Could not select SET POOL TEMP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET POOL TEMP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1504,11 +1559,11 @@ void *set_aqualink_spa_heater_temps( void *ptr ) menu_name = "SET SPA TEMP"; } - logMessage(LOG_DEBUG, "Setting spa heater setpoint to %d\n", val); + LOG(PROG_LOG, LOG_DEBUG, "Setting spa heater setpoint to %d\n", val); //setAqualinkTemp(aq_data, "SET TEMP", "SET SPA TEMP", NULL, "SPA", val); if ( select_menu_item(aq_data, "SET TEMP") != true ) { - logMessage(LOG_WARNING, "Could not select SET TEMP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET TEMP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1516,7 +1571,7 @@ void *set_aqualink_spa_heater_temps( void *ptr ) //if (select_sub_menu_item(aq_data, "SET SPA TEMP") != true) { if (select_sub_menu_item(aq_data, menu_name) != true) { - logMessage(LOG_WARNING, "Could not select SET SPA TEMP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET SPA TEMP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1562,7 +1617,7 @@ void *set_aqualink_freeze_heater_temps( void *ptr ) */ val = setpoint_check(FREEZE_SETPOINT, val, aq_data); - logMessage(LOG_DEBUG, "Setting sfreeze protection to %d\n", val); + LOG(PROG_LOG, LOG_DEBUG, "Setting sfreeze protection to %d\n", val); #ifdef AQ_PDA if (isPDA_PANEL) { @@ -1573,21 +1628,21 @@ void *set_aqualink_freeze_heater_temps( void *ptr ) #endif //setAqualinkTemp(aq_data, "SYSTEM SETUP", "FRZ PROTECT", "TEMP SETTING", "FRZ", val); if ( select_menu_item(aq_data, "SYSTEM SETUP") != true ) { - logMessage(LOG_WARNING, "Could not select SYSTEM SETUP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SYSTEM SETUP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "FRZ PROTECT") != true) { - logMessage(LOG_WARNING, "Could not select FRZ PROTECT menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select FRZ PROTECT menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "TEMP SETTING") != true) { - logMessage(LOG_WARNING, "Could not select TEMP SETTING menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select TEMP SETTING menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1609,26 +1664,26 @@ void *set_aqualink_time( void *ptr ) struct aqualinkdata *aq_data = threadCtrl->aq_data; waitForSingleThreadOrTerminate(threadCtrl, AQ_SET_TIME); - //logMessage(LOG_NOTICE, "Setting time on aqualink\n"); + //LOG(PROG_LOG, LOG_NOTICE, "Setting time on aqualink\n"); time_t now = time(0); // get time now struct tm *result = localtime(&now); - char hour[11]; + char hour[20]; if (result->tm_hour == 0) sprintf(hour, "HOUR 12 AM"); else if (result->tm_hour < 11) - sprintf(hour, "HOUR %d AM", result->tm_hour); + sprintf(hour, "HOUR %.2d AM", result->tm_hour); else if (result->tm_hour == 12) sprintf(hour, "HOUR 12 PM"); else // Must be 13 or more - sprintf(hour, "HOUR %d PM", result->tm_hour - 12); + sprintf(hour, "HOUR %.2d PM", result->tm_hour - 12); - logMessage(LOG_DEBUG, "Setting time to %d/%d/%d %d:%d\n", result->tm_mon + 1, result->tm_mday, result->tm_year + 1900, result->tm_hour + 1, result->tm_min); + LOG(PROG_LOG, LOG_DEBUG, "Setting time to %d/%d/%d %d:%d\n", result->tm_mon + 1, result->tm_mday, result->tm_year + 1900, result->tm_hour + 1, result->tm_min); if ( select_menu_item(aq_data, "SET TIME") != true ) { - logMessage(LOG_WARNING, "Could not select SET TIME menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select SET TIME menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1658,14 +1713,14 @@ void *get_aqualink_diag_model( void *ptr ) waitForSingleThreadOrTerminate(threadCtrl, AQ_GET_DIAGNOSTICS_MODEL); if ( select_menu_item(aq_data, "SYSTEM SETUP") != true ) { - logMessage(LOG_WARNING, "Could not select HELP menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select HELP menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "DIAGNOSTICS") != true) { - logMessage(LOG_WARNING, "Could not select DIAGNOSTICS menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select DIAGNOSTICS menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1681,18 +1736,18 @@ void *get_aqualink_diag_model( void *ptr ) void *get_aqualink_pool_spa_heater_temps( void *ptr ) { -//logMessage(LOG_DEBUG, "Could not select TEMP SET menu\n"); +//LOG(PROG_LOG, LOG_DEBUG, "Could not select TEMP SET menu\n"); struct programmingThreadCtrl *threadCtrl; threadCtrl = (struct programmingThreadCtrl *) ptr; struct aqualinkdata *aq_data = threadCtrl->aq_data; waitForSingleThreadOrTerminate(threadCtrl, AQ_GET_POOL_SPA_HEATER_TEMPS); - //logMessage(LOG_NOTICE, "Getting pool & spa heat setpoints from aqualink\n"); + //LOG(PROG_LOG, LOG_NOTICE, "Getting pool & spa heat setpoints from aqualink\n"); #ifdef AQ_PDA if (isPDA_PANEL) { if (!get_PDA_aqualink_pool_spa_heater_temps(aq_data)) { - logMessage(LOG_ERR, "Error Getting PDA pool & spa heater setpoints\n"); + LOG(PROG_LOG, LOG_ERR, "Error Getting PDA pool & spa heater setpoints\n"); } cleanAndTerminateThread(threadCtrl); return ptr; @@ -1700,14 +1755,14 @@ void *get_aqualink_pool_spa_heater_temps( void *ptr ) #endif if ( select_menu_item(aq_data, "REVIEW") != true ) { - logMessage(LOG_WARNING, "Could not select REVIEW menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select REVIEW menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "TEMP SET") != true) { - logMessage(LOG_WARNING, "Could not select TEMP SET menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select TEMP SET menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1731,12 +1786,12 @@ void *get_freeze_protect_temp( void *ptr ) struct aqualinkdata *aq_data = threadCtrl->aq_data; waitForSingleThreadOrTerminate(threadCtrl, AQ_GET_FREEZE_PROTECT_TEMP); - //logMessage(LOG_NOTICE, "Getting freeze protection setpoints\n"); + //LOG(PROG_LOG, LOG_NOTICE, "Getting freeze protection setpoints\n"); #ifdef AQ_PDA if (isPDA_PANEL) { if (! get_PDA_freeze_protect_temp(aq_data)) { - logMessage(LOG_ERR, "Error Getting PDA freeze protection setpoints\n"); + LOG(PROG_LOG, LOG_ERR, "Error Getting PDA freeze protection setpoints\n"); } cleanAndTerminateThread(threadCtrl); return ptr; @@ -1744,14 +1799,14 @@ void *get_freeze_protect_temp( void *ptr ) #endif if ( select_menu_item(aq_data, "REVIEW") != true ) { - logMessage(LOG_WARNING, "Could not select REVIEW menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select REVIEW menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "FRZ PROTECT") != true) { - logMessage(LOG_WARNING, "Could not select FRZ PROTECT menu\n"); + LOG(PROG_LOG, LOG_WARNING, "Could not select FRZ PROTECT menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1772,7 +1827,7 @@ bool get_aqualink_program_for_button(struct aqualinkdata *aq_data, unsigned char if (! waitForMessage(aq_data, "SELECT DEVICE TO REVIEW or PRESS ENTER TO END", rtnStringsWait)) return false; - logMessage(LOG_DEBUG, "Send key '%d'\n",cmd); + LOG(PROG_LOG, LOG_DEBUG, "Send key '%d'\n",cmd); send_cmd(cmd); return waitForEitherMessage(aq_data, "NOT SET", "TURNS ON", rtnStringsWait); } @@ -1787,14 +1842,14 @@ void *get_aqualink_programs( void *ptr ) waitForSingleThreadOrTerminate(threadCtrl, AQ_GET_PROGRAMS); if ( select_menu_item(aq_data, "REVIEW") != true ) { - //logMessage(LOG_WARNING, "Could not select REVIEW menu\n"); + //LOG(PROG_LOG, LOG_WARNING, "Could not select REVIEW menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; } if (select_sub_menu_item(aq_data, "PROGRAMS") != true) { - //logMessage(LOG_WARNING, "Could not select PROGRAMS menu\n"); + //LOG(PROG_LOG, LOG_WARNING, "Could not select PROGRAMS menu\n"); cancel_menu(); cleanAndTerminateThread(threadCtrl); return ptr; @@ -1803,22 +1858,22 @@ void *get_aqualink_programs( void *ptr ) unsigned int i; for (i=0; i < strlen(keys); i++) { - //logMessage(LOG_DEBUG, "**** START program for key in loop %d\n",i); + //LOG(PROG_LOG, LOG_DEBUG, "**** START program for key in loop %d\n",i); if (! get_aqualink_program_for_button(aq_data, keys[i])) { - //logMessage(LOG_DEBUG, "**** Didn't find program for key in loop %d\n",i); + //LOG(PROG_LOG, LOG_DEBUG, "**** Didn't find program for key in loop %d\n",i); //cancel_menu(aq_data); cleanAndTerminateThread(threadCtrl); return ptr; } - //logMessage(LOG_DEBUG, "**** Found program for key in loop %d\n",i); + //LOG(PROG_LOG, LOG_DEBUG, "**** Found program for key in loop %d\n",i); } if (waitForMessage(aq_data, "SELECT DEVICE TO REVIEW or PRESS ENTER TO END", 6)) { - //logMessage(LOG_DEBUG, "Send key ENTER\n"); + //LOG(PROG_LOG, LOG_DEBUG, "Send key ENTER\n"); send_cmd(KEY_ENTER); } else { - //logMessage(LOG_DEBUG, "Send CANCEL\n"); + //LOG(PROG_LOG, LOG_DEBUG, "Send CANCEL\n"); cancel_menu(); } @@ -1833,7 +1888,7 @@ void *get_aqualink_programs( void *ptr ) void send_cmd(unsigned char cmd, struct aqualinkdata *aq_data) { push_aq_cmd(cmd); - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller\n", cmd); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller\n", cmd); } */ @@ -1844,7 +1899,7 @@ void _waitfor_queue2empty(bool longwait) //while ( (_pgm_command != NUL) && ( i++ < (30*(longwait?2:1) ) ) ) { while ( (_pgm_command != NUL) && ( i++ < (50*(longwait?2:1) ) ) ) { //sleep(1); // NSF Change to smaller time. - //logMessage(LOG_DEBUG, "******** QUEUE IS FULL ******** delay\n"); + //LOG(PROG_LOG, LOG_DEBUG, "******** QUEUE IS FULL ******** delay\n"); delay(50); } @@ -1857,7 +1912,7 @@ void _waitfor_queue2empty(bool longwait) } } #endif - logMessage(LOG_WARNING, "Send command Queue did not empty, timeout\n"); + LOG(PROG_LOG, LOG_WARNING, "Send command Queue did not empty, timeout\n"); } } @@ -1878,7 +1933,7 @@ void send_cmd(unsigned char cmd) _pgm_command = cmd; //delay(200); - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller (programming)\n", _pgm_command); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller (programming)\n", _pgm_command); } /* @@ -1894,7 +1949,7 @@ void send_cmd(unsigned char cmd, struct aqualinkdata *aq_data) aq_data->aq_command = cmd; //delay(200); - logMessage(LOG_INFO, "Queue send '0x%02hhx' to controller\n", aq_data->aq_command); + LOG(PROG_LOG, LOG_INFO, "Queue send '0x%02hhx' to controller\n", aq_data->aq_command); } */ @@ -1909,7 +1964,7 @@ void cancel_menu() bool waitForEitherMessage(struct aqualinkdata *aq_data, char* message1, char* message2, int numMessageReceived) { - //logMessage(LOG_DEBUG, "waitForMessage %s %d %d\n",message,numMessageReceived,cmd); + //LOG(PROG_LOG, LOG_DEBUG, "waitForMessage %s %d %d\n",message,numMessageReceived,cmd); waitfor_queue2empty(); // MAke sure the last command was sent int i=0; pthread_mutex_lock(&aq_data->active_thread.thread_mutex); @@ -1933,12 +1988,12 @@ bool waitForEitherMessage(struct aqualinkdata *aq_data, char* message1, char* me while( ++i <= numMessageReceived) { - logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' OR '%s' received message1 '%s'\n",i,numMessageReceived,message1,message2,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' OR '%s' received message1 '%s'\n",i,numMessageReceived,message1,message2,aq_data->last_message); if (message1 != NULL) { ptr = stristr(aq_data->last_message, msgS1); if (ptr != NULL) { // match - logMessage(LOG_DEBUG, "Programming mode: String MATCH '%s'\n", msgS1); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: String MATCH '%s'\n", msgS1); if (msgS1 == message1) // match & don't care if first char break; else if (ptr == aq_data->last_message) // match & do care if first char @@ -1948,7 +2003,7 @@ bool waitForEitherMessage(struct aqualinkdata *aq_data, char* message1, char* me if (message2 != NULL) { ptr = stristr(aq_data->last_message, msgS2); if (ptr != NULL) { // match - logMessage(LOG_DEBUG, "Programming mode: String MATCH '%s'\n", msgS2); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: String MATCH '%s'\n", msgS2); if (msgS2 == message2) // match & don't care if first char break; else if (ptr == aq_data->last_message) // match & do care if first char @@ -1956,19 +2011,19 @@ bool waitForEitherMessage(struct aqualinkdata *aq_data, char* message1, char* me } } - //logMessage(LOG_DEBUG, "Programming mode: looking for '%s' received message1 '%s'\n",message1,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: looking for '%s' received message1 '%s'\n",message1,aq_data->last_message); pthread_cond_wait(&aq_data->active_thread.thread_cond, &aq_data->active_thread.thread_mutex); - //logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message1 '%s'\n",i,numMessageReceived,message1,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message1 '%s'\n",i,numMessageReceived,message1,aq_data->last_message); } pthread_mutex_unlock(&aq_data->active_thread.thread_mutex); if (message1 != NULL && message2 != NULL && ptr == NULL) { //logmessage1(LOG_ERR, "Could not select MENU of Aqualink control panel\n"); - logMessage(LOG_DEBUG, "Programming mode: did not find '%s'\n",message1); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: did not find '%s'\n",message1); return false; } - logMessage(LOG_DEBUG, "Programming mode: found message1 '%s' or '%s' in '%s'\n",message1,message2,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: found message1 '%s' or '%s' in '%s'\n",message1,message2,aq_data->last_message); return true; } @@ -1977,7 +2032,7 @@ bool waitForEitherMessage(struct aqualinkdata *aq_data, char* message1, char* me bool waitForMessage(struct aqualinkdata *aq_data, char* message, int numMessageReceived) { - logMessage(LOG_DEBUG, "waitForMessage %s %d\n",message,numMessageReceived); + LOG(PROG_LOG, LOG_DEBUG, "waitForMessage %s %d\n",message,numMessageReceived); waitfor_queue2empty(); // MAke sure the last command was sent int i=0; @@ -1995,14 +2050,14 @@ bool waitForMessage(struct aqualinkdata *aq_data, char* message, int numMessageR while( ++i <= numMessageReceived) { if (message != NULL) - logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s', last message received '%s'\n",i,numMessageReceived,message,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s', last message received '%s'\n",i,numMessageReceived,message,aq_data->last_message); else - logMessage(LOG_DEBUG, "Programming mode: loop %d of %d waiting for next message, last message received '%s'\n",i,numMessageReceived,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d waiting for next message, last message received '%s'\n",i,numMessageReceived,aq_data->last_message); if (message != NULL) { ptr = stristr(aq_data->last_message, msgS); if (ptr != NULL) { // match - logMessage(LOG_DEBUG, "Programming mode: String MATCH\n"); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: String MATCH\n"); if (msgS == message) // match & don't care if first char break; else if (ptr == aq_data->last_message) // match & do care if first char @@ -2010,23 +2065,23 @@ bool waitForMessage(struct aqualinkdata *aq_data, char* message, int numMessageR } } - //logMessage(LOG_DEBUG, "Programming mode: looking for '%s' received message '%s'\n",message,aq_data->last_message); - //logMessage(LOG_DEBUG, "*** pthread_cond_wait() sleep\n"); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: looking for '%s' received message '%s'\n",message,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "*** pthread_cond_wait() sleep\n"); pthread_cond_wait(&aq_data->active_thread.thread_cond, &aq_data->active_thread.thread_mutex); - //logMessage(LOG_DEBUG, "*** pthread_cond_wait() wake\n"); - //logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message '%s'\n",i,numMessageReceived,message,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "*** pthread_cond_wait() wake\n"); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message '%s'\n",i,numMessageReceived,message,aq_data->last_message); } pthread_mutex_unlock(&aq_data->active_thread.thread_mutex); if (message != NULL && ptr == NULL) { - //logMessage(LOG_ERR, "Could not select MENU of Aqualink control panel\n"); - logMessage(LOG_DEBUG, "Programming mode: did not find '%s'\n",message); + //LOG(PROG_LOG, LOG_ERR, "Could not select MENU of Aqualink control panel\n"); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: did not find '%s'\n",message); return false; } else if (message != NULL) - logMessage(LOG_DEBUG, "Programming mode: found message '%s' in '%s'\n",message,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: found message '%s' in '%s'\n",message,aq_data->last_message); else - logMessage(LOG_DEBUG, "Programming mode: waited for %d message(s)\n",numMessageReceived); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: waited for %d message(s)\n",numMessageReceived); return true; } @@ -2088,17 +2143,17 @@ bool select_sub_menu_item(struct aqualinkdata *aq_data, char* item_string) while( (stristr(aq_data->last_message, item_string) == NULL) && ( i++ < wait_messages) ) { - logMessage(LOG_DEBUG, "Find item in Menu: loop %d of %d looking for '%s' received message '%s'\n",i,wait_messages,item_string,aq_data->last_message); + LOG(PROG_LOG, LOG_DEBUG, "Find item in Menu: loop %d of %d looking for '%s' received message '%s'\n",i,wait_messages,item_string,aq_data->last_message); send_cmd(KEY_RIGHT); waitForMessage(aq_data, NULL, 1); } if (stristr(aq_data->last_message, item_string) == NULL) { - //logMessage(LOG_ERR, "Could not select SUB_MENU of Aqualink control panel\n"); + //LOG(PROG_LOG, LOG_ERR, "Could not select SUB_MENU of Aqualink control panel\n"); return false; } - logMessage(LOG_DEBUG, "Find item in Menu: loop %d of %d FOUND menu item '%s', sending ENTER command\n",i,wait_messages, item_string); + LOG(PROG_LOG, LOG_DEBUG, "Find item in Menu: loop %d of %d FOUND menu item '%s', sending ENTER command\n",i,wait_messages, item_string); // Enter the mode specified by the argument. @@ -2118,32 +2173,32 @@ bool select_sub_menu_item(struct aqualinkdata *aq_data, char* item_string) bool waitForButtonState(struct aqualinkdata *aq_data, aqkey* button, aqledstate state, int numMessageReceived) { - //logMessage(LOG_DEBUG, "waitForMessage %s %d %d\n",message,numMessageReceived,cmd); + //LOG(PROG_LOG, LOG_DEBUG, "waitForMessage %s %d %d\n",message,numMessageReceived,cmd); int i=0; pthread_mutex_lock(&aq_data->active_thread.thread_mutex); while( ++i <= numMessageReceived) { - logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for state change to '%d' for '%s' \n",i,numMessageReceived,button->led->state,button->name); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for state change to '%d' for '%s' \n",i,numMessageReceived,button->led->state,button->name); if (button->led->state == state) { - logMessage(LOG_INFO, "Programming mode: Button State =%d for %s\n",state,button->name); + LOG(PROG_LOG, LOG_INFO, "Programming mode: Button State =%d for %s\n",state,button->name); break; } - //logMessage(LOG_DEBUG, "Programming mode: looking for '%s' received message '%s'\n",message,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: looking for '%s' received message '%s'\n",message,aq_data->last_message); pthread_cond_wait(&aq_data->active_thread.thread_cond, &aq_data->active_thread.thread_mutex); - //logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message '%s'\n",i,numMessageReceived,message,aq_data->last_message); + //LOG(PROG_LOG, LOG_DEBUG, "Programming mode: loop %d of %d looking for '%s' received message '%s'\n",i,numMessageReceived,message,aq_data->last_message); } pthread_mutex_unlock(&aq_data->active_thread.thread_mutex); if (numMessageReceived >= i) { - //logMessage(LOG_ERR, "Could not select MENU of Aqualink control panel\n"); - logMessage(LOG_DEBUG, "Programming mode: did not find state '%d' for '%s'\n",button->led->state,button->name); + //LOG(PROG_LOG, LOG_ERR, "Could not select MENU of Aqualink control panel\n"); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: did not find state '%d' for '%s'\n",button->led->state,button->name); return false; } - logMessage(LOG_DEBUG, "Programming mode: found state '%d' for '%s'\n",button->led->state,button->name); + LOG(PROG_LOG, LOG_DEBUG, "Programming mode: found state '%d' for '%s'\n",button->led->state,button->name); return true; } @@ -2193,6 +2248,9 @@ const char *ptypeName(program_type type) case AQ_SET_PUMP_VS_PROGRAM: return "Set Pump VS Program"; break; + case AQ_GET_AUX_LABELS: + return "Get AUX labels"; + break; #ifdef AQ_ONETOUCH case AQ_SET_ONETOUCH_PUMP_RPM: return "Set OneTouch Pump RPM"; @@ -2264,9 +2322,6 @@ const char *ptypeName(program_type type) case AQ_PDA_DEVICE_ON_OFF: return "Switch PDA device on/off"; break; - case AQ_GET_AUX_LABELS: - return "Get AUX labels"; - break; case AQ_PDA_WAKE_INIT: return "PDA init after wake"; break; diff --git a/aq_programmer.h b/aq_programmer.h index 1744440..780fbad 100644 --- a/aq_programmer.h +++ b/aq_programmer.h @@ -74,6 +74,7 @@ typedef enum { AQ_SET_IAQTOUCH_SET_TIME } program_type; + struct programmingThreadCtrl { pthread_t thread_id; //void *thread_args; diff --git a/aq_serial.c b/aq_serial.c index eb8d140..941b85b 100644 --- a/aq_serial.c +++ b/aq_serial.c @@ -33,7 +33,10 @@ //#define USE_AQ_SERIAL_OLD +//#define BLOCKING_MODE +static bool _blocking_mode = false; +int _blocking_fds = -1; #ifndef USE_AQ_SERIAL_OLD // Substansial changes to core component, make sure we can role back easily @@ -306,8 +309,75 @@ Open and Initialize the serial communications port to the Aqualink RS8 device. Arg is tty or port designation string returns the file descriptor */ +//#define TXDEN_DUMMY_RS485_MODE + +#ifdef TXDEN_DUMMY_RS485_MODE + +#include +/* RS485 ioctls: */ +#define TIOCGRS485 0x542E +#define TIOCSRS485 0x542F + +int init_serial_port_Pi(const char* tty) +{ + struct serial_rs485 rs485conf = {0}; + + //int fd = open(tty, O_RDWR | O_NOCTTY | O_NONBLOCK); + int fd = open(tty, O_RDWR); + if (fd < 0) { + LOG(RSSD_LOG,LOG_ERR, "Unable to open port: %s\n", tty); + return -1; + } + + LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Openeded serial port %s\n",tty); + + if (ioctl (fd, TIOCGRS485, &rs485conf) < 0) { + LOG(RSSD_LOG,LOG_ERR, "Error reading ioctl port (%d): %s\n", errno, strerror( errno )); + return -1; + } + + LOG(RSSD_LOG,LOG_DEBUG, "Port currently RS485 mode is %s\n", (rs485conf.flags & SER_RS485_ENABLED) ? "set" : "NOT set"); + + /* Enable RS485 mode: */ + rs485conf.flags |= SER_RS485_ENABLED; + + /* Set logical level for RTS pin equal to 1 when sending: */ + rs485conf.flags |= SER_RS485_RTS_ON_SEND; + /* or, set logical level for RTS pin equal to 0 when sending: */ + //rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND); + + /* Set logical level for RTS pin equal to 1 after sending: */ + rs485conf.flags |= SER_RS485_RTS_AFTER_SEND; + /* or, set logical level for RTS pin equal to 0 after sending: */ + //rs485conf.flags &= ~(SER_RS485_RTS_AFTER_SEND); + + /* Set this flag if you want to receive data even whilst sending data */ + //rs485conf.flags |= SER_RS485_RX_DURING_TX; + + if (ioctl (fd, TIOCSRS485, &rs485conf) < 0) { + LOG(RSSD_LOG,LOG_ERR, "Unable to set port to RS485 %s (%d): %s\n", tty, errno, strerror( errno )); + return -1; + } + + return fd; +} +#endif + +int _init_serial_port(const char* tty, bool blocking); + int init_serial_port(const char* tty) { + return _init_serial_port(tty, false); +} +int init_blocking_serial_port(const char* tty) +{ + _blocking_fds = _init_serial_port(tty, true); + return _blocking_fds; +} + +int _init_serial_port(const char* tty, bool blocking) +{ + long BAUD = B9600; long DATABITS = CS8; long STOPBITS = 0; @@ -316,6 +386,8 @@ int init_serial_port(const char* tty) struct termios newtio; //place for old and new port settings for serial port + _blocking_mode = blocking; + //int fd = open(tty, O_RDWR | O_NOCTTY | O_NONBLOCK); int fd = open(tty, O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY); if (fd < 0) { @@ -323,13 +395,22 @@ int init_serial_port(const char* tty) return -1; } - LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Openeded serial port %s\n",tty); + LOG(RSSD_LOG,LOG_DEBUG, "Openeded serial port %s\n",tty); - int flags = fcntl(fd, F_GETFL, 0); - fcntl(fd, F_SETFL, flags | O_NONBLOCK | O_NDELAY); - newtio.c_cc[VMIN]= 0; - newtio.c_cc[VTIME]= 1; - LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Set serial port %s to non blocking mode\n",tty); + if (_blocking_mode) { + // http://unixwiz.net/techtips/termios-vmin-vtime.html + // Not designed behaviour, but it's what we need. + fcntl(fd, F_SETFL, 0); + newtio.c_cc[VMIN]= 1; + newtio.c_cc[VTIME]= 0; + LOG(RSSD_LOG,LOG_DEBUG, "Set serial port %s to blocking mode\n",tty); + } else { + int flags = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, flags | O_NONBLOCK | O_NDELAY); + newtio.c_cc[VMIN]= 0; + newtio.c_cc[VTIME]= 1; + LOG(RSSD_LOG,LOG_DEBUG, "Set serial port %s to non blocking mode\n",tty); + } tcgetattr(fd, &_oldtio); // save current port settings // set new port settings for canonical input processing @@ -341,11 +422,20 @@ int init_serial_port(const char* tty) tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); - LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Set serial port %s io attributes\n",tty); + LOG(RSSD_LOG,LOG_DEBUG, "Set serial port %s io attributes\n",tty); return fd; } +void close_blocking_serial_port() +{ + if (_blocking_fds > 0) { + LOG(RSSD_LOG,LOG_INFO, "Forcing close of blocking serial port, ignore following read errors\n"); + close_serial_port(_blocking_fds); + } else { + LOG(RSSD_LOG,LOG_ERR, "Didn't find valid blocking serial port file descripter\n"); + } +} /* close tty port */ void close_serial_port(int fd) { @@ -355,11 +445,6 @@ void close_serial_port(int fd) } - - - - - // Send an ack packet to the Aqualink RS8 master device. // fd: the file descriptor of the serial port connected to the device // command: the command byte to send to the master device, NUL if no command @@ -530,35 +615,45 @@ void send_command(int fd, unsigned char *packet_buffer, int size) void send_packet(int fd, unsigned char *packet, int length) { - if (_aqconfig_.readahead_b4_write) { - unsigned char byte; - int r; - //int j=0; - do { - //j++; - r = read(fd, &byte, 1); - //printf("*** Peek Read %d 0x%02hhx ***\n",r,byte); - if (r==1 && byte != 0x00) { - LOG(RSSD_LOG,LOG_ERR, "SERIOUS ERROR on RS485, AqualinkD was too slow in replying to message! (please check OS for performance issues)\n"); - return; - } - } while (r==1 && byte==0x00); - } + if (_blocking_mode) { + write(fd, packet, length); + } else { + if (_aqconfig_.readahead_b4_write) { + unsigned char byte; + int bytesRead; + // int j=0; + do { + // j++; + bytesRead = read(fd, &byte, 1); + // printf("*** Peek Read %d 0x%02hhx ***\n",r,byte); + if (bytesRead == 1 && byte != 0x00) { + LOG(RSSD_LOG, LOG_ERR, "ERROR on RS485, AqualinkD was too slow in replying to message! (please check for performance issues)\n"); + do { // Just play catchup + bytesRead = read(fd, &byte, 1); + // if (bytesRead==1) { LOG(RSSD_LOG,LOG_ERR, "Error Cleanout read 0x%02hhx\n",byte); } + } while (bytesRead == 1); - int nwrite, i; - for (i=0; i= LOG_DEBUG) { - debuglogPacket(&packet[1], length-2); - } -#endif -*/ + return; + } + } while (bytesRead == 1 && byte == 0x00); + } + + int nwrite, i; + for (i = 0; i < length; i += nwrite) { + nwrite = write(fd, packet + i, length - i); + if (nwrite < 0) + LOG(RSSD_LOG, LOG_ERR, "write to serial port failed\n"); + } + } // _blockine_mode + + /* + #ifdef AQ_DEBUG + // Need to take this out for release + if ( getLogLevel(RSSD_LOG) >= LOG_DEBUG) { + debuglogPacket(&packet[1], length-2); + } + #endif + */ if ( getLogLevel(RSSD_LOG) >= LOG_DEBUG_SERIAL) { // Packet is padded with 0x00, so discard for logging LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Serial write %d bytes\n",length-2); @@ -634,6 +729,7 @@ int _get_packet(int fd, unsigned char* packet, bool rawlog) while (!endOfPacket) { bytesRead = read(fd, &byte, 1); +//printf("Read %d 0x%02hhx err=%d\n",bytesRead,byte,errno); //if (bytesRead < 0 && errno == EAGAIN && packetStarted == FALSE && lastByteDLE == FALSE) { if (bytesRead < 0 && errno == EAGAIN && jandyPacketStarted == false && diff --git a/aq_serial.h b/aq_serial.h index 3eef82a..3c71d6a 100644 --- a/aq_serial.h +++ b/aq_serial.h @@ -425,7 +425,9 @@ typedef enum { int init_serial_port(const char* tty); +int init_blocking_serial_port(const char* tty); void close_serial_port(int file_descriptor); +void close_blocking_serial_port(); //#ifdef AQ_PDA //void set_pda_mode(bool mode); //bool pda_mode(); diff --git a/aqualink.h b/aqualink.h index fa17c9a..7a10793 100644 --- a/aqualink.h +++ b/aqualink.h @@ -8,7 +8,7 @@ #include "aq_programmer.h" #include "aq_panel.h" -#define DEFAULT_MG_NET_WAIT 2 +#define DEFAULT_POLL_SPEED 2 #define TIME_CHECK_INTERVAL 3600 #define ACCEPTABLE_TIME_DIFF 120 @@ -19,6 +19,10 @@ #define MAX_ZERO_READ_BEFORE_RECONNECT 10000 // 2k normally +void intHandler(int dummy); + +// There are cases where SWG will read 80% in allbutton and 0% in onetouch/aqualinktouch, this will compile that in or our +//#define READ_SWG_FROM_EXTENDED_ID //#define TOTAL_BUTTONS 12 /* diff --git a/aqualinkd.c b/aqualinkd.c index 8c58d5d..07a5753 100644 --- a/aqualinkd.c +++ b/aqualinkd.c @@ -49,29 +49,41 @@ #include "iaqtouch_aq_programmer.h" #include "version.h" #include "rs_msg_utils.h" +#include "debug_timer.h" -#ifdef AQ_DEBUG +/* +#if defined AQ_DEBUG || defined AQ_TM_DEBUG #include "timespec_subtract.h" - //#define AQ_DEBUG_TIME_ACK #endif - +*/ //#define DEFAULT_CONFIG_FILE "./aqualinkd.conf" static volatile bool _keepRunning = true; //static struct aqconfig _aqconfig_; static struct aqualinkdata _aqualink_data; -#ifdef AQ_DEBUG_TIME_ACK - struct timespec _rs_packet_readitme; + +#ifdef AQ_TM_DEBUG + //struct timespec _rs_packet_readitme; + int _rs_packet_timer; #endif + void main_loop(); void intHandler(int dummy) { _keepRunning = false; - LOG(AQUA_LOG,LOG_NOTICE, "Stopping!"); - if (dummy){}// stop compile warnings + LOG(AQUA_LOG,LOG_NOTICE, "Stopping!\n"); + //if (dummy){}// stop compile warnings + + // In blocking mode, die as cleanly as possible. + if (_aqconfig_.rs_poll_speed < 0) { + stopPacketLogger(); + // This should force port to close and do somewhat gracefull exit. + close_blocking_serial_port(); + //exit(-1); + } } void processLEDstate() @@ -307,11 +319,11 @@ void _processMessage(char *message, bool reset) _aqualink_data.frz_protect_state = OFF; if ((msg_loop & MSG_SERVICE) != MSG_SERVICE && - (msg_loop & MSG_SERVICE) != MSG_TIMEOUT ) { + (msg_loop & MSG_TIMEOUT) != MSG_TIMEOUT ) { _aqualink_data.service_mode_state = OFF; // IF we get this message then Service / Timeout is off } - if ((msg_loop & MSG_SWG_DEVICE) != MSG_SWG_DEVICE) { + if ( ((msg_loop & MSG_SWG_DEVICE) != MSG_SWG_DEVICE) && _aqualink_data.swg_led_state != LED_S_UNKNOWN) { // No Additional SWG devices messages like "no flow" if ((msg_loop & MSG_SWG) != MSG_SWG && _aqualink_data.aqbuttons[PUMP_INDEX].led->state == OFF ) setSWGdeviceStatus(&_aqualink_data, ALLBUTTON, SWG_STATUS_OFF); @@ -362,7 +374,7 @@ void _processMessage(char *message, bool reset) //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 ) { - printf("Panel size %d What the fuck am I doing here\n",PANEL_SIZE()); + //printf("Panel size %d What the fuck am I doing here\n",PANEL_SIZE()); if ((msg_loop & MSG_RS13BUTTON) != MSG_RS13BUTTON) _aqualink_data.aqbuttons[13].led->state = OFF; if ((msg_loop & MSG_RS14BUTTON) != MSG_RS14BUTTON) @@ -533,7 +545,11 @@ void _processMessage(char *message, bool reset) LOG(AQRS_LOG,LOG_NOTICE, "RS time is NOT accurate '%s %s', re-setting on controller!\n", _aqualink_data.time, _aqualink_data.date); aq_programmer(AQ_SET_TIME, NULL, &_aqualink_data); } - else + else if (_initWithRS == false || _aqconfig_.sync_panel_time == false) + { + LOG(AQRS_LOG,LOG_DEBUG, "RS time '%s %s' not checking\n", _aqualink_data.time, _aqualink_data.date); + } + else if (_initWithRS == true) { LOG(AQRS_LOG,LOG_DEBUG, "RS time is accurate '%s %s'\n", _aqualink_data.time, _aqualink_data.date); } @@ -911,6 +927,10 @@ int main(int argc, char *argv[]) _aqualink_data.num_pumps = 0; _aqualink_data.num_lights = 0; +#ifdef AQ_TM_DEBUG + addDebugLogMask(DBGT_LOG); + init_aqd_timer(); // Must clear timers. +#endif // Any debug logging masks //addDebugLogMask(IAQT_LOG); //addDebugLogMask(ONET_LOG); @@ -1002,8 +1022,8 @@ int main(int argc, char *argv[]) #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) { + 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); @@ -1100,8 +1120,28 @@ int main(int argc, char *argv[]) if (_aqconfig_.readahead_b4_write == true) LOG(AQUA_LOG,LOG_NOTICE, "Serial Read Ahead Write = %s\n", bool2text(_aqconfig_.readahead_b4_write)); - if (_aqconfig_.net_poll_wait != DEFAULT_MG_NET_WAIT) - LOG(AQUA_LOG,LOG_NOTICE, "Network Poll Speed = %d\n", _aqconfig_.net_poll_wait); + if (_aqconfig_.rs_poll_speed != DEFAULT_POLL_SPEED) + LOG(AQUA_LOG,LOG_NOTICE, "RS Poll Speed = %d\n", _aqconfig_.rs_poll_speed); + + 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); + _aqconfig_.rs_poll_speed = DEFAULT_POLL_SPEED; + } + if (_aqconfig_.rs_poll_speed < 0 && _aqconfig_.readahead_b4_write) { + LOG(AQUA_LOG,LOG_WARNING, "Serial Read Ahead Write is not valid when using Negative RS Poll Speed, turning Serial Read Ahead Write off\n"); + _aqconfig_.readahead_b4_write = false; + } + + if (_aqconfig_.rs_poll_speed < 0) { + LOG(AQUA_LOG,LOG_WARNING, "**************************************************************************************************\n"); + LOG(AQUA_LOG,LOG_WARNING, "* RS Poll Speed of %d is expermental, this put's USB in complete blocking mode *\n",_aqconfig_.rs_poll_speed); + LOG(AQUA_LOG,LOG_WARNING, "* if USB becomes unstable / connection to panel lost, AqualinkD may need to be killed manually *\n"); + LOG(AQUA_LOG,LOG_WARNING, "* eg:- sudo kill -9 *\n"); + LOG(AQUA_LOG,LOG_WARNING, "**************************************************************************************************\n"); + } //for (i = 0; i < TOTAL_BUTONS; i++) for (i = 0; i < _aqualink_data.total_buttons; i++) @@ -1162,10 +1202,12 @@ void caculate_ack_packet(int rs_fd, unsigned char *packet_buffer, emulation_type switch (source) { case ALLBUTTON: send_extended_ack(rs_fd, (packet_buffer[PKT_CMD]==CMD_MSG_LONG?ACK_SCREEN_BUSY_SCROLL:ACK_NORMAL), pop_aq_cmd(&_aqualink_data)); + //DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"AllButton Emulation type Processed packet in"); 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 @@ -1178,6 +1220,7 @@ void caculate_ack_packet(int rs_fd, unsigned char *packet_buffer, emulation_type send_jandy_command(rs_fd, cmd, size); rem_iaqt_control_cmd(cmd); } + //DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"AquaTouch Emulation type Processed packet in"); break; #endif #ifdef AQ_PDA @@ -1188,20 +1231,24 @@ void caculate_ack_packet(int rs_fd, unsigned char *packet_buffer, emulation_type } else { send_extended_ack(rs_fd, ACK_PDA, pop_aq_cmd(&_aqualink_data)); } + //DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"PDA Emulation type Processed packet in"); break; #endif default: LOG(AQUA_LOG,LOG_WARNING, "Can't caculate ACK, No idea what packet this source packet was for!\n"); + //DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"Unknown Emulation type Processed packet in"); break; } -#ifdef AQ_DEBUG_TIME_ACK +/* +#ifdef AQ_TM_DEBUG static struct timespec now; static struct timespec elapsed; clock_gettime(CLOCK_REALTIME, &now); timespec_subtract(&elapsed, &now, &_rs_packet_readitme); - LOG(AQUA_LOG,LOG_NOTICE, "Packet processed in %d.%02ld sec (%08ld ns)\n", elapsed.tv_sec, elapsed.tv_nsec / 1000000L, elapsed.tv_nsec); + LOG(AQUA_LOG,LOG_NOTICE, "Emulation type %d. Processed packet in %d.%02ld sec (%08ld ns)\n",source, elapsed.tv_sec, elapsed.tv_nsec / 1000000L, elapsed.tv_nsec); #endif +*/ } /* @@ -1364,9 +1411,18 @@ void main_loop() signal(SIGINT, intHandler); signal(SIGTERM, intHandler); + signal(SIGQUIT, intHandler); int blank_read = 0; - rs_fd = init_serial_port(_aqconfig_.serial_port); + if (_aqconfig_.rs_poll_speed < 0) + rs_fd = init_blocking_serial_port(_aqconfig_.serial_port); + else + rs_fd = init_serial_port(_aqconfig_.serial_port); + + if (rs_fd == -1) { + LOG(AQUA_LOG,LOG_ERR, "Error Aqualink setting serial port: %s\n", _aqconfig_.serial_port); + exit(EXIT_FAILURE); + } LOG(AQUA_LOG,LOG_NOTICE, "Listening to Aqualink RS8 on serial port: %s\n", _aqconfig_.serial_port); #ifdef AQ_PDA @@ -1434,11 +1490,11 @@ void main_loop() // Loop until we get the probe messages, that means we didn;t start too soon after last shutdown. while ( (got_probe == false || got_probe_extended == false ) && _keepRunning == true) { - if (blank_read == 10) { + if (blank_read == MAX_ZERO_READ_BEFORE_RECONNECT) { LOG(AQUA_LOG,LOG_ERR, "Nothing read on '%s', are you sure that's right?\n",_aqconfig_.serial_port); - } else if (blank_read == 50) { + } else if (blank_read == MAX_ZERO_READ_BEFORE_RECONNECT*2) { LOG(AQUA_LOG,LOG_ERR, "Nothing read on '%s', are you sure that's right?\n",_aqconfig_.serial_port); - } else if (blank_read == 150) { + } else if (blank_read == MAX_ZERO_READ_BEFORE_RECONNECT*3) { LOG(AQUA_LOG,LOG_ERR, "I'm done, exiting, please check '%s'\n",_aqconfig_.serial_port); return; } @@ -1484,11 +1540,11 @@ void main_loop() else if (packet_length <= 0) { blank_read++; //printf("Blank Reads %d\n",blank_read); - delay(200); + delay(2); } else if (packet_length > 0) { blank_read = 0; - if (i++ > 1000) { // 1000 packets without a probe to BOTH ID's, give up config is wrong + if (i++ > 1000) { if(!got_probe) { LOG(AQUA_LOG,LOG_ERR, "No probe on '0x%02hhx', giving up! (please check config)\n",_aqconfig_.device_id); } @@ -1499,7 +1555,8 @@ void main_loop() #endif stopPacketLogger(); close_serial_port(rs_fd); - mg_mgr_free(&mgr); + //mg_mgr_free(&mgr); + stop_net_services(&mgr); return; } } @@ -1515,14 +1572,16 @@ void main_loop() * */ +//int max_blank_read = 0; + _aqconfig_.readahead_b4_write = read_ahead; LOG(AQUA_LOG,LOG_NOTICE, "Starting communication with Control Panel\n"); int blank_read_reconnect = MAX_ZERO_READ_BEFORE_RECONNECT; // Not the best way to do this, but ok for moment - if (_aqconfig_.net_poll_wait <= 1) - blank_read_reconnect = MAX_ZERO_READ_BEFORE_RECONNECT * 10; + //if (_aqconfig_.net_poll_wait <= 1) + // blank_read_reconnect = MAX_ZERO_READ_BEFORE_RECONNECT; blank_read = 0; // OK, Now go into infinate loop @@ -1531,6 +1590,7 @@ void main_loop() //printf("%d ",blank_read); while ((rs_fd < 0 || blank_read >= blank_read_reconnect) && _keepRunning == true) { + printf("rs_fd =% d\n",rs_fd); if (rs_fd < 0) { // sleep(1); @@ -1545,8 +1605,13 @@ void main_loop() { LOG(AQUA_LOG,LOG_ERR, "Aqualink daemon looks like serial error, resetting.\n"); close_serial_port(rs_fd); + + if (_aqconfig_.rs_poll_speed < 0) + rs_fd = init_blocking_serial_port(_aqconfig_.serial_port); + else + rs_fd = init_serial_port(_aqconfig_.serial_port); } - rs_fd = init_serial_port(_aqconfig_.serial_port); + blank_read = 0; } @@ -1563,14 +1628,16 @@ void main_loop() } else if (packet_length == 0) { - //LOG(AQUA_LOG,LOG_DEBUG_SERIAL, "Nothing read on serial\n"); + //if (blank_read > max_blank_read) { + // LOG(AQUA_LOG,LOG_NOTICE, "Nothing read on serial %d\n",blank_read); + // max_blank_read = blank_read; + //} blank_read++; } else if (packet_length > 0) { -#ifdef AQ_DEBUG_TIME_ACK - clock_gettime(CLOCK_REALTIME, &_rs_packet_readitme); -#endif + DEBUG_TIMER_START(&_rs_packet_timer); + blank_read = 0; //changed = false; @@ -1586,17 +1653,21 @@ void main_loop() else #endif caculate_ack_packet(rs_fd, packet_buffer, ALLBUTTON); + + DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"AllButton Emulation Processed packet in"); } #ifdef AQ_ONETOUCH else if (packet_length > 0 && isONET_ENABLED && packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id && getProtocolType(packet_buffer) == JANDY) { _aqualink_data.updated = process_onetouch_packet(packet_buffer, packet_length, &_aqualink_data); caculate_ack_packet(rs_fd, packet_buffer, ONETOUCH); + DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"OneTouch Emulation Processed packet in"); } #endif #ifdef AQ_IAQTOUCH else if (packet_length > 0 && isIAQT_ENABLED && packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id && getProtocolType(packet_buffer) == JANDY) { _aqualink_data.updated = process_iaqtouch_packet(packet_buffer, packet_length, &_aqualink_data); caculate_ack_packet(rs_fd, packet_buffer, IAQTOUCH); + DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"AquaTouch Emulation Processed packet in"); } #endif else if (packet_length > 0 && _aqconfig_.read_all_devices == true) @@ -1644,19 +1715,24 @@ void main_loop() //broadcast_aqualinkstate(mgr.active_connections); _aqualink_data.updated = true; } - } + } + DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"Processed (readonly) packet in"); + } else { + DEBUG_TIMER_CLEAR(_rs_packet_timer); // Clear timer, no need to print anything } if (_aqualink_data.updated) { broadcast_aqualinkstate(mgr.active_connections); - _aqualink_data.updated = false; + //_aqualink_data.updated = false; } } //mg_mgr_poll(&mgr, 10); //mg_mgr_poll(&mgr, 5); - mg_mgr_poll(&mgr, packet_length>0?0:_aqconfig_.net_poll_wait); // Don;t wait if we read something. - //tcdrain(rs_fd); // Make sure buffer has been sent. + //mg_mgr_poll(&mgr, packet_length>0?0:_aqconfig_.net_poll_wait); // Don;t wait if we read something. + poll_net_services(&mgr, packet_length>0?0:_aqconfig_.rs_poll_speed); // Don;t wait if we read something. + + tcdrain(rs_fd); // Make sure buffer has been sent. //mg_mgr_poll(&mgr, 0); // Any unactioned commands @@ -1671,20 +1747,22 @@ void main_loop() } } - //tcdrain(rs_fd); // Make sure buffer has been sent. //delay(10); } //if (_aqconfig_.debug_RSProtocol_packets) stopPacketLogger(); stopPacketLogger(); + + // Stop network + stop_net_services(&mgr); + // Reset and close the port. close_serial_port(rs_fd); // Clear webbrowser - mg_mgr_free(&mgr); + //mg_mgr_free(&mgr); // NSF need to run through config memory and clean up. - LOG(AQUA_LOG,LOG_NOTICE, "Exit!\n"); exit(EXIT_FAILURE); } diff --git a/config.c b/config.c index 4a217ae..80e03ad 100644 --- a/config.c +++ b/config.c @@ -123,7 +123,8 @@ void init_parameters (struct aqconfig * parms) parms->log_raw_RS_bytes = false; parms->readahead_b4_write = false; parms->sync_panel_time = true; - parms->net_poll_wait = DEFAULT_MG_NET_WAIT; + parms->rs_poll_speed = DEFAULT_POLL_SPEED; + parms->thread_netservices = false; generate_mqtt_id(parms->mqtt_ID, MQTT_ID_LEN); } @@ -517,7 +518,14 @@ bool setConfigValue(struct aqualinkdata *aqdata, char *param, char *value) { _aqconfig_.sync_panel_time = text2bool(value); rtn=true; } else if (strncasecmp (param, "network_poll_speed", 18) == 0) { - _aqconfig_.net_poll_wait = strtoul(value, NULL, 10); + LOG(AQUA_LOG,LOG_WARNING, "Config error, 'network_poll_speed' is no longer supported, using value for 'rs_poll_speed'\n"); + _aqconfig_.rs_poll_speed = strtoul(value, NULL, 10); + rtn=true; + } else if (strncasecmp (param, "rs_poll_speed", 13) == 0) { + _aqconfig_.rs_poll_speed = strtoul(value, NULL, 10); + rtn=true; + } else if (strncasecmp (param, "thread_netservices", 18) == 0) { + _aqconfig_.thread_netservices = text2bool(value); rtn=true; } diff --git a/config.h b/config.h index c1cccc5..0547c6e 100644 --- a/config.h +++ b/config.h @@ -73,7 +73,8 @@ struct aqconfig bool readahead_b4_write; bool mqtt_timed_update; bool sync_panel_time; - int net_poll_wait; + int rs_poll_speed; + bool thread_netservices; }; #ifndef CONFIG_C diff --git a/debug_timer.c b/debug_timer.c new file mode 100644 index 0000000..de9d774 --- /dev/null +++ b/debug_timer.c @@ -0,0 +1,119 @@ + +#ifdef AQ_TM_DEBUG +#include +#include +#include "debug_timer.h" +#include "utils.h" +//#include "timespec_subtract.h" + +#define NUM_DEBUG_TIMERS 10 + +static struct timespec _start_time[NUM_DEBUG_TIMERS]; +static int _timeid=0; + +void init_aqd_timer(int *timeid) +{ + int i=0; + for(i=0; i < NUM_DEBUG_TIMERS; i++) { + _start_time[i].tv_sec = 0; + _start_time[i].tv_nsec = 0; + } +} + +void start_aqd_timer(int *id) +{ + bool maxloop=false; + // Just a sanity check, should be redundant. + if (_timeid >= NUM_DEBUG_TIMERS) + _timeid = 0; + + while (_start_time[_timeid].tv_sec != 0 && _start_time[_timeid].tv_nsec != 0) { + if (++_timeid >= NUM_DEBUG_TIMERS) { + if (maxloop) { // Means we ranover loop twice + LOG(DBGT_LOG,LOG_ERR,"Ranout of debug timers\n"); + *id = -1; + return; + } else { + _timeid = 0; + maxloop=true; + } + } + } + + clock_gettime(CLOCK_REALTIME, &_start_time[_timeid++]); + *id = _timeid-1; + //return _timeid-1; +} + +void clear_aqd_timer(int timeid) { + _start_time[timeid].tv_sec = 0; + _start_time[timeid].tv_nsec = 0; +} + +void stop_aqd_timer(int timeid, int16_t from, char *message) +{ + if (timeid < 0 || timeid >= NUM_DEBUG_TIMERS) { + LOG(from,LOG_ERR,"Invalid timeid '%d' for message '%s'\n", timeid, message); + return; + } + static struct timespec now; + static struct timespec elapsed; + clock_gettime(CLOCK_REALTIME, &now); + timespec_subtract(&elapsed, &now, &_start_time[timeid]); + //DBGT_LOG + //LOG(from,LOG_NOTICE, "%s %d.%02ld sec (%08ld ns)\n", message, elapsed.tv_sec, elapsed.tv_nsec / 1000000L, elapsed.tv_nsec); + LOG(DBGT_LOG,LOG_DEBUG, "%s %s %d.%02ld sec (%08ld ns)\n", logmask2name(from), message, elapsed.tv_sec, elapsed.tv_nsec / 1000000L, elapsed.tv_nsec); + + // We've used it so free it. + clear_aqd_timer(timeid); +} + +/* Copyright (c) 1991, 1999 Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * + * You are free to use this software under the terms of the GNU General + * Public License, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + + +/* Based on https://www.gnu.org/software/libc/manual/html_node/Elapsed-Time.html + Subtract the struct timespec values X and Y, + storing the result in RESULT. + Return 1 if the difference is negative, otherwise 0. */ + +//#include +//#include "timespec_subtract.h" + +int timespec_subtract (struct timespec *result, const struct timespec *x, + const struct timespec *y) +{ + struct timespec tmp; + + memcpy (&tmp, y, sizeof(struct timespec)); + /* Perform the carry for the later subtraction by updating y. */ + if (x->tv_nsec < tmp.tv_nsec) + { + int nsec = (tmp.tv_nsec - x->tv_nsec) / 1000000000 + 1; + tmp.tv_nsec -= 1000000000 * nsec; + tmp.tv_sec += nsec; + } + if (x->tv_nsec - tmp.tv_nsec > 1000000000) + { + int nsec = (x->tv_nsec - tmp.tv_nsec) / 1000000000; + tmp.tv_nsec += 1000000000 * nsec; + tmp.tv_sec -= nsec; + } + + /* Compute the time remaining to wait. + tv_nsec is certainly positive. */ + result->tv_sec = x->tv_sec - tmp.tv_sec; + result->tv_nsec = x->tv_nsec - tmp.tv_nsec; + + /* Return 1 if result is negative. */ + return x->tv_sec < tmp.tv_sec; +} + +#endif + diff --git a/debug_timer.h b/debug_timer.h new file mode 100644 index 0000000..a8fc3e2 --- /dev/null +++ b/debug_timer.h @@ -0,0 +1,25 @@ + +#ifndef DEBUG_TIMER_H_ +#define DEBUG_TIMER_H_ + +#ifdef AQ_TM_DEBUG +#include +#include +void init_aqd_timer(); +int timespec_subtract (struct timespec *result, const struct timespec *x, const struct timespec *y); +void stop_aqd_timer(int timeid, int16_t from, char *message); +void start_aqd_timer(int *timeid); +void clear_aqd_timer(int timeid); +#define DEBUG_TIMER_START(x) start_aqd_timer(x) +#define DEBUG_TIMER_STOP(x, y, z) stop_aqd_timer(x, y, z) +#define DEBUG_TIMER_CLEAR(x) clear_aqd_timer(x) + +//#define DEBUG_TIMER_START1() int t; start_aqd_timer(&t) +//#define DEBUG_TIMER_STOP1(y, z) stop_aqd_timer(t, y, z) +#else +#define DEBUG_TIMER_START(x) +#define DEBUG_TIMER_STOP(x, y, z) +#define DEBUG_TIMER_CLEAR(x) +#endif + +#endif //DEBUG_TIMER_H_ diff --git a/devices_jandy.c b/devices_jandy.c index afad0fa..3f4e23b 100644 --- a/devices_jandy.c +++ b/devices_jandy.c @@ -173,6 +173,8 @@ bool setSWGboost(struct aqualinkdata *aqdata, bool on) { aqdata->boost = true; aqdata->swg_percent = 101; } + + return true; } // Only change SWG percent if we are not in SWG programming diff --git a/iaqtouch.c b/iaqtouch.c index a6f0e94..d215afe 100644 --- a/iaqtouch.c +++ b/iaqtouch.c @@ -120,7 +120,7 @@ const char *iaqtGetTableInfoLine(int index) { } struct iaqt_page_button *iaqtFindButtonByIndex(int index) { - int i; + //int i; struct iaqt_page_button *buttons; // NSF Need to merge this from iaqtFindButtonByLabel function @@ -398,17 +398,7 @@ void passDeviceStatusPage(struct aqualinkdata *aq_data) pump = NULL; } - if (rsm_strcmp(_deviceStatus[i],"AQUAPURE") == 0) { - //aq_data->swg_percent = rsm_atoi(&_deviceStatus[i][9]); - if (changeSWGpercent(aq_data, rsm_atoi(&_deviceStatus[i][9]))) - LOG(IAQT_LOG,LOG_DEBUG, "Set swg %% to %d from message'%s'\n",aq_data->swg_percent,_deviceStatus[i]); - } else if (rsm_strcmp(_deviceStatus[i],"salt") == 0) { - aq_data->swg_ppm = rsm_atoi(&_deviceStatus[i][5]); - LOG(IAQT_LOG,LOG_DEBUG, "Set swg PPM to %d from message'%s'\n",aq_data->swg_ppm,_deviceStatus[i]); - } else if (rsm_strcmp(_deviceStatus[i],"Boost Pool") == 0) { - aq_data->boost = true; - // Let RS pickup time remaing message. - } else if (rsm_strcmp(_deviceStatus[i],"Chemlink") == 0) { + if (rsm_strcmp(_deviceStatus[i],"Chemlink") == 0) { /* Info: = Chemlink 1 Info: = ORP 750/PH 7.0 */ i++; @@ -423,6 +413,19 @@ void passDeviceStatusPage(struct aqualinkdata *aq_data) LOG(IAQT_LOG,LOG_INFO, "Set Cemlink ORP = %d PH = %f from message '%s'\n",orp,ph,_deviceStatus[i]); } } +#ifdef READ_SWG_FROM_EXTENDED_ID + else if (rsm_strcmp(_deviceStatus[i],"AQUAPURE") == 0) { + //aq_data->swg_percent = rsm_atoi(&_deviceStatus[i][9]); + if (changeSWGpercent(aq_data, rsm_atoi(&_deviceStatus[i][9]))) + LOG(IAQT_LOG,LOG_DEBUG, "Set swg %% to %d from message'%s'\n",aq_data->swg_percent,_deviceStatus[i]); + } else if (rsm_strcmp(_deviceStatus[i],"salt") == 0) { + aq_data->swg_ppm = rsm_atoi(&_deviceStatus[i][5]); + LOG(IAQT_LOG,LOG_DEBUG, "Set swg PPM to %d from message'%s'\n",aq_data->swg_ppm,_deviceStatus[i]); + } else if (rsm_strcmp(_deviceStatus[i],"Boost Pool") == 0) { + aq_data->boost = true; + // Let RS pickup time remaing message. + } +#endif } // for } @@ -502,12 +505,12 @@ void processPage(struct aqualinkdata *aq_data) } } - +#define REQUEST_STATUS_POLL_COUNT 50 bool process_iaqtouch_packet(unsigned char *packet, int length, struct aqualinkdata *aq_data) { static int cnt = 0; - char buff[1024]; + //char buff[1024]; if (packet[PKT_CMD] == CMD_IAQ_PAGE_START) { LOG(IAQT_LOG,LOG_DEBUG, "Turning IAQ SEND off\n"); @@ -571,20 +574,17 @@ bool process_iaqtouch_packet(unsigned char *packet, int length, struct aqualinkd // Standard ack/poll not interested in printing or kicking threads if (packet[3] == 0x30) { // Load status page every 1000 messages - //if (cnt++ > 50 && in_iaqt_programming_mode(aq_data) == false ) { - // Let's not confuse any message data, only grab status if not in any from of programming mode - /* - if (cnt++ == 50 && in_programming_mode(aq_data) == false ) { - //iaqt_queue_cmd(KEY_IAQTCH_STATUS); - //aq_programmer(AQ_GET_IAQTOUCH_VSP_ASSIGNMENT, NULL, aq_data); - //cnt = 0; - queueGetProgramData(IAQTOUCH, aq_data); - } - else*/ if (cnt++ > 100 && in_programming_mode(aq_data) == false ) { + if (cnt++ > REQUEST_STATUS_POLL_COUNT && in_programming_mode(aq_data) == false ) { iaqt_queue_cmd(KEY_IAQTCH_STATUS); //aq_programmer(AQ_GET_IAQTOUCH_VSP_ASSIGNMENT, NULL, aq_data); cnt = 0; + } else if (in_programming_mode(aq_data) == true) { + // Set count to something close to above, so we will pull latest info once programming has finished. + // This is goot for VSP GPM programming as it takes number of seconds to register once finished programming. + // -5 seems to be too quick for VSP/GPM so using 10 + cnt = REQUEST_STATUS_POLL_COUNT - 10; } + return false; } @@ -592,7 +592,7 @@ bool process_iaqtouch_packet(unsigned char *packet, int length, struct aqualinkd _lastMsgType = packet[PKT_CMD]; - debuglogPacket(IAQT_LOG ,packet, length); + //debuglogPacket(IAQT_LOG ,packet, length); //beautifyPacket(buff, packet, length); //LOG(IAQT_LOG,LOG_DEBUG, "%s", buff); diff --git a/iaqtouch_aq_programmer.c b/iaqtouch_aq_programmer.c index f27fe5d..03d031d 100644 --- a/iaqtouch_aq_programmer.c +++ b/iaqtouch_aq_programmer.c @@ -31,6 +31,7 @@ #include "aq_panel.h" #include "config.h" #include "devices_jandy.h" +#include "packetLogger.h" // System Page is obfiously fixed and not dynamic loaded, so set buttons to stop confustion. @@ -131,6 +132,14 @@ int ref_iaqt_control_cmd(unsigned char **cmd) { //printf("*********** GET READY SENDING CONTROL ****************\n"); *cmd = _iaqt_control_cmd; + + if ( getLogLevel(IAQT_LOG) >= LOG_DEBUG ) { + char buff[1000]; + //sprintf("Sending control command:") + beautifyPacket(buff, _iaqt_control_cmd, _iaqt_control_cmd_len); + LOG(IAQT_LOG,LOG_DEBUG, "iAQ Touch sending commandsed : %s\n", buff); + } + return _iaqt_control_cmd_len; } @@ -145,9 +154,12 @@ bool waitfor_iaqt_ctrl_queue2empty() int i=0; while ( (_iaqt_control_cmd_len >0 ) && ( i++ < 20) ) { + LOG(IAQT_LOG,LOG_DEBUG, "Waiting for commandset to send\n"); delay(50); } + LOG(IAQT_LOG,LOG_DEBUG, "Wait for commandset over!\n"); + if (_iaqt_control_cmd_len > 0 ) { LOG(IAQT_LOG,LOG_WARNING, "iAQ Touch Send control command Queue did not empty, timeout\n"); return false; @@ -167,11 +179,13 @@ unsigned const char waitfor_iaqt_nextPage(struct aqualinkdata *aq_data) { while( ++i <= numMessageReceived) { - LOG(IAQT_LOG,LOG_DEBUG, "waitfor_iaqt_nextPage (%d of %d)\n",i,numMessageReceived); + //LOG(IAQT_LOG,LOG_DEBUG, "waitfor_iaqt_nextPage (%d of %d)\n",i,numMessageReceived); pthread_cond_wait(&aq_data->active_thread.thread_cond, &aq_data->active_thread.thread_mutex); if(wasiaqtThreadKickTypePage()) break; } + LOG(IAQT_LOG,LOG_DEBUG, "waitfor_iaqt_nextPage finished in (%d of %d)\n",i,numMessageReceived); + pthread_mutex_unlock(&aq_data->active_thread.thread_mutex); if(wasiaqtThreadKickTypePage()) @@ -225,30 +239,32 @@ void queue_iaqt_control_command(iaqtControlCmdYype type, int num) { // Tell the control panel we are ready to send this shit. send_aqt_cmd(ACK_CMD_READY_CTRL); - + + LOG(IAQT_LOG,LOG_DEBUG, "Queued extended commandsed of length %d\n",_iaqt_control_cmd_len); //printHex(packets, 19); //printf("\n"); //send_jandy_command(NULL, packets, cnt); } -void queue_iaqt_control_command_str(iaqtControlCmdYype type, char *str) { +bool queue_iaqt_control_command_str(iaqtControlCmdYype type, char *str) { if (waitfor_iaqt_ctrl_queue2empty() == false) - return; + return false; _iaqt_control_cmd[0] = DEV_MASTER; _iaqt_control_cmd[1] = 0x24; _iaqt_control_cmd[2] = 0x31; _iaqt_control_cmd_len = char2iaqtRSset(&_iaqt_control_cmd[3], str, strlen(str)); - + // Need to bad time for some reason not yet known if (type == icct_settime) { //Debug: RS Serial: To 0x00 of type iAq pBut | HEX: 0x10|0x02|0x00|0x24|0x31|0x30|0x31|0x3a|0x30|0x31|0x00|0x30|0x32|0x00|0xcd|0xcd|0xcd|0xcd|0xcd|0xcd|0xcd|0x60|0x10|0x03| // From position 11 (8 without pre) add 0x30|0x32|0x00 - _iaqt_control_cmd[++_iaqt_control_cmd_len] = 0x30; - _iaqt_control_cmd[++_iaqt_control_cmd_len] = 0x32; - _iaqt_control_cmd[++_iaqt_control_cmd_len] = 0x00; + _iaqt_control_cmd_len += 3; + _iaqt_control_cmd[9] = 0x30; + _iaqt_control_cmd[10] = 0x32; + _iaqt_control_cmd[11] = 0x00; } // Pad with 0xcd for some reason. for(_iaqt_control_cmd_len = _iaqt_control_cmd_len+3; _iaqt_control_cmd_len <= 18; _iaqt_control_cmd_len++) @@ -256,6 +272,9 @@ void queue_iaqt_control_command_str(iaqtControlCmdYype type, char *str) { // Tell the control panel we are ready to send this shit. send_aqt_cmd(ACK_CMD_READY_CTRL); + + return true; + //debuglogPacket() } @@ -464,9 +483,11 @@ void *set_aqualink_iaqtouch_pump_rpm( void *ptr ) */ //send_aqt_cmd(0x80); - f_end: - //goto_iaqt_page(IAQ_PAGE_HOME, aq_data); + // Go to status page on startup to read devices goto_iaqt_page(IAQ_PAGE_STATUS, aq_data); + + f_end: + goto_iaqt_page(IAQ_PAGE_HOME, aq_data); cleanAndTerminateThread(threadCtrl); // just stop compiler error, ptr is not valid as it's just been freed @@ -594,6 +615,7 @@ void *get_aqualink_iaqtouch_setpoints( void *ptr ) return ptr; } +// THIS IS NOT FINISHED. void *get_aqualink_iaqtouch_aux_labels( void *ptr ) { struct programmingThreadCtrl *threadCtrl; @@ -616,6 +638,8 @@ void *get_aqualink_iaqtouch_aux_labels( void *ptr ) * Info: Table Messages 05| Aux5 Aux5 No * Info: Table Messages 06| Aux6 Aux6 No * Info: Table Messages 07| Aux7 Aux7 No + * + * Info: Table Messages ??| Aux B7 Aux B7 No */ const char *buf; int aux; @@ -624,9 +648,10 @@ void *get_aqualink_iaqtouch_aux_labels( void *ptr ) for(i=1; i < PANEL_SIZE(); i++) { buf = iaqtGetTableInfoLine(i); + LOG(IAQT_LOG,LOG_INFO, "From Messages %.2d| %s\n",i,buf); //printf("**** BUF '%s'\n",aux,buf); aux = rsm_atoi(buf + 3); - printf("**** AUX %d = '%s'\n",aux,buf + 5); + LOG(IAQT_LOG,LOG_INFO, "**** AUX %d = '%s'\n",aux,buf + 5); } f_end: @@ -915,9 +940,9 @@ void *set_aqualink_iaqtouch_time( void *ptr ) struct aqualinkdata *aq_data = threadCtrl->aq_data; struct iaqt_page_button *button; char buf[20]; - int len; + //int len; int i; - bool AM; + //bool AM; waitForSingleThreadOrTerminate(threadCtrl, AQ_SET_IAQTOUCH_SET_TIME); @@ -945,9 +970,13 @@ void *set_aqualink_iaqtouch_time( void *ptr ) send_aqt_cmd(button->keycode); waitfor_iaqt_queue2empty(); // Queue the date string - queue_iaqt_control_command_str(icct_setdate, buf); - LOG(IAQT_LOG,LOG_DEBUG, "Set date to %s\n",buf); - waitfor_iaqt_ctrl_queue2empty(); + if ( queue_iaqt_control_command_str(icct_setdate, buf)) { + LOG(IAQT_LOG,LOG_NOTICE, "Set date to %s\n",buf); + waitfor_iaqt_ctrl_queue2empty(); + } else { + LOG(IAQT_LOG,LOG_ERR, "Failed to queue commandset for setting date\n"); + } + } else { LOG(IAQT_LOG,LOG_DEBUG, "Date %s is accurate, not changing\n",button->name); } @@ -977,9 +1006,12 @@ void *set_aqualink_iaqtouch_time( void *ptr ) // Print HH:MM into string strftime(buf, 20, "%I:%M", result); - queue_iaqt_control_command_str(icct_settime, buf); - LOG(IAQT_LOG,LOG_DEBUG, "Set time to %s\n",buf); - waitfor_iaqt_ctrl_queue2empty(); + if (queue_iaqt_control_command_str(icct_settime, buf)) { + LOG(IAQT_LOG,LOG_NOTICE, "Set time to %s\n",buf); + waitfor_iaqt_ctrl_queue2empty(); + } else { + LOG(IAQT_LOG,LOG_ERR, "Failed to queue commandset for setting time\n"); + } f_end: diff --git a/net_services.c b/net_services.c index b16bd42..3209a54 100644 --- a/net_services.c +++ b/net_services.c @@ -35,19 +35,21 @@ #include "aq_mqtt.h" #include "devices_jandy.h" #include "color_lights.h" +#include "debug_timer.h" #ifdef AQ_PDA #include "pda.h" #endif -#ifdef AQ_DEBUG +/* +#if defined AQ_DEBUG || defined AQ_TM_DEBUG #include "timespec_subtract.h" - //#define AQ_NET_TIMER + //#define AQ_TM_DEBUG #endif - +*/ //static struct aqconfig *_aqconfig_; static struct aqualinkdata *_aqualink_data; -static char *_web_root; +//static char *_web_root; static int _mqtt_exit_flag = false; @@ -64,49 +66,21 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc); void reset_last_mqtt_status(); -#ifdef AQ_NET_TIMER -static struct timespec _start_time[5]; -static int _timeid=0; -void start_net_timer(int *timeid) -{ - if (_timeid >= 5) - _timeid = 0; - - clock_gettime(CLOCK_REALTIME, &_start_time[_timeid++]); - - *timeid = _timeid-1; - //return _timeid-1; -} - -void stop_net_timer(int timeid, char *message) -{ - if (timeid < 0 || timeid >= 5) { - LOG(NET_LOG,LOG_ERR,"Invalid timeid '%d' for message '%s'\n", timeid, message); - return; - } - static struct timespec now; - static struct timespec elapsed; - clock_gettime(CLOCK_REALTIME, &now); - timespec_subtract(&elapsed, &now, &_start_time[timeid]); - LOG(NET_LOG,LOG_NOTICE, "%s %d.%02ld sec (%08ld ns)\n", message, elapsed.tv_sec, elapsed.tv_nsec / 1000000L, elapsed.tv_nsec); -} - -#define DEBUG_TIMER_START(x) start_net_timer(x) -#define DEBUG_TIMER_STOP(x, y) stop_net_timer(x, y) -#else -#define DEBUG_TIMER_START(x) -#define DEBUG_TIMER_STOP(x, y) -#endif static sig_atomic_t s_signal_received = 0; //static const char *s_http_port = "8080"; static struct mg_serve_http_opts _http_server_opts; -static void signal_handler(int sig_num) { - signal(sig_num, signal_handler); // Reinstantiate signal handler - s_signal_received = sig_num; +static void net_signal_handler(int sig_num) { + + if (!_aqconfig_.thread_netservices) { + signal(sig_num, net_signal_handler); // Reinstantiate signal handler to aqualinkd.c + s_signal_received = sig_num; + } else { + intHandler(sig_num); // Force signal handler to aqualinkd.c + } } @@ -116,9 +90,11 @@ static int is_websocket(const struct mg_connection *nc) { static void set_websocket_RSraw(struct mg_connection *nc) { nc->flags |= MG_F_USER_2; } +/* static int is_websocket_RSraw(const struct mg_connection *nc) { return nc->flags & MG_F_USER_2; } +*/ static int is_mqtt(const struct mg_connection *nc) { return nc->flags & MG_F_USER_1; } @@ -135,7 +111,7 @@ static void ws_send(struct mg_connection *nc, char *msg) //LOG(NET_LOG,LOG_DEBUG, "WS: Sent %d characters '%s'\n",size, msg); } -void broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg) +void _broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg) { struct mg_connection *c; char data[JSON_STATUS_SIZE]; @@ -148,16 +124,22 @@ void broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg) // Maybe enhacment in future to sent error messages to MQTT } -void broadcast_aqualinkstate(struct mg_connection *nc) +void _broadcast_aqualinkstate(struct mg_connection *nc) { static int mqtt_count=0; struct mg_connection *c; char data[JSON_STATUS_SIZE]; +#ifdef AQ_TM_DEBUG + int tid; +#endif + DEBUG_TIMER_START(&tid); + build_aqualink_status_JSON(_aqualink_data, data, JSON_STATUS_SIZE); #ifdef AQ_MEMCMP if ( memcmp(_aqualink_data, &_last_mqtt_aqualinkdata, sizeof(struct aqualinkdata) ) == 0) { LOG(NET_LOG,LOG_NOTICE, "**********Structure buffs the same, ignoring request************\n"); + DEBUG_TIMER_CLEAR(&tid); return; } #endif @@ -185,6 +167,8 @@ void broadcast_aqualinkstate(struct mg_connection *nc) memcpy(&_last_mqtt_aqualinkdata, _aqualink_data, sizeof(struct aqualinkdata)); #endif + DEBUG_TIMER_STOP(tid, NET_LOG, "broadcast_aqualinkstate() completed, took "); + return; } @@ -678,7 +662,7 @@ void create_program_request(netRequest requester, action_type type, int value, i _aqualink_data->unactioned.type = type; _aqualink_data->unactioned.id = id; // This is only valid for pump. - if (requester = NET_MQTT) // We can get multiple MQTT requests from some, so this will wait for last one to come in. + if (requester == NET_MQTT) // We can get multiple MQTT requests from some, so this will wait for last one to come in. time(&_aqualink_data->unactioned.requested); else _aqualink_data->unactioned.requested = 0; @@ -771,7 +755,7 @@ uriAtype action_URI(netRequest from, const char *URI, int uri_length, float valu return uBad; } rtn = uActioned; - if (from = NET_MQTT) // We can get multiple MQTT requests for + if (from == NET_MQTT) // We can get multiple MQTT requests for time(&_aqualink_data->unactioned.requested); else _aqualink_data->unactioned.requested = 0; @@ -938,8 +922,12 @@ uriAtype action_URI(netRequest from, const char *URI, int uri_length, float valu return rtn; } + void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg) { char *rtnmsg; +#ifdef AQ_TM_DEBUG + int tid; +#endif //unsigned int i; //LOG(NET_LOG,LOG_DEBUG, "MQTT: topic %.*s %.2f\n",msg->topic.len, msg->topic.p, atof(msg->payload.p)); // If message doesn't end in set we don't care about it. @@ -949,6 +937,7 @@ void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg) } LOG(NET_LOG,LOG_DEBUG, "MQTT: topic %.*s %.*s\n",msg->topic.len, msg->topic.p, msg->payload.len, msg->payload.p); + DEBUG_TIMER_START(&tid); //Need to do this in a better manor, but for present it's ok. static char tmp[20]; strncpy(tmp, msg->payload.p, msg->payload.len); @@ -959,8 +948,13 @@ void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg) bool convert = (_aqualink_data->temp_units != CELSIUS && _aqconfig_.convert_mqtt_temp)?true:false; int offset = strlen(_aqconfig_.mqtt_aq_topic)+1; action_URI(NET_MQTT, &msg->topic.p[offset], msg->topic.len - offset, value, convert, &rtnmsg); + + DEBUG_TIMER_STOP(tid, NET_LOG, "action_mqtt_message() completed, took "); } + + + float pass_mg_body(struct mg_str *body) { LOG(NET_LOG,LOG_INFO, "Message body:\n'%.*s'\n", body->len, body->p); // Quick n dirty pass value from either of below. @@ -985,13 +979,12 @@ float pass_mg_body(struct mg_str *body) { void action_web_request(struct mg_connection *nc, struct http_message *http_msg) { char *msg = NULL; // struct http_message *http_msg = (struct http_message *)ev_data; -#ifdef AQ_NET_TIMER +#ifdef AQ_TM_DEBUG int tid; int tid2; #endif - DEBUG_TIMER_START(&tid); - + //DEBUG_TIMER_START(&tid); if (getLogLevel(NET_LOG) >= LOG_INFO) { // Simply for log message, check we are at // this log level before running all this // junk @@ -1001,7 +994,7 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) LOG(NET_LOG,LOG_INFO, "URI request: '%s'\n", uri); free(uri); } - DEBUG_TIMER_STOP(tid, "action_web_request debug print crap took"); + //DEBUG_TIMER_STOP(tid, NET_LOG, "action_web_request debug print crap took"); //LOG(NET_LOG,LOG_INFO, "Message request:\n'%.*s'\n", http_msg->message.len, http_msg->message.p); @@ -1009,16 +1002,18 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) if (strncmp(http_msg->uri.p, "/api", 4 ) != 0) { if (strstr(http_msg->method.p, "GET") && http_msg->query_string.len > 0) { LOG(NET_LOG,LOG_WARNING, "WEB: Old stanza, using old method to action\n"); + DEBUG_TIMER_START(&tid); OLD_action_web_request(nc, http_msg); + DEBUG_TIMER_STOP(tid, NET_LOG, "action_web_request() serve Old stanza took"); } else { DEBUG_TIMER_START(&tid); mg_serve_http(nc, http_msg, _http_server_opts); - DEBUG_TIMER_STOP(tid, "action_web_request serve file took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "action_web_request() serve file took"); } //} else if (strstr(http_msg->method.p, "PUT")) { } else { char buf[50]; - float value; + float value = 0; DEBUG_TIMER_START(&tid); // If query string. @@ -1041,35 +1036,36 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) { char message[JSON_BUFFER_SIZE]; DEBUG_TIMER_START(&tid2); - build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, false); - DEBUG_TIMER_STOP(tid2, "action_web_request build_device_JSON took"); - mg_send_head(nc, 200, strlen(message), CONTENT_JSON); - mg_send(nc, message, strlen(message)); + int size = build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, false); + DEBUG_TIMER_STOP(tid2, NET_LOG, "action_web_request() build_device_JSON took"); + mg_send_head(nc, 200, size, CONTENT_JSON); + mg_send(nc, message, size); } break; case uHomebridge: { char message[JSON_BUFFER_SIZE]; - build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, true); - mg_send_head(nc, 200, strlen(message), CONTENT_JSON); - mg_send(nc, message, strlen(message)); + int size = build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, true); + mg_send_head(nc, 200, size, CONTENT_JSON); + mg_send(nc, message, size); } break; case uStatus: { char message[JSON_BUFFER_SIZE]; DEBUG_TIMER_START(&tid2); - build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); - DEBUG_TIMER_STOP(tid2, "action_web_request build_aqualink_status_JSON took"); - mg_send_head(nc, 200, strlen(message), CONTENT_JSON); - mg_send(nc, message, strlen(message)); + int size = build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); + DEBUG_TIMER_STOP(tid2, NET_LOG, "action_web_request() build_aqualink_status_JSON took"); + mg_send_head(nc, 200, size, CONTENT_JSON); + mg_send(nc, message, size); } + break; case uDynamicconf: { char message[JSON_BUFFER_SIZE]; DEBUG_TIMER_START(&tid2); int size = build_color_lights_js(_aqualink_data, message, JSON_BUFFER_SIZE); - DEBUG_TIMER_STOP(tid2, "action_web_request build_color_lights_js took"); + DEBUG_TIMER_STOP(tid2, NET_LOG, "action_web_request() build_color_lights_js took"); mg_send_head(nc, 200, size, CONTENT_JS); mg_send(nc, message, size); } @@ -1101,12 +1097,10 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) mg_send(nc, GET_RTN_UNKNOWN, strlen(GET_RTN_UNKNOWN)); } - sprintf(buf, "action_web_request serve api request '%.*s' took",http_msg->uri.len, http_msg->uri.p); - - DEBUG_TIMER_STOP(tid, buf); + sprintf(buf, "action_web_request() request '%.*s' took",http_msg->uri.len, http_msg->uri.p); + DEBUG_TIMER_STOP(tid, NET_LOG, buf); } - } @@ -1117,7 +1111,7 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message char *uri = NULL; char *value = NULL; char *msg = NULL; -#ifdef AQ_NET_TIMER +#ifdef AQ_TM_DEBUG int tid; #endif #ifdef AQ_PDA @@ -1156,7 +1150,7 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message DEBUG_TIMER_START(&tid); char message[JSON_BUFFER_SIZE]; build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, false); - DEBUG_TIMER_STOP(tid, "action_websocket_request build_device_JSON took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "action_websocket_request() build_device_JSON took"); ws_send(nc, message); } break; @@ -1165,7 +1159,7 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message DEBUG_TIMER_START(&tid); char message[JSON_BUFFER_SIZE]; build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); - DEBUG_TIMER_STOP(tid, "action_websocket_request build_aqualink_status_JSON took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "action_websocket_request() build_aqualink_status_JSON took"); ws_send(nc, message); } break; @@ -1231,7 +1225,7 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { struct http_message *http_msg; struct websocket_message *ws_msg; char aq_topic[30]; - #ifdef AQ_NET_TIMER + #ifdef AQ_TM_DEBUG int tid; #endif //static double last_control_time; @@ -1243,7 +1237,7 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { http_msg = (struct http_message *)ev_data; DEBUG_TIMER_START(&tid); action_web_request(nc, http_msg); - DEBUG_TIMER_STOP(tid, "WEB Request took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "WEB Request action_web_request() took"); LOG(NET_LOG,LOG_DEBUG, "Served WEB request\n"); break; @@ -1257,7 +1251,7 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { ws_msg = (struct websocket_message *)ev_data; DEBUG_TIMER_START(&tid); action_websocket_request(nc, ws_msg); - DEBUG_TIMER_STOP(tid, "Websocket Request took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "Websocket Request action_websocket_request() took"); break; case MG_EV_CLOSE: @@ -1350,7 +1344,7 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { { DEBUG_TIMER_START(&tid); action_mqtt_message(nc, mqtt_msg); - DEBUG_TIMER_STOP(tid, "MQTT Request took"); + DEBUG_TIMER_STOP(tid, NET_LOG, "MQTT Request action_mqtt_message() took"); } if (_aqconfig_.mqtt_dz_sub_topic != NULL && strncmp(mqtt_msg->topic.p, _aqconfig_.mqtt_dz_sub_topic, strlen(_aqconfig_.mqtt_dz_sub_topic)) == 0) { action_domoticz_mqtt_message(nc, mqtt_msg); @@ -1386,7 +1380,7 @@ void start_mqtt(struct mg_mgr *mgr) { if (mg_connect(mgr, _aqconfig_.mqtt_server, ev_handler) == NULL) { LOG(NET_LOG,LOG_ERR, "Failed to create MQTT listener to %s\n", _aqconfig_.mqtt_server); } else { - int i; + //int i; #ifdef AQ_MEMCMP memset(&_last_mqtt_aqualinkdata, 0, sizeof (struct aqualinkdata)); #endif @@ -1397,13 +1391,13 @@ void start_mqtt(struct mg_mgr *mgr) { //bool start_web_server(struct mg_mgr *mgr, struct aqualinkdata *aqdata, char *port, char* web_root) { //bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata, struct aqconfig *aqconfig) { -bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata) { +bool _start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata) { struct mg_connection *nc; _aqualink_data = aqdata; //_aqconfig_ = aqconfig; - signal(SIGTERM, signal_handler); - signal(SIGINT, signal_handler); + signal(SIGTERM, net_signal_handler); + signal(SIGINT, net_signal_handler); setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); @@ -1440,6 +1434,119 @@ bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata) { } +/********************************************************************************************** + * Thread Net Services + * +*/ + + +pthread_t _net_thread_id; +bool _keepNetServicesRunning = true; +//volatile bool _broadcast = false; // This is redundent when most the fully threadded rather than option. + +void *net_services_thread( void *ptr ) +{ + struct aqualinkdata *aqdata = (struct aqualinkdata *) ptr; + struct mg_mgr mgr; + + _start_net_services(&mgr, aqdata); + + while (_keepNetServicesRunning == true) + { + //poll_net_services(&mgr, 10); + mg_mgr_poll(&mgr, 100); + + if (aqdata->updated == true /*|| _broadcast == true*/) { + LOG(NET_LOG,LOG_DEBUG, "********** Broadcast ************\n"); + _broadcast_aqualinkstate(mgr.active_connections); + aqdata->updated = false; + //_broadcast = false; + } + } + + LOG(NET_LOG,LOG_NOTICE, "Stopping network services thread\n"); + mg_mgr_free(&mgr); + + pthread_exit(0); +} + +bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata) +{ + if ( ! _aqconfig_.thread_netservices) { + return _start_net_services(mgr, aqdata); + } + + LOG(NET_LOG,LOG_NOTICE, "Starting network services thread\n"); + + if( pthread_create( &_net_thread_id , NULL , net_services_thread, (void*)aqdata) < 0) { + LOG(NET_LOG, LOG_ERR, "could not create network thread\n"); + return false; + } + + pthread_detach(_net_thread_id); + + return true; +} + +time_t poll_net_services(struct mg_mgr *mgr, int timeout_ms) +{ + if (timeout_ms < 0) + timeout_ms = 0; + + if ( ! _aqconfig_.thread_netservices) { + return mg_mgr_poll(mgr, timeout_ms); + } + + if (timeout_ms > 5) + delay(5); + else if (timeout_ms > 0) + delay(timeout_ms); + + //LOG(NET_LOG,LOG_NOTICE, "Poll network services\n"); + + return 0; +} + +void broadcast_aqualinkstate(struct mg_connection *nc) +{ + if ( ! _aqconfig_.thread_netservices) { + _broadcast_aqualinkstate(nc); + _aqualink_data->updated = false; + return; + } + //_broadcast = true; + //LOG(NET_LOG,LOG_NOTICE, "Broadcast status to network\n"); +} + +void broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg) +{ + if ( ! _aqconfig_.thread_netservices) { + return _broadcast_aqualinkstate_error(nc, msg); + } + + LOG(NET_LOG,LOG_NOTICE, "Broadcast error to network\n"); +} + +void stop_net_services(struct mg_mgr *mgr) { + + if ( ! _aqconfig_.thread_netservices) { + mg_mgr_free(mgr); + return; + } + + _keepNetServicesRunning = false; + + return; +} + + + + + + + + + @@ -1713,7 +1820,7 @@ LOG(NET_LOG,LOG_ERR, "WEB: spalightmode taken out for update (forgot to put it b mg_send(nc, GET_RTN_UNKNOWN, strlen(GET_RTN_UNKNOWN)); } else { - struct mg_serve_http_opts opts; + //struct mg_serve_http_opts opts; //memset(&opts, 0, sizeof(opts)); // Reset all options to defaults //opts.document_root = _web_root; // Serve files from the current directory // LOG(NET_LOG,LOG_DEBUG, "Doc root=%s\n",opts.document_root); diff --git a/net_services.h b/net_services.h index e509f0f..ea400fe 100644 --- a/net_services.h +++ b/net_services.h @@ -16,6 +16,8 @@ //bool start_web_server(struct mg_mgr *mgr, struct aqualinkdata *aqdata, char *port, char* web_root); //bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata, struct aqconfig *aqconfig); bool start_net_services(struct mg_mgr *mgr, struct aqualinkdata *aqdata); +void stop_net_services(struct mg_mgr *mgr); +time_t poll_net_services(struct mg_mgr *mgr, int timeout_ms); void broadcast_aqualinkstate(struct mg_connection *nc); void broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg); diff --git a/onetouch.c b/onetouch.c index de4f9bc..eb36e8d 100644 --- a/onetouch.c +++ b/onetouch.c @@ -124,6 +124,9 @@ void log_programming_information(struct aqualinkdata *aq_data) case OTM_SET_TEMP: log_heater_setpoints(aq_data); break; + default: + // No need to do anything yet + break; } } @@ -346,6 +349,7 @@ bool log_qeuiptment_status(struct aqualinkdata *aq_data) //printf ("Set Pump Type to %d\n",aq_data->pumps[i].pumpType); } } +#ifdef READ_SWG_FROM_EXTENDED_ID } else if (rsm_strcmp(_menu[2],"AQUAPURE") == 0) { /* Info: OneTouch Menu Line 0 = Equipment Status Info: OneTouch Menu Line 1 = @@ -367,7 +371,7 @@ bool log_qeuiptment_status(struct aqualinkdata *aq_data) } LOG(ONET_LOG,LOG_INFO, "OneTouch PPM = %d\n",ppm); } - +#endif } else if (rsm_strcmp(_menu[2],"Chemlink") == 0) { /* Info: OneTouch Menu Line 0 = Equipment Status Info: OneTouch Menu Line 1 = diff --git a/onetouch_aq_programmer.c b/onetouch_aq_programmer.c index 7a10edf..9044ded 100644 --- a/onetouch_aq_programmer.c +++ b/onetouch_aq_programmer.c @@ -767,7 +767,7 @@ void *set_aqualink_onetouch_swg_percent( void *ptr ) int diff; int i; int len; - unsigned char direction; + unsigned char direction = KEY_ONET_UP; waitForSingleThreadOrTerminate(threadCtrl, AQ_SET_ONETOUCH_SWG_PERCENT); int val = atoi((char*)threadCtrl->thread_args); @@ -808,7 +808,7 @@ void *set_aqualink_onetouch_swg_percent( void *ptr ) i=0; char *st = onetouch_menu_hlightchars(&len); LOG(ONET_LOG,LOG_DEBUG, "** OneTouch set SWG Percent highlighted='%.*s' len=%d st=%s\n", len, st, len, st); - while (len > 5 || len < 0 && i < 5) { + while (len > 5 || (len < 0 && i < 5)) { LOG(ONET_LOG,LOG_DEBUG, "** OneTouch set SWG Percent highlighted waiting again\n"); delay(50); waitForOT_MessageTypes(aq_data,CMD_PDA_HIGHLIGHTCHARS,0x00,5); // CMD_PDA_0x04 is just a packer. diff --git a/packetLogger.c b/packetLogger.c index ab36e14..996acd2 100644 --- a/packetLogger.c +++ b/packetLogger.c @@ -98,7 +98,7 @@ int _beautifyPacket(char *buff, unsigned char *packet_buffer, int packet_length, int cnt = 0; if (_includePentair) { - cnt = sprintf(buff, "%s%8.8s Packet | HEX: ",(error?"BAD PACKET ":""),getProtocolType(packet_buffer)==JANDY?"Jandy":"Pentair"); + cnt = sprintf(buff, "%s%8.8s Packet | HEX: ",(error?"BAD PACKET ":""),getProtocolType(packet_buffer)==PENTAIR?"Pentair":"Jandy"); } else { cnt = sprintf(buff, "%sTo 0x%02hhx of type %8.8s | HEX: ",(error?"BAD PACKET ":""), packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length)); } diff --git a/pda.c b/pda.c index 59409c8..3643f8d 100644 --- a/pda.c +++ b/pda.c @@ -200,7 +200,7 @@ void pass_pda_equiptment_status_item(char *msg) } else { - char labelBuff[AQ_MSGLEN + 1]; + char labelBuff[AQ_MSGLEN + 2]; strncpy(labelBuff, msg, AQ_MSGLEN + 1); msg = stripwhitespace(labelBuff); diff --git a/release/aqualinkd b/release/aqualinkd index 4f7cb9691434a60ed30d149e9f666b1bc7e8d926..20e9ae4e6075301e5620f720d828ff6ae7f6c013 100755 GIT binary patch literal 383368 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 z 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

ax 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

VlnL9hiv=H^WYXJ1|2)=?tpayr$5sljW9``W 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 T~D$43$_{`r3ZqG|mO diff --git a/release/aqualinkd.conf b/release/aqualinkd.conf index 325ad26..be5704d 100755 --- a/release/aqualinkd.conf +++ b/release/aqualinkd.conf @@ -105,14 +105,18 @@ report_zero_pool_temp = no #mqtt_dz_pub_topic = domoticz/in #mqtt_dz_sub_topic = domoticz/out #mqtt_aq_topic = aqualinkd + # MQTT will only post updated information, this option AqualinkD will re-post all MQTT information every ~5 minutes. #mqtt_timed_update = no # Please see forum for this, only set to yes when logging information to support # new devices. Inflrmation will be written to /tmp/RS485.log #debug_RSProtocol_packets = no -# Not documented, only use if asked to for problem solving purposes. + +# Not documented, or expermental. Only use if asked to for problem solving purposes. #serial_readahead_b4_write = yes +#thread_netservices = yes +#rs_poll_speed = -1 # Put AqualinkD to sleep when in PDA mode after inactivity. diff --git a/release/install.sh b/release/install.sh index c69c821..d020076 100755 --- a/release/install.sh +++ b/release/install.sh @@ -38,19 +38,42 @@ command -v systemctl >/dev/null 2>&1 || { echo "This script needs systemd's syst systemctl stop $SERVICE > /dev/null 2>&1 SERVICE_EXISTS=$(echo $?) +# Clean everything if requested. +if [ "$1" == "clean" ]; then + echo "Deleting install" + systemctl disable $SERVICE > /dev/null 2>&1 + if [ -f $BINLocation/$BIN ]; then + rm -f $BINLocation/$BIN + fi + if [ -f $SRVLocation/$SRV ]; then + rm -f $SRVLocation/$SRV + fi + if [ -f $CFGLocation/$CFG ]; then + rm -f $CFGLocation/$CFG + fi + if [ -f $DEFLocation/$DEF ]; then + rm -f $DEFLocation/$DEF + fi + if [ -d $WEBLocation ]; then + rm -rf $WEBLocation + fi + systemctl daemon-reload + exit +fi + # copy files to locations, but only copy cfg if it doesn;t already exist cp $BUILD/$BIN $BINLocation/$BIN cp $BUILD/$SRV $SRVLocation/$SRV if [ -f $CFGLocation/$CFG ]; then - echo "Config exists, did not copy new config, you may need to edit existing! $CFGLocation/$CFG" + echo "AqualinkD config exists, did not copy new config, you may need to edit existing! $CFGLocation/$CFG" else cp $BUILD/$CFG $CFGLocation/$CFG fi if [ -f $DEFLocation/$DEF ]; then - echo "Defaults exists, did not copy new defaults to $DEFLocation/$DEF" + echo "AqualinkD defaults exists, did not copy new defaults to $DEFLocation/$DEF" else cp $BUILD/$DEF.defaults $DEFLocation/$DEF fi @@ -70,7 +93,7 @@ if [ ! -d "$WEBLocation" ]; then fi if [ -f "$WEBLocation/config.js" ]; then - echo "$WEBLocation/config.js exists, did not copy overight, please make sure to update manually" + echo "AqualinkD web config exists, did not copy new config, you may need to edit existing $WEBLocation/config.js " rsync -avq --exclude='config.js' $BUILD/../web/* $WEBLocation else cp -r $BUILD/../web/* $WEBLocation @@ -83,5 +106,7 @@ systemctl daemon-reload if [ $SERVICE_EXISTS -eq 0 ]; then echo "Starting daemon $SERVICE" systemctl start $SERVICE +else + echo "Please edit $CFGLocation/$CFG, then start AqualinkD service" fi diff --git a/release/serial_logger b/release/serial_logger index 29085fb95aaf4cab075529203822f5cffbed24b7..cd0d9c5d8f1c81d2207321583453eb0e661cbdb2 100755 GIT binary patch literal 39932 zcmeIb4V;w4mG58uGB7j)G%`kllkB5{PL!7hiJ~Fez<>}zTLu*kYtJy#0~2Sa+vy&K zEE`9_ml#G##KaiP^lnJ5n{{tULJ~L8-AN>g*TpOen6SiTyQk@ZXbdJMSEI??@9%jT zp6QUy=Kk;gKc9O)K3dc{Ri~;>ojP^uR6X_d+`f4El0YC}yeDYtjj)C(0W+6)`6u`% zY^vrO%ZwrKo#q|N&%~0(#F7C!R70W=cEc!Qm7NQvf<*y^DmOnwyb633?JB$-TtVeY zwgZt11FUBSz{ zrkra9{ews4qlA^@``dq&GzFCxZ?ihu*Usu_ozck zuDI%2B^k*>JnK;%wFIRp|L2#z@%rwXmQTNEo%8f(zIplmkNW z_y^A%QsxpaBHa3;Pi^|{Q!m#&SG;9{Ip_6VXUxh?m@y~*yG{vF%u{`%(=C%pgR_e|LNjR)$Ue0lpb)sMY?|79Qg_@;?l?mY9Nr+)dt@=qVA z+upNz+$HgvFAV;}cg}2itT{hw*WE+6mOs8}G(04}@@VvJ$8UV)tbZNzyPH1#K;1u` zclt$<319i_^#?u|{yAlLP6^z!ZrQT4zx36b?XOQ?{ZG-q+PSIu$0q!}d6!H$8Ne@2kKEDsYXT_o%)zJcL*{>OcGludTq(tHA&JFtt;@ ztpYz>fp4fN|10vNw*+lHpGa>HR?yF=z|XBHKd%CBtiaz7*RzqkVbbOrv~3VcZg{`Crcd<8$v75K9i z^y@3~>niXYE9hrd)F0)L=_{+ku~H&oz{R^a0*${TERi>&cQrmd}` zC%fLHHnitVTRM~KGRb6nHr;Z`CCO~IrMaukbTxOSvmL2a#$?;qbv1XGY_7YjC9@Io z?wd`fC)cvRx!W|aO?T(at=UX>dsnVaG;O)|&Xj5ENVnW9G?#95A}ZLJ?MSZ^)?v4o z>hA7JCn0RkwWqsGt|gnwHRp2Ore%F=d$;LMHLGZAx(623p8apubf!9OHd;E;*_7$& zY|h#ZwKQi_Eu9(q(URMkNhQ~+W|gNIvo4kEX}1~a^61)b>u%4bXw{K~*ywOrcl(lS zp_I*!S7k2Uk-ja}?Npq~WvQ{Pr7PD#n;Wu_n&y_4R5q&~iW4H*PIr?n!6zZ<&LumW z+q;a-yDf|^x3y$)U1z$>rAeAAmM>elC^={5#lw&m2cF=6^1sl3lI}mMPu_%7Nb8=S zGuqq7X?6a45|vhK<3aNkSI-KWpgCQ6*qmAjWP55cx;3P~jRi2Om_@KwF~)haViwyv z#VoXzViw-1idl&36|;a&SB$}kDL#vJQZb9{JjHM{Uoi`3TrrDvgJKrrrHU~k%N0*G zCZQNPu2MX~nAM6|xYsD2V@#9c>Bh7wW|3a6xYn2s#q=wqIA}~x@oZx@D8}e+Qj8PP zt9XhrTNS_4n0pjYGG?3N(~a4#7$;+gVw{(U6klk}PQ`CCCa?HRV|FP%+n7fcTgE)5 z7$;)4;&&UfNAbIid0g@N#yp|;Tw?|lpNBuF7$@p!#VjiO6i+l}zv5BG98}C=dq^>k z%=3z8;`hX7yzp-!^I~=HlgGk^8Rc-HzdXKhf1&!sKa~%*B7pDQKlrw1whbP9^@*|v z@AJWXeee@Lc#jW$%m?rC!8?8M4j;VD2XFPkn|yH22Y2}3Rv)~^2e0zM%YATz51#LX z=lbC3K6t7RuJggQKDfpQhkfvyzd9+ySAFnHKKO_ae%=Qk^uhal@LnJMgb&{1gCFz3 zyL|9YAH2f{Z}Y)heefn9ob$mQKDgBfukpdFeDHD~+~9-f`{22Pd3xW|Up{g5j2DcR zFa6cOuNXA>d@-;+U+fs$U+y@wzih0h%I_Z(V!Icz<2q?+_lQ@&(kKPXov@}-a8o-fUa zX9ugl!JJ@w5T?DL$ro#&pQrXrq7;bbL)Edqs%F|9Wo|5DnhvY3K+|1=sz>Ed3=K^Q z0JoaP68^}PAg}=*oydn?AW!9985(-V#PX$(l`n?iyNY%eMa+vP_G6oNHvEpM%a_!j zR<+%m7~CE-U(Zdkc`D5zZ9VV=lP}EzZaTleTouii0yX*4z8dr5Xmf3;4Ia(*d}-@#17kStg*L1t4ost=Ihn5N6Ph0eS_k26#P`fPcUF2XWBe51}0k) zu6)e<;VSCiMc+n2R}1FSgx}kDX*pu%1;Vd!5}-+(p>r! zHGSn;wYB}jHoq)05%Dj+#h-Zp1ns^w26<8*GkJLFyZXz>*_O{%c9PuO*d**b>?kht>k;#+^$39h_%J_@NP;7IddQ5+L@5ILP*MHBLT!KED2g*+Y zi!Kn`GWgW2eDQ2TFt()-iiHM)u|?6Z6|69g?Uwwahw98AgJ65kD%d5?*QYm1b z**&knyc-&CJXb@ri?m(7v_{e%^5IvjPn5?Wjy&4iH`x17f4TSZ{&IB&nV{nfjXAD9 z;y*KA^2Kvm10Hh`#m6~U7lg>U=&QPWXon0Duq@4Rse>q@n84N~c>poHrnSDny)-Qh6 zGzwbiuv?{XQ#bw$^Tx3SZ&GgqJbH8L3uEm(=Fl_c^Wb~BFYi(Eenxqfl^uuK0=#&eE8kqqFs4)-(YKsvWcyQhaT)NKlGLU^6DPKo&9Cp*yBys zqQME+nJXFhAoX&B6^RmGM?8V}Mq-Qj{lraG{pGWPr=Q+mo=RKTslX`oFNhth0rz-W zPupR0ZSfk)1gwMD0s?K6=xf+IjJ#JCaZMvtE{uJRjB;UI)yQZU#vP1Q``|Gyj9VCq zxbQi^V_g`xGE(D%$GI@>Y-GF(qxg{tE=>O;Q6J4jAI)h#nn}R2wc@+l%1<0kzXuqL zskQy(#MJ)slfcT?-2A!=j|Kjk3&)_@1N`cw{&GF=7lDrfTfqO_rJ>H^-vjR_y@vEh zf%gK3fj_LcjsMdh2QYh|^0v5i>$ zTz+AH`QKf*0a$af7XDTPGiQ%?qbKh}zHP+Eem68cKg+<_D(20rCmB zjFo(tpKHD8%@@B%AD7N?`jxTEK2W~QrM(Z@!dd<0HRNxj|DNBp)0I&*GLkLIQ^(`b z&4X?;bXxa51x<~GPk^u0g^bxMMzX{Yy0We%Pj&*E5~^iAzn?lJ_qs2#M#lTfb?Axb z13u)A!`N89_yOuaNL!wr>%kw2&h9TqN%Q7+hO{tgVPD$Kq`hXHq*(_(nYy+G`pbvj z9C|SXycPISV0b)UZJ1B4-rkG8%75BR`hMzYqVA>8?*(2Byck%rk$Wu+ z56wJi=0mdsI0k$P@IAowz!w3BW1lQr@apv`F8<|b5*t$}O=lbim^3?CoZM2TNwFIjzkz|5MlX46~_D0K#~0em;{A>usoo5a@YfXPvQH#8e=;#~=N-Adj^ z5PC^pLtT5JZ6!WI*iV>y4IU(6IkfXAw~BBC`qe4}+(Ep9u#Zp+-UO}ABKA|?}Gxz@WrE# z92v(Lg)R2YW=1(Wz?curDAyQlRII<8Vl4L(CR27d2Xl`nsGIa!WFLy%UkF+c9F^UF z=g_P`$D6F}v|C`$QwL2Qbr^ibQH&?~AB~cxu@&v4p;^UA^iloPGd0S3Bl_rq!h(tU z;@|wm9ffa3cNaxlSx#lVa#8mFljCYf>rZ1T+WX|>e`oLD*q^;+@MDvqueW*G?&uc2 z#31@G+2!XAd?eL#Av{InPagX*d9}QQ(i4M5d72j{o-a+c@GG#>CjM0Uzu`OBb;J%J zyT&4IRfo~}3z3)fsUDe0&*THKhT(t3ZU2iS7W^*Md_Y&P`W1_l>Uil`5o*t@kbJh@kg9^f*V_I zJdZxiv*eT5eF)HpiQ--3saQIr*z$OBHUd8WCkxz<7O&ohl{_5Kxui8yP#MW9TW zwJ40;skWTGQ8?OI&b=}8qWI9h=&ylA^T+o^Tg%n^@dwd6jlJKV?4ypbb%1(S7CE-U zH*(+$fJeD7$7T3NPWm+9Y8O5mc#I2kM2K(X(4aH;Mh=V);2SwG$8wQzF3eFLzLAs8 z@g}~J1KVaW)?^*8GB&++SUzc@M_ z?ia_lkx9`5<++UeTzhPqik!i zY3sn#-TmKYEDo!l(bV&=)T6zh>WMHGCl)+;?7}zj8xqIZanCpw!)DWl7@}VYa-mZWy2wfFrdVAYWrCT?w&HhGL7@8#IF2HRdeQjW$RV9(xI z;uQybq{b5Gms6UMM^$X$U^u#Ukc${4+m_=Kd^N&8nzCxUOdsY)Sy##bC;VEa6-b-z zrv0OvCO^VoSCqPsyZzry-@^n$kZ-B}@QUYf$l70yNsh1de}c2j;{#Lixd^MLF-r+c z32{P`8|D$me7KjcxSn7UCj0WEE?n(P^U9c0qtV1PY2bDU$-_+Y>~Azd%(>{WW4 zHNW_o`lho1#VV(FUYzY84i^>-jxVs*Fi){NrNF?i@cnM${A;sawwv=Wb{qw4GI}2$ zUeCiP9yua<&1dyJ80#IZ9@t-2T6JNYUFVqiw!zB!#Ak5e8hoK^$~AL28^*60#as$U zPjLRQzZ`JWSTtD2^774(1>87lo!qNEH;S`NH@y{ks6RFj1(%0``vz+UdJAI;_aPhg zi8aCP(|CATIG6J~>zn2Av4Nv@U(Eip{7JPtL`>ZwX4xda+)mi*H2(Z8{pAMii#3t8 zx+!0rkoa!-y^Q%NY^>p3%zKRadNun>?`-??@H!#$BgW+V(s|fuo#|-LDI48DIo{Wl zf*17KcpN-1kT0pOr|GX($C;UD%TorPEq{W#_Mm4fdkeIz-K8+&z6)CR8%3qpo4yzH zt|pr3EC2X4dw0Xe?J%PNdEa+YS>U{hx^_7{Dc(!~d{A4M6 z7#)a_=k24rNJCXhyyH18Jq@CyyBVWb332cztBtX4WbX>TgCMyE=tsRP*Qq|a9(DPZ zT<0U#8lPNO(T*oqt$lvEzDzm4T#vi;=p12$OzFo$>UqMIsru{5^f72pCDXg8%P-T< zxOMmX>YhQJIqZ_;YT{ea7e}_nV!T}0ew%W}9qZ-3vS-4R#=4F=4k1JNo1SdXAWgD8 z`X^*tjhsFCW{__jeVuxZtFO^-m+O%6c9-u{$@X`=$C{9M4xPQ$)>-L)TO|lVuQJE$Nb|;8X`doZW7)ub(cIZaoF}Ml)oJ4S zqRIr_dfSO*C;j!_OC4TW>4Nqe^82PX!58KIdyVh>&y#x%`Dqz=IRCYw)H}~tHUql?Y2sx?Z{@E)+uvb z?*iCU9S&QI3*qS9ocTENkzZ@#TMNJ8{F(FD;+UxO9(J`o=GPW~$vb16r~E5ElYDW^ z$>CsP@u1h|Ds)A2aXIwTqky@4@b5-**F$sgZq}1t)+p*79qr>?SiX2aeb#5H^0M~q#%^M)Zc_G$BIK+6xko#8or0ArH z6-qZ23MKizhIt+&1Y*zPV?SFCqo1?sPXM_F=tosy^I%nc;ovy>!5pNFInH@DYvxMU z>gTFP4Ln<=HERs`nE10*X5hf-!GUj{5g6D!Si?H5GY8}~B}hHIw;c>yn+JOb`dFX0 z6+*FX1@Y56a8#t&?>{efQctMDs& z3w?vZ!hMD1tMbJUQTF!4BI#18H-1$)$64A|WF2E(BInZR80%RfUs4}9XFEPD3(}$k ztbOF0_{u@-LebFwfMkL!II}n$GJS&=A=gl0E9=)*+TJ=i3O{?awbkwiH;(Ln1ftst zs;hS(Zu5a3Sn4&4%He^0aU60SZ~6+o@df2TRQ+K;$L41UO0r~1iz7RHkP zQ@`DRL%%Jj-|S7;v)_Rq*TC6d-{5b4!(NI02V?hvBLn(B>i+HRKX;k!nb1o&AbY8oIg?2KV~d)JIp)T zT363x3qz#UKsQeG(Pzu!kte!;ya}H<56@A?%+GIB{4y7!<|h2U$BtFOm(3qMeaYHa zkl#C+G-I|5^Lci?<|X>Cceb(n3b#iKHlN1YSB}7|_#8vqmArldUZe0Te|7|~DpSGh zpOSA);?w`X$anLfAz$59nlAg+>)1EFM>3gwv6lCQQJszM#)kLyl_wLb^T6m#brZ5o zFu$;A0ds?V-ibQ%yPfw~oZmg8b>$yeL#nKN@jS+Tw8Bxrg_p@>PuKv(MnatM_lb_Zb5{cakElCSQ6ZY+h8G@-fhF z`~Fld?>*1O*IMqD*Lw4~%EoOwP@K+K>K$v;eeeDOd#$^%BtKMlaK^^A6o+Dy2D!o* z31G9-9^=m0+1TKD=)U&uwb4g-chz@#*!t$tU^G9Gv%4vEqy@|^vL#bOalN};SwbeP zqwg>E5sOFEvQ(AN7xnIVOuT_JmsQ1I!MA8WMSCi9fOv>lb%wg#8JKZi4VGUsI5pmKaqEbr;pm5pZFoS z-5GZI)g{g&IA>XH%NE-|C4_#6hdU{+_mz?XzTiacYk+%Cr(sh=LGg`DBuBlAXOCD~ zNi3OqJTeX;y+;>KD0Xi#6#IxR@2$}3enTz&cnBTR`X@hTGWvK2<1G1cHg)_w?CLYD z=O4BCpwGMWf$Dr;6?-?tw9@96clnXe0`m@aN{Bvi)-px!Pv_h3Yc-ym+3yzYdvsO1 zrO)Vm9{oT^uA!`WlRR}_fi<-B*VuL4*9x14LD>{z;Roqljs2-@ld*x?uWQe3)7f{Y z8q1tF6<1LQdR&xV_QLlQ?1QA&(#z9Mp_gNN@ez=-&IHa^AK@!P-x<5&xo)4)iNI#~ zRGRWFJN^A7&bFp7CdD(vl`R|Hk-`s& z90SmH6FgbwE4oJm91q`M|4KChBZp>u0!zog;&{wp|8p}CVv3lpIU=m*Le`I z{mx4L)q82xYmftV2joZ8MElDhqP+HKuf95TTyz`gUx@QJWLT<>^*?9=4}2nQ`tKA! z%gNhBP+4@b*h~2ow~0ztrlcz28lf-mh}gu5;7ueo-z?`ZaD^6=zrU zZ<2fs#?3xMt9E1Bu<=oDycM2y5OxxF5gsF0@PrQ<(Y~q|Snm#bS9Um1lPKvvaA0hr z#5=Vq-kGT0!|0uv&LZ{BBLu9oH1>T{RvG79HQ~nI`{N+_TJPd+dK{ejJ7unm$K2R^ zUtIa_w)QXCSHbH(LN)Ln;uC}c!V$uo1dDXZ+kO{-%){9HcOfIii-~m~;hpHAY>8z5 zUedhxu+u4cE3uV6?Q<+J&P6oLDSVg^tcaK^NHe31Pmn`LZd|Wg~e?f9*ad^2JvuW6LvsXF=x% z_$TL=R1flW>S1h1S6_9W?DTmNXW9qLj!aeWX(jgbwj7xw$YgJMSdN@80#|>JI{)0U ze#YbNzi6x@7CMTa>MZ8{zv9kU%vlR2{&dBlDI6$|iytWKEX}s3l85y%>{TCm_}T+~ zsaCcvapb#1k*;8{9ye!OsZHZY)R8BYgGK*2nr!-yJ(Jad&LT-K4zq6Mdms4yKiut>cTHKmNS3;4qUqbwCet;v)8Goer!=`k1x$zLmHT43&MOO z#r>bJvg~aI&k<^9bIQ3x63zD7Wozfi8}|Y@zr&Y zT6O#?1x9g)?J*1++~-G;KMTyCxxTmIU^AJ*69}emIskX(zca1l^81Xr_XNIM=$elm zm7bri{!zAyK5DLCqB5!v|2V9>ir8M+no-c)j-J(%KhAAiwm<69VDlq8sdp!5#{p;p zd|P6WIp_<3PXb4YUyb!w_2cKBVBS1}52m{( zpCUd+{7K>?3C?Vh-&cXXw$4@?@Uk!J=x-Q4o+p2RGB%(11M08FL~A+YQG5gZON9HO z3)1dGw0j5b>bxipz771Z!BvmmC#&BE|KvBmK6H@I`Pp&iV7Z&Pm6&(#$CrwpwpK^c z3)=oNWgaJ8>!AEN&8Y=h)=K#xJAtFnduyiFN^jlVLtc%U z@j@@{#aRCWKW47+&bx*=r+I--@OkkjpD|>jtefl)f7~}%!x+S{Pg+0a?<~N!)Uf7A zKLT;aim|Un#xeNkjHvt&{D-Ya%9Cr^1C#d%xb9EMchchQ0qBvp?H|YvQ|EEX@J(bc**_0|_W8JTC&!)_fegHH=g+83<{0;4 zPd}4340B^4b&8)^`|~bd3%-eQ5kLQfdQB$5T{}nr z*OM;#(d1o9EIG)xSVg_^{j=18?_3Iz*Fc?|3)pQ8QBM_gYA*(@+FwuJON^=Hbp&}y zPj?_cBN-CpKd&NQO{gc#BN$72LoLO3%F;k5t-AR$(AU(7FgLuAJ5Z`~MkM=xe z{;Pa6-Rn@_9}r)RJ+>AbiR?+gk2LRIoODexRs0bB-AVBJ^!NW8efn?zg?(D;_UR_K zPt5(uJU8tIH;obFyvXT~`s?{FGhDv>{r39Hevx}MvTIt0@)JYueLCgm38O#Q|MT$8 z{Xf6rgRz&t`@yfhJZkLSFAt3U+RGaMXZPuO^KyLig##b>+RNd;>i>Dw*#4i79y@B7 z2L1HYK^l+8X;1sX-~J+BdLX)`Fn56Vt$gvE3t3~ab)OE6FKC?_Z!Ij0qx{Zbkoy(- zUb3$|fxhV6S^LBTE7nHi3n$oP7HDF=C-TL)>TA;y-t}xR2cnAyWw(*bap^8T3Fm>o z#20y`94hWS8eXvT=y-g5?oqIn;~Yx)=D8!11^&kr)u(wW{fN5zk(sV6nLP#U!TGii zjGx~eT{!r5_OkfK_gZ@IU_E8O>tJ7XsrCUElYb8R=py->hx2Lse2rCa5lt`GQxthY!82+meyW zV6V0JW>QD&K0KpCpPPzJXh`tmE8wke;dfzI)*zns+2jSbh>lxt8O#QOgL7iJ< z^2Ns!{rHakW!-sIzcrS@L_V;LKJTLJF8Hjn^2I#u`}_O@mk0Hkz7A~d?f*7D(_w#~ z{|7YwKFc3DRiD+a{35UIVDG{5b@W~BR?~N_`(EGoxb4a>Qs1Z2NA=s2L1q6>ESmAc z8+-#Dic{CBpOgdiIoL~E?4z|0K!2tz=Z>|`sr0V-(I#|@Hl268oOzji@gKBK#eN76 zjip-Xb@r_Hf@8?rgzT7?q+MHLO`F76ho0nHoHz6x)s`oZt)@P&Ec0QCmyWMe`m&EM z9R2vPKC8`M`gw#tTJ+sA{pDZ&0v_Pe(dWC$KVi;$`Yhkg(`nfy`CImW-$Ey`JNEvB zv)*se5BXZMJ%5xg=9~-f_R(tI*>fX-yqc&po-Yn@w^Dar?J=i}+L5i&K0)KC_VJq? zp9k9zll`Im@;Kjez+bg{?}7OenXmD+p2H6G4bHc9rjPU89p%e`y?1opyx#4~p_(}@ zyN8{#^*}l=8R#1o+fKk^fc9R1-m!6H&SC0TpN-}0kL2GS`GwA13--FK^Y>sZ|2NW|6Ud;J_vG9~ zI*j9@Gn^@b#DYP|)5;+CfnTEoYf4tr^1*Y-8z1A{^T5E-5bc~mhJiS=1NdW2y#>)@ z?~j|zzB2El2S;&7O?S)#g;%NLrjnJoYEbgI3B5$e9}XnG&mR5SlHTVV&U(Ev!b9*M z7}$R_pnHI{k6nrA-Lvl3A**kNqP+w3uVlFM=J9fqW9uFcG^yU}N>#LNGJDGb?#zvs zzr}v}8S2*E1~ag?jLkca9FVKeZ3TL!u#YYOnyglzE% z)L$#HocqAnmN?5C?vKfQ?{wBI>~!xSbrtP9xdXq!_oghos6Sedq>ojxy+RyeNy&l_RB|T%Tz7*>1-R+Fk z)6Q72rkGyttiUUBKra)e^VBwHW)?bW$#z-D*d7~v3+@gmop(u*80Q_`dXEmyUgBQa z4CzQ~LH1Z<`AXRYdJDZ~bHSz^5bYZ2^}XX+|LN~D7gH8FJ;1ncQ5rC2wo(2`Bp4`^ zY+I!JptP^`O!dk))BI74gH{uj?Qr=;&-m7}7u|H`vEdG{{0`=3M0M0MALZXg86Tbb zm`uL76dSxWp*8vbLREs$w4@MVT!P#4#gDu^^x~4{-9^p-_?bKUgx<0?92tX5v~Fv? z)puH2$Cyu3bXE|5C;JP6_|tE}=yzcB8$gY@bSBf@weBp#)?@yR8P$-2H-^jD<1Qr*qDbhlN%;Fg|d{r-~GnQl$J z%PZTMX|}pko#|Z4X-8E2kl@W$efuyt%UYH0X<0v9X8CGsX-d_*?OolK%89^gP2Jkw zlA>y-uEZj1Sr=q&%`GXber4m_dGEGzX=`QUoD1hrncc5M!vbriul+^qQ=MwxtK)sm zU9B6f>lzbQD$&C)JbCHYcHP{SzOBn@aGG@LN_FL$+q*?QOm}KoIJLTh7*W=hbA6&a zy|#I6$41K`MZ}9-(I+JOVOcEfPB*u%soubKFedel zE#0Y9m$f{-uD!*RgO9$|N34EKYpHhXS|53x-zwvHN5LTXqURXQ*Ehk=ucG;zGEAv#pbMEzhM*blJ0b;`m!o* zj3ZIYnl^Xl+^pqMS?M-QzanN$n>TYFQpCEr!>O_-$yTLL!j}Dr*4kt(UA+2I%Z9BL zNW6Jn%5w0obWUPJQpU8~5;P{8>TYlD;Ah3wtz$&4o2_5V^hDZVP0M0;%;J?RuU-jk zEkf>+pS3n+b@y~x%~`8Eoz4x@Ot;$FyU~D5b9Zy6)!73G<*m%4R?BI~%J7?Q)2;T@ zr86R9sBsoEWmYb?@!H0Pv54xqI-?(CYu3c3juew7Yc+S%gBcMsW=5A)-;lP{j|^&= za%R7+29nsU?$oVTdskcfU7~HZ>RVH5d)9&QjG2+K=6CgUu1$4cX4TVO>l{kA+{{m@ z*#u)|v|IC+HIVlKu`Pn!`V>00tl_-ubj#C}&K`cKEz^;*X0&_tqQ~9Mw+S0FBa2Sk z0<{`5DHLK=Dw}iYX5~6Fv+S7<@l2|>dFsw~!=@S|6?=BO*xI^C*oS)XdT*)7xD+MLOy z=;JIaowYJpS#jEhrJZG=R$e_>4M>EK6Y)Hx#yvSrv@9zE69mT7oz7TW{K{U+R}f;wvde%_=g4($Sd4zZEn2<*X{EN4tz zt6*f>wMbo&$}MXkUce-u=ERA_3hWLx(_LO{cv)9_&Z<9uT@O~}d~B%lmv*$TTc2~_ zMTm)|&`xh$-`vHRrj7h|b=0HV;?hV-jP#t}Bg7w;{#!ZKAhlll}9Mb~R>^e$8@3&myLwy|wGS z95w+BcMSNcDz|M06EoY=-OeQJj<{HJ>%4KZ^XxLdsz%hc76awXYfsx;!P7%E;BQy7mAdJtUMXv5 zj}PjHsXwV_C;6}?+1cFDLFKzRt9Xp?IAMTbuQkoC|JpjEy-V}ZU2|@Omj*41ml7{t zcOfBNp^7JWmhe^TKM$~R$jI2sw>P@SFc*OXt6O@rE+vbp6#WEwQ4~}$J$&M zt_5zd;}`?CFSuqHX5L@wcqW$P>onX-QOlW^E=)a+Xh>Jl_D%#Q*k!)~c-q<-(^_Xt z+h|Q&dg-(kmriT6re!SnTb{ZVyNZN1Su3*Zmfz~a4V_(1;_@Xea4ekpnJ-pUg zvuZ=T6&YG=XkVQ|fZ|)X5K%}R0_V_Qu zAyC3ezs3=stJltWlRqtMyRlZn_O(uWr_-{leEut}o^*MKi54zsuo4RvUAcIbWoo}M zbbCMyy!E^#fwv^^mIU6Cz*`b{O9F36;4KNfC4sjj@RkJLlE7OMcuNBRS4v>+ncQ(E z=+VCl+`BN*u>r$91XIWFPI3pq=gAJ*e<=v`z+jj9fe2}FXYg(n4S1E&Yh2u%*WJuoF$7dZRW zW3&pL(G#+{L?woCXMDB~{a>6k+=Ep&9u!KHbQ?m4(Lkl$Hybt7a(+qiT`Psr9L z-cbzWW9)S4o|A7M)!B2v!KJ~>1$0GE$etn8@BX2!kUdkJx#HxHx9O%bcO0A>O=kTNURDZ9p{DVF`h`d!le|OL=GtTBmHp_X&+PG|&^Ncrt>q3gW`X^V= zTR!?1PC>8Vx^^C?{arp>{O)c(Z@c(ZfYw=jy9g0g286*UaY^8O=2C={{Wa`n_o9nP6snAPE}p z`QYCC;Wn|YAG>_|vy6NX_w?&&U%upX(2qm!;U2xI82@9w{;IsU&PqPKDjLSU@-bie z9Qpd)Z6dqB>YvtJ=b2=-lHuV2Gs*6c)^g_=XaB7>5BKVC_2sKRt?ABln)w<r|FZ!2!xca+$s#nOFFB>#y_T%W&K_9O2&!0Oozu?1_zoC9) z{!SmR{Dbcrng6B_SAOh*k@>59xbmOy;r4v+;mSADN0zVl;mVKuaFuWH;mYrrF|vHG z4_E%1v61;FmDrKrqr*z=$nP;9uJUWe!UMexhPRfF)~0_b@ z@;~2)E5FHytNeN&uKZpfuKas^xbi1oI*8) z1QTSw2s!kzWenXme`(0L}C8bINyQSh|NmO9=+O& z4*O58z4hV4OAT~tU-aJoMZ5QZpneb64qo}5zoi{Mza2D;%m4B}s_(nxd;X06O7tOc zZ+{aor<)?U=btG5RdAgl=n1gj(fE7&Gbru$r;qjeS7YbLe0T&$Q~pB}B&XqzO$FEA zXwm!;J{Mf_o9E*11%Hk9ls^%Fbs4zkYpa`o4fx~pPvTABZ~Evvz`aN38Xp3$dvCz( z23C7_SLA;ZT=vLv^DVZt-hRoV{m+oE{emu|tNc^W78gvoF<&BI_IN$9^1nuW!pF}) zgM0hIDEj#%rCDB=D)OzAOJsaPLw5Gb-@Q z!L`17^3KyA&F3S~s=h19f7QqTbrt1ruE6;nJF}nm^{9V;4Q~6ZB&ohW@RR*N!|VXx zga1+Ow)Z)3?-9RE&XIzhB>Zvm_p)B)fmPqXg3F)OJ#*p5!L?rUor#UlM1J0W^fWWx z{FZz_f1^0U(Eh6yI+Z^STy>R%_g)@NB}yT9P_m%aJ;aqxZU z*B&>&AKYF~UHkb3@NF{#X0Mz7EpYD<|IdNTf87PF`uPxP_)-2Z!S^$Ny!OIOM6FLv zC9=KD-lL=PgmU{c$LQ{6qfqg-u^izW1p9h6?=s6?nP=zZYER56<{ZHlGC7 z{=(z$0PXqb@8>JZ>v!F~NA2$i*ZIi_VD)Dzc z`&z~PiIT7Vq?bPpT>il}x4sy-pWk`l^H*S>-1-)S>wL(YpI3o$oBy8zmp#xU`^(?@8h%vYKY}lhoz$nNz;%AKqsEcX)8N`aV=`=cT>`%9Dt@ti=LO#U-3{)IkL=A8 z;7{QHdh+}(xXusw-Efy&mGcTSuclL0?D!vj^${dqPXJ=k~ z@w}Mn%&u$c$|>)`9ij$|vJ5oMFjJsXU^1?u2KrPi6VV;5fX?o(4G`K+Qn+1%aTyfMkQecc;P zn?80+w)S*(Zls70OG23&LE3yv(&;Z;uI*`4FKEX5IwPsCO-wS~(aLvpW>Mqys}?Pt z`R>^!+1kv6Zi(?Rp@mlr14(zZ@t0VX?iseTxpqs!$gu@0X3Tm~+U z^V!^T`-?$IiqE1tdRkN7&F|!J{t~;aK52v4Mi3J6PWI&5JF*l_b+qwy0$-4&8|n3u zl?zrZPALp7W7q3dL zTCi~W;-s<3hDGG6i@xun3g$;kvL)MN4~pr|b|#y1={A#Gmrl1{ebwSsd>WPIs~du8 zS)b0_ww_Oiv-Am zxzvW7X>Pq$m;aM|l$1?(nob1W(+(!MI9D2W^*)ps6uOdx4*v>-4Ezu7!{1^d*>|h9o+#Pc{?Xoms}4$!+YK9RA6)r!ilAw4^#68EHTq{qm-P zqimhc?ISdeuEAq^WP7>pHc8XZgZ)v=aQBcMw!V_a9z~&bK;favE8Qojyd?5qht=V*PJ>OxVfnoEzcV6bs*HsyVlkDGviv7-8IgkcfO z;8T)$i~cwkBk88e5I6!`io9;k{$ZE-nv@T#{A}A_|9PXRuax=jRFj$diFNr%Q$8w}o3drEY(Y;=#%bVnp8 z77`!Pq`gG?H7C1~FEvNZQ~J-R`i&@l*E(57nUOiROThB7D3@Mh`&r%TT)HLQVOvyt z4fL5VM{k{_&+a4k6q%=5lj>|TxoX8C&jFx*cU~kJNKtW@a~b=9Z-h&wa zRCmVAp%moXV&B!&cb1_{1nQMFaC~!u5tC=ZmeRFobnc2Fri~5`xN5{^&)%hfS z1d=3=AMy~r17tdKW~OafX4($TOu4pXrR~*z=7NcWzUZY^$PqWy^Y7gpf7u0-^pe?TGbZ;#IG8x#bPkqqdb_+pt3kkZ;74cAD32Jy1S~!tM7}z zYFG8?J=HwuygZVI;coz|8I7^tH`Sz1=8aI-njW>OeiaE`efIk=lKj~ zBB)-wADo9oZ!u;7+K)X3zZ sJAp#ik^TZf{6z`UW%1@ct@m;-Llf0~y!s}B`|08z*AI|+R43d0UmF$08~^|S literal 38960 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 B9c%yq diff --git a/serial_logger.c b/serial_logger.c index 03fbd17..80d2d58 100644 --- a/serial_logger.c +++ b/serial_logger.c @@ -73,7 +73,7 @@ bool _playback_file = false; void intHandler(int dummy) { _keepRunning = false; - logMessage(LOG_NOTICE, "Stopping!"); + LOG(RSSD_LOG, LOG_NOTICE, "Stopping!"); if (_playback_file) // If we are reading file, loop is irevelent exit(0); } @@ -320,6 +320,7 @@ int main(int argc, char *argv[]) { int logLevel = LOG_NOTICE; bool rsRawDebug = false; bool panleProbe = true; + bool rsSerialSpeedTest = false; //bool playback_file = false; //int logLevel; @@ -345,6 +346,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "\t-p (log # packets)\n"); fprintf(stderr, "\t-i (just log these ID's, can use multiple -i)\n"); fprintf(stderr, "\t-r (raw)\n"); + fprintf(stderr, "\t-s (Serial Speed Test)\n"); fprintf(stderr, "\t-rsrd (log raw RS bytes to %s)\n",RS485BYTELOGFILE); fprintf(stderr, "\nie:\t%s /dev/ttyUSB0 -d -p 1000 -i 0x08 -i 0x0a\n\n", argv[0]); return 1; @@ -372,6 +374,8 @@ int main(int argc, char *argv[]) { rsRawDebug = true; } else if (strcmp(argv[i], "-n") == 0) { panleProbe = false; + } else if (strcmp(argv[i], "-s") == 0) { + rsSerialSpeedTest = true; } } @@ -380,7 +384,7 @@ int main(int argc, char *argv[]) { if (_playback_file) { rs_fd = open(argv[1], O_RDONLY | O_NOCTTY | O_NONBLOCK | O_NDELAY); if (rs_fd < 0) { - logMessage(LOG_ERR, "Unable to open file: %s\n", argv[1]); + LOG(RSSD_LOG, LOG_ERR, "Unable to open file: %s\n", argv[1]); displayLastSystemError(argv[1]); return -1; } @@ -414,7 +418,7 @@ int main(int argc, char *argv[]) { // Nothing read } else if (packet_length > 0) { - //logMessage(LOG_DEBUG_SERIAL, "Received Packet for ID 0x%02hhx of type %s\n", packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length)); + //LOG(RSSD_LOG, LOG_DEBUG_SERIAL, "Received Packet for ID 0x%02hhx of type %s\n", packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length)); if (logLevel > LOG_NOTICE) printPacket(lastID, packet_buffer, packet_length); @@ -448,7 +452,7 @@ int main(int argc, char *argv[]) { } if (packet_buffer[PKT_DEST] == DEV_MASTER /*&& packet_buffer[PKT_CMD] == CMD_ACK*/) { - //logMessage(LOG_NOTICE, "ID is in use 0x%02hhx %x\n", lastID, lastID); + //LOG(RSSD_LOG, LOG_NOTICE, "ID is in use 0x%02hhx %x\n", lastID, lastID); for (i = 0; i <= sindex; i++) { if (slog[i].ID == lastID) { slog[i].inuse = true; @@ -477,6 +481,18 @@ int main(int argc, char *argv[]) { }*/ // NSF + // Test Serial speed & caching + if (rsSerialSpeedTest) { + if (rsRawDebug) + packet_length = get_packet_lograw(rs_fd, packet_buffer); + else + packet_length = get_packet(rs_fd, packet_buffer); + + if (packet_length > 0) { + LOG(RSSD_LOG, LOG_ERR, "SERIOUS RS485 ERROR, Slow serial port read detected, (check RS485 adapteer / os performance / USB serial speed\n"); + } + } + } if (logPackets != 0 && received_packets >= logPackets) { @@ -500,7 +516,7 @@ int main(int argc, char *argv[]) { LOG(RSSD_LOG, LOG_NOTICE, "Jandy ID's found\n"); for (i = 0; i < sindex; i++) { - //logMessage(LOG_NOTICE, "ID 0x%02hhx is %s %s\n", slog[i].ID, (slog[i].inuse == true) ? "in use" : "not used", + //LOG(RSSD_LOG, LOG_NOTICE, "ID 0x%02hhx is %s %s\n", slog[i].ID, (slog[i].inuse == true) ? "in use" : "not used", // (slog[i].inuse == false && canUse(slog[i].ID) == true)? " <-- can use for Aqualinkd" : ""); if (logLevel >= LOG_DEBUG || slog[i].inuse == true || canUse(slog[i].ID) == true) { LOG(RSSD_LOG, LOG_NOTICE, "ID 0x%02hhx is %s %s\n", slog[i].ID, (slog[i].inuse == true) ? "in use" : "not used", diff --git a/utils.c b/utils.c index b9e3c3e..7fc13df 100644 --- a/utils.c +++ b/utils.c @@ -143,7 +143,8 @@ void displayLastSystemError (const char *on_what) if (_daemonise == TRUE) { - logMessage (LOG_ERR, "%d : %s", errno, on_what); + //logMessage (LOG_ERR, "%d : %s", errno, on_what); + LOG(AQUA_LOG, LOG_ERR, "%d : %s", errno, on_what); closelog (); } } @@ -208,6 +209,43 @@ int text2elevel(char* level) return LOG_ERR; } +const char* logmask2name(int16_t from) +{ + switch (from) { + case NET_LOG: + return "NetService:"; + break; + case AQRS_LOG: + return "RS Allbtn: "; + break; + case ONET_LOG: + return "One Touch: "; + break; + case IAQT_LOG: + return "iAQ Touch: "; + break; + case PDA_LOG: + return "PDA: "; + break; + case DJAN_LOG: + return "JandyDvce: "; + break; + case DPEN_LOG: + return "PentaDvce: "; + break; + case RSSD_LOG: + return "RS Serial: "; + break; + case DBGT_LOG: + return "AQ Timing: "; + break; + case AQUA_LOG: + default: + return "AqualinkD: "; + break; + } +} + void timestamp(char* time_string) { time_t now; @@ -354,6 +392,7 @@ void addDebugLogMask(int16_t flag) void _LOG(int16_t from, int msg_level, char * message); +/* void logMessage(int msg_level, const char *format, ...) { if (msg_level > _log_level) { @@ -369,7 +408,7 @@ void logMessage(int msg_level, const char *format, ...) _LOG(AQUA_LOG, msg_level, buffer); } - +*/ void LOG(int16_t from, int msg_level, const char * format, ...) { @@ -388,7 +427,7 @@ void LOG(int16_t from, int msg_level, const char * format, ...) } -void _LOG(int16_t from, int msg_level, char * message) +void _LOG(int16_t from, int msg_level, char *message) { int i; @@ -404,36 +443,9 @@ void _LOG(int16_t from, int msg_level, char * message) message[i+1] = '\0'; } - switch (from) { - case NET_LOG: - strncpy(&message[9], "NetService:", 11); - break; - case AQRS_LOG: - strncpy(&message[9], "RS Allbtn: ", 11); - break; - case ONET_LOG: - strncpy(&message[9], "One Touch: ", 11); - break; - case IAQT_LOG: - strncpy(&message[9], "iAQ Touch: ", 11); - break; - case PDA_LOG: - strncpy(&message[9], "PDA: ", 11); - break; - case DJAN_LOG: - strncpy(&message[9], "JandyDvce: ", 11); - break; - case DPEN_LOG: - strncpy(&message[9], "PentaDvce: ", 11); - break; - case RSSD_LOG: - strncpy(&message[9], "RS Serial: ", 11); - break; - case AQUA_LOG: - default: - strncpy(&message[9], "AqualinkD: ", 11); - break; - } + //strncpy(&message[9], logmask2name(from), 11); // Will give compiller warning as doesn;t realise we are copying into middle of string. + memcpy(&message[9], logmask2name(from), 11); + // Logging has not been setup yet, so STD error & syslog if (_log_level == -1) { fprintf (stderr, message); @@ -512,7 +524,7 @@ void daemonise (char *pidFile, void (*main_function) (void)) /* Check we are root */ if (getuid() != 0) { - logMessage(LOG_ERR,"Can only be run as root\n"); + LOG(AQUA_LOG, LOG_ERR,"Can only be run as root\n"); exit(EXIT_FAILURE); } @@ -523,7 +535,7 @@ void daemonise (char *pidFile, void (*main_function) (void)) //if (EWOULDBLOCK == errno) //; // another instance is running //fputs ("\nAnother instance is already running\n", stderr); - logMessage(LOG_ERR,"\nAnother instance is already running\n"); + LOG(AQUA_LOG, LOG_ERR,"\nAnother instance is already running\n"); exit (EXIT_FAILURE); } @@ -541,12 +553,12 @@ void daemonise (char *pidFile, void (*main_function) (void)) fp = fopen (pidFile, "w"); if (fp == NULL) - logMessage(LOG_ERR,"can't write to PID file %s",pidFile); + LOG(AQUA_LOG, LOG_ERR,"can't write to PID file %s",pidFile); else fprintf(fp, "%d", process_id); fclose (fp); - logMessage (LOG_DEBUG, "process_id of child process %d \n", process_id); + LOG(AQUA_LOG, LOG_DEBUG, "process_id of child process %d \n", process_id); // return success in exit status exit (EXIT_SUCCESS); } diff --git a/utils.h b/utils.h index 1fa06ed..2457060 100644 --- a/utils.h +++ b/utils.h @@ -35,6 +35,8 @@ #define DPEN_LOG (1 << 7) // Pentair Device // misc #define RSSD_LOG (1 << 8) // Serial +#define PROG_LOG (1 << 9) // Programmer +#define DBGT_LOG (1 << 10) // Debug Timer /* typedef enum { @@ -51,7 +53,11 @@ void displayLastSystemError (const char *on_what); void addDebugLogMask(int16_t flag); //#define logMessage(msg_level, format, ...) LOG (1, msg_level, format, ##__VA_ARGS__) -void logMessage(int level, const char *format, ...); + + +//void logMessage(int level, const char *format, ...); + + //void LOG(int from, int level, char *format, ...); void LOG(int16_t from, int msg_level, const char *format, ...); @@ -82,6 +88,7 @@ void stopInlineDebug(); void cleanInlineDebug(); char *getInlineLogFName(); bool islogFileReady(); +const char *logmask2name(int16_t from); //#ifndef _UTILS_C_ extern bool _daemon_; diff --git a/version.h b/version.h index 3c031e2..3f03cd5 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ #define AQUALINKD_NAME "Aqualink Daemon" -#define AQUALINKD_VERSION "2.2.0b" +#define AQUALINKD_VERSION "2.2.0c" diff --git a/web/controller.html b/web/controller.html index 6309505..7047848 100644 --- a/web/controller.html +++ b/web/controller.html @@ -1485,6 +1485,8 @@ get_devices(); // Set another load 1 minute from now just incase the server hasn't got all the devices yet window.setTimeout(get_devices, (60 * 1000)); + // Get Status just incase control panel hasn't connected yet + get_status(); } socket_di.onmessage = function got_packet(msg) { document.getElementById("header").classList.remove("error"); @@ -1523,6 +1525,17 @@ socket_di.send(JSON.stringify(msg)); } + function get_status() { + /* + var msg = { + command: "GET_DEVICES" + };*/ + var msg = { + uri: "status" + }; + socket_di.send(JSON.stringify(msg)); + } + function send_command(cmd, value=null) { var _cmd = {}; _cmd.command = cmd; diff --git a/web/simple.html b/web/simple.html index f4c05dd..599c8ce 100644 --- a/web/simple.html +++ b/web/simple.html @@ -278,7 +278,7 @@ for (var obj in data['devices']) { if (document.getElementById(data['devices'][obj].id) == null) { _displayNames[data['devices'][obj].id.replace("Aux_", "AUX")] = data['devices'][obj].name; - //console.log("Create " + data['devices'][obj].id); + console.log("Create " + data['devices'][obj].id); createTile(data['devices'][obj]); } } @@ -321,6 +321,10 @@ function createTile(object) { if (object.name == 'NONE') return; + + if (typeof devices !== 'undefined' && devices.indexOf(object.id) < 0) { + return; + } //if (ignore_devices.indexOf(object.id) >= 0) // return; var table = document.getElementById("deviceList"); @@ -339,13 +343,14 @@ cell3.setAttribute('align', 'right'); //cell3.setAttribute('cellpadding', '0'); cell4.setAttribute('align', 'right'); - if (object.type == 'switch') { + if (object.type == 'switch' /*&& object.type_ext != "switch_program"*/) { row.deleteCell(2); row.deleteCell(1); cell1.setAttribute('colspan', '3'); cell4.innerHTML = "

"; setButton(object.id, object.state); - } else if (object.type == 'switch_program') { + /* //Removing light program, too much for simple interface + } else if (object.type == 'switch' && object.type_ext == 'switch_program') { row.deleteCell(2); cell2.setAttribute('colspan', '2'); //cell2.setAttribute('width', '100%'); @@ -364,6 +369,7 @@ } } catch (e) {} setButton(object.id, object.state); + */ } else if (object.type == 'value') { row.deleteCell(2); row.deleteCell(1); @@ -414,19 +420,29 @@ switch (source.getAttribute("type")) { case "range": - cmd.parameter = source.id.substr(7); // remove 'slider_' - cmd.value = source.value; + if ( source.id.includes("SWG") ) { + cmd.uri = source.id.substr(7)+"/percent/set"; + cmd.value = source.value; + } else { + cmd.uri = source.id.substr(7)+"/setpoint/set"; + //cmd.parameter = source.id.substr(7); // remove 'slider_' + cmd.value = source.value; + } break; case "checkbox": + cmd.uri = source.id.substr(7)+"/set"; + cmd.value = source.checked?"1":"0"; //name = source.id.substr(11); //remove 'btn-toggle-'' //state = source.checked?"on":"off"; - cmd.command = source.id.substr(7); + //cmd.command = source.id.substr(7); break; default: // type is null because it's a selector + cmd.uri = source.id.substr(9)+"/program/set"; + cmd.button = source.id.substr(9); //name = source.id.substr(9); //remove 'selector_'' - cmd.parameter = 'LIGHT_MODE'; + //cmd.parameter = 'LIGHT_MODE'; cmd.value = source.value; - cmd.button = source.id.substr(9); // remove 'selector_' + //cmd.button = source.id.substr(9); // remove 'selector_' break; } //console.log(source); @@ -564,7 +580,8 @@ function get_devices() { var msg = { - command: "GET_DEVICES" + //command: "GET_DEVICES" + uri: "devices" }; socket_di.send(JSON.stringify(msg)); }