From 78fe018e70c16da41f480563d90fbe7226c422e6 Mon Sep 17 00:00:00 2001 From: sfeakes Date: Mon, 19 Jun 2023 19:15:45 -0500 Subject: [PATCH] Release 2.3.1 --- Makefile | 230 ++++++++++++- README.md | 8 +- aq_serial.c | 35 +- aqualinkd.c | 32 +- config.c | 2 + iaqtouch.c | 9 +- iaqtouch.h | 2 + json_messages.c | 63 +++- json_messages.h | 1 + net_services.c | 756 ++++++------------------------------------ net_services.h | 2 +- onetouch.c | 8 +- onetouch.h | 2 +- release/aqualinkd | Bin 429204 -> 425292 bytes release/serial_logger | Bin 45432 -> 46204 bytes serial_logger.c | 173 ++++++++-- serial_logger.h | 16 + serialadapter.c | 29 +- utils.c | 83 +++-- utils.h | 26 +- version.h | 2 +- web/controller.html | 3 +- 22 files changed, 740 insertions(+), 742 deletions(-) create mode 100644 serial_logger.h diff --git a/Makefile b/Makefile index cbd0e29..e597f6a 100755 --- a/Makefile +++ b/Makefile @@ -1,3 +1,211 @@ +# +# 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_RS16 = true +AQ_PDA = true +AQ_ONETOUCH = true +AQ_IAQTOUCH = true +#AQ_MEMCMP = true // Not implimented correctly yet. + +# Turn off threadded net services +AQ_NO_THREAD_NETSERVICE = false + +# define the C compiler to use +CC = gcc + +#LIBS := -lpthread -lm +LIBS := -l pthread -l m +#LIBS := -l pthread -l m -static # Take out -static, just for dev + +# Standard compile flags +GCCFLAGS = -Wall -O3 +#GCCFLAGS = -O3 +#GCCFLAGS = -Wall -O3 -Wextra +#GCCFLAGS = -Wl,--gc-sections,--print-gc-sections +#GCCFLAGS = -Wall -O3 -ffunction-sections -fdata-sections + +# 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 +# Mongoose 6.18 flags +MGFLAGS = -D MG_ENABLE_HTTP_SSI=0 -D MG_ENABLE_DIRECTORY_LISTING=0 -D MG_ENABLE_HTTP_CGI=0 +#MGFLAGS = + +# Detect OS and set some specifics +ifeq ($(OS),Windows_NT) + # Windows Make. + RM = del /Q + MKDIR = mkdir + FixPath = $(subst /,\,$1) +else + UNAME_S := $(shell uname -s) + # Linux + ifeq ($(UNAME_S),Linux) + RM = rm -f + MKDIR = mkdir -p + FixPath = $1 + # 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 build with: $(GLIBC_VERSION) ) + $(info GLIBC Prefered : 2.24-11+deb9u1 2.24 ) + endif + # OSX + ifeq ($(UNAME_S),Darwin) + endif +endif + + +# Main source files +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 serialadapter.c aq_timer.c aq_scheduler.c web_config.c\ + mongoose.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 + AQ_FLAGS := $(AQ_FLAGS) -D AQ_PDA +endif + +ifeq ($(AQ_ONETOUCH), true) + SRCS := $(SRCS) onetouch.c onetouch_aq_programmer.c + AQ_FLAGS := $(AQ_FLAGS) -D AQ_ONETOUCH +endif + +ifeq ($(AQ_IAQTOUCH), true) + SRCS := $(SRCS) iaqtouch.c iaqtouch_aq_programmer.c + AQ_FLAGS := $(AQ_FLAGS) -D AQ_IAQTOUCH +endif + +ifeq ($(AQ_RS16), true) + AQ_FLAGS := $(AQ_FLAGS) -D AQ_RS16 +endif + +ifeq ($(AQ_MEMCMP), true) + AQ_FLAGS := $(AQ_FLAGS) -D AQ_MEMCMP +endif + +ifeq ($(AQ_NO_THREAD_NETSERVICE), true) + AQ_FLAGS := $(AQ_FLAGS) -D AQ_NO_THREAD_NETSERVICE +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 = $(SRCS) debug_timer.c +SL_SRC = serial_logger.c aq_serial.c utils.c packetLogger.c rs_msg_utils.c + +# Build durectories +OBJ_DIR := ./build +DBG_OBJ_DIR := $(OBJ_DIR)/debug +SL_OBJ_DIR := $(OBJ_DIR)/slog + +# Object files +OBJ_FILES := $(patsubst %.c,$(OBJ_DIR)/%.o,$(SRCS)) +DBG_OBJ_FILES := $(patsubst %.c,$(DBG_OBJ_DIR)/%.o,$(DBG_SRC)) +SL_OBJ_FILES := $(patsubst %.c,$(SL_OBJ_DIR)/%.o,$(SL_SRC)) + + +# define the executable file +MAIN = ./release/aqualinkd +SLOG = ./release/serial_logger +DEBG = ./release/aqualinkd-debug +#LOGR = ./release/log_reader +#PLAY = ./release/aqualinkd-player + + +# Rules to pass to make. +all: $(MAIN) $(SLOG) + $(info $(MAIN) has been compiled) + $(info $(SLOG) has been compiled) + +slog: $(SLOG) + $(info $(SLOG) has been compiled) + +aqdebug: $(DEBG) + $(info $(DEBG) has been compiled) + +#debug, Just change compile flags and call MAIN +debug: CFLAGS = $(DFLAGS) +debug: $(MAIN) $(SLOG) + $(info $(MAIN) has been compiled (** DEBUG **)) + $(info $(SLOG) has been compiled (** DEBUG **)) + +install: $(MAIN) + ./release/install.sh + + +# Rules to compile +$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR) + $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< + +$(DBG_OBJ_DIR)/%.o: %.c | $(DBG_OBJ_DIR) + $(CC) $(DBG_CFLAGS) $(INCLUDES) -c -o $@ $< + +$(SL_OBJ_DIR)/%.o: %.c | $(SL_OBJ_DIR) + $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< + +# Rules to link +$(MAIN): $(OBJ_FILES) + $(CC) $(CFLAGS) $(INCLUDES) $(LIBS) -o $@ $^ + +$(DEBG): $(DBG_OBJ_FILES) + $(CC) $(DBG_CFLAGS) $(INCLUDES) $(LIBS) -o $@ $^ + +$(SLOG): CFLAGS := $(CFLAGS) -D SERIAL_LOGGER +$(SLOG): $(SL_OBJ_FILES) + $(CC) $(CFLAGS) $(INCLUDES) $(LIBS) -o $@ $^ + +# Rules to make object directories. +$(OBJ_DIR): + $(MKDIR) $@ + +$(SL_OBJ_DIR): + $(MKDIR) $@ + +$(DBG_OBJ_DIR): + $(MKDIR) $@ + + +# Clean rules +.PHONY: clean +clean: + $(RM) *.o *~ $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) $(DEBG) + $(RM) $(wildcard *.o) $(wildcard *~) $(OBJ_FILES) $(DBG_OBJ_FILES) $(SL_OBJ_FILES) $(MAIN) $(MAIN_U) $(PLAY) $(PL_EXOBJ) $(LOGR) $(PLAY) $(DEBG) + + + + + +define DO_NOT_USE + +# OLD MAKEFILE, STILL NEED TO MOVE THE BELOW OVER TO NEW Makefile +LOGR = ./release/log_reader +PLAY = ./release/aqualinkd-player + + + # # Options # @@ -48,7 +256,9 @@ DGCCFLAGS = -Wall -O0 -g 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 +#MGFLAGS = -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC +# Mongoose 6.18 flags +MGFLAGS = -D MG_ENABLE_HTTP_SSI=0 -D MG_ENABLE_DIRECTORY_LISTING=0 -D MG_ENABLE_HTTP_CGI=0 #MGFLAGS = # define the C source files @@ -56,7 +266,8 @@ MGFLAGS = -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D # pda_aq_programmer.c devices_jandy.c onetouch.c onetouch_aq_programmer.c packetLogger.c devices_pentair.c color_lights.c mongoose.c 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 serialadapter.c aq_timer.c aq_scheduler.c web_config.c mongoose.c + devices_jandy.c packetLogger.c devices_pentair.c color_lights.c serialadapter.c aq_timer.c aq_scheduler.c web_config.c\ + mongoose.c AQ_FLAGS = @@ -110,6 +321,7 @@ SL_OBJS = $(SL_SRC:.c=.o) LR_OBJS = $(LR_SRC:.c=.o) PL_OBJS = $(PL_SRC:.c=.o) + # define the executable file MAIN = ./release/aqualinkd SLOG = ./release/serial_logger @@ -117,8 +329,10 @@ LOGR = ./release/log_reader PLAY = ./release/aqualinkd-player DEBG = ./release/aqualinkd-debug -all: $(MAIN) + +all: $(MAIN) $(SLOG) $(info $(MAIN) has been compiled) + $(info $(SLOG) has been compiled) # debug, Just change compile flags and call MAIN debug: CFLAGS = $(DFLAGS) @@ -134,7 +348,8 @@ slog: $(SLOG) $(SLOG): CFLAGS := $(CFLAGS) -D SERIAL_LOGGER $(SLOG): $(SL_OBJS) - $(CC) $(CFLAGS) $(INCLUDES) -o $(SLOG) $(SL_OBJS) +# $(CC) $(CFLAGS) $(INCLUDES) -o $(SLOG) $(SL_OBJS) + $(CC) $(INCLUDES) -o $(SLOG) $(SL_OBJS) #.PHONY: clean_slog_o @@ -181,7 +396,8 @@ git: clean $(MAIN) $(SLOG) # the rule(a .c file) and $@: the name of the target of the rule (a .o file) # (see the gnu make manual section about automatic variables) .c.o: - $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + .PHONY: clean clean: @@ -194,3 +410,7 @@ depend: $(SRCS) install: $(MAIN) ./release/install.sh + + +endef + diff --git a/README.md b/README.md index 32571c7..87d5891 100644 --- a/README.md +++ b/README.md @@ -78,11 +78,9 @@ Designed to mimic AqualinkRS6 All Button keypad and (like the keypad) is used to * Allow selecting of pre-defined VSP programs (Aqualink Touch & OneTouch protocols.) * Add set time to OneTouch protocol. -# Update in Release 2.3.0f (pre release) -* This is pre-release, please treat it as such. -* Proceed with caution on PDA panels I have not been able to test it fully on all variants and you may need to go back to your current (or previous) version of AqualinkD +# Update in Release 2.3.1 * Changed a lot of logic around different protocols. -* Added low latency support for ITDI usb driver. +* Added low latency support for FTDI usb driver. * AqualinkD will find out the fastest way to change something depending on the protocols available. * Added scheduler (click time in web ui). supports full calendar year (ie seasons), See wiki for details. * Added timers for devices (ie can turn on Pump for x minutes), Long press on device in WebUI. @@ -97,6 +95,8 @@ Designed to mimic AqualinkRS6 All Button keypad and (like the keypad) is used to * Fix bug in IntelliBrite color lights * Install script checks for cron and it's config (needed for scheduler) * serial-logger will now give recommended values for aqualinkd.conf +* Lock the serial port to stop duplicate process conflict. +* Lots of code cleanup & modifying ready for AqualinkD Management console in a future release. # Update in Release 2.2.2 * Fixed some Web UI bugs diff --git a/aq_serial.c b/aq_serial.c index 2cc7af2..fdcbc93 100644 --- a/aq_serial.c +++ b/aq_serial.c @@ -368,6 +368,33 @@ int set_port_low_latency(int fd, const char* tty) return 0; } +#include + +int lock_port(int fd, const char* tty) +{ + if (ioctl (fd, TIOCEXCL) < 0) { + LOG(RSSD_LOG,LOG_ERR, "Can't put (%s) into exclusive mode (%d): %s\n", tty,errno, strerror( errno )); + return -1; + } + + if (flock(fd, LOCK_EX | LOCK_NB) < 0) { + LOG(RSSD_LOG,LOG_ERR, "Can't lock (%s) (%d): %s\n", tty,errno, strerror( errno )); + return -1; + } + + return 0; +} + +int unlock_port(int fd) +{ + if (flock(fd, LOCK_UN) < 0) { + LOG(RSSD_LOG,LOG_ERR, "Can't unlock serial port (%d): %s\n",errno, strerror( errno )); + return -1; + } + return 0; +} + + // https://www.cmrr.umn.edu/~strupp/serial.html#2_5_2 // http://unixwiz.net/techtips/termios-vmin-vtime.html //#define OLD_SERIAL_INIT @@ -396,6 +423,11 @@ int _init_serial_port(const char* tty, bool blocking, bool readahead) return -1; } + if ( lock_port(fd, tty) < 0) { + //LOG(RSSD_LOG,LOG_ERR, "Unable to lock port: %s, error %d\n", tty, errno); + return -1; + } + if (_aqconfig_.ftdi_low_latency) set_port_low_latency(fd, tty); @@ -448,7 +480,7 @@ int _init_serial_port(const char* tty, bool blocking, bool readahead) return -1; } - LOG(RSSD_LOG,LOG_INFO, "Set serial port %s I/O %s attributes\n",tty,_blocking_mode?"blocking":"non blocking"); + LOG(RSSD_LOG,LOG_INFO, "Port %s set I/O %s attributes\n",tty,_blocking_mode?"blocking":"non blocking"); return fd; } @@ -520,6 +552,7 @@ void close_blocking_serial_port() /* close tty port */ void close_serial_port(int fd) { + unlock_port(fd); tcsetattr(fd, TCSANOW, &_oldtio); close(fd); LOG(RSSD_LOG,LOG_DEBUG_SERIAL, "Closed serial port\n"); diff --git a/aqualinkd.c b/aqualinkd.c index 4a159a6..043db2c 100644 --- a/aqualinkd.c +++ b/aqualinkd.c @@ -87,7 +87,18 @@ void intHandler(int sig_num) _keepRunning = false; if (sig_num == SIGRESTART) { - _restart = true; + // If we are deamonized, we need to use the system + if (_aqconfig_.deamonize) { + if(fork() == 0) { + sleep(2); + char *newargv[] = {"/bin/systemctl", "restart", "aqualinkd", NULL}; + char *newenviron[] = { NULL }; + execve(newargv[0], newargv, newenviron); + exit (EXIT_SUCCESS); + } + } else { + _restart = true; + } } //LOG(AQUA_LOG,LOG_NOTICE, "Stopping!\n"); //if (dummy){}// stop compile warnings @@ -1128,6 +1139,7 @@ int startup(char *self, char *cfgFile) _cfgFile = cfgFile; //initButtons(&_aqualink_data); + clearDebugLogMask(); read_config(&_aqualink_data, cfgFile); // Sanity check on Device ID's against panel type @@ -1791,8 +1803,14 @@ void main_loop() logPacketRead(packet_buffer, packet_length); } - if (!_aqconfig_.prioritize_ack) + if (!_aqconfig_.prioritize_ack) { _aqualink_data.updated = process_packet(packet_buffer, packet_length); + } else { + // If we did not process the packet, above we need to record it for the caculate_ack_packet call. + // Should find a better place to put this, but since prioritize_ack is expermental it's ok for now. + // NSF The exact same needs to be done for onetouch / iaqtouch and probably rssaadapter. + _aqualink_data.last_packet_type = packet_buffer[PKT_CMD]; + } #ifdef AQ_PDA if (isPDA_PANEL) caculate_ack_packet(rs_fd, packet_buffer, AQUAPDA); @@ -1807,17 +1825,18 @@ void main_loop() } else if (packet_length > 0 && isRSSA_ENABLED && packet_buffer[PKT_DEST] == _aqconfig_.rssa_device_id && getProtocolType(packet_buffer) == JANDY) { if (_aqconfig_.prioritize_ack) { - _aqualink_data.updated = process_rssadapter_packet(packet_buffer, packet_length, &_aqualink_data); caculate_ack_packet(rs_fd, packet_buffer, RSSADAPTER); + _aqualink_data.updated = process_rssadapter_packet(packet_buffer, packet_length, &_aqualink_data); } else { - caculate_ack_packet(rs_fd, packet_buffer, RSSADAPTER); _aqualink_data.updated = process_rssadapter_packet(packet_buffer, packet_length, &_aqualink_data); + caculate_ack_packet(rs_fd, packet_buffer, RSSADAPTER); } DEBUG_TIMER_STOP(_rs_packet_timer,AQUA_LOG,"SerialAdapter 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) { if (_aqconfig_.prioritize_ack) { + set_onetouch_lastmsg(packet_buffer[PKT_CMD]); caculate_ack_packet(rs_fd, packet_buffer, ONETOUCH); _aqualink_data.updated = process_onetouch_packet(packet_buffer, packet_length, &_aqualink_data); } else { @@ -1830,8 +1849,9 @@ void main_loop() #ifdef AQ_IAQTOUCH else if (packet_length > 0 && isIAQT_ENABLED && packet_buffer[PKT_DEST] == _aqconfig_.extended_device_id && getProtocolType(packet_buffer) == JANDY) { if (_aqconfig_.prioritize_ack) { - caculate_ack_packet(rs_fd, packet_buffer, IAQTOUCH); - _aqualink_data.updated = process_iaqtouch_packet(packet_buffer, packet_length, &_aqualink_data); + set_iaqtouch_lastmsg(packet_buffer[PKT_CMD]); + caculate_ack_packet(rs_fd, packet_buffer, IAQTOUCH); + _aqualink_data.updated = process_iaqtouch_packet(packet_buffer, packet_length, &_aqualink_data); } else { _aqualink_data.updated = process_iaqtouch_packet(packet_buffer, packet_length, &_aqualink_data); caculate_ack_packet(rs_fd, packet_buffer, IAQTOUCH); diff --git a/config.c b/config.c index 35bf78d..4569250 100644 --- a/config.c +++ b/config.c @@ -69,6 +69,8 @@ void init_parameters (struct aqconfig * parms) _tmpPanel->combo = true; _tmpPanel->dual = false; + clearDebugLogMask(); + //int i; //char *p; //parms->rs_panel_size = 8; diff --git a/iaqtouch.c b/iaqtouch.c index 220274e..7b17c31 100644 --- a/iaqtouch.c +++ b/iaqtouch.c @@ -83,6 +83,11 @@ unsigned char iaqtLastMsg() return _lastMsgType; } +void set_iaqtouch_lastmsg(unsigned char msgtype) +{ + _lastMsgType = msgtype; +} + bool wasiaqtThreadKickTypePage() { switch(_lastMsgType) { @@ -608,8 +613,8 @@ bool process_iaqtouch_packet(unsigned char *packet, int length, struct aqualinkd //debuglogPacket(IAQT_LOG ,packet, length); - _lastMsgType = packet[PKT_CMD]; - + //_lastMsgType = packet[PKT_CMD]; + set_iaqtouch_lastmsg(packet[PKT_CMD]); //debuglogPacket(IAQT_LOG ,packet, length); //beautifyPacket(buff, packet, length); //LOG(IAQT_LOG,LOG_DEBUG, "%s", buff); diff --git a/iaqtouch.h b/iaqtouch.h index 791df35..74b3a4b 100644 --- a/iaqtouch.h +++ b/iaqtouch.h @@ -25,6 +25,8 @@ const char *iaqt_page_name(const unsigned char page); int num2iaqtRSset (unsigned char* packetbuffer, int num, bool pad4unknownreason); int char2iaqtRSset (unsigned char* packetbuffer, char *msg, int msg_len); +void set_iaqtouch_lastmsg(unsigned char msgtype); + // This should be moved to aq_serial once finished. #define PKT_IAQT_BUTINDX 4 #define PKT_IAQT_BUTSTATE 5 diff --git a/json_messages.c b/json_messages.c index 9383f76..986ab5d 100644 --- a/json_messages.c +++ b/json_messages.c @@ -80,8 +80,9 @@ int build_logmsg_JSON(char *dest, const char *src, int dest_len, int src_len) int length = sprintf(dest, "{\"logmsg\":\""); length += json_chars(dest+length, src, (dest_len-20), src_len); length += sprintf(dest+length, "\"}"); - dest[length] = '\n'; - dest[length+1] = '\0'; + dest[length] = '\0'; + //dest[length] = '\n'; + //dest[length+1] = '\0'; return length; } @@ -473,6 +474,64 @@ int build_device_JSON(struct aqualinkdata *aqdata, char* buffer, int size, bool //return length; } +int logmaskjsonobject(int16_t flag, char* buffer) +{ + int length = sprintf(buffer, "{\"name\":\"%s\",\"id\":\"%d\",\"set\":\"%s\"},", logmask2name(flag), flag,(isDebugLogMaskSet(flag)?JSON_ON:JSON_OFF)); + return length; +} +int logleveljsonobject(int level, char* buffer) +{ + int length = sprintf(buffer, "{\"name\":\"%s\",\"id\":\"%d\",\"set\":\"%s\"},", loglevel2name(level), level,(getSystemLogLevel()==level?JSON_ON:JSON_OFF)); + return length; +} +int build_aqualink_aqmanager_JSON(struct aqualinkdata *aqdata, char* buffer, int size) +{ + memset(&buffer[0], 0, size); + int length = 0; + + length += sprintf(buffer+length, "{\"type\": \"aqmanager\""); + length += sprintf(buffer+length, ",\"deamonized\": \"%s\"", (_aqconfig_.deamonize?JSON_ON:JSON_OFF) ); + /* + length += sprintf(buffer+length, ",\"panel_type\":\"%s\"",getPanelString()); + length += sprintf(buffer+length, ",\"version\":\"%s\"",aqdata->version );//8157 REV MMM", + length += sprintf(buffer+length, ",\"aqualinkd_version\":\"%s\"", AQUALINKD_VERSION ); //1.0b, + */ + //length += sprintf(buffer+length, ",\"logging2file\": \"%s\"",islogFileReady()?JSON_ON:JSON_OFF); + length += sprintf(buffer+length, ",\"logfileready\": \"%s\"",islogFileReady()?JSON_ON:JSON_OFF); + length += sprintf(buffer+length, ",\"logfilename\": \"%s\"",_aqconfig_.log_file); + length += sprintf(buffer+length, ",\"debugmasks\":["); + length += logmaskjsonobject(AQUA_LOG, buffer+length); + length += logmaskjsonobject(NET_LOG, buffer+length); + length += logmaskjsonobject(AQRS_LOG, buffer+length); + length += logmaskjsonobject(ONET_LOG, buffer+length); + length += logmaskjsonobject(IAQT_LOG, buffer+length); + length += logmaskjsonobject(PDA_LOG, buffer+length); + length += logmaskjsonobject(RSSA_LOG, buffer+length); + length += logmaskjsonobject(DJAN_LOG, buffer+length); + length += logmaskjsonobject(DPEN_LOG, buffer+length); + length += logmaskjsonobject(RSSD_LOG, buffer+length); + length += logmaskjsonobject(PROG_LOG, buffer+length); + length += logmaskjsonobject(DBGT_LOG, buffer+length); + length += logmaskjsonobject(TIMR_LOG, buffer+length); + if (buffer[length-1] == ',') + length--; + length += sprintf(buffer+length, "]"); + + length += sprintf(buffer+length, ",\"loglevels\":["); + length += logleveljsonobject(LOG_DEBUG_SERIAL, buffer+length); + length += logleveljsonobject(LOG_DEBUG, buffer+length); + length += logleveljsonobject(LOG_INFO, buffer+length); + length += logleveljsonobject(LOG_NOTICE, buffer+length); + length += logleveljsonobject(LOG_WARNING, buffer+length); + length += logleveljsonobject(LOG_ERR, buffer+length); + if (buffer[length-1] == ',') + length--; + length += sprintf(buffer+length, "]"); + + length += sprintf(buffer+length, "}"); + + return length; +} int build_aqualink_status_JSON(struct aqualinkdata *aqdata, char* buffer, int size) { //strncpy(buffer, test_message, strlen(test_message)+1); diff --git a/json_messages.h b/json_messages.h index 36af262..9802b88 100644 --- a/json_messages.h +++ b/json_messages.h @@ -53,6 +53,7 @@ int build_mqtt_status_JSON(char* buffer, int size, int idx, int nvalue, float se bool parseJSONmqttrequest(const char *str, size_t len, int *idx, int *nvalue, char *svalue); int build_aqualink_error_status_JSON(char* buffer, int size, char *msg); int build_mqtt_status_message_JSON(char* buffer, int size, int idx, int nvalue, char *svalue); +int build_aqualink_aqmanager_JSON(struct aqualinkdata *aqdata, char* buffer, int size); //int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch, char* buffer, int size, bool homekit); //int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int programable_switch2, char* buffer, int size, bool homekit); int build_device_JSON(struct aqualinkdata *aqdata, char* buffer, int size, bool homekit); diff --git a/net_services.c b/net_services.c index 44920a1..f92948e 100644 --- a/net_services.c +++ b/net_services.c @@ -43,6 +43,10 @@ #ifdef AQ_PDA #include "pda.h" #endif + +// NSF remove once aqmanager is released. +#define INCLUDE_OLD_DEBUG_HTML + /* #if defined AQ_DEBUG || defined AQ_TM_DEBUG #include "timespec_subtract.h" @@ -59,13 +63,6 @@ static bool _keepNetServicesRunning = false; static struct mg_mgr _mgr; static int _mqtt_exit_flag = false; - -// Will remove this once we deprecate V1 API's -#ifdef INCLUDE_V1_API -void OLD_action_web_request(struct mg_connection *nc, struct http_message *http_msg); -void OLD_action_websocket_request(struct mg_connection *nc, struct websocket_message *wm); -#endif - #ifndef MG_DISABLE_MQTT void start_mqtt(struct mg_mgr *mgr); static struct aqualinkdata _last_mqtt_aqualinkdata; @@ -142,30 +139,70 @@ void _broadcast_aqualinkstate_error(struct mg_connection *nc, char *msg) // Maybe enhacment in future to sent error messages to MQTT } +#define MAX_LOGSTACK 30 +#define WS_LOG_LENGTH 200 +char _logstack[MAX_LOGSTACK][WS_LOG_LENGTH]; +int _logstack_place=0; +pthread_mutex_t logmsg_mutex; + + // Send log message to any aqManager websocket. -void _broadcast_logs(struct mg_connection *nc, char *msg) { - - char message[LOGBUFFER]; +void _ws_send_logmsg(struct mg_connection *nc, char *msg) { struct mg_connection *c; for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) { if (is_websocket(c) && is_websocket_aqmanager(c)) { - build_logmsg_JSON(message, msg, LOGBUFFER, strlen(msg)); - ws_send(c, message); + ws_send(c, msg); } } } -void broadcast_logs(char *msg) { +void send_ws_logmessages() +{ + pthread_mutex_lock(&logmsg_mutex); + // This pulls them off in the wrong order. + while (_logstack_place > 0) { + _ws_send_logmsg(_mgr.active_connections, _logstack[0]); + memmove(&_logstack[0], &_logstack[1], WS_LOG_LENGTH * _logstack_place ) ; + _logstack_place--; + } + pthread_mutex_unlock(&logmsg_mutex); +} + +// This needs to be thread safe. +void broadcast_log(char *msg) { // NSF This causes mongoose to core dump after a period of time due to number of messages // so remove until get time to update to new mongoose version. - return; + //return; +#ifdef AQ_NO_THREAD_NETSERVICE + if (_keepNetServicesRunning && !_aqconfig_.thread_netservices && _aqualink_data->aqManagerActive) + { + char message[WS_LOG_LENGTH]; + build_logmsg_JSON(message, msg, WS_LOG_LENGTH, strlen(msg)); + _ws_send_logmsg(_mgr.active_connections , message); + return; + } +#endif // See if we have and manager runnig first so we return ASAP. - // Since this get's galled long before net_Services is started, also check we are running. + // Since this get's called long before net_Services is started, also check we are running. if (_keepNetServicesRunning && _net_thread_id != 0 && _aqualink_data->aqManagerActive) - _broadcast_logs(_mgr.active_connections, msg); - + { + pthread_mutex_lock(&logmsg_mutex); + if (_logstack_place < MAX_LOGSTACK) + { + //printf("**** Add message %s\n",msg); + // This need mutex lock on _logstack + build_logmsg_JSON(_logstack[_logstack_place++], msg, WS_LOG_LENGTH, strlen(msg) ); + } else { + // Need to figure this out, can't send error message as that will put us in a infinate loop. + fprintf(stderr, "*** ERROR Log queue full ***\n"); + // Use the last message to let UI know + build_logmsg_JSON(_logstack[MAX_LOGSTACK-1], "Error: *** Logs truncated, see server to complete list of message ***\n", LOGBUFFER, strlen(msg) ); + } + pthread_mutex_unlock(&logmsg_mutex); + } + } void _broadcast_aqualinkstate(struct mg_connection *nc) @@ -655,51 +692,6 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc) } -// - - -/* -void set_light_mode(char *value, int button) -{ - int i; - clight_detail *light = NULL; -#ifdef AQ_PDA - if (isPDA_PANEL) { - LOG(NET_LOG,LOG_ERR, "Light mode control not supported in PDA mode\n"); - return; - } -#endif - for (i=0; i < _aqualink_data->num_lights; i++) { - if (&_aqualink_data->aqbuttons[button] == _aqualink_data->lights[i].button) { - // Found the programmable light - light = &_aqualink_data->lights[i]; - break; - } - } - - if (light == NULL) { - LOG(NET_LOG,LOG_ERR, "Light mode control not configured for button %d\n",button); - return; - } - - char buf[LIGHT_MODE_BUFER]; - - if (light->lightType == LC_PROGRAMABLE ) { - // 5 below is light index, need to look this up so it's not hard coded. - sprintf(buf, "%-5s%-5d%-5d%-5d%.2f",value, - button, - _aqconfig_.light_programming_initial_on, - _aqconfig_.light_programming_initial_off, - _aqconfig_.light_programming_mode ); - //LOG(NET_LOG,LOG_NOTICE, "WEB: requset light mode %s\n", buf); - aq_programmer(AQ_SET_LIGHTPROGRAM_MODE, buf, _aqualink_data); - } else { - sprintf(buf, "%-5s%-5d%-5d",value, button, light->lightType); - aq_programmer(AQ_SET_LIGHTCOLOR_MODE, buf, _aqualink_data); - } -} -*/ - typedef enum {uActioned, uBad, uDevices, uStatus, uHomebridge, uDynamicconf, uDebugStatus, uDebugDownload, uSimulator, uSchedules, uSetSchedules, uAQmanager} uriAtype; //typedef enum {NET_MQTT=0, NET_API, NET_WS, DZ_MQTT} netRequest; const char actionName[][5] = {"MQTT", "API", "WS", "DZ"}; @@ -713,43 +705,7 @@ const char actionName[][5] = {"MQTT", "API", "WS", "DZ"}; #define NOCHANGE_IGNORING "No change, device is already in that state" #define UNKNOWN_REQUEST "Didn't understand request" -/* -void create_program_request(request_source requester, action_type type, int value, int id) // id is only valid for PUMP RPM -{ - //panel_device_request(struct aqualinkdata *aqdata, action_type type, int deviceIndex, int value, int subIndex, request_source source); - //panel_device_request(_aqualink_data, type, id, value, requester); - - if (_aqualink_data->unactioned.type != NO_ACTION && type != _aqualink_data->unactioned.type) - LOG(NET_LOG,LOG_ERR, "%s: About to overwrite unactioned panel program\n",actionName[requester]); - - if (type == POOL_HTR_SETOINT || type == SPA_HTR_SETOINT || type == FREEZE_SETPOINT || type == SWG_SETPOINT ) { - _aqualink_data->unactioned.value = setpoint_check(type, value, _aqualink_data); - if (value != _aqualink_data->unactioned.value) - LOG(NET_LOG,LOG_NOTICE, "%s: requested setpoint value %d is invalid, change to %d\n",actionName[requester], value, _aqualink_data->unactioned.value); - } else if (type == PUMP_RPM) { - //_aqualink_data->unactioned.value = RPM_check(_aqualink_data->pumps[id].pumpType , value, _aqualink_data); - _aqualink_data->unactioned.value = value; - //if (value != _aqualink_data->unactioned.value) - // LOG(NET_LOG,LOG_NOTICE, "%s: requested Pump value %d is invalid, change to %d\n",actionName[requester], value, _aqualink_data->unactioned.value); - } else if (type == PUMP_VSPROGRAM) { - //_aqualink_data->unactioned.value = value; - //if (value != _aqualink_data->unactioned.value) - LOG(NET_LOG,LOG_ERR, "%s: requested Pump vsp program is not implimented yet\n",actionName[requester], value, _aqualink_data->unactioned.value); - } else { - // SWG_BOOST & PUMP_RPM - _aqualink_data->unactioned.value = value; - } - - _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. - time(&_aqualink_data->unactioned.requested); - else - _aqualink_data->unactioned.requested = 0; -} -*/ #ifdef AQ_PDA void create_PDA_on_off_request(aqkey *button, bool isON) @@ -767,71 +723,6 @@ void create_PDA_on_off_request(aqkey *button, bool isON) } #endif -/* -bool create_panel_request(request_source requester, int buttonIndex, int value, bool timer) { - - //if (timer) - // return panel_device_request(_aqualink_data, TIMER, buttonIndex, value, requester); - //else - // return panel_device_request(_aqualink_data, ON_OFF, buttonIndex, value, requester); - - // if value = 0 is OFF, - // if value = 1 is ON if (timer = false). - // if value > 0 (timer should be true, and vaue is duration). - - if ((_aqualink_data->aqbuttons[buttonIndex].led->state == OFF && value == 0) || - (value > 0 && (_aqualink_data->aqbuttons[buttonIndex].led->state == ON || _aqualink_data->aqbuttons[buttonIndex].led->state == FLASH || - _aqualink_data->aqbuttons[buttonIndex].led->state == ENABLE))) { - LOG(NET_LOG, LOG_INFO, "%s: received '%s' for '%s', already '%s', Ignoring\n", actionName[requester], (value == 0 ? "OFF" : "ON"), _aqualink_data->aqbuttons[buttonIndex].name, (value == 0 ? "OFF" : "ON")); - //return false; - } else { - LOG(NET_LOG, LOG_INFO, "%s: received '%s' for '%s', turning '%s'\n", actionName[requester], (value == 0 ? "OFF" : "ON"), _aqualink_data->aqbuttons[buttonIndex].name, (value == 0 ? "OFF" : "ON")); -#ifdef AQ_PDA - if (isPDA_PANEL) { - char msg[PTHREAD_ARG]; - sprintf(msg, "%-5d%-5d", buttonIndex, (value == 0 ? OFF : ON)); - aq_programmer(AQ_PDA_DEVICE_ON_OFF, msg, _aqualink_data); - } else -#endif - { - // Check for panel programmable light. if so simple ON isn't going to work well - // Could also add "light mode" check, as this is only valid for panel configured light not aqualinkd configured light. - if ((_aqualink_data->aqbuttons[buttonIndex].special_mask & PROGRAM_LIGHT) == PROGRAM_LIGHT && _aqualink_data->aqbuttons[buttonIndex].led->state == OFF) { - // OK Programable light, and no light mode selected. Now let's work out best way to turn it on. serial_adapter protocol will to it without questions, - // all other will require programmig. - if (isRSSA_ENABLED) { - set_aqualink_rssadapter_aux_state(buttonIndex, true); - } else { - set_light_mode("0", buttonIndex); // 0 means use current light mode - } - } else { - aq_send_cmd(_aqualink_data->aqbuttons[buttonIndex].code); - } -// Pre set device to state, next status will correct if state didn't take, but this will stop multiple ON messages setting on/off -#ifdef PRESTATE_ONOFF - if ((_aqualink_data->aqbuttons[buttonIndex].code == KEY_POOL_HTR || _aqualink_data->aqbuttons[buttonIndex].code == KEY_SPA_HTR || - _aqualink_data->aqbuttons[buttonIndex].code == KEY_SOLAR_HTR) && - value > 0) { - _aqualink_data->aqbuttons[buttonIndex].led->state = ENABLE; // if heater and set to on, set pre-status to enable. - //_aqualink_data->updated = true; - } else if (isRSSA_ENABLED || ((_aqualink_data->aqbuttons[buttonIndex].special_mask & PROGRAM_LIGHT) != PROGRAM_LIGHT)) { - _aqualink_data->aqbuttons[buttonIndex].led->state = (value == 0 ? OFF : ON); // as long as it's not programmable light , pre-set to on/off - //_aqualink_data->updated = true; - } -#endif - } - } - - // If it's a timer, start the timer - if (timer) { - start_timer(_aqualink_data, &_aqualink_data->aqbuttons[buttonIndex], value); - } - - return true; - -} -*/ - //uriAtype action_URI(char *from, const char *URI, int uri_length, float value, bool convertTemp) { //uriAtype action_URI(netRequest from, const char *URI, int uri_length, float value, bool convertTemp) { @@ -891,11 +782,34 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float return uSchedules; } else if (strncmp(ri1, "simulator", 9) == 0 && from == NET_WS) { // Only valid from websocket. return uSimulator; - } else if (strncmp(ri1, "aqmanager", 9) == 0 && from == NET_WS) { // Only valid from websocket. - return uAQmanager; } else if (strncmp(ri1, "rawcommand", 10) == 0 && from == NET_WS) { // Only valid from websocket. aq_send_cmd((unsigned char)value); return uActioned; + } else if (strncmp(ri1, "aqmanager", 9) == 0 && from == NET_WS) { // Only valid from websocket. + return uAQmanager; + } else if (strncmp(ri1, "setloglevel", 11) == 0 && from == NET_WS) { // Only valid from websocket. + setSystemLogLevel(round(value)); + return uAQmanager; // Want to resent updated status + } else if (strncmp(ri1, "addlogmask", 10) == 0 && from == NET_WS) { // Only valid from websocket. + addDebugLogMask(round(value)); + return uAQmanager; // Want to resent updated status + } else if (strncmp(ri1, "removelogmask", 13) == 0 && from == NET_WS) { // Only valid from websocket. + removeDebugLogMask(round(value)); + return uAQmanager; // Want to resent updated status + } else if (strncmp(ri1, "log2file", 5) == 0) { + if (ri2 != NULL && strncmp(ri2, "start", 5) == 0) { + startInlineLog2File(); + } else if (ri2 != NULL && strncmp(ri2, "stop", 4) == 0) { + stopInlineLog2File(); + } else if (ri2 != NULL && strncmp(ri2, "clean", 5) == 0) { + cleanInlineLogFile(); + } else if (ri2 != NULL && strncmp(ri2, "download", 8) == 0) { + return uDebugDownload; + } + return uAQmanager; // Want to resent updated status + + // BELOW IS FOR OLD DEBUG.HTML, Need to remove in future release +#ifdef INCLUDE_OLD_DEBUG_HTML } else if (strncmp(ri1, "debug", 5) == 0) { if (ri2 != NULL && strncmp(ri2, "start", 5) == 0) { startInlineDebug(); @@ -909,14 +823,18 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float cleanInlineDebug(); } else if (ri2 != NULL && strncmp(ri2, "download", 8) == 0) { return uDebugDownload; - } else if (ri2 != NULL && strncmp(ri2, "stop", 4) == 0) { - } + } return uDebugStatus; +#endif // couple of debug items for testing - } else if (strncmp(ri1, "restart", 13) == 0) { + } else if (strncmp(ri1, "restart", 13) == 0 && from == NET_WS) { // Only valid from websocket. + /* LOG(NET_LOG,LOG_NOTICE, "Received restart request!\n"); raise(SIGRESTART); return uActioned; + */ + LOG(NET_LOG,LOG_WARNING, "Received restart request, not implimented in this release!\n"); + return uBad; } else if (strncmp(ri1, "set_date_time", 13) == 0) { //aq_programmer(AQ_SET_TIME, NULL, _aqualink_data); panel_device_request(_aqualink_data, DATE_TIME, 0, 0, from); @@ -1137,7 +1055,7 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float return rtn; } - for (i=0; i < _aqualink_data->total_buttons; i++) { + for (i=0; i < _aqualink_data->total_buttons && found==false; i++) { // If Label = "Spa", "Spa_Heater" will turn on "Spa", so need to check '/' on label as next character if (strncmp(ri1, _aqualink_data->aqbuttons[i].name, strlen(_aqualink_data->aqbuttons[i].name)) == 0 || (strncmp(ri1, _aqualink_data->aqbuttons[i].label, strlen(_aqualink_data->aqbuttons[i].label)) == 0 && ri1[strlen(_aqualink_data->aqbuttons[i].label)] == '/')) @@ -1146,19 +1064,6 @@ uriAtype action_URI(request_source from, const char *URI, int uri_length, float //create_panel_request(from, i, value, istimer); panel_device_request(_aqualink_data, atype, i, value, from); //LOG(NET_LOG,LOG_INFO, "%s: MATCH %s to topic %.*s\n",from,_aqualink_data->aqbuttons[i].name,uri_length, URI); - // Message is either a 1 or 0 for on or off - //int status = atoi(msg->payload.p); - /* - if ( value > 1 || value < 0) { - LOG(NET_LOG,LOG_WARNING, "%s: URI %s has invalid value %.2f\n",actionName[from], URI, value); - *rtnmsg = INVALID_VALUE; - rtn = uBad; - } - if (timer > 0) { - create_panel_request(from, i, timer, true); - } else { - create_panel_request(from, i, value, false); - }*/ } } if(!found) { @@ -1279,14 +1184,7 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) // If we have a get request, pass it if (strncmp(http_msg->uri.p, "/api", 4 ) != 0) { if (strstr(http_msg->method.p, "GET") && http_msg->query_string.len > 0) { -#ifdef INCLUDE_V1_API - 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 LOG(NET_LOG,LOG_ERR, "WEB: Old API stanza requested, ignoring client request\n"); -#endif } else { DEBUG_TIMER_START(&tid); mg_serve_http(nc, http_msg, _http_server_opts); @@ -1373,6 +1271,7 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) mg_send(nc, message, size); } break; +#ifdef INCLUDE_OLD_DEBUG_HTML case uDebugStatus: { char message[JSON_BUFFER_SIZE]; @@ -1381,6 +1280,7 @@ void action_web_request(struct mg_connection *nc, struct http_message *http_msg) mg_send(nc, message, size); } break; +#endif case uDebugDownload: mg_http_serve_file(nc, http_msg, getInlineLogFName(), mg_mk_str("text/plain"), mg_mk_str("")); break; @@ -1439,13 +1339,8 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message } if (uri == NULL) { -#ifdef INCLUDE_V1_API - LOG(NET_LOG,LOG_WARNING, "WS: Old stanza, using old method to action\n"); - return OLD_action_websocket_request(nc, wm); -#else LOG(NET_LOG,LOG_ERR, "WEB: Old websocket stanza requested, ignoring client request\n"); return; -#endif } switch ( action_URI(NET_WS, uri, strlen(uri), (value!=NULL?atof(value):TEMP_UNKNOWN), false, &msg)) { @@ -1478,7 +1373,7 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message _aqualink_data->simulate_panel = true; DEBUG_TIMER_START(&tid); char message[JSON_BUFFER_SIZE]; - build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); // Should change this to simulator. + build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); DEBUG_TIMER_STOP(tid, NET_LOG, "action_websocket_request() build_aqualink_status_JSON took"); ws_send(nc, message); } @@ -1490,7 +1385,8 @@ void action_websocket_request(struct mg_connection *nc, struct websocket_message _aqualink_data->aqManagerActive = true; DEBUG_TIMER_START(&tid); char message[JSON_BUFFER_SIZE]; - build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); // Should change this to simulator. + //build_aqualink_status_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); + build_aqualink_aqmanager_JSON(_aqualink_data, message, JSON_BUFFER_SIZE); DEBUG_TIMER_STOP(tid, NET_LOG, "action_websocket_request() build_aqualink_status_JSON took"); ws_send(nc, message); } @@ -1829,13 +1725,17 @@ void *net_services_thread( void *ptr ) while (_keepNetServicesRunning == true) { //poll_net_services(&_mgr, 10); - mg_mgr_poll(&_mgr, 100); + // Shorten poll cycle when logging messages to WS + mg_mgr_poll(&_mgr, (_aqualink_data->aqManagerActive)?5:100); + //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; + } + if (_aqualink_data->aqManagerActive) { + send_ws_logmessages(); } } @@ -1949,462 +1849,4 @@ bool start_net_services(/*struct mg_mgr *mgr, */struct aqualinkdata *aqdata) return true; } -#endif - - - - - - - - - - - - - - - - - - - - - - - - -#ifdef INCLUDE_V1_API -/* OLD Functions to be deprecated */ - - -int getTempforMeteohub(char *buffer) -{ - int length = 0; - - if (_aqualink_data->air_temp != TEMP_UNKNOWN) - length += sprintf(buffer+length, "t0 %d\n",(int)degFtoC(_aqualink_data->air_temp)*10); - else - length += sprintf(buffer+length, "t0 \n"); - - if (_aqualink_data->pool_temp != TEMP_UNKNOWN) - length += sprintf(buffer+length, "t1 %d\n",(int)degFtoC(_aqualink_data->pool_temp)*10); - else - length += sprintf(buffer+length, "t1 \n"); - - return strlen(buffer); -} - -/* Leave the old API / web function intact until we deprecate */ - -void OLD_action_web_request(struct mg_connection *nc, struct http_message *http_msg) { - // struct http_message *http_msg = (struct http_message *)ev_data; - if (getLogLevel(NET_LOG) >= LOG_WARNING) { // Simply for log message, check we are at - // this log level before running all this - // junk - char *uri = (char *)malloc(http_msg->uri.len + http_msg->query_string.len + 2); - strncpy(uri, http_msg->uri.p, http_msg->uri.len + http_msg->query_string.len + 1); - uri[http_msg->uri.len + http_msg->query_string.len + 1] = '\0'; - LOG(NET_LOG,LOG_WARNING, "URI request: '%s'\n", uri); - free(uri); - } - // If we have a get request, pass it - if (strstr(http_msg->method.p, "GET") && http_msg->query_string.len > 0) { - char command[20]; - - mg_get_http_var(&http_msg->query_string, "command", command, sizeof(command)); - LOG(NET_LOG,LOG_INFO, "WEB: Message command='%s'\n", command); - - if (strcmp(command, "dynamic_config") == 0) { - char data[JSON_BUFFER_SIZE]; - int size = build_color_lights_js(_aqualink_data, data, JSON_BUFFER_SIZE); - mg_send_head(nc, 200, size, CONTENT_JS); - mg_send(nc, data, size); - } else - // if (strstr(http_msg->query_string.p, "command=status")) { - if (strcmp(command, "status") == 0) { - char data[JSON_STATUS_SIZE]; - int size = build_aqualink_status_JSON(_aqualink_data, data, JSON_STATUS_SIZE); - mg_send_head(nc, 200, size, CONTENT_JSON); - mg_send(nc, data, size); - - //} else if (strstr(http_msg->query_string.p, "command=mhstatus")) { - } else if (strcmp(command, "mhstatus") == 0) { - char data[20]; - int size = getTempforMeteohub(data); - mg_send_head(nc, 200, size, CONTENT_TEXT); - mg_send(nc, data, size); - } else if (strcmp(command, "poollightmode") == 0) { -LOG(NET_LOG,LOG_ERR, "WEB: poollightmode taken out for update (forgot to put it back)\n"); -/* - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - //aq_programmer(AQ_SET_COLORMODE, value, _aqualink_data); - set_light_mode(value, _aqconfig_.light_programming_button_pool); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); -*/ - } else if (strcmp(command, "spalightmode") == 0) { -LOG(NET_LOG,LOG_ERR, "WEB: spalightmode taken out for update (forgot to put it back)\n"); -/* - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - //aq_programmer(AQ_SET_COLORMODE, value, _aqualink_data); - set_light_mode(value, _aqconfig_.light_programming_button_spa); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); -*/ - } else if (strcmp(command, "diag") == 0) { - aq_programmer(AQ_GET_DIAGNOSTICS_MODEL, NULL, _aqualink_data); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - } else if (strcmp(command, "swg_percent") == 0) { - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - aq_programmer(AQ_SET_SWG_PERCENT, value, _aqualink_data); - LOG(NET_LOG,LOG_INFO, "Web: request to set SWG to %s\n", value); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - } else if (strcmp(command, "pool_htr_set_pnt") == 0) { - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - aq_programmer(AQ_SET_POOL_HEATER_TEMP, value, _aqualink_data); - LOG(NET_LOG,LOG_INFO, "Web: request to set Pool heater to %s\n", value); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - } else if (strcmp(command, "spa_htr_set_pnt") == 0) { - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - aq_programmer(AQ_SET_SPA_HEATER_TEMP, value, _aqualink_data); - LOG(NET_LOG,LOG_INFO, "Web: request to set Spa heater to %s\n", value); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - } else if (strcmp(command, "frz_protect_set_pnt") == 0) { - char value[20]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - aq_programmer(AQ_SET_FRZ_PROTECTION_TEMP, value, _aqualink_data); - LOG(NET_LOG,LOG_INFO, "Web: request to set Freeze protect to %s\n", value); - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - /* - } else if (strcmp(command, "extended_device_prg") == 0) { - char value[20]; - char message[JSON_LABEL_SIZE]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - bool prg = request2bool(value); - if (prg && !onetouch_enabled()) - prg = false; // Ignore request if onetouch is not enabeled - set_extended_device_id_programming(prg); - sprintf(message,"{\"extended_device_prg\":\"%s\"}", bool2text(prg)); - mg_send_head(nc, 200, strlen(message), CONTENT_JSON); - mg_send(nc, message, strlen(message)); - */ - } else if (strcmp(command, "devices") == 0) { - char message[JSON_BUFFER_SIZE]; - int size = build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, false); - mg_send_head(nc, 200, size, CONTENT_JSON); - mg_send(nc, message, size); - } else if (strcmp(command, "homebridge") == 0) { - char message[JSON_BUFFER_SIZE]; - 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); - } else if (strcmp(command, "setconfigprm") == 0) { - char value[20]; - char param[30]; - char *webrtn; - mg_get_http_var(&http_msg->query_string, "param", param, sizeof(param)); - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - - if (setConfigValue(_aqualink_data, param, value)) { - webrtn = GET_RTN_OK; - LOG(NET_LOG,LOG_INFO, "Web: request to config %s to %s\n", param, value); - } else { - webrtn = GET_RTN_ERROR; - LOG(NET_LOG,LOG_ERR, "Web: request to config %s to %s failed\n", param, value); - } - mg_send_head(nc, 200, strlen(webrtn), CONTENT_TEXT); - mg_send(nc, webrtn, strlen(webrtn)); - } else if (strcmp(command, "writeconfig") == 0) { - if (writeCfg (_aqualink_data)) { - mg_send_head(nc, 200, strlen(GET_RTN_OK), CONTENT_TEXT); - mg_send(nc, GET_RTN_OK, strlen(GET_RTN_OK)); - } else { - mg_send_head(nc, 200, strlen(GET_RTN_ERROR), CONTENT_TEXT); - mg_send(nc, GET_RTN_ERROR, strlen(GET_RTN_ERROR)); - } - } else if (strcmp(command, "debug") == 0) { - char value[80]; - char *rtn; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - if (strcmp(value, "start") == 0) { - startInlineDebug(); - rtn = GET_RTN_OK; - LOG(NET_LOG,LOG_DEBUG, "WEB: Started inline debug mode\n"); - } else if (strcmp(value, "stop") == 0) { - LOG(NET_LOG,LOG_DEBUG, "WEB: Stoped inline debug mode\n"); - stopInlineDebug(); - rtn = GET_RTN_OK; - } else if (strcmp(value, "serialstart") == 0) { - startInlineSerialDebug(); - LOG(NET_LOG,LOG_DEBUG, "WEB: Started inline debug mode\n"); - rtn = GET_RTN_OK; - } else if (strcmp(value, "serialstop") == 0) { - LOG(NET_LOG,LOG_DEBUG, "WEB: Stoped inline debug mode\n"); - stopInlineDebug(); - rtn = GET_RTN_OK; - } else if (strcmp(value, "status") == 0) { - snprintf(value,80,"{\"sLevel\":\"%s\", \"iLevel\":%d, \"logReady\":\"%s\"}\n",elevel2text(getLogLevel(NET_LOG)),getLogLevel(NET_LOG),islogFileReady()?"true":"false" ); - mg_send_head(nc, 200, strlen(value), "Content-Type: text/json"); - mg_send(nc, value, strlen(value)); - return; - //rtn = value; - } else if (strcmp(value, "clean") == 0) { - cleanInlineDebug(); - rtn = GET_RTN_OK; - } else if (strcmp(value, "download") == 0) { - mg_http_serve_file(nc, http_msg, getInlineLogFName(), mg_mk_str("text/plain"), mg_mk_str("")); - return; - } else { - rtn = GET_RTN_UNKNOWN; - } - mg_send_head(nc, 200, strlen(rtn), CONTENT_TEXT); - mg_send(nc, rtn, strlen(rtn)); - } else if (strncmp(command, "Pump_", 5) == 0) { - // Set Pump RPM - bool found = false; - int pumpIndex = atoi(command+5); // Check for 0 - char value[10]; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - int rpm = atoi(value); - // Check for pumpIndex = 0 (BAD) and check RPM Value - //printf("******** ADD CHECK FOR PUMP & RPM HERE ********\n"); - int pi; - for (pi=0; pi < _aqualink_data->num_pumps; pi++) { - if (_aqualink_data->pumps[pi].pumpIndex == pumpIndex) { - LOG(NET_LOG,LOG_NOTICE, "WEB: request to change pump %d to %d\n",pumpIndex+1, round(rpm)); - _aqualink_data->unactioned.type = PUMP_RPM; - _aqualink_data->unactioned.value = round(rpm); - _aqualink_data->unactioned.id = pumpIndex; - found=true; - break; - } - } - if(!found) - LOG(NET_LOG,LOG_ERR, "WEB: Didn't find pump %d from command %s\n",pumpIndex,command); - } else { - int i; - for (i = 0; i < _aqualink_data->total_buttons; i++) { - if (strcmp(command, _aqualink_data->aqbuttons[i].name) == 0) { - char value[20]; - char *rtn; - mg_get_http_var(&http_msg->query_string, "value", value, sizeof(value)); - // LOG(NET_LOG,LOG_INFO, "Web Message command='%s'\n",command); - // aq_programmer(AQ_SEND_CMD, (char - // *)&_aqualink_data->aqbuttons[i].code, _aqualink_data); - LOG(NET_LOG,LOG_DEBUG, "WEB: Message request '%s' change state to '%s'\n", command, value); -#ifdef AQ_PDA - if (isPDA_PANEL) { - char msg[PTHREAD_ARG]; - sprintf(msg, "%-5d%-5d",i, (strcmp(value, "on") == 0)?ON:OFF); - //printf("******* '%s' ********\n",msg); - aq_programmer(AQ_PDA_DEVICE_ON_OFF, msg, _aqualink_data); - rtn = GET_RTN_OK; - } - else -#endif - if (strcmp(value, "on") == 0) { - if (_aqualink_data->aqbuttons[i].led->state == OFF || _aqualink_data->aqbuttons[i].led->state == FLASH) { - //aq_programmer(AQ_SEND_CMD, (char *)&_aqualink_data->aqbuttons[i].code, _aqualink_data); - aq_send_cmd(_aqualink_data->aqbuttons[i].code); - rtn = GET_RTN_OK; - LOG(NET_LOG,LOG_INFO, "WEB: turn ON '%s' changed state to '%s'\n", command, value); - } else { - rtn = GET_RTN_NOT_CHANGED; - LOG(NET_LOG,LOG_INFO, "WEB: '%s' is already on '%s', current state %d\n", command, value, _aqualink_data->aqbuttons[i].led->state); - } - } else if (strcmp(value, "off") == 0) { - if (_aqualink_data->aqbuttons[i].led->state == ON || - _aqualink_data->aqbuttons[i].led->state == ENABLE || - _aqualink_data->aqbuttons[i].led->state == FLASH) { - //aq_programmer(AQ_SEND_CMD, (char *)&_aqualink_data->aqbuttons[i].code, _aqualink_data); - aq_send_cmd(_aqualink_data->aqbuttons[i].code); - rtn = GET_RTN_OK; - LOG(NET_LOG,LOG_INFO, "WEB: turn Off '%s' changed state to '%s'\n", command, value); - } else { - rtn = GET_RTN_NOT_CHANGED; - LOG(NET_LOG,LOG_INFO, "WEB: '%s' is already off '%s', current state %d\n", command, value, _aqualink_data->aqbuttons[i].led->state); - } - } else { // Blind switch - //aq_programmer(AQ_SEND_CMD, (char *)&_aqualink_data->aqbuttons[i].code, _aqualink_data); - aq_send_cmd(_aqualink_data->aqbuttons[i].code); - rtn = GET_RTN_OK; - LOG(NET_LOG,LOG_INFO, "WEB: '%s' blindly changed state\n", command, value); - } - - LOG(NET_LOG,LOG_DEBUG, "WEB: On=%d, Off=%d, Enable=%d, Flash=%d\n", ON, OFF, ENABLE, FLASH); - // NSF change OK and 2 below to a constant - mg_send_head(nc, 200, strlen(rtn), CONTENT_TEXT); - mg_send(nc, rtn, strlen(rtn)); - - // NSF place check we found command here - } - } - } - // If we get here, got a bad query - mg_send_head(nc, 200, strlen(GET_RTN_UNKNOWN), CONTENT_TEXT); - mg_send(nc, GET_RTN_UNKNOWN, strlen(GET_RTN_UNKNOWN)); - - } else { - //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); - mg_serve_http(nc, http_msg, _http_server_opts); - } - -} - - -void OLD_action_websocket_request(struct mg_connection *nc, struct websocket_message *wm) { - char buffer[100]; - struct JSONwebrequest request; - -#ifdef AQ_PDA - // Any websocket request means UI is active, so don't let AqualinkD go to sleep if in PDA mode - if (isPDA_PANEL) - pda_reset_sleep(); -#endif - - strncpy(buffer, (char *)wm->data, wm->size); - buffer[wm->size] = '\0'; - // LOG(NET_LOG,LOG_DEBUG, "buffer '%s'\n", buffer); - parseJSONwebrequest(buffer, &request); - LOG(NET_LOG,LOG_INFO, "WS: Message - Key '%s' Value '%s' | Key2 '%s' Value2 '%s'\n", request.first.key, request.first.value, request.second.key, - request.second.value); -/* - if (strcmp(request.first.key, "raw") == 0 || strcmp(request.first.key, "simulator") == 0 ) - _aqualink_data->simulate_panel = true; - else - _aqualink_data->simulate_panel = false; -*/ - - if (strcmp(request.first.key, "raw") == 0) { - _aqualink_data->simulate_panel = true; - LOG(NET_LOG,LOG_NOTICE, "WS: Send raw command to controller %s\n",request.first.value); - unsigned int n; - sscanf(request.first.value, "0x%2x", &n); - //aq_programmer(AQ_SEND_CMD, (char *)&n, NULL); - aq_send_cmd((unsigned char)n); - //char message[JSON_LABEL_SIZE*10]; - //build_device_JSON(_aqualink_data, _aqconfig_.light_programming_button, message, JSON_LABEL_SIZE*10); - //ws_send(nc, message); - } else if (strcmp(request.first.key, "mode") == 0) { - //if (strcmp(request.first.value, "onetouchraw") == 0) { - // set_websocket_RSraw(nc); - // } - } else if (strcmp(request.first.key, "command") == 0) { - _aqualink_data->simulate_panel = false; - if (strcmp(request.first.value, "GET_AUX_LABELS") == 0) { - char labels[JSON_LABEL_SIZE]; - build_aux_labels_JSON(_aqualink_data, labels, JSON_LABEL_SIZE); - ws_send(nc, labels); - } else if (strcmp(request.first.value, "GET_DEVICES") == 0) { - char message[JSON_BUFFER_SIZE]; - build_device_JSON(_aqualink_data, message, JSON_BUFFER_SIZE, false); - ws_send(nc, message); - } else if ( strcmp(request.first.value, "simulator") == 0) { - _aqualink_data->simulate_panel = true; - LOG(NET_LOG,LOG_INFO, "WS: Set Simulator mode\n"); - char labels[JSON_LABEL_SIZE]; - build_aux_labels_JSON(_aqualink_data, labels, JSON_LABEL_SIZE); - ws_send(nc, labels); - } else if ( strcmp(request.first.value, SWG_BOOST_TOPIC) == 0) { - //LOG(NET_LOG,LOG_INFO, "Boost\n"); - if (request.second.value != NULL) - _aqualink_data->unactioned.value = request2bool(request.second.value); - else - _aqualink_data->unactioned.value = !_aqualink_data->boost; - - _aqualink_data->unactioned.type = SWG_BOOST; - } else { // Search for value in command list - int i; - for (i = 0; i < _aqualink_data->total_buttons; i++) { - if (strcmp(request.first.value, _aqualink_data->aqbuttons[i].name) == 0) { - LOG(NET_LOG,LOG_INFO, "WS: button '%s' pressed\n",_aqualink_data->aqbuttons[i].name); -#ifdef AQ_PDA - if (isPDA_PANEL) { - char msg[PTHREAD_ARG]; - sprintf(msg, "%-5d%-5d",i, (_aqualink_data->aqbuttons[i].led->state!=OFF)?OFF:ON); - aq_programmer(AQ_PDA_DEVICE_ON_OFF, msg, _aqualink_data); - } else -#endif - { - LOG(NET_LOG,LOG_DEBUG, "WS: request 0x%02hhx to be sent to controller\n",_aqualink_data->aqbuttons[i].code); - aq_send_cmd(_aqualink_data->aqbuttons[i].code); - } - break; - // NSF place check we found command here - } - } - } - } else if (strcmp(request.first.key, "parameter") == 0) { - _aqualink_data->simulate_panel = false; - if (strcmp(request.first.value, "FRZ_PROTECT") == 0 || strcmp(request.first.value, FREEZE_PROTECT) == 0) { - aq_programmer(AQ_SET_FRZ_PROTECTION_TEMP, request.second.value, _aqualink_data); - } else if (strcmp(request.first.value, "POOL_HTR") == 0 || strcmp(request.first.value, BTN_POOL_HTR) == 0 ) { - aq_programmer(AQ_SET_POOL_HEATER_TEMP, request.second.value, _aqualink_data); - } else if (strcmp(request.first.value, "SPA_HTR") == 0 || strcmp(request.first.value, BTN_SPA_HTR) == 0) { - aq_programmer(AQ_SET_SPA_HEATER_TEMP, request.second.value, _aqualink_data); - } else if (strcmp(request.first.value, SWG_TOPIC) == 0) { - //aq_programmer(AQ_SET_SWG_PERCENT, request.second.value, _aqualink_data); - int value = setpoint_check(SWG_SETPOINT, atoi(request.second.value), _aqualink_data); - - if (_aqualink_data->ar_swg_device_status == SWG_STATUS_OFF ) { - // SWG is off, can't set %, so delay the set until it's on. - _aqualink_data->swg_delayed_percent = value; - } else { - aq_programmer(AQ_SET_SWG_PERCENT, request.second.value, _aqualink_data); - _aqualink_data->swg_percent = value; // Set the value as if it's already been set, just incase it's 0 as we won't get that message, or will update next time - } - - //} else if (strcmp(request.first.value, "POOL_LIGHT_MODE") == 0) { - // set_light_mode(request.second.value, _aqconfig_.light_programming_button_pool); - } else if (strcmp(request.first.value, "LIGHT_MODE") == 0) { - // second is mode & third is button_id - int i; - for (i = 0; i < _aqualink_data->total_buttons; i++) { - // NSF I could pull the text here for the real light color name. 4th value in json - if (strcmp(request.third.value, _aqualink_data->aqbuttons[i].name) == 0) { - //set_light_mode(request.second.value, i); - panel_device_request(_aqualink_data, LIGHT_MODE, i, request.second.value, NET_API); - break; - } - } - //set_light_mode(request.second.value, 0); - } else { - int i; - bool found = false; - for (i = 0; i < _aqualink_data->total_buttons; i++) { - if (strcmp(request.first.value, _aqualink_data->aqbuttons[i].name) == 0) { - int pi; - LOG(NET_LOG,LOG_INFO, "WS: button parameter request '%s' '%s'\n",_aqualink_data->aqbuttons[i].name, request.second.value); - for (pi=0; pi < _aqualink_data->num_pumps; pi++) { - if (_aqualink_data->pumps[pi].button == &_aqualink_data->aqbuttons[i]) { - LOG(NET_LOG,LOG_NOTICE, "WS: request to change pump %d %s to %s\n",pi+1, _aqualink_data->aqbuttons[i].name, request.second.value); - _aqualink_data->unactioned.type = PUMP_RPM; - _aqualink_data->unactioned.value = atoi(request.second.value); - _aqualink_data->unactioned.id = _aqualink_data->pumps[pi].pumpIndex; - found=true; - break; - } - } - } - } - if (!found) - LOG(NET_LOG,LOG_DEBUG, "WS: Unknown parameter %s\n", request.first.value); - } - } -} - -#endif // INCLUDE_V1_API \ No newline at end of file +#endif \ No newline at end of file diff --git a/net_services.h b/net_services.h index b6315da..6a320e5 100644 --- a/net_services.h +++ b/net_services.h @@ -29,7 +29,7 @@ void stop_net_services(); time_t poll_net_services(int timeout_ms); void broadcast_aqualinkstate(); void broadcast_aqualinkstate_error(char *msg); -void broadcast_logs(char *msg); +void broadcast_log(char *msg); //#endif diff --git a/onetouch.c b/onetouch.c index 200a146..09d5b7e 100644 --- a/onetouch.c +++ b/onetouch.c @@ -604,6 +604,11 @@ unsigned char *last_onetouch_packet() return &_last_msg_type; } +void set_onetouch_lastmsg(unsigned char msgtype) +{ + _last_msg_type = msgtype; +} + bool process_onetouch_packet(unsigned char *packet, int length, struct aqualinkdata *aq_data) { static bool filling_menu = false; @@ -651,7 +656,8 @@ bool process_onetouch_packet(unsigned char *packet, int length, struct aqualinkd _last_kick_type = KICKT_CMD; } */ - _last_msg_type = packet[PKT_CMD]; + //_last_msg_type = packet[PKT_CMD]; + set_onetouch_lastmsg(packet[PKT_CMD]); // Receive 0x04 for System menu (before 0x02) // Receive 0x04 for startup menu (before 0x02) diff --git a/onetouch.h b/onetouch.h index 63855ee..f18d6f6 100644 --- a/onetouch.h +++ b/onetouch.h @@ -72,7 +72,7 @@ char *onetouch_menu_hlightchars(int *len); int onetouch_menu_find_index(char *text); int ot_atoi(const char* str); int ot_strcmp(const char *s1, const char *s2); - +void set_onetouch_lastmsg(unsigned char msgtype); diff --git a/release/aqualinkd b/release/aqualinkd index 83ef10c747389a553d6a15e39abb974e04e80b2e..aecae90a5f4ce8a5bde560ecb2975a38e113549f 100755 GIT binary patch delta 165342 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

