diff --git a/.gitignore b/.gitignore index b9f50c3c40..eee8eea8c2 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ Makefile.in /conf_nut_report_feature /conf??????/ /dir.??????/ +/configure-test*/ /cscope.* /depcomp /INSTALL diff --git a/.travis.yml b/.travis.yml index ca5608663e..b06bc447bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -240,7 +240,7 @@ _matrix_required_linux_pass3_large: _matrix_linux_gnustd_nowarn: include: &_matrix_linux_gnustd_nowarn - - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" + - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" os: linux sudo: false services: @@ -341,6 +341,57 @@ _matrix_linux_gnustd_nowarn: packages: - *deps_driverlibs +# Try ARM builds to check for issues with non-x86 CPUs +_matrix_linux_gnustd_nowarn_arm_64bit_viable: + include: &_matrix_linux_gnustd_nowarn_arm_64bit_viable + - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" + os: linux + arch: arm64 + sudo: false + services: + - docker + compiler: gcc + addons: + apt: + packages: + - *deps_driverlibs + + - env: NUT_MATRIX_TAG="gnu17-gcc-9-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=gcc-9 CXX=g++-9 + os: linux + arch: arm64 + sudo: false + services: + - docker + compiler: gcc + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-9 + - gcc-9 + - *deps_driverlibs + +_matrix_linux_gnustd_nowarn_arm_64bit_fatal: + include: &_matrix_linux_gnustd_nowarn_arm_64bit_fatal + - env: NUT_MATRIX_TAG="gnu17-clang-8-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=clang-8 CXX=clang++-8 + os: linux + arch: arm64 + dist: xenial + sudo: false + services: + - docker + compiler: clang + if: branch =~ fightwarn + addons: + apt: + sources: + - llvm-toolchain-xenial-8 + packages: + - clang-8 + - clang-format-8 + - *deps_driverlibs + # At this time, anything with strict C standard fails on Linux, even "nowarn" cases: _matrix_linux_cstd_nowarn: include: &_matrix_linux_cstd_nowarn @@ -427,7 +478,7 @@ _matrix_linux_gnustd_warn_viable: packages: - *deps_driverlibs - - env: NUT_MATRIX_TAG="gnu99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++99" + - env: NUT_MATRIX_TAG="gnu99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++98" os: linux sudo: false services: @@ -502,7 +553,7 @@ _matrix_linux_gnustd_warn_fatal: # The hardest of two worlds: both strict C standards on Linux and fatal warnings: _matrix_linux_cstd_warn: include: &_matrix_linux_cstd_warn - - env: NUT_MATRIX_TAG="c99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -std=c++99" + - env: NUT_MATRIX_TAG="c99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -std=c++98" os: linux sudo: false services: @@ -591,7 +642,7 @@ _matrix_linux_cstd_warn: _matrix_freebsd_gnustd_nowarn: include: &_matrix_freebsd_gnustd_nowarn - - env: NUT_MATRIX_TAG="gnu99-gcc-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" CC=gcc CXX=g++ + - env: NUT_MATRIX_TAG="gnu99-gcc-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" CC=gcc CXX=g++ os: freebsd sudo: true compiler: gcc @@ -625,7 +676,7 @@ _matrix_freebsd_gnustd_nowarn: _matrix_freebsd_gnustd_warn_viable: include: &_matrix_freebsd_gnustd_warn_viable - - env: NUT_MATRIX_TAG="gnu99-gcc-default-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++99" CC=gcc CXX=g++ + - env: NUT_MATRIX_TAG="gnu99-gcc-default-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++98" CC=gcc CXX=g++ os: freebsd sudo: true compiler: gcc @@ -855,6 +906,7 @@ _matrix_required_linux: - *_matrix_required_linux_pass3_large - *_matrix_linux_gnustd_nowarn - *_matrix_linux_gnustd_warn_viable + - *_matrix_linux_gnustd_nowarn_arm_64bit_viable _matrix_linux_gnustd_warn: include: &_matrix_linux_gnustd_warn @@ -866,6 +918,16 @@ _matrix_allowfail_linux: - *_matrix_linux_cstd_nowarn - *_matrix_linux_gnustd_warn_fatal - *_matrix_linux_cstd_warn + - *_matrix_linux_gnustd_nowarn_arm_64bit_fatal + +_matrix_linux_gnustd_nowarn_arm_64bit: + include: &_matrix_linux_gnustd_nowarn_arm_64bit + - *_matrix_linux_gnustd_nowarn_arm_64bit_viable + - *_matrix_linux_gnustd_nowarn_arm_64bit_fatal + +_matrix_linux_arm: + include: &_matrix_linux_arm + - *_matrix_linux_gnustd_nowarn_arm_64bit _matrix_linux: include: &_matrix_linux @@ -935,6 +997,8 @@ _matrix_gnustd_nowarn: - *_matrix_linux_gnustd_nowarn - *_matrix_freebsd_gnustd_nowarn # -*_matrix_windows_gnustd_nowarn + - *_matrix_linux_gnustd_nowarn_arm_64bit_viable + - *_matrix_linux_gnustd_nowarn_arm_64bit_fatal _matrix_warn: include: &_matrix_warn @@ -997,7 +1061,9 @@ jobs: ################################################################################### # Note: "env" lines below must exactly describe a matrix option defined above allow_failures: -#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" + +### Linux on x86_64 +#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" #OK# - env: NUT_MATRIX_TAG="gnu99-gcc-7-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" CC=gcc-7 CXX=g++-7 #OK# - env: NUT_MATRIX_TAG="gnu11-gcc-7-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu11" CXXFLAGS="-std=gnu++11" CC=gcc-7 CXX=g++-7 #OK# - env: NUT_MATRIX_TAG="gnu17-gcc-9-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=gcc-9 CXX=g++-9 @@ -1010,8 +1076,8 @@ jobs: - env: NUT_MATRIX_TAG="c17-clang-8-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=c17" CXXFLAGS="-std=c++17" CC=clang-8 CXX=clang++-8 - env: NUT_MATRIX_TAG="c17-clang-8-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c17" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++17" CC=clang-8 CXX=clang++-8 #OK# - env: NUT_MATRIX_TAG="cDefault-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic" CXXFLAGS="-Wall -Wextra -Werror" -#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++99" - - env: NUT_MATRIX_TAG="c99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -std=c++99" +#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++98" + - env: NUT_MATRIX_TAG="c99-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -std=c++98" #OK# - env: NUT_MATRIX_TAG="gnu99-gcc-7-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++98" CC=gcc-7 CXX=g++-7 - env: NUT_MATRIX_TAG="c99-clang-5.0-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++99" CC=clang-5.0 CXX=clang++-5.0 - env: NUT_MATRIX_TAG="c11-clang-5.0-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c11" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++11" CC=clang-5.0 CXX=clang++-5.0 @@ -1020,15 +1086,22 @@ jobs: #OK# - env: NUT_MATRIX_TAG="gnu89-gcc-default-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu89" CXXFLAGS="-std=gnu++89" - env: NUT_MATRIX_TAG="c89-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=c89" CXXFLAGS="-Wall -Wextra -Werror -std=c++89" - env: NUT_MATRIX_TAG="gnu89-gcc-default-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu89" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++89" -### FreeBSD -#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" CC=gcc CXX=g++ + +### Linux on ARM +#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" +#OK# - env: NUT_MATRIX_TAG="gnu17-gcc-9-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=gcc-9 CXX=g++-9 + - env: NUT_MATRIX_TAG="gnu17-clang-8-nowarn-ARM-64bit" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=clang-8 CXX=clang++-8 + +### FreeBSD on x86_64 +#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++98" CC=gcc CXX=g++ #OK# - env: NUT_MATRIX_TAG="gnu99-clang-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" CC=clang CXX=clang++ #OK# - env: NUT_MATRIX_TAG="gnu17-gcc-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++17" CC=gcc CXX=g++ #OK# - env: NUT_MATRIX_TAG="gnu17-clang-freebsd-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++17" CC=clang CXX=clang++ -#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++99" CC=gcc CXX=g++ +#OK# - env: NUT_MATRIX_TAG="gnu99-gcc-default-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++98" CC=gcc CXX=g++ #OK# - env: NUT_MATRIX_TAG="gnu17-gcc-default-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -pedantic -std=gnu17" CXXFLAGS="-Wall -Wextra -Werror -std=gnu++17" CC=gcc CXX=g++ - env: NUT_MATRIX_TAG="gnu99-clang-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=gnu99" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=gnu++99" CC=clang CXX=clang++ - env: NUT_MATRIX_TAG="gnu17-clang-freebsd-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=gnu17" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=gnu++17" CC=clang CXX=clang++ + ### macosx #OK# - env: NUT_MATRIX_TAG="gnu99-clang-xcode10.2-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" CC=clang CXX=clang++ #OK# - env: NUT_MATRIX_TAG="gnu17-clang-xcode10.2-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=gnu17" CXXFLAGS="-std=gnu++17" CC=clang CXX=clang++ @@ -1040,7 +1113,8 @@ jobs: - env: NUT_MATRIX_TAG="c17-clang-xcode10.2-nowarn" BUILD_TYPE=default-all-errors CFLAGS="-std=c17" CXXFLAGS="-std=c++17" CC=clang CXX=clang++ - env: NUT_MATRIX_TAG="c17-clang-xcode10.2-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c17" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++17" CC=clang CXX=clang++ - env: NUT_MATRIX_TAG="c11-clang-xcode7.3-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c11" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++11" CC=clang CXX=clang++ -### windows + +### windows on x86_64 - env: NUT_MATRIX_TAG="gnu99-clang-win-nowarn" BUILD_TYPE=default-all-errors CPPFLAGS="-fms-extensions" CFLAGS="-std=gnu99" CXXFLAGS="-std=gnu++99" CC=clang CXX=clang++ - env: NUT_MATRIX_TAG="gnu99-clang-win-warn" BUILD_TYPE=default-all-errors CFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -pedantic -std=c99" CXXFLAGS="-Wall -Wextra -Werror -Weverything -Wno-unused-macros -Wno-reserved-id-macro -Wno-padded -std=c++99" CC=clang CXX=clang++ - env: NUT_MATRIX_TAG="c99-clang-win-nowarn" BUILD_TYPE=default-all-errors CPPFLAGS="-fms-extensions" CFLAGS="-std=c99" CXXFLAGS="-std=c++99" CC=clang CXX=clang++ diff --git a/common/common.c b/common/common.c index 84c5e39087..4a5b3b9907 100644 --- a/common/common.c +++ b/common/common.c @@ -41,6 +41,10 @@ const char *UPS_VERSION = NUT_VERSION_MACRO; #include "nut_stdint.h" #if UINTPTR_MAX == 0xffffffffffffffffULL # define BUILD_64 1 +#else +# ifdef BUILD_64 +# undef BUILD_64 +# endif #endif int nut_debug_level = 0; @@ -720,18 +724,18 @@ static const char * search_paths[] = { LIBDIR, "/usr"LIBDIR, "/usr/local"LIBDIR, -#if BUILD_64 +#ifdef BUILD_64 // Fall back to explicit preference of 64-bit paths as named on some OSes "/usr/lib/64", "/usr/lib64", #endif "/usr/lib", -#if BUILD_64 +#ifdef BUILD_64 "/lib/64", "/lib64", #endif "/lib", -#if BUILD_64 +#ifdef BUILD_64 "/usr/local/lib/64", "/usr/local/lib64", #endif diff --git a/drivers/gamatronic.c b/drivers/gamatronic.c index d1fe7de624..3d92950721 100644 --- a/drivers/gamatronic.c +++ b/drivers/gamatronic.c @@ -2,7 +2,9 @@ * * SEC UPS Driver ported to the new NUT API for Gamatronic UPS Usage. * - * Copyright (C) + * TODO: Replace lots of printf() by upslogx() or upsdebugx() below! + * + * Copyright (C) * 2001 John Marley * 2002 Jules Taplin * 2002 Eric Lawson @@ -24,9 +26,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ - + #include "main.h" -#include "serial.h" +#include "serial.h" #include "gamatronic.h" #define DRIVER_NAME "Gamatronic UPS driver" @@ -45,252 +47,234 @@ upsdrv_info_t upsdrv_info = { { NULL } }; -#define ENDCHAR '\r' -#define IGNCHARS "" -#define SER_WAIT_SEC 1 /* allow 3.0 sec for ser_get calls */ +#define ENDCHAR '\r' +#define IGNCHARS "" +#define SER_WAIT_SEC 1 /* allow 3.0 sec for ser_get calls */ #define SER_WAIT_USEC 0 int sec_upsrecv (char *buf) { - - char lenbuf[4]; - int ret; - - - ser_get_line(upsfd, buf, 140, ENDCHAR, IGNCHARS,SER_WAIT_SEC, SER_WAIT_USEC); - if (buf[0] == SEC_MSG_STARTCHAR){ - switch (buf[1]){ - case SEC_NAK: - return(-1); - case SEC_ACK: - return(0); - case SEC_DATAMSG: - strncpy(lenbuf,buf+2,3); - lenbuf[3] = '\0'; - ret = atoi(lenbuf); - if (ret > 0){ - strcpy(buf,buf+5); - return(ret);} - else return (-2); - default: - return(-2); + char lenbuf[4]; + int ret; + + ser_get_line(upsfd, buf, 140, ENDCHAR, IGNCHARS,SER_WAIT_SEC, SER_WAIT_USEC); + if (buf[0] == SEC_MSG_STARTCHAR) { + switch (buf[1]) { + case SEC_NAK: + return(-1); + case SEC_ACK: + return(0); + case SEC_DATAMSG: + strncpy(lenbuf, buf+2, 3); + lenbuf[3] = '\0'; + ret = atoi(lenbuf); + if (ret > 0) { + strcpy(buf,buf+5); + return(ret); + } + else return (-2); + default: + return(-2); } - } - else - { return (-2); } + } + else + return (-2); } int sec_cmd(const char mode, const char *command, char *msgbuf, int *buflen) { - char msg[140]; - int ret; + char msg[140]; + int ret; - memset(msg, 0, sizeof(msg)); + memset(msg, 0, sizeof(msg)); - /* create the message string */ - if (*buflen > 0) { - snprintf(msg, sizeof(msg), "%c%c%03d%s%s", SEC_MSG_STARTCHAR, - mode, (*buflen)+3, command, msgbuf); - } - else { - snprintf(msg, sizeof(msg), "%c%c003%s", SEC_MSG_STARTCHAR, - mode, command); - } - upsdebugx(1, "PC-->UPS: \"%s\"",msg); - ret = ser_send(upsfd, "%s", msg); - - upsdebugx(1, " send returned: %d",ret); + /* create the message string */ + if (*buflen > 0) { + snprintf(msg, sizeof(msg), "%c%c%03d%s%s", SEC_MSG_STARTCHAR, + mode, (*buflen)+3, command, msgbuf); + } + else { + snprintf(msg, sizeof(msg), "%c%c003%s", SEC_MSG_STARTCHAR, + mode, command); + } + upsdebugx(1, "PC-->UPS: \"%s\"",msg); + ret = ser_send(upsfd, "%s", msg); - if (ret == -1) return -1; + upsdebugx(1, " send returned: %d",ret); - ret = sec_upsrecv(msg); + if (ret == -1) return -1; + ret = sec_upsrecv(msg); - if (ret < 0) return -1; + if (ret < 0) return -1; - strncpy(msgbuf, msg, ret); - upsdebugx(1, "UPS<--PC: \"%s\"",msg); + strncpy(msgbuf, msg, ret); + upsdebugx(1, "UPS<--PC: \"%s\"",msg); -/* *(msgbuf+ret) = '\0';*/ +/* + *(msgbuf+ret) = '\0'; +*/ - *buflen = ret; - return ret; + *buflen = ret; + return ret; } void addquery(const char *cmd, int field, int varnum, int pollflag) { - int q; - - for (q=0; q 0) { - - if (strcmp(sec_varlist[sqv(q,f)].value, r) != 0 ) { - - snprintf(sec_varlist[sqv(q,f)].value, - sizeof(sec_varlist[sqv(q,f)].value), "%s", r); - - sec_setinfo(sqv(q,f), r); + + for (q=0; q 0) { + if (strcmp(sec_varlist[sqv(q,f)].value, r) != 0) { + snprintf(sec_varlist[sqv(q,f)].value, + sizeof(sec_varlist[sqv(q,f)].value), "%s", r); + sec_setinfo(sqv(q,f), r); + } + + /* If SEC VAR is alarm and it's on, add it to the alarm property */ + if (sec_varlist[sqv(q,f)].flags & FLAG_ALARM && strcmp(r,"1")== 0) { + alarm_set(sec_varlist[sqv(q,f)].name); + } + } + + if (n == NULL) break; + r = n+1; } - - /* If SEC VAR is alarm and its on, add it to the alarm property */ - - if (sec_varlist[sqv(q,f)].flags & FLAG_ALARM && strcmp(r,"1")== 0) { - alarm_set(sec_varlist[sqv(q,f)].name); } - - } - - - if (n == NULL) break; - r = n+1; - } } - } +} void upsdrv_initinfo(void) { - int msglen, v; - char *a,*p,avail_list[300]; - - /* find out which variables/commands this UPS supports */ - msglen = 0; - sec_cmd(SEC_POLLCMD, SEC_AVAILP1, avail_list, &msglen); - p = avail_list + msglen; - if (p != avail_list) *p++ = ','; - msglen = 0; - sec_cmd(SEC_POLLCMD, SEC_AVAILP2, p, &msglen); - *(p+msglen) = '\0'; - - - if (strlen(avail_list) == 0){ - fatalx(EXIT_FAILURE, "No available variables found!");} - a = avail_list; - while ((p = strtok(a, ",")) != NULL) { - a = NULL; - v = atoi(p); - /* don't bother adding a write-only variable */ - if (sec_varlist[v].flags == FLAG_WONLY) continue; - addquery(sec_varlist[v].cmd, sec_varlist[v].field, v, sec_varlist[v].poll); - } - - /* poll one time values */ - - sec_poll(FLAG_POLLONCE); - - printf("UPS: %s %s\n", dstate_getinfo("ups.mfr"), dstate_getinfo("ups.model")); - - + int msglen, v; + char *a,*p,avail_list[300]; + + /* find out which variables/commands this UPS supports */ + msglen = 0; + sec_cmd(SEC_POLLCMD, SEC_AVAILP1, avail_list, &msglen); + p = avail_list + msglen; + if (p != avail_list) *p++ = ','; + msglen = 0; + sec_cmd(SEC_POLLCMD, SEC_AVAILP2, p, &msglen); + *(p+msglen) = '\0'; + + + if (strlen(avail_list) == 0) { + fatalx(EXIT_FAILURE, "No available variables found!"); + } + a = avail_list; + while ((p = strtok(a, ",")) != NULL) { + a = NULL; + v = atoi(p); + /* don't bother adding a write-only variable */ + if (sec_varlist[v].flags == FLAG_WONLY) continue; + addquery(sec_varlist[v].cmd, sec_varlist[v].field, v, sec_varlist[v].poll); + } + + /* poll one time values */ + sec_poll(FLAG_POLLONCE); + + printf("UPS: %s %s\n", dstate_getinfo("ups.mfr"), dstate_getinfo("ups.model")); } void upsdrv_updateinfo(void) { - - alarm_init(); /* poll status values values */ sec_poll(FLAG_POLL); alarm_commit(); update_pseudovars(); dstate_dataok(); - } void upsdrv_shutdown(void) @@ -340,39 +324,35 @@ void upsdrv_makevartable(void) void setup_serial(const char *port) { - char temp[140]; - int i,ret; - - - /* Detect the ups baudrate */ - - - for (i=0; i<5; i++) { - - ser_set_speed(upsfd, device_path,baud_rates[i].rate); - ret = ser_send(upsfd, "^P003MAN"); - ret = sec_upsrecv(temp); - if (ret >= -1) break; - - } - if (i == 5) { - printf("Can't talk to UPS on port %s!\n",port); - printf("Check the cabling and portname and try again\n"); - printf("Please note that this driver only support UPS Models with SEC Protocol\n"); - ser_close(upsfd, device_path); - exit (1); - } - else - printf("Connected to UPS on %s baudrate: %d\n",port, baud_rates[i].name); + char temp[140]; + int i,ret; + + /* Detect the ups baudrate */ + for (i=0; i<5; i++) { + ser_set_speed(upsfd, device_path,baud_rates[i].rate); + ret = ser_send(upsfd, "^P003MAN"); + ret = sec_upsrecv(temp); + if (ret >= -1) break; + } + + if (i == 5) { + printf("Can't talk to UPS on port %s!\n",port); + printf("Check the cabling and portname and try again\n"); + printf("Please note that this driver only support UPS Models with SEC Protocol\n"); + ser_close(upsfd, device_path); + exit (1); + } + else + printf("Connected to UPS on %s baudrate: %d\n",port, baud_rates[i].name); } void upsdrv_initups(void) { - upsfd = ser_open(device_path); - setup_serial(device_path); + upsfd = ser_open(device_path); + setup_serial(device_path); /* upsfd = ser_open(device_path); */ /* ser_set_speed(upsfd, device_path, B1200); */ - + /* probe ups type */ /* to get variables and flags from the command line, use this: @@ -400,12 +380,10 @@ void upsdrv_initups(void) /* the upsh handlers can't be done here, as they get initialized * shortly after upsdrv_initups returns to main. */ - - } void upsdrv_cleanup(void) { /* free(dynamic_mem); */ - ser_close(upsfd, device_path); + ser_close(upsfd, device_path); } diff --git a/include/timehead.h b/include/timehead.h index e0756fa40f..aabcf2ad97 100644 --- a/include/timehead.h +++ b/include/timehead.h @@ -22,11 +22,11 @@ #ifndef NUT_TIMEHEAD_H_SEEN #define NUT_TIMEHEAD_H_SEEN 1 -#if TIME_WITH_SYS_TIME +#ifdef TIME_WITH_SYS_TIME # include # include #else -# if HAVE_SYS_TIME_H +# ifdef HAVE_SYS_TIME_H # include # else # include diff --git a/m4/nut_report_feature.m4 b/m4/nut_report_feature.m4 index f6f35b78dd..72667ba660 100644 --- a/m4/nut_report_feature.m4 +++ b/m4/nut_report_feature.m4 @@ -30,4 +30,13 @@ AC_DEFUN([NUT_REPORT_FEATURE], AC_DEFUN([NUT_PRINT_FEATURE_REPORT], [ cat conf_nut_report_feature + + echo "------------------" + echo "Compiler settings:" + printf 'CC \t:%s\n' "$CC" + printf 'CFLAGS \t:%s\n' "$CFLAGS" + printf 'CXX \t:%s\n' "$CXX" + printf 'CXXFLAGS\t:%s\n' "$CXXFLAGS" + printf 'CPP \t:%s\n' "$CPP" + printf 'CPPFLAGS\t:%s\n' "$CPPFLAGS" ])