+@Kd$jLO_MRzdHtqYeXK( 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 delta 169848 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 bEG~XDE8KXQRDE5UT@BnG~z{*fmykg8N|$ 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

V!7DF5X(*-L-asBLo8hl3~v=; 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 Bq4EF# delta 19257 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 e%2E4A#3VkCef #include +#include "serial_logger.h" #include "aq_serial.h" #include "utils.h" #include "packetLogger.h" @@ -38,7 +39,7 @@ #define SLOG_MAX 80 #define PACKET_MAX 600 -#define VERSION "serial_logger V1.7" +#define VERSION "serial_logger V1.8" /* typedef enum used { @@ -83,7 +84,8 @@ bool _playback_file = false; int timespec_subtract (struct timespec *result, const struct timespec *x, const struct timespec *y); -void broadcast_logs(char *msg){ +#ifdef SERIAL_LOGGER +void broadcast_log(char *msg){ // Do nothing, just for utils.c to work. } @@ -93,6 +95,7 @@ void intHandler(int dummy) { if (_playback_file) // If we are reading file, loop is irevelent exit(0); } +#endif #define MASTER " <-- Master control panel" #define SWG " <-- Salt Water Generator (Aquarite mode)" @@ -389,30 +392,37 @@ void getPanelInfo(int rs_fd, unsigned char *packet_buffer, int packet_length) } } +#ifdef SERIAL_LOGGER int main(int argc, char *argv[]) { int rs_fd; - int packet_length; - int last_packet_length = 0; - unsigned char packet_buffer[AQ_MAXPKTLEN]; - unsigned char last_packet_buffer[AQ_MAXPKTLEN]; - unsigned char lastID = 0x00; + //int packet_length; + //int last_packet_length = 0; + //unsigned char packet_buffer[AQ_MAXPKTLEN]; + //unsigned char last_packet_buffer[AQ_MAXPKTLEN]; + //unsigned char lastID = 0x00; int i = 0; - bool found; - serial_id_log slog[SLOG_MAX]; - serial_id_log pent_slog[SLOG_MAX]; - int sindex = 0; - int pent_sindex = 0; - int received_packets = 0; + //bool found; + //serial_id_log slog[SLOG_MAX]; + //serial_id_log pent_slog[SLOG_MAX]; + //int sindex = 0; + //int pent_sindex = 0; + //int received_packets = 0; int logPackets = PACKET_MAX; int logLevel = LOG_NOTICE; bool panleProbe = true; bool rsSerialSpeedTest = false; bool serialBlocking = true; bool errorMonitor = false; - struct timespec start_time; - struct timespec end_time; - struct timespec elapsed; - int blankReads = 0; + //struct timespec start_time; + //struct timespec end_time; + //struct timespec elapsed; + //int blankReads = 0; + //bool returnError = false; + + + + + //bool monitorOnly = false; //bool playback_file = false; @@ -424,6 +434,7 @@ int main(int argc, char *argv[]) { _aqconfig_.readahead_b4_write = false; _aqconfig_.log_protocol_packets = false; _aqconfig_.log_raw_bytes = false; + _aqconfig_.ftdi_low_latency = true; printf("AqualinkD %s\n",VERSION); @@ -437,9 +448,9 @@ int main(int argc, char *argv[]) { //fprintf(stderr, "Optional parameters are -d (debug) & -p (log # packets) & -i & -r (raw) ie:=\n\t%s /dev/ttyUSB0 -d -p 1000 -i 0x08\n\n", argv[0]); fprintf(stderr, "Optional parameters are :-\n"); fprintf(stderr, "\t-n (Do not probe panel for type/rev info)\n"); - fprintf(stderr, "\t-d (debug)\n"); + fprintf(stderr, "\t-d (debug / print messages)\n"); fprintf(stderr, "\t-p (# packets to log, default=%d)\n",PACKET_MAX); - fprintf(stderr, "\t-i (just log these ID's, can use multiple -i)\n"); + fprintf(stderr, "\t-i (just log specific ID, can use multiple -i. will also force -d switc)\n"); fprintf(stderr, "\t-r (raw)\n"); fprintf(stderr, "\t-s (Serial Speed Test / OS caching issues)\n"); fprintf(stderr, "\t-lpack (log RS packets to %s)\n",RS485LOGFILE); @@ -495,6 +506,12 @@ int main(int argc, char *argv[]) { rs_fd = init_serial_port(argv[1]); else rs_fd = init_blocking_serial_port(argv[1]); + + if (rs_fd < 0) { + LOG(RSSD_LOG, LOG_ERR, "Unable to open port: %s\n", argv[1]); + displayLastSystemError(argv[1]); + return -1; + } } signal(SIGINT, intHandler); @@ -514,7 +531,37 @@ int main(int argc, char *argv[]) { printf("Please wait."); startPacketLogger(); - //startPacketLogging(true,true); + + serial_logger(rs_fd, argv[1], logPackets, logLevel, panleProbe, rsSerialSpeedTest, errorMonitor); + + stopPacketLogger(); + + close_serial_port(rs_fd); +} + +#endif // SERIAL_LOGGER + + + + +int serial_logger(int rs_fd, char *port_name, int logPackets, int logLevel, bool panleProbe, bool rsSerialSpeedTest, bool errorMonitor) { + int packet_length; + int last_packet_length = 0; + unsigned char packet_buffer[AQ_MAXPKTLEN]; + unsigned char last_packet_buffer[AQ_MAXPKTLEN]; + unsigned char lastID = 0x00; + int i = 0; + bool found; + serial_id_log slog[SLOG_MAX]; + serial_id_log pent_slog[SLOG_MAX]; + int sindex = 0; + int pent_sindex = 0; + int received_packets = 0; + struct timespec start_time; + struct timespec end_time; + struct timespec elapsed; + int blankReads = 0; + bool returnError = false; clock_gettime(CLOCK_REALTIME, &start_time); @@ -527,12 +574,14 @@ int main(int argc, char *argv[]) { if (packet_length == AQSERR_READ) { // Unrecoverable read error. Force an attempt to reconnect. - LOG(RSSD_LOG, LOG_ERR, "ERROR, on serial port! Please check %s\n",argv[1]); + LOG(RSSD_LOG, LOG_ERR, "ERROR, on serial port! Please check %s\n",port_name); _keepRunning = false; + returnError = true; } else if (packet_length == AQSERR_TIMEOUT) { // Unrecoverable read error. Force an attempt to reconnect. - LOG(RSSD_LOG, LOG_ERR, "ERROR, Timeout on serial port, nothing read! Please check %s\n",argv[1]); + LOG(RSSD_LOG, LOG_ERR, "ERROR, Timeout on serial port, nothing read! Please check %s\n",port_name); _keepRunning = false; + returnError = true; } else if (packet_length < 0) { // Error condition if (errorMonitor && last_packet_length > 0) { // Error packet wwould have already been printed. @@ -545,8 +594,9 @@ int main(int argc, char *argv[]) { } else if (packet_length == 0) { // Nothing read if (++blankReads > (rsSerialSpeedTest?100000000:1000) ) { - LOG(RSSD_LOG, LOG_ERR, "ERROR, too many blank reads! Please check %s\n",argv[1]); + LOG(RSSD_LOG, LOG_ERR, "ERROR, too many blank reads! Please check %s\n",port_name); _keepRunning = false; + returnError = true; } //if (!rsSerialSpeedTest) delay(1); @@ -646,10 +696,16 @@ int main(int argc, char *argv[]) { clock_gettime(CLOCK_REALTIME, &end_time); - stopPacketLogger(); + //stopPacketLogger(); + + // Reset and close the port. + //close_serial_port(rs_fd); - if (errorMonitor) { + // If we were monitoring errors, or filtering messages, or no panel probe, don;t print details + if (errorMonitor || panleProbe==false || _filters > 0) { return 0; + } else if (returnError) { + return 1; } timespec_subtract(&elapsed, &end_time, &start_time); @@ -760,4 +816,69 @@ int timespec_subtract (struct timespec *result, const struct timespec *x, const /* Return 1 if result is negative. */ return x->tv_sec < tmp.tv_sec; -} \ No newline at end of file +} + + + + +/********************************************* +// Notes on PC Dock + +To start download. +Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x00|0x00|0x2b|0x10|0x03| + +Then the download is a lot of these. +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x00|0x00|0x00|0x00|0x3c|0x00|0x00|0x64|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x05|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x29|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x01|0x00|0x2c|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x01|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x85|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x02|0x00|0x2d|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x02|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x86|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x03|0x00|0x2e|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x03|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x01|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x04|0x00|0x22|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xae|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x04|0x00|0x2f|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x04|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0x4f|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x05|0x00|0x30|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x05|0x00|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0xff|0x49|0x10|0x03| +Jandy From 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x00|0x19|0x06|0x00|0x31|0x10|0x03| + +End of download is (Not sure how it knows to send ACK and not 0x19 reply) +Jandy To 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x58|0x1a|0x56|0x00|0x4d|0xc2|0x31|0x42|0x41|0x36|0x32|0x38|0x32|0x35|0x42|0x37|0x43|0x36|0x39|0x41|0x34|0x43|0x43|0x36|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xff|0xff|0xff|0x52|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x4f|0x10|0x03| +Jandy From 0x58 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x57|0x00|0x6a|0x10|0x03| + + +To start upload +Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03| +Jandy From 0x58 of type Unknown '0x17' | HEX: 0x10|0x02|0x00|0x17|0x29|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x00|0x00|0x83|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x00|0x00|0x00|0x00|0x3c|0x00|0x00|0x64|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x05|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xd1|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x01|0x00|0x84|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x01|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x2d|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x02|0x00|0x85|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x02|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x2e|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x03|0x00|0x86|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x03|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x01|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x04|0x00|0x22|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x56|0x10|0x03| + +Not sure on end, kind-a looks like control panel sends probe back. +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x55|0x00|0xd8|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x55|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x01|0x00|0x01|0x00|0x57|0x50|0x77|0x72|0x20|0x43|0x6e|0x74|0x72|0x20|0x42|0x00|0x00|0x58|0x01|0xff|0x17|0x00|0x00|0x6c|0x17|0x00|0x00|0x6c|0x17|0x00|0x00|0x6c|0x17|0x00|0x00|0x6c|0x20|0x20|0x20|0x20|0x20|0x20|0x20|0x20|0x20|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xb0|0x10|0x03| + +Jandy To 0x58 of type Unknown '0x19' | HEX: 0x10|0x02|0x58|0x19|0x56|0x00|0xd9|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x56|0x00|0x4d|0xc2|0x31|0x42|0x41|0x36|0x32|0x38|0x32|0x35|0x42|0x37|0x43|0x36|0x39|0x41|0x34|0x43|0x43|0x36|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xff|0xff|0xff|0x52|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xf7|0x10|0x03| + +Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x56|0x00|0x4d|0xc2|0x31|0x42|0x41|0x36|0x32|0x38|0x32|0x35|0x42|0x37|0x43|0x36|0x39|0x41|0x34|0x43|0x43|0x36|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xff|0xff|0xff|0x52|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xf7|0x10|0x03| + +Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03| +Jandy From 0x58 of type Unknown '0x1a' | HEX: 0x10|0x02|0x00|0x1a|0x56|0x00|0x4d|0xc2|0x31|0x42|0x41|0x36|0x32|0x38|0x32|0x35|0x42|0x37|0x43|0x36|0x39|0x41|0x34|0x43|0x43|0x36|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xff|0xff|0xff|0x52|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0xf7|0x10|0x03| + +********************************************/ \ No newline at end of file diff --git a/serial_logger.h b/serial_logger.h new file mode 100644 index 0000000..0a56f67 --- /dev/null +++ b/serial_logger.h @@ -0,0 +1,16 @@ + +#ifndef SERIAL_LOGGER_H_ +#define SERIAL_LOGGER_H_ + +/* +int logPackets = PACKET_MAX; + int logLevel = LOG_NOTICE; + bool panleProbe = true; + bool rsSerialSpeedTest = false; + //bool serialBlocking = true; + bool errorMonitor = false; +*/ +//int serial_logger(int rs_fd, char *port_name); +int serial_logger(int rs_fd, char *port_name, int logPackets, int logLevel, bool panleProbe, bool rsSerialSpeedTest, bool errorMonitor); + +#endif // SERIAL_LOGGER_H_ \ No newline at end of file diff --git a/serialadapter.c b/serialadapter.c index 2674aa6..9533339 100644 --- a/serialadapter.c +++ b/serialadapter.c @@ -195,23 +195,25 @@ void get_aqualink_rssadapter_setpoints() { push_rssa_cmd(getPoolSP2); } -void setLEDstate( aqled *led, unsigned char state, struct aqualinkdata *aq_data) +// Return true if we change the state. +bool setLEDstate( aqled *led, unsigned char state, struct aqualinkdata *aq_data) { if (state == 0x00) { if (led->state != OFF) { led->state = OFF; - aq_data->updated = true; + return true; } } else if (state == 0x01) { if (led->state != ON) { led->state = ON; - aq_data->updated = true; + return true; } } // Should also add FLASH and ENABLE. //_aqualink_data.aqbuttons[13].led->state = OFF; - // + // + return false; } bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualinkdata *aq_data) { @@ -271,37 +273,42 @@ bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualin if (packet[6] == 0x01) { LOG(RSSA_LOG,LOG_INFO,"Units are Deg C\n"); aq_data->temp_units = CELSIUS; + rtn = true; } else if (packet[6] == 0x00) { LOG(RSSA_LOG,LOG_INFO,"Units are Deg F\n"); aq_data->temp_units = FAHRENHEIT; + rtn = true; } else { LOG(RSSA_LOG,LOG_ERR,"Units are Unknown\n"); } } else if (packet[4] == RS_SA_POOLSP) { LOG(RSSA_LOG,LOG_INFO,"Pool SP is %d\n", packet[6]); aq_data->pool_htr_set_point = (int) packet[6]; + rtn = true; } else if (packet[4] == RS_SA_SPASP) { LOG(RSSA_LOG,LOG_INFO,"Spa SP is %d\n", packet[6]); aq_data->spa_htr_set_point = (int) packet[6]; + rtn = true; } else if (packet[4] == RS_SA_POOLSP2) { LOG(RSSA_LOG,LOG_INFO,"Pool SP2 is %d\n", packet[6]); aq_data->spa_htr_set_point = (int) packet[6]; + rtn = true; } else if (packet[4] == 0x03) { // These are device status messages #ifdef AQ_RS16 if (packet[7] == RS_SA_AUX12) { LOG(RSSA_LOG,LOG_INFO,"AUX12 %d\n", packet[6]); - setLEDstate(aq_data->aqbuttons[13].led, packet[6], aq_data); + rtn = setLEDstate(aq_data->aqbuttons[13].led, packet[6], aq_data); //_aqualink_data.aqbuttons[13].led->state = OFF; } else if (packet[7] == RS_SA_AUX13) { LOG(RSSA_LOG,LOG_INFO,"AUX13 %d\n", packet[6]); - setLEDstate(aq_data->aqbuttons[14].led, packet[6], aq_data); + rtn = setLEDstate(aq_data->aqbuttons[14].led, packet[6], aq_data); } else if (packet[7] == RS_SA_AUX14) { LOG(RSSA_LOG,LOG_INFO,"AUX14 %d\n", packet[6]); - setLEDstate(aq_data->aqbuttons[15].led, packet[6], aq_data); + rtn = setLEDstate(aq_data->aqbuttons[15].led, packet[6], aq_data); } else if (packet[7] == RS_SA_AUX15) { LOG(RSSA_LOG,LOG_INFO,"AUX15 %d\n", packet[6]); - setLEDstate(aq_data->aqbuttons[16].led, packet[6], aq_data); + rtn = setLEDstate(aq_data->aqbuttons[16].led, packet[6], aq_data); } #endif } @@ -359,6 +366,9 @@ unsigned char AllButton2RSsrialAdapter(unsigned char abcmd) #ifdef DO_NOT_COMPILE + +/ +//********************************************* // Notes on protocol for Serial Adapter. /* @@ -1285,6 +1295,9 @@ Solar Heat Off Debug: RS Serial: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x12|0x25|0x10|0x03| Debug: RS Serial: To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x03|0x00|0x00|0x12|0x82|0x10|0x03| + + + */ #endif \ No newline at end of file diff --git a/utils.c b/utils.c index 570980f..bf17dec 100644 --- a/utils.c +++ b/utils.c @@ -46,7 +46,7 @@ // Since this get's compiled without net_services for serial_logger // pre-define this here rather than include netservices.h -void broadcast_logs(char *msg); +void broadcast_log(char *msg); static bool _daemonise = false; static bool _log2file = false; @@ -79,6 +79,14 @@ void setLoggingPrms(int level , bool deamonized, char* log_file, char *error_mes } } +void setSystemLogLevel( int level) +{ + _log_level = level; +} +int getSystemLogLevel() +{ + return _log_level; +} int getLogLevel(int16_t from) { @@ -93,36 +101,25 @@ int getLogLevel(int16_t from) return _log_level; } - -void startInlineDebug() -{ - _log_level = LOG_DEBUG; - _log2file = true; - if (_log_filename == NULL) - _log_filename = DEFAULT_LOG_FILE; -} - -void startInlineSerialDebug() +void startInlineLog2File() { - _log_level = LOG_DEBUG_SERIAL; - _log2file = true; + _log2file = true; if (_log_filename == NULL) _log_filename = DEFAULT_LOG_FILE; } - -void stopInlineDebug() +void stopInlineLog2File() { - _log_level = _cfg_log_level; _log2file = _cfg_log2file; } - char *getInlineLogFName() { return _log_filename; } - - - +void cleanInlineLogFile() { + if (_log_filename != NULL) { + fclose(fopen(_log_filename, "w")); + } +} bool islogFileReady() { if (_log_filename != NULL) { @@ -134,11 +131,36 @@ bool islogFileReady() return false; } + +#ifdef INCLUDE_OLD_DEBUG_HTML +void startInlineDebug() +{ + _log_level = LOG_DEBUG; + _log2file = true; + if (_log_filename == NULL) + _log_filename = DEFAULT_LOG_FILE; +} + +void startInlineSerialDebug() +{ + _log_level = LOG_DEBUG_SERIAL; + _log2file = true; + if (_log_filename == NULL) + _log_filename = DEFAULT_LOG_FILE; +} + +void stopInlineDebug() +{ + _log_level = _cfg_log_level; + _log2file = _cfg_log2file; +} void cleanInlineDebug() { if (_log_filename != NULL) { fclose(fopen(_log_filename, "w")); } } +#endif + /* * This function reports the error and @@ -216,6 +238,14 @@ int text2elevel(char* level) return LOG_ERR; } +const char* loglevel2name(int level) +{ + if (level == LOG_DEBUG_SERIAL) + return "Debug Serial:"; + + return elevel2text(level); +} + const char* logmask2name(int16_t from) { switch (from) { @@ -415,6 +445,16 @@ void removeDebugLogMask(int16_t flag) _logforcemask &= ~flag; } +void clearDebugLogMask() +{ + _logforcemask = 0; +} + +bool isDebugLogMaskSet(int16_t flag) +{ + return _logforcemask & flag; +} + void _LOG(int16_t from, int msg_level, char * message); /* @@ -435,7 +475,6 @@ void logMessage(int msg_level, const char *format, ...) } */ - void LOG(int16_t from, int msg_level, const char * format, ...) { //printf("msg_level=%d _log_level=%d mask=%d\n",msg_level,_log_level,(_logforcemask & from)); @@ -513,7 +552,7 @@ void _LOG(int16_t from, int msg_level, char *message) */ // Send logs to any websocket that's interested. - broadcast_logs(message); + broadcast_log(message); // Sent the log to the UI if configured. if (msg_level <= LOG_ERR && _loq_display_message != NULL) { diff --git a/utils.h b/utils.h index 92b2a4c..d9c64e4 100644 --- a/utils.h +++ b/utils.h @@ -5,6 +5,9 @@ #ifndef UTILS_H_ #define UTILS_H_ +// In future release, delete this and all code, it's been replaced with aqmanager +#define INCLUDE_OLD_DEBUG_HTML + #define LOG_DEBUG_SERIAL 8 #ifndef EXIT_SUCCESS @@ -17,9 +20,9 @@ #define FALSE 0 #endif -#define LOGBUFFER 1024 +#define LOGBUFFER 256 -#define MAXLEN 256 +//#define MAXLEN 256 //#define round(a) (int) (a+0.5) // 0 decimal places (doesn't work for negative numbers) #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) @@ -55,6 +58,8 @@ typedef enum //void setLoggingPrms(int level , bool deamonized, char* log_file); void setLoggingPrms(int level , bool deamonized, char* log_file, char *error_messages); int getLogLevel(int16_t from); +int getSystemLogLevel(); +void setSystemLogLevel( int level); void daemonise ( char *pidFile, void (*main_function)(void) ); //void debugPrint (char *format, ...); void displayLastSystemError (const char *on_what); @@ -62,6 +67,10 @@ void displayLastSystemError (const char *on_what); void addDebugLogMask(int16_t flag); void removeDebugLogMask(int16_t flag); +void clearDebugLogMask(); +bool isDebugLogMaskSet(int16_t flag); +const char* logmask2name(int16_t mask); +const char* loglevel2name(int level); //#define logMessage(msg_level, format, ...) LOG (1, msg_level, format, ##__VA_ARGS__) @@ -93,13 +102,22 @@ char* stristr(const char* haystack, const char* needle); char *prittyString(char *str); //void writePacketLog(char *buff); //void closePacketLog(); + +void startInlineLog2File(); +void stopInlineLog2File(); +void cleanInlineLogFile(); + +#ifdef INCLUDE_OLD_DEBUG_HTML void startInlineDebug(); -void startInlineSerialDebug(); void stopInlineDebug(); +void startInlineSerialDebug(); void cleanInlineDebug(); +#endif + + char *getInlineLogFName(); bool islogFileReady(); -const char *logmask2name(int16_t from); +//const char *logmask2name(int16_t from); //#ifndef _UTILS_C_ extern bool _daemon_; diff --git a/version.h b/version.h index be623b5..d3521e4 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ #define AQUALINKD_NAME "Aqualink Daemon" -#define AQUALINKD_VERSION "2.3.0f" +#define AQUALINKD_VERSION "2.3.1" diff --git a/web/controller.html b/web/controller.html index b1614dd..aabf480 100644 --- a/web/controller.html +++ b/web/controller.html @@ -1872,7 +1872,8 @@ case "switch": if (deviceobj.type_ext == "switch_vsp") { if (deviceobj.Pump_Type == "vfPump") { - html = html + ''; + //html = html + ''; + html = html + ''; } else { html = html + ''; }