diff --git a/ChangeLog b/ChangeLog index 7188f00..1710194 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,474 @@ +2014-04-17 Arnaud Quette + + * NEWS, UPGRADING, configure.ac: Update for release 2.7.2 Complete + the release information for NUT 2.7.2 + +2014-04-07 Arnaud Quette + + * drivers/compaq-mib.c: Fix erroneous status in HP/Compaq SNMP MIB + Using the most recent HP firmware (1.76), erroneous on-battery + status were reported. Also disable an erroneous low-battery + definition (pointing nowhere), while waiting for actual + improvements (report and patch from Philippe Andersson ; Closes + networkupstools/nut#117) + +2014-04-06 Daniele Pezzini + + * drivers/mge-xml.c: mge-xml: fix compile-time warnings, versioning + +2014-04-05 Charles Lepple + + * data/driver.list.in: HCL: Numeric Digital 800 plus USB VID:PID = + 0665:5161 Reference: networkupstools/nut#115 (blazer_usb @ 2.6.4; + waiting for confirmation with nutdrv_qx) + * data/driver.list.in: HCL: Eaton Powerware 3105 supported by + bcmxcp_usb Closes networkupstools/nut#117 + * data/driver.list.in, drivers/belkin-hid.c: usbhid-ups/belkin-hid: + add support for Emerson Network Power Liebert PSI 1440 USB VID:PID + = 10af:0004 + http://article.gmane.org/gmane.comp.monitoring.nut.user/8479 + +2014-04-05 Arnaud Quette + + * drivers/al175.c: Fix data format warnings on all architectures + Complete commit 7daa0feb6ed4f1c29bfe14c8e491ba198a4ba643, and + actually fix some of the warnings related data format. Also bump + al175 driver revision + * clients/Makefile.am: Update libupsclient library version + information Following the recent export of libcommon functions in + libupsclient, update the library version information to 4:0:0 + +2014-04-04 Arnaud Quette + + * drivers/al175.c: Fix data format warnings Fix a few warnings + related data format, in debug code + * clients/Makefile.am: Add libnutclient library version information + Add the missing LDFLAGS for adding version information + +2014-03-21 Arnaud Quette + + * data/driver.list.in: [HCL] CABAC UPS-1700DV2 supported by + blazer_usb Reported by jammin84 Closes #113 + * clients/Makefile.am, common/Makefile.am: Link libupsclient with + libcommon Fix undefined references related to functions of + libcommon. This issue was reported on Debian: + https://bugs.debian.org/731156 (patch from Matthias Klose ; Closes + Github issue #73) + +2014-03-18 Charles Lepple + + * data/driver.list.in: [HCL] Digitus DN-170014 supported by + richcomm_usb Reference: http://lists.alioth.debian.org/pipermail + /nut-upsdev/2014-March/006695.html -or- http://news.gmane.org/find- + root.php?message_id=CADq9dvWMx0xBz9XXkVKXCre4ox%2d2kSeHtD7LW39eEDH1 + RCY8sQ%40mail.gmail.com + +2014-03-05 Charles Lepple + + * UPGRADING: Added note about --enable-option-checking=fatal Closes + #99 (really) + +2014-03-03 Charles Lepple + + * data/driver.list.in: HCL: various updates * Closes + https://github.com/networkupstools/nut/issues/107 + * http://lists.alioth.debian.org/pipermail/nut- + upsdev/2013-November/006564.html * http://news.gmane.org/find- + root.php?message_id=50D9D460.1080408%40gmail.com + * http://news.gmane.org/find-root.php?message_id=CA%2b4duQ%3dppW%2 + bPz%2bRVPVXJyFLj0HErh1ZOtm5tk8b6n5Nd5kSk0g%40mail.gmail.com * + http://news.gmane.org/find- + root.php?message_id=528EC53C.9000801%40me.com + * docs/nut-qa.txt: NUT QA document: updated and reworded + * docs/nut-qa.txt: NUT QA document: CR->LF + * docs/FAQ.txt: FAQ: minor updates Update the bestfortress entry, + fix the mythicbeasts URL, and reword a few entries. + +2014-02-13 Charles Lepple + + * docs/man/upsimage.cgi.txt: upsimage.cgi(8): update GD homepage + +2014-03-03 Émilien Kia + + * drivers/nutdrv_qx.h: Detect if TRUE (and FALSE) are already defined + and define bool_t accordingly. + +2014-02-27 Arnaud Quette + + * UPGRADING: Add a note on Hardware Abstraction Layer removal + * INSTALL.nut, autogen.sh, configure.ac, docs/Makefile.am, + docs/configure.txt, docs/developers.txt, docs/features.txt, + docs/macros.txt, docs/new-drivers.txt, docs/nut-hal.txt, docs + /packager-guide.txt, drivers/Makefile.am, drivers/dstate-hal.c, + drivers/dstate-hal.h, drivers/main-hal.c, drivers/main-hal.h, + m4/nut_check_libhal.m4, m4/nut_config_libhal.m4: Remove the + remaining HAL files and references Remove the remaining build + rules, source code and documentation related to the FreeDesktop + Hardware Abstraction Layer (HAL) support. For the record, with this + HAL implementation, NUT drivers were sending data over DBus + (Closes: #99) + +2014-02-24 Charles Lepple + + * drivers/blazer_usb.c, drivers/libusb.c, drivers/nutdrv_qx.c, + drivers/riello_usb.c, drivers/usbhid-ups.c: OpenBSD ports tree + patches for EPROTO Closes networkupstools/nut#44 + +2014-02-26 Arnaud Quette + + * scripts/Makefile.am, scripts/README, scripts/hal/.gitignore, + scripts/hal/Makefile.am, tools/nut-usbinfo.pl: Remove the + generation of HAL support files Remove the code supporting the + generation of HAL FDI file. This is the first commit of a set to + address Github issue #99 + * drivers/snmp-ups.c: Fix snmp-ups segmentation fault A basic sanity + check was missing in the core code of snmp-ups, causing a driver + crash under some specific circumstances, at driver initialisation + time. Hence, this does not affect production systems + * README, UPGRADING, docs/FAQ.txt, docs/config-notes.txt, + drivers/Makefile.am, scripts/Solaris/nut.in, + scripts/Solaris/postinstall.in, scripts/Solaris/preremove.in, + scripts/systemd/nut-driver.service.in, + scripts/systemd/nutshutdown.in: Closes #96: Install upsdrvctl to + $prefix/sbin Install upsdrvctl to $prefix/sbin rather than + $driverexec. upsdrvctl has been historically standing beside the + drivers. It now resides in the system binaries ($prefix/sbin) + directory + +2014-02-25 Arnaud Quette + + * drivers/mge-hid.c: Add improved support for Eaton 5P Add the + necessary hooks to improve support for Eaton 5P range. This + includes post-processing of the model name, along with handling + rules for battery voltage (actual and nominal) + +2014-02-19 Daniele Pezzini + + * docs/Makefile.am, docs/chunked.xsl, docs/common.xsl, + docs/xhtml.xsl: docs: prevent smartphones from being too smart + (docbook) Add HTML tag to not auto-create telephone number + links on mobile browsers also in docbook processed documents. + Reference: https://github.com/networkupstools/nut/issues/78 XSL + files source: - https://github.com/asciidoc/asciidoc/blob/master + /docbook-xsl/common.xsl - + https://github.com/asciidoc/asciidoc/blob/master/docbook- + xsl/xhtml.xsl - https://github.com/asciidoc/asciidoc/blob/master + /docbook-xsl/chunked.xsl + * docs/man/asciidoc.conf: docs: prevent smartphones from being too + smart Add HTML tag to not auto-create telephone number + links on mobile browsers. Reference: + https://github.com/networkupstools/nut/issues/78 + +2014-02-15 Arnaud Quette + + * docs/acknowledgements.txt: Update NUT team membership for Daniele + Pezzini Daniele Pezzini is a now a NUT senior developer + +2014-02-14 Arnaud Quette + + * docs/acknowledgements.txt, docs/website/news.txt: Formalizing the + end of the relationship with Eaton The situation of the + relationship with Eaton has evolved, and since 2011 Eaton does not + support NUT anymore. This may still evolve in the future. But for + now, please do not consider anymore that buying Eaton products will + provide you with official support from Eaton, or a better level of + device support in NUT. + +2014-02-14 Charles Lepple + + * Makefile.am: devd: use staging directory for distcheck + * drivers/Makefile.am, drivers/snmp-ups.c, drivers/xppc-mib.c, + drivers/xppc-mib.h: snmp-ups: add XPPC-MIB for Tripp Lite + SU10KRT3/1X + * scripts/subdriver/gen-snmp-subdriver.sh: gen-snmp-subdriver.sh: + documentation updates + +2014-02-10 Charles Lepple + + * scripts/subdriver/gen-snmp-subdriver.sh: gen-snmp-subdriver.sh: fix + option typos * Use '-M' for MIB directories, to match snmpwalk and + the help text. * Add space before '-c' in snmpwalk (not sure how + this worked before) + * scripts/Makefile.am: cosmetic: Indent scripts/Makefile.am + EXTRA_DIST continuation lines + * scripts/Makefile.am: Add gen-snmp-subdriver.sh to distribution + tarball + +2014-02-14 Arnaud Quette + + * docs/acknowledgements.txt: Update NUT team membership for + Frédéric Bohe Frederic Bohe, NUT senior developer and Eaton + contractor from 2009 to 2013, is now a retired member. Thanks for + all the hard work on the Windows port, nut-scanner, Unix packaging, + support, ... Also update the developers membership page, from + Alioth to GitHub + +2013-02-24 Charles Lepple + + * autogen.sh, configure.ac, scripts/Makefile.am, + scripts/devd/.gitignore, scripts/devd/Makefile.am, + scripts/devd/README, tools/nut-usbinfo.pl: FreeBSD: generate + devd.conf files for USB UPSes This adds a --with-devd-dir=PATH + option to ./configure, which defaults to /usr/local/etc/devd (or + /etc/devd, whichever is found first). Unlike udev, there does not + seem to be a way to re-trigger rules at runtime. This means you + will likely need to unplug and replug your UPS after installing the + new nut-usb.conf file. + +2014-02-13 Arnaud Quette + + * .gitignore, server/.gitignore: Minor completion to gitignore files + Add a few more exotic targets, related to debug or official + distribution + +2014-02-11 Daniele Pezzini + + * .gitignore, clients/.gitignore, common/.gitignore, conf/.gitignore, + data/.gitignore, data/html/.gitignore, docs/.gitignore, + docs/man/.gitignore, docs/website/.gitignore, + docs/website/scripts/.gitignore, drivers/.gitignore, + include/.gitignore, lib/.gitignore, m4/.gitignore, + scripts/.gitignore, scripts/HP-UX/.gitignore, + scripts/Solaris/.gitignore, scripts/augeas/.gitignore, + scripts/avahi/.gitignore, scripts/hal/.gitignore, + scripts/hotplug/.gitignore, scripts/python/.gitignore, + scripts/systemd/.gitignore, scripts/udev/.gitignore, + scripts/ufw/.gitignore, server/.gitignore, tests/.gitignore, + tools/.gitignore, tools/nut-scanner/.gitignore: Simplify gitignore + files Remove redundancies and old/svn things. Limit the scope + wherever it makes sense. Ignore all cscope files and test logs. + Make ignoring generated files easier to maintain. + +2014-02-11 Charles Lepple + + * drivers/libshut.c: libshut: partially revert PnP/RTS change + Reported by Baruch Even. It is unclear how this will work after + running nut-scanner, but it is more important to keep the drivers + working. Reference: 65db105 / + 2013-09-24T08:18:00Z!fredericbohe@eaton.com Closes: + networkupstools/nut#91 + +2014-02-09 Daniele Pezzini + + * docs/man/nutdrv_qx.txt: nutdrv_qx: update manpage for the newly + supported Voltronic Power P98 units + * drivers/nutdrv_qx.c, drivers/nutdrv_qx_mecer.c, + drivers/nutdrv_qx_mecer.h: nutdrv_qx: improve support for + '(ACK/(NAK' and Voltronic Power P98 UPSes In 'mecer' subdriver's + claim function try to get protocol (QPI, for Voltronic Power + devices) used by the UPS: - supported devices are Voltronic Power's + P98 units - if the UPS doesn't support the QPI command, use its + reply to identify whether it uses '(ACK\r'/'(NAK\r' replies This + way we can catch '(ACK/(NAK' devices, while previously the 'mecer' + subdriver was 'hidden' by the 'megatec' (echo back/'ACK/NAK') one. + Plus Q1 units with 'ACK'/'NAK' replies or echoing back not + supported and rejected commands are no longer wrongly 'claimed' by + the 'mecer' subdriver. + +2014-02-03 Daniele Pezzini + + * docs/.gitignore, docs/Makefile.am, docs/documentation.txt: docs: + build PDF also for cables.txt + +2014-02-02 Daniele Pezzini + + * Makefile.am, configure.ac, docs/.gitignore, docs/Makefile.am, + docs/man/.gitignore, docs/man/Makefile.am, docs/stable-hcl.txt, + docs/user-manual.txt, docs/website/.gitignore, + docs/website/Makefile.am, docs/website/css/ie-overrides.css, + docs/website/css/web-layout.css, + docs/website/css/xhtml11-quirks.css, docs/website/css/xhtml11.css, + docs/website/faviconut.ico, docs/website/faviconut.png, + docs/website/news.txt, docs/website/old-news.txt, + docs/website/projects.txt, docs/website/scripts/.gitignore, + docs/website/scripts/filter_png.js, docs/website/scripts/jquery.js, + docs/website/scripts/nut_jquery.js, docs/website/scripts/toc.js, + docs/website/ups-protocols.txt, docs/website/web-layout.conf, + docs/website/website.txt, tools/Makefile.am, tools/nut-hclinfo.py: + website: move to a standalone website + +2014-01-18 Daniele Pezzini + + * docs/net-protocol.txt: docs: fix a couple of asciidoc errors in + net-protocols.txt + * server/netlist.c: net-protocol: fix closing line of LIST RANGE + +2014-01-16 Charles Lepple + + * drivers/nutdrv_atcl_usb.c: nutdrv_atcl_usb: fix permissions-based + crash, and enable vendor variable (1.1) + +2014-01-13 Charles Lepple + + * .gitignore: Ignore cscope.out + * docs/man/.gitignore, docs/man/nutdrv_atcl_usb.txt, + drivers/nutdrv_atcl_usb.c: nutdrv_atcl_usb: documentation and + logging (v1.0) + +2014-01-11 Charles Lepple + + * drivers/apc-mib.c: snmp-ups: APC SmartBoost and SmartTrim are OL + SmartBoost and SmartTrim are voltage regulation functions that + prevent the UPS from using the battery during brownouts and + overvoltages, so the BOOST and TRIM states are also mapped to OL. + Reference: + http://article.gmane.org/gmane.comp.monitoring.nut.devel/6583 + * data/driver.list.in: [HCL] MicroDowell B.Box LP 500: genericups + type 7 Closes networkupstools/nut#83 From @lxp: UPS shutdown + only works when on-battery and has a delay of about 1min until + execution (something between 50sec to 1min 30sec on mine). + References: http://www.ezdirect.it/pdf/lp500.pdf + https://forums.gentoo.org/viewtopic-t-730172-start-0.html + +2014-01-11 Daniele Pezzini + + * drivers/blazer_ser.c, drivers/blazer_usb.c: blazer: fix man page + references + +2014-01-11 Charles Lepple + + * docs/man/nutdrv_atcl_usb.txt, drivers/nutdrv_atcl_usb.c: + nutdrv_atcl: match iManufacturer (vendor) string + * docs/man/snmp-ups.txt: snmp-ups: update and edit documentation + +2014-01-11 Daniele Pezzini + + * data/driver.list.in: HCL: add Atlantis Land/Voltronic Power units + supported by nutdrv_qx + * drivers/nutdrv_qx_blazer-common.c, drivers/nutdrv_qx_blazer- + common.h: nutdrv_qx: fix nutdrv_qx_blazer-common.{c,h} header + comments + * docs/man/nutdrv_qx.txt, docs/nutdrv_qx-subdrivers.txt: nutdrv_qx: + update manuals for new 'voltronic-qs' subdriver + +2013-12-05 Daniele Pezzini + + * drivers/Makefile.am, drivers/nutdrv_qx.c, drivers + /nutdrv_qx_voltronic-qs.c, drivers/nutdrv_qx_voltronic-qs.h: + nutdrv_qx: add Voltronic-QS subdriver (nutdrv_qx protocol + =voltronic-qs) A subdriver using a protocol, specific to UPSes + manufactured by Voltronic Power, based on the 'mustek' one (i.e. + 'QS'). + +2014-01-01 Charles Lepple + + * drivers/nutdrv_atcl_usb.c: nutdrv_atcl_usb: adjusted logging and + retries (v0.02) + * data/driver.list.in, docs/man/Makefile.am, docs/man/index.txt, + docs/man/nutdrv_atcl_usb.txt: nutdrv_atcl_usb: man page and HCL + entries + +2013-12-31 Charles Lepple + + * drivers/.gitignore, drivers/Makefile.am, drivers/nutdrv_atcl_usb.c, + tools/nut-usbinfo.pl: nutdrv_atcl_usb: 'ATCL FOR UPS' new driver + Reference: http://news.gmane.org/find- + root.php?message_id=%3c52B4C54E.1050106%40ariwainer.com.ar%3e + * drivers/libusb.c, drivers/usb-common.h: Move USB_TIMEOUT to usb- + common.h + +2013-12-31 Laurent Bigonville + + * .gitignore, INSTALL, INSTALL.nut, Makefile.am, docs/FAQ.txt, + docs/Makefile.am, docs/configure.txt, docs/packager-guide.txt, docs + /user-manual.txt: Rename INSTALL to INSTALL.nut Rename it to + INSTALL.nut so autoreconf will not try to overwrite it. In Debian + tools like dh_autoreconf calls autoreconf with -f which overwrite + the INSTALL file. + +2013-12-27 Charles Lepple + + * scripts/subdriver/gen-usbhid-subdriver.sh: usbhid-ups: fix call to + is_usb_device_supported() The is_usb_device_supported() function + now takes a USBDevice_t* instead of a pair of USB ID values. + +2013-12-22 Florian Bruhin + + * data/driver.list.in, docs/man/powercom.txt, drivers/powercom.c: Add + OptiUPS VS 575C support to PowerCom Reference: + http://news.gmane.org/find- + root.php?message_id=%3c20131126085646.GM28832%40lupin%3e + +2013-12-11 Denis Yantarev + + * drivers/blazer_usb.c, drivers/nutdrv_qx.c: Fixed incorrectly + reported Ippon response length + +2013-11-30 Daniele Pezzini + + * docs/man/nutdrv_qx.txt, drivers/nutdrv_qx.c, drivers + /nutdrv_qx_blazer-common.c, drivers/nutdrv_qx_blazer-common.h, + drivers/nutdrv_qx_megatec-old.c, drivers/nutdrv_qx_mustek.c, + drivers/nutdrv_qx_q1.c: nutdrv_qx: fix 'megatec/old' and 'mustek' + subdrivers' claim functions Address, for 'megatec/old' and + 'mustek' subdrivers, the same problem fixed in commit + 720975f4de910b270ba705a7f2981c2ee33ca2eb for Q1-based ones: - Make + the claim function of 'megatec/old' and 'mustek' subdrivers not + poll the UPS for 'vendor' informations as they are not really + needed to set these protocols apart from the other ones (i.e. the + 'status' poll is specific enough, at the time of writing). - Move + common 'light' claim function to nutdrv_qx_blazer-common.{c,h}. - + Update manual. - Versioning. + +2013-11-24 Daniele Pezzini + + * docs/nutdrv_qx-subdrivers.txt: nutdrv_qx: improve developer manual + Get rid of useless tables. Fix minor errors/typos. + * drivers/nutdrv_qx.c: nutdrv_qx: versioning + * docs/man/nutdrv_qx.txt, docs/nutdrv_qx-subdrivers.txt: nutdrv_qx: + update manuals for new Q1 subdriver and improve readability + +2013-11-23 Daniele Pezzini + + * drivers/Makefile.am, drivers/nutdrv_qx.c, drivers/nutdrv_qx_q1.c, + drivers/nutdrv_qx_q1.h: nutdrv_qx: add new 'fallback' Q1 subdriver + Add new 'Q1' subdriver. This subdriver implements the same protocol + as the one used by the 'megatec' subdriver minus the vendor (I) and + ratings (F) queries. In the claim function: - it doesn't even try + to get 'vendor' informations (I) - it checks only status (Q1), + through 'input.voltage' variable Therefore it should be able to + work even if the UPS doesn't support vendor/ratings *and* the user + doesn't use the 'novendor'/'norating' flags, as long as: - the UPS + replies a Q1-compliant answer (i.e. not necessary filled with all + of the Q1-required data, but at least of the right length and with + not available data filled with some replacement character) - the + UPS reports a valid input.voltage (used in the claim function) - + the UPS reports valid status bits (1st, 2nd, 3rd, 6th, 7th are the + mandatory ones) This commit reintroduces a functionality of the + blazer subdrivers that was lost because now, in order to tell + whether a device is supported by a subdriver or not, if the user + doesn't call the driver with the 'novendor' flag, both the status + (Q1) and the vendor (I/FW?) queries are needed (that's to better + discern the subdrivers). Reference: + http://lists.alioth.debian.org/pipermail/nut- + upsuser/2013-November/008692.html + +2013-11-23 Charles Lepple + + * configure.ac, configure.in: Rename configure.in to configure.ac + autoconf has been warning about this for a while - let's fix it + before too many branches get created with the old name. + * configure.in: configure.in: bump version to 2.7.1.5 Some packaging + systems don't like the -pre# system. + +2013-11-21 Laurent Bigonville + + * docs/man/ups.conf.txt, docs/man/upsdrvctl.txt, drivers/upsdrvctl.c: + Provide retry options for upsdrvctl and driver(s) As recently seen + in Debian (bugs #694717 and #677143), it may be required to have + upsdrvctl retrying to start the driver in case of failure. More + specifically, a mix of init system (V and systemd), udev and USB + device(s) can result in the /dev entry not being available at + driver startup, thus resulting in a general failure to start NUT. + This commit provides at least a way to overcome this issue. A more + suitable solution will require more work on NUT design. This + patch if based on Arnaud Quette proposal + +2013-11-20 Arnaud Quette + + * Makefile.am: Maintainers targets: distribution signature / hashes + Create some handy targets to ease and automate release publication + 2013-11-19 Charles Lepple * configure.in: configure: update version to 2.7.1 diff --git a/INSTALL b/INSTALL index 7762f5b..a1e89e1 100644 --- a/INSTALL +++ b/INSTALL @@ -1,320 +1,370 @@ -Installation instructions -========================= +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + + The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. -This chapter describe the various methods for installing Network UPS Tools. + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. -Whenever it is possible, prefer <>. -Packagers have done an excellent and hard work at improving NUT integration into -their system. +Sharing Defaults +================ -[[Installing_source]] -Installing from source ----------------------- + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. -These are the essential steps for compiling and installing this software. +Defining Variables +================== -The NUT linkdoc:packager-guide[Packager Guide], which presents the best -practices for installing and integrating NUT, is also a good reading. + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: -[NOTE] -.Keep in mind that... -================================================================================ + ./configure CC=/usr/local2/bin/gcc -- the paths shown below are the default values you get by just calling -configure by itself. If you have used --prefix or similar, things will be -different. Also, if you didn't install this program from source yourself, the -paths will probably have a number of differences. +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). -- by default, your system probably won't find the man pages, since they -install to /usr/local/ups/man. You can fix this by editing your MANPATH, or -just do this: +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: - man -M /usr/local/ups/man + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash -- if your favorite system offers up to date binary packages, you should always -prefer these over a source installation. Along with the known advantages of such -systems for installation, upgrade and removal, there are many integration issues -that have been addressed. +`configure' Invocation +====================== -================================================================================ + `configure' recognizes the following options to control how it +operates. +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. -Prepare your system -~~~~~~~~~~~~~~~~~~~~ +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. -System User creation -^^^^^^^^^^^^^^^^^^^^ +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. -Create at least one system user and a group for running this software. You -might call them "ups" and "nut". The exact names aren't important as -long as you are consistent. +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. -The process for doing this varies from one system to the next, and -explaining how to add users is beyond the scope of this document. +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. -For the purposes of this document, the user name and group name -will be 'ups' and 'nut' respectively. +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). -Be sure the new user is a member of the new group! If you forget to -do this, you will have problems later on when you try to start upsd. +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. -Build and install -~~~~~~~~~~~~~~~~~ +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. -[[Configuration]] -Configuration -^^^^^^^^^^^^^ +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. -Configure the source tree for your system. Add the '--with-user' and -'--with-group' switch to set the user name and group that you created -above. - - ./configure --with-user=ups --with-group=nut - -If you need any other switches for configure, add them here. For example: - -* to build and install USB drivers, add '--with-usb' (note that you - need to install libusb development package or files). - -* to build and install SNMP drivers, add '--with-snmp' (note that - you need to install libsnmp development package or files). - -* to build and install CGI scripts, add '--with-cgi'. - -See <> from the User Manual, -docs/configure.txt or './configure --help' for all the available -options. - -If you alter paths with additional switches, be sure to use those -new paths while reading the rest of the steps. - -Reference: <> from the -User Manual. - - -Build the programs -^^^^^^^^^^^^^^^^^^ - - make - -This will build the NUT client and server programs and the -selected drivers. It will also build any other features that were -selected during <> step above. - - -Installation -^^^^^^^^^^^^ - -[NOTE] -===================================================================== - -you should now gain privileges for installing software if necessary: - - su - -===================================================================== - -Install the files to a system level directory: - - make install - -This will install the compiled programs and man pages, as well as -some data files required by NUT. Any optional features selected -during configuration will also be installed. - -This will also install sample versions of the NUT configuration -files. Sample files are installed with names like ups.conf.sample -so they will not overwrite any existing real config files you may -have created. - -If you are packaging this software, then you will probably want to -use the DESTDIR variable to redirect the build into another place, -i.e.: - - make DESTDIR=/tmp/package install - make DESTDIR=/tmp/package install-conf - -[[StatePath]] -State path creation -^^^^^^^^^^^^^^^^^^^ - -Create the state path directory for the driver(s) and server to use -for storing UPS status data and other auxiliary files, and make it -owned by the user you created. - - mkdir -p /var/state/ups - chmod 0770 /var/state/ups - chown root:nut /var/state/ups - -[[Ownership]] -Ownership and permissions -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Set ownership data and permissions on your serial or USB ports -that go to your UPS hardware. Be sure to limit access to just -the user you created earlier. - -These examples assume the second serial port (ttyS1) on a typical -Slackware system. On FreeBSD, that would be cuaa1. Serial ports -vary greatly, so yours may be called something else. - - chmod 0660 /dev/ttyS1 - chown root:nut /dev/ttyS1 - -//////////////////////////////////////////////////////////////////////////////// -FIXME: TBR -//////////////////////////////////////////////////////////////////////////////// - -The setup for USB ports is slightly more complicated. Device files -for USB devices, such as /proc/bus/usb/002/001, are usually -created "on the fly" when a device is plugged in, and disappear -when the device is disconnected. Moreover, the names of these -device files can change randomly. To set up the correct -permissions for the USB device, you may need to set up (operating -system dependent) hotplugging scripts. Sample scripts and -information are provided in the scripts/hotplug and -scripts/udev directories. For most users, the hotplugging scripts -will be installed automatically by "make install". - -(If you want to try if a driver works without setting up -hotplugging, you can add the "-u root" option to upsd, upsmon, and -drivers; this should allow you to follow the below -instructions. However, don't forget to set up the correct -permissions later!). - -NOTE: if you are using something like devfs or udev, make sure -these permissions stay set across a reboot. If they revert to the -old values, your drivers may fail to start. - - -You are now ready to configure NUT, and start testing and using it. - -You can jump directly to the <>. - - -[[Installing_packages]] -Installing from packages ------------------------- - -This chapter describes the specific installation steps when using -binary packages that exist on various major systems. - -[[Debian]] -Debian, Ubuntu and other derivatives -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -NOTE: NUT is packaged and well maintained in these systems. -The official Debian packager is part of the NUT Team. - -Using your prefered method (apt-get, aptitude, Synaptic, ...), install -the 'nut' package, and optionaly the following: - -- 'nut-cgi', if you need the CGI (HTML) option, -- 'nut-snmp', if you need the snmp-ups driver, -- 'nut-xml', for the netxml-ups driver, -- 'nut-powerman-pdu', to control the PowerMan daemon (PDU management) -- 'nut-dev', if you need the development files. - -//////////////////////////////////////////////////////////////////////////////// -- nut-client -- nut-hal-drivers -//////////////////////////////////////////////////////////////////////////////// - -Configuration files are located in /etc/nut. -linkman:nut.conf[5] must be edited to be able to invoke /etc/init.d/nut - -NOTE: Ubuntu users can access the APT URL installation by clicking on link:apt://nut[this link]. - - -[[Mandriva]] -Mandriva -~~~~~~~~ - -NOTE: NUT is packaged and well maintained in these systems. -The official Mandriva packager is part of the NUT Team. - -Using your prefered method (urpmi, RPMdrake, ...), install one of the two below -packages: - -- 'nut-server' if you have a 'standalone' or 'netserver' installation, -- 'nut' if you have a 'netclient' installation. - -Optionaly, you can also install the following: - -- 'nut-cgi', if you need the CGI (HTML) option, -- 'nut-devel', if you need the development files. - - -[[Suse]] -Suse / Opensuse -~~~~~~~~~~~~~~~ - -NOTE: NUT is packaged and well maintained in these systems. -The official Suse packager is part of the NUT Team. - -Install the 'nut-classic' package, and optionaly the following: - -- 'nut-drivers-net', if you need the snmp-ups or the netxml-ups drivers, -- 'nut-cgi', if you need the CGI (HTML) option, -- 'nut-devel', if you need the development files, - -NOTE: Suse and Opensuse users can use the -link:http://software.opensuse.org/search?baseproject=ALL&p=1&q=nut[one-click install method] -to install NUT. - - -[[RedHat]] -Red Hat, Fedora and CentOS -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -NOTE: NUT is packaged and well maintained in these systems. -The official Red Hat packager is part of the NUT Team. - -Using your prefered method (yum, Add/Remove Software, ...), install one of the -two below packages: - -- 'nut' if you have a 'standalone' or 'netserver' installation, -- 'nut-client' if you have a 'netclient' installation. - -Optionaly, you can also install the following: - -- 'nut-cgi', if you need the CGI (HTML) option, -- 'nut-xml', if you need the netxml-ups driver, -- 'nut-devel', if you need the development files. - - -[[FreeBSD]] -FreeBSD -~~~~~~~ - -You can either install NUT as a binary package or as a port. - -Binary package -^^^^^^^^^^^^^^ - -To install the main component, use the following command: - - # pkg_add -r nut - -Port -^^^^ - -The port is located under /usr/ports/sysutils/nut. -To install it, use the following command: - - # cd /usr/ports/sysutils/nut/ && make install clean - -You have to define WITH_NUT_CGI to build the optional CGI scripts. - -Optionaly, you can also install the following ports: - -- sysutils/nut-snmp, for the SNMP driver, -- sysutils/nut-usb, for the USB drivers, -- sysutils/nut-libupsclient, for the upsclient library. - - -You are now ready to configure NUT, and start testing and using it. - -You can jump directly to the -<>. diff --git a/INSTALL.nut b/INSTALL.nut new file mode 100644 index 0000000..bc754cc --- /dev/null +++ b/INSTALL.nut @@ -0,0 +1,319 @@ +Installation instructions +========================= + +This chapter describe the various methods for installing Network UPS Tools. + +Whenever it is possible, prefer <>. +Packagers have done an excellent and hard work at improving NUT integration into +their system. + +[[Installing_source]] +Installing from source +---------------------- + +These are the essential steps for compiling and installing this software. + +The NUT linkdoc:packager-guide[Packager Guide], which presents the best +practices for installing and integrating NUT, is also a good reading. + +[NOTE] +.Keep in mind that... +================================================================================ + +- the paths shown below are the default values you get by just calling +configure by itself. If you have used --prefix or similar, things will be +different. Also, if you didn't install this program from source yourself, the +paths will probably have a number of differences. + +- by default, your system probably won't find the man pages, since they +install to /usr/local/ups/man. You can fix this by editing your MANPATH, or +just do this: + + man -M /usr/local/ups/man + +- if your favorite system offers up to date binary packages, you should always +prefer these over a source installation. Along with the known advantages of such +systems for installation, upgrade and removal, there are many integration issues +that have been addressed. + +================================================================================ + + +Prepare your system +~~~~~~~~~~~~~~~~~~~~ + +System User creation +^^^^^^^^^^^^^^^^^^^^ + +Create at least one system user and a group for running this software. You +might call them "ups" and "nut". The exact names aren't important as +long as you are consistent. + +The process for doing this varies from one system to the next, and +explaining how to add users is beyond the scope of this document. + +For the purposes of this document, the user name and group name +will be 'ups' and 'nut' respectively. + +Be sure the new user is a member of the new group! If you forget to +do this, you will have problems later on when you try to start upsd. + + +Build and install +~~~~~~~~~~~~~~~~~ + +[[Configuration]] +Configuration +^^^^^^^^^^^^^ + +Configure the source tree for your system. Add the '--with-user' and +'--with-group' switch to set the user name and group that you created +above. + + ./configure --with-user=ups --with-group=nut + +If you need any other switches for configure, add them here. For example: + +* to build and install USB drivers, add '--with-usb' (note that you + need to install libusb development package or files). + +* to build and install SNMP drivers, add '--with-snmp' (note that + you need to install libsnmp development package or files). + +* to build and install CGI scripts, add '--with-cgi'. + +See <> from the User Manual, +docs/configure.txt or './configure --help' for all the available +options. + +If you alter paths with additional switches, be sure to use those +new paths while reading the rest of the steps. + +Reference: <> from the +User Manual. + + +Build the programs +^^^^^^^^^^^^^^^^^^ + + make + +This will build the NUT client and server programs and the +selected drivers. It will also build any other features that were +selected during <> step above. + + +Installation +^^^^^^^^^^^^ + +[NOTE] +===================================================================== + +you should now gain privileges for installing software if necessary: + + su + +===================================================================== + +Install the files to a system level directory: + + make install + +This will install the compiled programs and man pages, as well as +some data files required by NUT. Any optional features selected +during configuration will also be installed. + +This will also install sample versions of the NUT configuration +files. Sample files are installed with names like ups.conf.sample +so they will not overwrite any existing real config files you may +have created. + +If you are packaging this software, then you will probably want to +use the DESTDIR variable to redirect the build into another place, +i.e.: + + make DESTDIR=/tmp/package install + make DESTDIR=/tmp/package install-conf + +[[StatePath]] +State path creation +^^^^^^^^^^^^^^^^^^^ + +Create the state path directory for the driver(s) and server to use +for storing UPS status data and other auxiliary files, and make it +owned by the user you created. + + mkdir -p /var/state/ups + chmod 0770 /var/state/ups + chown root:nut /var/state/ups + +[[Ownership]] +Ownership and permissions +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Set ownership data and permissions on your serial or USB ports +that go to your UPS hardware. Be sure to limit access to just +the user you created earlier. + +These examples assume the second serial port (ttyS1) on a typical +Slackware system. On FreeBSD, that would be cuaa1. Serial ports +vary greatly, so yours may be called something else. + + chmod 0660 /dev/ttyS1 + chown root:nut /dev/ttyS1 + +//////////////////////////////////////////////////////////////////////////////// +FIXME: TBR +//////////////////////////////////////////////////////////////////////////////// + +The setup for USB ports is slightly more complicated. Device files +for USB devices, such as /proc/bus/usb/002/001, are usually +created "on the fly" when a device is plugged in, and disappear +when the device is disconnected. Moreover, the names of these +device files can change randomly. To set up the correct +permissions for the USB device, you may need to set up (operating +system dependent) hotplugging scripts. Sample scripts and +information are provided in the scripts/hotplug and +scripts/udev directories. For most users, the hotplugging scripts +will be installed automatically by "make install". + +(If you want to try if a driver works without setting up +hotplugging, you can add the "-u root" option to upsd, upsmon, and +drivers; this should allow you to follow the below +instructions. However, don't forget to set up the correct +permissions later!). + +NOTE: if you are using something like devfs or udev, make sure +these permissions stay set across a reboot. If they revert to the +old values, your drivers may fail to start. + + +You are now ready to configure NUT, and start testing and using it. + +You can jump directly to the <>. + + +[[Installing_packages]] +Installing from packages +------------------------ + +This chapter describes the specific installation steps when using +binary packages that exist on various major systems. + +[[Debian]] +Debian, Ubuntu and other derivatives +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +NOTE: NUT is packaged and well maintained in these systems. +The official Debian packager is part of the NUT Team. + +Using your prefered method (apt-get, aptitude, Synaptic, ...), install +the 'nut' package, and optionaly the following: + +- 'nut-cgi', if you need the CGI (HTML) option, +- 'nut-snmp', if you need the snmp-ups driver, +- 'nut-xml', for the netxml-ups driver, +- 'nut-powerman-pdu', to control the PowerMan daemon (PDU management) +- 'nut-dev', if you need the development files. + +//////////////////////////////////////////////////////////////////////////////// +- nut-client +//////////////////////////////////////////////////////////////////////////////// + +Configuration files are located in /etc/nut. +linkman:nut.conf[5] must be edited to be able to invoke /etc/init.d/nut + +NOTE: Ubuntu users can access the APT URL installation by clicking on link:apt://nut[this link]. + + +[[Mandriva]] +Mandriva +~~~~~~~~ + +NOTE: NUT is packaged and well maintained in these systems. +The official Mandriva packager is part of the NUT Team. + +Using your prefered method (urpmi, RPMdrake, ...), install one of the two below +packages: + +- 'nut-server' if you have a 'standalone' or 'netserver' installation, +- 'nut' if you have a 'netclient' installation. + +Optionaly, you can also install the following: + +- 'nut-cgi', if you need the CGI (HTML) option, +- 'nut-devel', if you need the development files. + + +[[Suse]] +Suse / Opensuse +~~~~~~~~~~~~~~~ + +NOTE: NUT is packaged and well maintained in these systems. +The official Suse packager is part of the NUT Team. + +Install the 'nut-classic' package, and optionaly the following: + +- 'nut-drivers-net', if you need the snmp-ups or the netxml-ups drivers, +- 'nut-cgi', if you need the CGI (HTML) option, +- 'nut-devel', if you need the development files, + +NOTE: Suse and Opensuse users can use the +link:http://software.opensuse.org/search?baseproject=ALL&p=1&q=nut[one-click install method] +to install NUT. + + +[[RedHat]] +Red Hat, Fedora and CentOS +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +NOTE: NUT is packaged and well maintained in these systems. +The official Red Hat packager is part of the NUT Team. + +Using your prefered method (yum, Add/Remove Software, ...), install one of the +two below packages: + +- 'nut' if you have a 'standalone' or 'netserver' installation, +- 'nut-client' if you have a 'netclient' installation. + +Optionaly, you can also install the following: + +- 'nut-cgi', if you need the CGI (HTML) option, +- 'nut-xml', if you need the netxml-ups driver, +- 'nut-devel', if you need the development files. + + +[[FreeBSD]] +FreeBSD +~~~~~~~ + +You can either install NUT as a binary package or as a port. + +Binary package +^^^^^^^^^^^^^^ + +To install the main component, use the following command: + + # pkg_add -r nut + +Port +^^^^ + +The port is located under /usr/ports/sysutils/nut. +To install it, use the following command: + + # cd /usr/ports/sysutils/nut/ && make install clean + +You have to define WITH_NUT_CGI to build the optional CGI scripts. + +Optionaly, you can also install the following ports: + +- sysutils/nut-snmp, for the SNMP driver, +- sysutils/nut-usb, for the USB drivers, +- sysutils/nut-libupsclient, for the upsclient library. + + +You are now ready to configure NUT, and start testing and using it. + +You can jump directly to the +<>. diff --git a/Makefile.am b/Makefile.am index 316c0ca..2d67519 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,7 +9,7 @@ SUBDIRS = include common clients conf data tools docs drivers \ lib scripts server tests # COPYING is included automatically. -EXTRA_DIST = LICENSE-GPL2 LICENSE-GPL3 MAINTAINERS UPGRADING +EXTRA_DIST = INSTALL.nut LICENSE-GPL2 LICENSE-GPL3 MAINTAINERS UPGRADING # ---------------------------------------------------------------------- # flags to pass to ./configure when calling "make distcheck" and "make @@ -22,7 +22,8 @@ DISTCHECK_LIGHT_FLAGS = --with-all=auto --with-ssl=auto --with-doc=auto DISTCHECK_CONFIGURE_FLAGS = ${DISTCHECK_FLAGS} \ --with-hotplug-dir='$${prefix}/etc/hotplug' \ - --with-udev-dir='$${prefix}/etc/udev' + --with-udev-dir='$${prefix}/etc/udev' \ + --with-devd-dir='$${prefix}/etc/devd' distcheck-light: $(MAKE) $(AM_MAKEFLAGS) DISTCHECK_FLAGS="$(DISTCHECK_LIGHT_FLAGS)" distcheck @@ -44,16 +45,13 @@ ChangeLog: tools/gitlog2changelog.py dummy-stamp $(top_srcdir)/tools/gitlog2changelog.py v2.6.0 || \ echo "gitlog2changelog.py failed to generate the ChangeLog. See https://github.com/networkupstools/nut/commits/master" > $@ -if HAVE_ASCIIDOC -website: - cd docs; $(MAKE) $(AM_MAKEFLAGS) website - cd docs/man; $(MAKE) $(AM_MAKEFLAGS) html-man - cd tools; $(MAKE) $(AM_MAKEFLAGS) website - cd docs/website; $(MAKE) $(AM_MAKEFLAGS) website -else !HAVE_ASCIIDOC -website: - @echo "Not building website since 'asciidoc' was not found." -endif !HAVE_ASCIIDOC +# Maintainers targets: distribution signature and hashes +dist-sig: + gpg --detach-sign nut-@PACKAGE_VERSION@.tar.gz + +dist-hash: + md5sum nut-@PACKAGE_VERSION@.tar.gz > nut-@PACKAGE_VERSION@.tar.gz.md5 + sha256sum nut-@PACKAGE_VERSION@.tar.gz > nut-@PACKAGE_VERSION@.tar.gz.sha256 # ---------------------------------------------------------------------- # targets from old build system (pre-automake). diff --git a/Makefile.in b/Makefile.in index 5857fc4..f702014 100644 --- a/Makefile.in +++ b/Makefile.in @@ -72,7 +72,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -82,10 +81,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ @@ -199,10 +197,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -214,8 +208,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -301,6 +293,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -353,7 +346,7 @@ SUBDIRS = include common clients conf data tools docs drivers \ # COPYING is included automatically. -EXTRA_DIST = LICENSE-GPL2 LICENSE-GPL3 MAINTAINERS UPGRADING +EXTRA_DIST = INSTALL.nut LICENSE-GPL2 LICENSE-GPL3 MAINTAINERS UPGRADING # ---------------------------------------------------------------------- # flags to pass to ./configure when calling "make distcheck" and "make @@ -364,7 +357,8 @@ DISTCHECK_FLAGS = --with-all --with-ssl --with-doc=auto DISTCHECK_LIGHT_FLAGS = --with-all=auto --with-ssl=auto --with-doc=auto DISTCHECK_CONFIGURE_FLAGS = ${DISTCHECK_FLAGS} \ --with-hotplug-dir='$${prefix}/etc/hotplug' \ - --with-udev-dir='$${prefix}/etc/udev' + --with-udev-dir='$${prefix}/etc/udev' \ + --with-devd-dir='$${prefix}/etc/devd' # Automatically generate the ChangeLog from Git logs: @@ -882,13 +876,13 @@ ChangeLog: tools/gitlog2changelog.py dummy-stamp $(top_srcdir)/tools/gitlog2changelog.py v2.6.0 || \ echo "gitlog2changelog.py failed to generate the ChangeLog. See https://github.com/networkupstools/nut/commits/master" > $@ -@HAVE_ASCIIDOC_TRUE@website: -@HAVE_ASCIIDOC_TRUE@ cd docs; $(MAKE) $(AM_MAKEFLAGS) website -@HAVE_ASCIIDOC_TRUE@ cd docs/man; $(MAKE) $(AM_MAKEFLAGS) html-man -@HAVE_ASCIIDOC_TRUE@ cd tools; $(MAKE) $(AM_MAKEFLAGS) website -@HAVE_ASCIIDOC_TRUE@ cd docs/website; $(MAKE) $(AM_MAKEFLAGS) website -@HAVE_ASCIIDOC_FALSE@website: -@HAVE_ASCIIDOC_FALSE@ @echo "Not building website since 'asciidoc' was not found." +# Maintainers targets: distribution signature and hashes +dist-sig: + gpg --detach-sign nut-@PACKAGE_VERSION@.tar.gz + +dist-hash: + md5sum nut-@PACKAGE_VERSION@.tar.gz > nut-@PACKAGE_VERSION@.tar.gz.md5 + sha256sum nut-@PACKAGE_VERSION@.tar.gz > nut-@PACKAGE_VERSION@.tar.gz.sha256 build: @echo $(WARN) diff --git a/NEWS b/NEWS index b8a34f9..c45fc6a 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,51 @@ If you're upgrading from an earlier version, see the UPGRADING file. For a complete and more detailed list of changes, please refer to the ChangeLog file. +--------------------------------------------------------------------------- +Release notes for NUT 2.7.2 - what's new since 2.7.1: + + - This release is the second interim release of the 2.7 testing series. + + - libupsclient had undefined references related to functions of libcommon. + This issue was reported on Debian (bug #731156) and is now fixed + + - support for new devices: + CABAC UPS-1700DV2 + Eaton Powerware 3105 + Emerson Network Power Liebert PSI 1440 + MicroDowell B.Box LP 500 + Numeric Digital 800 plus + OptiUPS VS 575C + Tripp Lite SU10KRT3/1X + + - FreeDesktop Hardware Abstraction Layer (HAL) support was removed. + + - nutdrv_atcl_usb: new driver for 'ATCL FOR UPS' + + - al175: re-introduced this driver (actually, it was in 2.7.1) + + - upsdrvctl now provides retry options for upsdrvctl and driver(s) + + - snmp-ups: add support for XPPC-MIB and Tripp Lite SU10KRT3/1X. + Also fix erroneous status in HP/Compaq SNMP MIB (with the most recent HP + firmware (1.76) ; improved various MIBs (APC, HP/Compaq, ...) + + - nutdrv_qx: add new 'fallback' Q1 subdriver, with minimal 'Q1' support. + General improvements on all subdrivers. + + - mge-shut: partially revert PnP/RTS change, for initializing the + communication with the UPS. Note that nut-scanner similar function was + not modified however. + + - FreeBSD DEVD support: generate devd.conf files for USB UPSes + This adds a --with-devd-dir=PATH option to ./configure + + - The NUT website was moved to a standalone website. A separate code + repository and source archive are now available. + + - As usual, more bugfixes, cleanup and improvements, on both source code + and documentation. + --------------------------------------------------------------------------- Release notes for NUT 2.7.1 - what's new since 2.6.5: diff --git a/README b/README index 2aa864e..1b44663 100644 --- a/README +++ b/README @@ -123,13 +123,13 @@ The entry in `ups.conf` looks like this: To start and stop drivers, use upsdrvctl. By default, it will start or stop every UPS in the config file: - /usr/local/ups/bin/upsdrvctl start - /usr/local/ups/bin/upsdrvctl stop + /usr/local/ups/sbin/upsdrvctl start + /usr/local/ups/sbin/upsdrvctl stop However, you can also just start or stop one by adding its name: - /usr/local/ups/bin/upsdrvctl start sparky - /usr/local/ups/bin/upsdrvctl stop sparky + /usr/local/ups/sbin/upsdrvctl start sparky + /usr/local/ups/sbin/upsdrvctl stop sparky To find the driver name for your device, refer to the section below called "HARDWARE SUPPORT TABLE". @@ -223,8 +223,8 @@ upsdrvctl can also shut down (power down) all of your UPS hardware. WARNING: if you play around with this command, expect your filesystems to die. Don't power off your computers unless they're ready for it: - /usr/local/ups/bin/upsdrvctl shutdown - /usr/local/ups/bin/upsdrvctl shutdown sparky + /usr/local/ups/sbin/upsdrvctl shutdown + /usr/local/ups/sbin/upsdrvctl shutdown sparky You should read the <> chapter to learn more about when to use this feature. If called at the wrong diff --git a/UPGRADING b/UPGRADING index 33e6ed5..f2d19c0 100644 --- a/UPGRADING +++ b/UPGRADING @@ -7,6 +7,21 @@ This file lists changes that affect users who installed older versions of this software. When upgrading from an older version, be sure to check this file to see if you need to make changes to your system. +Changes from 2.7.1 to 2.7.2 +--------------------------- + +- upsdrvctl is now installed to $prefix/sbin rather than $driverexec. + This usually means moving from /bin to /sbin, apart from few exceptions. + In all cases, please adapt your scripts. + +- FreeDesktop Hardware Abstraction Layer (HAL) support was removed. + Please adapt your packaging files, if you used to distribute the + nut-hal-drivers package. + +- This is a good time to point out that for stricter packaging systems, it may + be beneficial to add "--enable-option-checking=fatal" to the ./configure + command line, in order to quickly pick up any other removed option flags. + Changes from 2.6.5 to 2.7.1 --------------------------- diff --git a/aclocal.m4 b/aclocal.m4 index f22b2ab..4e5d1df 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1322,7 +1322,6 @@ m4_include([m4/nut_check_asciidoc.m4]) m4_include([m4/nut_check_libavahi.m4]) m4_include([m4/nut_check_libfreeipmi.m4]) m4_include([m4/nut_check_libgd.m4]) -m4_include([m4/nut_check_libhal.m4]) m4_include([m4/nut_check_libltdl.m4]) m4_include([m4/nut_check_libneon.m4]) m4_include([m4/nut_check_libnetsnmp.m4]) @@ -1332,6 +1331,5 @@ m4_include([m4/nut_check_libpowerman.m4]) m4_include([m4/nut_check_libusb.m4]) m4_include([m4/nut_check_libwrap.m4]) m4_include([m4/nut_check_os.m4]) -m4_include([m4/nut_config_libhal.m4]) m4_include([m4/nut_report_feature.m4]) m4_include([m4/nut_type_socklen_t.m4]) diff --git a/clients/Makefile.am b/clients/Makefile.am index 7199ec2..5c7abf9 100644 --- a/clients/Makefile.am +++ b/clients/Makefile.am @@ -46,14 +46,15 @@ upsstats_cgi_SOURCES = upsstats.c upsclient.h status.h upsstats.h \ # not LDADD. libupsclient_la_SOURCES = upsclient.c upsclient.h -libupsclient_la_LIBADD = ../common/libparseconf.la +libupsclient_la_LIBADD = ../common/libcommonclient.la if WITH_SSL libupsclient_la_LIBADD += $(LIBSSL_LIBS) endif # libupsclient version information # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -libupsclient_la_LDFLAGS = -version-info 3:1:0 +libupsclient_la_LDFLAGS = -version-info 4:0:0 libnutclient_la_SOURCES = nutclient.h nutclient.cpp +libnutclient_la_LDFLAGS = -version-info 0:0:0 diff --git a/clients/Makefile.in b/clients/Makefile.in index 67554eb..e004931 100644 --- a/clients/Makefile.in +++ b/clients/Makefile.in @@ -79,7 +79,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -89,10 +88,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -133,9 +131,12 @@ LTLIBRARIES = $(lib_LTLIBRARIES) libnutclient_la_LIBADD = am_libnutclient_la_OBJECTS = nutclient.lo libnutclient_la_OBJECTS = $(am_libnutclient_la_OBJECTS) +libnutclient_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libnutclient_la_LDFLAGS) $(LDFLAGS) -o $@ am__DEPENDENCIES_1 = @WITH_SSL_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -libupsclient_la_DEPENDENCIES = ../common/libparseconf.la \ +libupsclient_la_DEPENDENCIES = ../common/libcommonclient.la \ $(am__DEPENDENCIES_2) am_libupsclient_la_OBJECTS = upsclient.lo libupsclient_la_OBJECTS = $(am_libupsclient_la_OBJECTS) @@ -274,10 +275,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -289,8 +286,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -376,6 +371,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -445,12 +441,13 @@ upsstats_cgi_SOURCES = upsstats.c upsclient.h status.h upsstats.h \ # not LDADD. libupsclient_la_SOURCES = upsclient.c upsclient.h -libupsclient_la_LIBADD = ../common/libparseconf.la $(am__append_4) +libupsclient_la_LIBADD = ../common/libcommonclient.la $(am__append_4) # libupsclient version information # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -libupsclient_la_LDFLAGS = -version-info 3:1:0 +libupsclient_la_LDFLAGS = -version-info 4:0:0 libnutclient_la_SOURCES = nutclient.h nutclient.cpp +libnutclient_la_LDFLAGS = -version-info 0:0:0 all: all-am .SUFFIXES: @@ -518,7 +515,7 @@ clean-libLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libnutclient.la: $(libnutclient_la_OBJECTS) $(libnutclient_la_DEPENDENCIES) $(EXTRA_libnutclient_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libnutclient_la_OBJECTS) $(libnutclient_la_LIBADD) $(LIBS) + $(libnutclient_la_LINK) -rpath $(libdir) $(libnutclient_la_OBJECTS) $(libnutclient_la_LIBADD) $(LIBS) libupsclient.la: $(libupsclient_la_OBJECTS) $(libupsclient_la_DEPENDENCIES) $(EXTRA_libupsclient_la_DEPENDENCIES) $(libupsclient_la_LINK) -rpath $(libdir) $(libupsclient_la_OBJECTS) $(libupsclient_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) diff --git a/common/Makefile.am b/common/Makefile.am index 6dda04a..f85244c 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -2,14 +2,16 @@ AM_CFLAGS = -I$(top_srcdir)/include -noinst_LTLIBRARIES = libparseconf.la libcommon.la +noinst_LTLIBRARIES = libparseconf.la libcommon.la libcommonclient.la libparseconf_la_SOURCES = parseconf.c # do not hard depend on '../include/nut_version.h', since it blocks # 'dist', and is only required for actual build, in which case # BUILT_SOURCES (in ../include) will ensure nut_version.h will # be built before anything else -libcommon_la_SOURCES = common.c state.c upsconf.c +libcommon_la_SOURCES = common.c state.c upsconf.c +libcommonclient_la_SOURCES = common.c state.c # ensure inclusion of local implementation of missing systems functions # using LTLIBOBJS. Refer to configure.in -> AC_REPLACE_FUNCS libcommon_la_LIBADD = libparseconf.la @LTLIBOBJS@ +libcommonclient_la_LIBADD = libparseconf.la @LTLIBOBJS@ diff --git a/common/Makefile.in b/common/Makefile.in index 5095cb2..daa0324 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -77,10 +76,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -91,6 +89,9 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libcommon_la_DEPENDENCIES = libparseconf.la @LTLIBOBJS@ am_libcommon_la_OBJECTS = common.lo state.lo upsconf.lo libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS) +libcommonclient_la_DEPENDENCIES = libparseconf.la @LTLIBOBJS@ +am_libcommonclient_la_OBJECTS = common.lo state.lo +libcommonclient_la_OBJECTS = $(am_libcommonclient_la_OBJECTS) libparseconf_la_LIBADD = am_libparseconf_la_OBJECTS = parseconf.lo libparseconf_la_OBJECTS = $(am_libparseconf_la_OBJECTS) @@ -107,8 +108,10 @@ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -SOURCES = $(libcommon_la_SOURCES) $(libparseconf_la_SOURCES) -DIST_SOURCES = $(libcommon_la_SOURCES) $(libparseconf_la_SOURCES) +SOURCES = $(libcommon_la_SOURCES) $(libcommonclient_la_SOURCES) \ + $(libparseconf_la_SOURCES) +DIST_SOURCES = $(libcommon_la_SOURCES) $(libcommonclient_la_SOURCES) \ + $(libparseconf_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -159,10 +162,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -174,8 +173,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -261,6 +258,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -303,17 +301,19 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevdir = @udevdir@ AM_CFLAGS = -I$(top_srcdir)/include -noinst_LTLIBRARIES = libparseconf.la libcommon.la +noinst_LTLIBRARIES = libparseconf.la libcommon.la libcommonclient.la libparseconf_la_SOURCES = parseconf.c # do not hard depend on '../include/nut_version.h', since it blocks # 'dist', and is only required for actual build, in which case # BUILT_SOURCES (in ../include) will ensure nut_version.h will # be built before anything else -libcommon_la_SOURCES = common.c state.c upsconf.c +libcommon_la_SOURCES = common.c state.c upsconf.c +libcommonclient_la_SOURCES = common.c state.c # ensure inclusion of local implementation of missing systems functions # using LTLIBOBJS. Refer to configure.in -> AC_REPLACE_FUNCS libcommon_la_LIBADD = libparseconf.la @LTLIBOBJS@ +libcommonclient_la_LIBADD = libparseconf.la @LTLIBOBJS@ all: all-am .SUFFIXES: @@ -359,6 +359,8 @@ clean-noinstLTLIBRARIES: done libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES) $(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS) +libcommonclient.la: $(libcommonclient_la_OBJECTS) $(libcommonclient_la_DEPENDENCIES) $(EXTRA_libcommonclient_la_DEPENDENCIES) + $(LINK) $(libcommonclient_la_OBJECTS) $(libcommonclient_la_LIBADD) $(LIBS) libparseconf.la: $(libparseconf_la_OBJECTS) $(libparseconf_la_DEPENDENCIES) $(EXTRA_libparseconf_la_DEPENDENCIES) $(LINK) $(libparseconf_la_OBJECTS) $(libparseconf_la_LIBADD) $(LIBS) diff --git a/conf/Makefile.in b/conf/Makefile.in index 888998f..6b374f8 100644 --- a/conf/Makefile.in +++ b/conf/Makefile.in @@ -68,7 +68,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -78,10 +77,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -171,10 +169,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -186,8 +180,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -273,6 +265,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/conf/upsmon.conf.sample b/conf/upsmon.conf.sample index 10f378a..9b44237 100644 --- a/conf/upsmon.conf.sample +++ b/conf/upsmon.conf.sample @@ -27,7 +27,7 @@ # # This user should not have write access to upsmon.conf. # -# RUN_AS_USER nobody +# RUN_AS_USER nut # -------------------------------------------------------------------------- # MONITOR ("master"|"slave") @@ -196,7 +196,7 @@ DEADTIME 15 # # See the shutdown.txt file in the docs subdirectory for more information. -POWERDOWNFLAG /usr/local/ups/etc/killpower +POWERDOWNFLAG /etc/nut/killpower # -------------------------------------------------------------------------- # NOTIFYMSG - change messages sent by upsmon when certain events occur @@ -307,7 +307,7 @@ FINALDELAY 5 # Certificates are stored in a dedicated database (splitted in 3 files). # Specify the path of the database directory. # -# CERTPATH /usr/local/ups/etc/cert/upsmon +# CERTPATH /etc/nut/cert/upsmon # # With OpenSSL: # Directory containing CA certificates in PEM format, used to verify diff --git a/configure b/configure index 877578c..2fd661d 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for nut 2.7.1. +# Generated by GNU Autoconf 2.69 for nut 2.7.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='nut' PACKAGE_TARNAME='nut' -PACKAGE_VERSION='2.7.1' -PACKAGE_STRING='nut 2.7.1' +PACKAGE_VERSION='2.7.2' +PACKAGE_STRING='nut 2.7.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -640,6 +640,7 @@ systemdsystemshutdowndir systemdsystemunitdir pkgconfigdir driverexecdir +devddir cgiexecdir WORDS_BIGENDIAN SUN_LIBUSB @@ -657,12 +658,6 @@ NETLIBS DRIVER_INSTALL_TARGET DRIVER_MAN_LIST DRIVER_BUILD_LIST -LIBHAL_LIBS -LIBHAL_CFLAGS -HAL_CALLOUTS_PATH -HAL_FDI_PATH -HAL_DEVICE_MATCH_KEY -HAL_USER LIBLTDL_LIBS LIBLTDL_CFLAGS LIBWRAP_LIBS @@ -692,6 +687,8 @@ HAVE_ASPELL_TRUE ASPELL MANUALUPDATE_FALSE MANUALUPDATE_TRUE +WITH_DEVD_FALSE +WITH_DEVD_TRUE WITH_UDEV_FALSE WITH_UDEV_TRUE WITH_HOTPLUG_FALSE @@ -729,8 +726,6 @@ WITH_ASCIIDOC_TRUE DBLATEX A2X ASCIIDOC -WITH_HAL_FALSE -WITH_HAL_TRUE WITH_CGI_FALSE WITH_CGI_TRUE WITH_LIBLTDL_FALSE @@ -888,13 +883,6 @@ with_snmp_includes with_snmp_libs with_usb_includes with_usb_libs -with_hal -with_hal_includes -with_hal_libs -with_hal_user -with_hal_device_match_key -with_hal_callouts_path -with_hal_fdi_path with_snmp with_neon with_neon_includes @@ -946,6 +934,7 @@ with_pkgconfig_dir with_systemdsystemunitdir with_hotplug_dir with_udev_dir +with_devd_dir ' ac_precious_vars='build_alias host_alias @@ -1505,7 +1494,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures nut 2.7.1 to adapt to many kinds of systems. +\`configure' configures nut 2.7.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1576,7 +1565,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of nut 2.7.1:";; + short | recursive ) echo "Configuration of nut 2.7.2:";; esac cat <<\_ACEOF @@ -1611,17 +1600,6 @@ Optional Packages: [--with-usb-includes=CFLAGS] include flags for the libusb library [--with-usb-libs=LIBS] linker flags for the libusb library - --with-hal build and install HAL support (no) - [--with-hal-includes=CFLAGS] - include flags for the HAL library - [--with-hal-libs=LIBS] linker flags for the HAL library - [--with-hal-user=USER] addons run as user - [--with-hal-device-match-key=KEY] - device match key - [--with-hal-callouts-path=PATH] - installation path for callouts - [--with-hal-fdi-path=PATH] - installation path for device information files --with-snmp build and install SNMP drivers (auto) --with-neon build and install neon based XML/HTTP driver (auto) [--with-neon-includes=CFLAGS] @@ -1692,6 +1670,8 @@ Optional Packages: Directory for systemd service files (auto) --with-hotplug-dir=PATH where to install hotplug rules (/etc/hotplug) --with-udev-dir=PATH where to install udev rules (/lib/udev or /etc/udev) + --with-devd-dir=PATH where to install devd.conf file (/usr/local/etc/devd + or /etc/devd) Some influential environment variables: CC C compiler command @@ -1781,7 +1761,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -nut configure 2.7.1 +nut configure 2.7.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2367,7 +2347,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by nut $as_me 2.7.1, which was +It was created by nut $as_me 2.7.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3438,7 +3418,7 @@ fi # Define the identity of the package. PACKAGE='nut' - VERSION='2.7.1' + VERSION='2.7.2' cat >>confdefs.h <<_ACEOF @@ -4992,6 +4972,14 @@ if test ! -d "${udevdir}"; then fi fi +devddir='/usr/local/etc/devd' +if test ! -d "${devddir}"; then + devddir='/etc/devd' + if test ! -d "${devddir}"; then + devddir='' + fi +fi + RUN_AS_USER="nobody" RUN_AS_GROUP="nobody" PIDPATH="/var/run" @@ -8076,277 +8064,6 @@ done fi -# Check whether --with-hal was given. -if test "${with_hal+set}" = set; then : - withval=$with_hal; nut_with_hal="${withval}" -else - nut_with_hal="no" - -fi - - - -if test -z "${nut_have_libhal_seen}"; then - nut_have_libhal_seen=yes - - CFLAGS_ORIG="${CFLAGS}" - LIBS_ORIG="${LIBS}" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal version via pkg-config (0.5.8 minimum required)" >&5 -$as_echo_n "checking for libhal version via pkg-config (0.5.8 minimum required)... " >&6; } - HAL_VERSION="`pkg-config --silence-errors --modversion hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_VERSION}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none found" >&5 -$as_echo "none found" >&6; } - elif pkg-config --silence-errors --atleast-version=0.5.8 hal 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${HAL_VERSION} found" >&5 -$as_echo "${HAL_VERSION} found" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ${HAL_VERSION} is too old" >&5 -$as_echo "$as_me: WARNING: ${HAL_VERSION} is too old" >&2;} - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal cflags" >&5 -$as_echo_n "checking for libhal cflags... " >&6; } - -# Check whether --with-hal-includes was given. -if test "${with_hal_includes+set}" = set; then : - withval=$with_hal_includes; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-includes - see docs/configure.txt" "$LINENO" 5 - ;; - *) - CFLAGS="${withval}" - ;; - esac - -else - - CFLAGS="`pkg-config --silence-errors --cflags hal dbus-glib-1 2>/dev/null`" - if test "$?" != "0"; then - CFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/hal -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CFLAGS}" >&5 -$as_echo "${CFLAGS}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal ldflags" >&5 -$as_echo_n "checking for libhal ldflags... " >&6; } - -# Check whether --with-hal-libs was given. -if test "${with_hal_libs+set}" = set; then : - withval=$with_hal_libs; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-libs - see docs/configure.txt" "$LINENO" 5 - ;; - *) - LIBS="${withval}" - ;; - esac - -else - - LIBS="`pkg-config --silence-errors --libs hal dbus-glib-1 2>/dev/null`" - if test "$?" != "0"; then - LIBS="-lhal -ldbus-1 -lpthread" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${LIBS}" >&5 -$as_echo "${LIBS}" >&6; } - - for ac_header in libhal.h -do : - ac_fn_c_check_header_compile "$LINENO" "libhal.h" "ac_cv_header_libhal_h" "$ac_includes_default -" -if test "x$ac_cv_header_libhal_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBHAL_H 1 -_ACEOF - nut_have_libhal=yes -else - nut_have_libhal=no -fi - -done - - for ac_header in glib.h dbus/dbus-glib.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - nut_have_libhal=no -fi - -done - - for ac_func in libhal_device_new_changeset -do : - ac_fn_c_check_func "$LINENO" "libhal_device_new_changeset" "ac_cv_func_libhal_device_new_changeset" -if test "x$ac_cv_func_libhal_device_new_changeset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBHAL_DEVICE_NEW_CHANGESET 1 -_ACEOF - -else - nut_have_libhal=no -fi -done - - - if test "${nut_have_libhal}" = "yes"; then - for ac_func in g_timeout_add_seconds -do : - ac_fn_c_check_func "$LINENO" "g_timeout_add_seconds" "ac_cv_func_g_timeout_add_seconds" -if test "x$ac_cv_func_g_timeout_add_seconds" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_G_TIMEOUT_ADD_SECONDS 1 -_ACEOF - -fi -done - - LIBHAL_CFLAGS="${CFLAGS}" - LIBHAL_LIBS="${LIBS}" - fi - - CFLAGS="${CFLAGS_ORIG}" - LIBS="${LIBS_ORIG}" -fi - - -if test -z "${nut_have_config_libhal_seen}" -a "${nut_have_libhal}" = "yes"; then - nut_have_config_libhal_seen=yes - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal user" >&5 -$as_echo_n "checking for libhal user... " >&6; } - -# Check whether --with-hal-user was given. -if test "${with_hal_user+set}" = set; then : - withval=$with_hal_user; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-user - see docs/configure.txt" "$LINENO" 5 - ;; - *) - HAL_USER="${withval}" - ;; - esac - -else - - HAL_USER="`pkg-config --silence-errors --variable=haluser hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_USER}"; then - HAL_USER="haldaemon" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${HAL_USER}" >&5 -$as_echo "${HAL_USER}" >&6; } - -cat >>confdefs.h <<_ACEOF -#define HAL_USER "${HAL_USER}" -_ACEOF - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal device match key" >&5 -$as_echo_n "checking for libhal device match key... " >&6; } - -# Check whether --with-hal-device-match-key was given. -if test "${with_hal_device_match_key+set}" = set; then : - withval=$with_hal_device_match_key; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-device-match-key - see docs/configure.txt" "$LINENO" 5 - ;; - *) - HAL_DEVICE_MATCH_KEY="${withval}" - ;; - esac - -else - - if pkg-config --silence-errors --atleast-version=0.5.11 hal 2>/dev/null; then - HAL_DEVICE_MATCH_KEY="info.bus" - else - HAL_DEVICE_MATCH_KEY="info.subsystem" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${HAL_DEVICE_MATCH_KEY}" >&5 -$as_echo "${HAL_DEVICE_MATCH_KEY}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal Callouts path" >&5 -$as_echo_n "checking for libhal Callouts path... " >&6; } - -# Check whether --with-hal-callouts-path was given. -if test "${with_hal_callouts_path+set}" = set; then : - withval=$with_hal_callouts_path; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-callouts-path - see docs/configure.txt" "$LINENO" 5 - ;; - *) - HAL_CALLOUTS_PATH="${withval}" - ;; - esac - -else - - HAL_CALLOUTS_PATH="`pkg-config --silence-errors --variable=libexecdir hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_CALLOUTS_PATH}"; then - HAL_CALLOUTS_PATH="${libdir}/hal" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${HAL_CALLOUTS_PATH}" >&5 -$as_echo "${HAL_CALLOUTS_PATH}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhal Device Information path" >&5 -$as_echo_n "checking for libhal Device Information path... " >&6; } - -# Check whether --with-hal-fdi-path was given. -if test "${with_hal_fdi_path+set}" = set; then : - withval=$with_hal_fdi_path; - case "${withval}" in - yes|no) - as_fn_error $? "invalid option --with(out)-hal-fdi-path - see docs/configure.txt" "$LINENO" 5 - ;; - *) - HAL_FDI_PATH="${withval}" - ;; - esac - -else - - HAL_FDI_PATH="`pkg-config --silence-errors --variable=hal_fdidir hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_FDI_PATH}"; then - HAL_FDI_PATH="${datarootdir}/hal/fdi/information/20thirdparty" - fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${HAL_FDI_PATH}" >&5 -$as_echo "${HAL_FDI_PATH}" >&6; } -fi - - # Check whether --with-snmp was given. if test "${with_snmp+set}" = set; then : withval=$with_snmp; nut_with_snmp="${withval}" @@ -11363,62 +11080,6 @@ _ACEOF -if test "${nut_with_hal}" = "yes" -a "${nut_have_libhal}" != "yes"; then - as_fn_error $? "\"libhal not found, required for HAL support\"" "$LINENO" 5 -fi - -if test "${nut_with_hal}" = "yes" -a "${nut_have_libusb}" != "yes"; then - as_fn_error $? "\"libusb not found, required for HAL support\"" "$LINENO" 5 -fi - -if test "${nut_with_hal}" != "no"; then - if test "${nut_have_libhal}" = "yes" -a "${nut_have_libusb}" = "yes"; then - nut_with_hal="yes" - else - nut_with_hal="no" - fi -fi - - if test "${nut_with_hal}" = "yes"; then - WITH_HAL_TRUE= - WITH_HAL_FALSE='#' -else - WITH_HAL_TRUE='#' - WITH_HAL_FALSE= -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable HAL support" >&5 -$as_echo_n "checking whether to enable HAL support... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${nut_with_hal} " >&5 -$as_echo "${nut_with_hal} " >&6; } - if test -z "${nut_report_feature_flag}"; then - nut_report_feature_flag="1" - ac_clean_files="${ac_clean_files} conf_nut_report_feature" - echo > conf_nut_report_feature - echo "Configuration summary:" >> conf_nut_report_feature - echo "======================" >> conf_nut_report_feature - fi - echo "enable HAL support: ${nut_with_hal} " >> conf_nut_report_feature - - - if test "${nut_with_hal}" = "yes"; then - WITH_HAL_TRUE= - WITH_HAL_FALSE='#' -else - WITH_HAL_TRUE='#' - WITH_HAL_FALSE= -fi - - if test "${nut_with_hal}" = "yes"; then - -cat >>confdefs.h <<_ACEOF -#define WITH_HAL 1 -_ACEOF - - fi - - @@ -11772,8 +11433,8 @@ no) ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if asciidoc version can build website (minimum required 8.6.3)" >&5 -$as_echo_n "checking if asciidoc version can build website (minimum required 8.6.3)... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if asciidoc version can build manpages (minimum required 8.6.3)" >&5 +$as_echo_n "checking if asciidoc version can build manpages (minimum required 8.6.3)... " >&6; } @@ -11819,8 +11480,8 @@ $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if a2x version can build website (minimum required 8.6.3)" >&5 -$as_echo_n "checking if a2x version can build website (minimum required 8.6.3)... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if a2x version can build manpages (minimum required 8.6.3)" >&5 +$as_echo_n "checking if a2x version can build manpages (minimum required 8.6.3)... " >&6; } @@ -22969,6 +22630,50 @@ else fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install FreeBSD devd.conf file" >&5 +$as_echo_n "checking whether to install FreeBSD devd.conf file... " >&6; } + +# Check whether --with-devd-dir was given. +if test "${with_devd_dir+set}" = set; then : + withval=$with_devd_dir; + case "${withval}" in + yes) + if test -z "${devddir}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "\"devd directory requested but not found\"" "$LINENO" 5 + fi + ;; + auto) + ;; + no) + devddir="" + ;; + *) + devddir="${withval}" + ;; + esac + +fi + +if test -n "${devddir}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using ${devddir}" >&5 +$as_echo "using ${devddir}" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test -n "${devddir}"; then + WITH_DEVD_TRUE= + WITH_DEVD_FALSE='#' +else + WITH_DEVD_TRUE='#' + WITH_DEVD_FALSE= +fi + + + for ac_prog in asciidoc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -23215,12 +22920,7 @@ _ACEOF - - - - - -ac_config_files="$ac_config_files clients/Makefile common/Makefile conf/Makefile conf/upsmon.conf.sample conf/upssched.conf.sample data/html/header.html data/html/Makefile data/Makefile data/driver.list docs/Makefile docs/man/Makefile docs/website/Makefile drivers/Makefile include/Makefile lib/libupsclient-config lib/libupsclient.pc lib/libnutclient.pc lib/libnutscan.pc lib/Makefile scripts/augeas/Makefile scripts/augeas/nutnutconf.aug scripts/augeas/nutupsconf.aug scripts/augeas/nutupsdconf.aug scripts/augeas/nutupsdusers.aug scripts/augeas/nutupsmonconf.aug scripts/augeas/nutupsschedconf.aug scripts/augeas/nuthostsconf.aug scripts/augeas/nutupssetconf.aug scripts/avahi/nut.service scripts/hal/Makefile scripts/hal/ups-nut-device.fdi scripts/hotplug/Makefile scripts/hotplug/libhidups scripts/HP-UX/nut.psf scripts/HP-UX/postinstall scripts/python/Makefile scripts/systemd/Makefile scripts/systemd/nut-driver.service scripts/systemd/nut-monitor.service scripts/systemd/nut-server.service scripts/systemd/nutshutdown scripts/Solaris/Makefile scripts/Solaris/pkginfo scripts/Solaris/postinstall scripts/Solaris/preremove scripts/Solaris/nut scripts/udev/Makefile scripts/udev/nut-ipmipsu.rules scripts/udev/nut-usbups.rules scripts/ufw/nut.ufw.profile scripts/Makefile server/Makefile tools/Makefile tools/nut-scanner/Makefile tests/Makefile Makefile" +ac_config_files="$ac_config_files clients/Makefile common/Makefile conf/Makefile conf/upsmon.conf.sample conf/upssched.conf.sample data/html/header.html data/html/Makefile data/Makefile data/driver.list docs/Makefile docs/man/Makefile drivers/Makefile include/Makefile lib/libupsclient-config lib/libupsclient.pc lib/libnutclient.pc lib/libnutscan.pc lib/Makefile scripts/augeas/Makefile scripts/augeas/nutnutconf.aug scripts/augeas/nutupsconf.aug scripts/augeas/nutupsdconf.aug scripts/augeas/nutupsdusers.aug scripts/augeas/nutupsmonconf.aug scripts/augeas/nutupsschedconf.aug scripts/augeas/nuthostsconf.aug scripts/augeas/nutupssetconf.aug scripts/avahi/nut.service scripts/devd/Makefile scripts/devd/nut-usb.conf scripts/hotplug/Makefile scripts/hotplug/libhidups scripts/HP-UX/nut.psf scripts/HP-UX/postinstall scripts/python/Makefile scripts/systemd/Makefile scripts/systemd/nut-driver.service scripts/systemd/nut-monitor.service scripts/systemd/nut-server.service scripts/systemd/nutshutdown scripts/Solaris/Makefile scripts/Solaris/pkginfo scripts/Solaris/postinstall scripts/Solaris/preremove scripts/Solaris/nut scripts/udev/Makefile scripts/udev/nut-ipmipsu.rules scripts/udev/nut-usbups.rules scripts/ufw/nut.ufw.profile scripts/Makefile server/Makefile tools/Makefile tools/nut-scanner/Makefile tests/Makefile Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -23424,14 +23124,6 @@ if test -z "${WITH_CGI_TRUE}" && test -z "${WITH_CGI_FALSE}"; then as_fn_error $? "conditional \"WITH_CGI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${WITH_HAL_TRUE}" && test -z "${WITH_HAL_FALSE}"; then - as_fn_error $? "conditional \"WITH_HAL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${WITH_HAL_TRUE}" && test -z "${WITH_HAL_FALSE}"; then - as_fn_error $? "conditional \"WITH_HAL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${WITH_ASCIIDOC_TRUE}" && test -z "${WITH_ASCIIDOC_FALSE}"; then as_fn_error $? "conditional \"WITH_ASCIIDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -23468,6 +23160,10 @@ if test -z "${WITH_UDEV_TRUE}" && test -z "${WITH_UDEV_FALSE}"; then as_fn_error $? "conditional \"WITH_UDEV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${WITH_DEVD_TRUE}" && test -z "${WITH_DEVD_FALSE}"; then + as_fn_error $? "conditional \"WITH_DEVD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${MANUALUPDATE_TRUE}" && test -z "${MANUALUPDATE_FALSE}"; then as_fn_error $? "conditional \"MANUALUPDATE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -23873,7 +23569,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by nut $as_me 2.7.1, which was +This file was extended by nut $as_me 2.7.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23939,7 +23635,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -nut config.status 2.7.1 +nut config.status 2.7.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -24457,7 +24153,6 @@ do "data/driver.list") CONFIG_FILES="$CONFIG_FILES data/driver.list" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "docs/man/Makefile") CONFIG_FILES="$CONFIG_FILES docs/man/Makefile" ;; - "docs/website/Makefile") CONFIG_FILES="$CONFIG_FILES docs/website/Makefile" ;; "drivers/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "lib/libupsclient-config") CONFIG_FILES="$CONFIG_FILES lib/libupsclient-config" ;; @@ -24475,8 +24170,8 @@ do "scripts/augeas/nuthostsconf.aug") CONFIG_FILES="$CONFIG_FILES scripts/augeas/nuthostsconf.aug" ;; "scripts/augeas/nutupssetconf.aug") CONFIG_FILES="$CONFIG_FILES scripts/augeas/nutupssetconf.aug" ;; "scripts/avahi/nut.service") CONFIG_FILES="$CONFIG_FILES scripts/avahi/nut.service" ;; - "scripts/hal/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/hal/Makefile" ;; - "scripts/hal/ups-nut-device.fdi") CONFIG_FILES="$CONFIG_FILES scripts/hal/ups-nut-device.fdi" ;; + "scripts/devd/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/devd/Makefile" ;; + "scripts/devd/nut-usb.conf") CONFIG_FILES="$CONFIG_FILES scripts/devd/nut-usb.conf" ;; "scripts/hotplug/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/hotplug/Makefile" ;; "scripts/hotplug/libhidups") CONFIG_FILES="$CONFIG_FILES scripts/hotplug/libhidups" ;; "scripts/HP-UX/nut.psf") CONFIG_FILES="$CONFIG_FILES scripts/HP-UX/nut.psf" ;; diff --git a/configure.in b/configure.ac similarity index 96% rename from configure.in rename to configure.ac index eda6ae6..ce8b2c5 100644 --- a/configure.in +++ b/configure.ac @@ -3,7 +3,7 @@ dnl | Network UPS Tools: configure.in | dnl +------------------------------------------------------------------+ dnl NUT version number is defined here, with a Git suffix in include/nut_version.h -AC_INIT(nut, 2.7.1) +AC_INIT(nut, 2.7.2) AC_CONFIG_SRCDIR(server/upsd.c) AC_CONFIG_MACRO_DIR([m4]) echo "Network UPS Tools version ${PACKAGE_VERSION}" @@ -76,6 +76,14 @@ if test ! -d "${udevdir}"; then fi fi +devddir='/usr/local/etc/devd' +if test ! -d "${devddir}"; then + devddir='/etc/devd' + if test ! -d "${devddir}"; then + devddir='' + fi +fi + RUN_AS_USER="nobody" RUN_AS_GROUP="nobody" PIDPATH="/var/run" @@ -254,9 +262,6 @@ dnl what will be in the --with-drivers argument. NUT_CHECK_LIBNETSNMP NUT_CHECK_LIBUSB -NUT_ARG_WITH([hal], [build and install HAL support], [no]) -NUT_CHECK_LIBHAL -NUT_CONFIG_LIBHAL NUT_ARG_WITH([snmp], [build and install SNMP drivers], [auto]) NUT_CHECK_LIBNETSNMP NUT_ARG_WITH([neon], [build and install neon based XML/HTTP driver], [auto]) @@ -582,37 +587,13 @@ fi NUT_REPORT_FEATURE([build CGI programs], [${nut_with_cgi}], [], [WITH_CGI], [Define to enable CGI (HTTP) support]) -dnl ---------------------------------------------------------------------- -dnl checks related to --with-hal - -dnl ${nut_with_hal}: any value except "yes" or "no" is treated as "auto". -if test "${nut_with_hal}" = "yes" -a "${nut_have_libhal}" != "yes"; then - AC_MSG_ERROR(["libhal not found, required for HAL support"]) -fi - -if test "${nut_with_hal}" = "yes" -a "${nut_have_libusb}" != "yes"; then - AC_MSG_ERROR(["libusb not found, required for HAL support"]) -fi - -if test "${nut_with_hal}" != "no"; then - if test "${nut_have_libhal}" = "yes" -a "${nut_have_libusb}" = "yes"; then - nut_with_hal="yes" - else - nut_with_hal="no" - fi -fi - -AM_CONDITIONAL(WITH_HAL, test "${nut_with_hal}" = "yes") -NUT_REPORT_FEATURE([enable HAL support], [${nut_with_hal}], [], - [WITH_HAL], [Define to enable HAL support]) dnl ---------------------------------------------------------------------- dnl checks related to --with-doc dnl Always check for AsciiDoc prerequisites, since even if --with-doc -dnl is set to 'no', we may still want to build the website, or some -dnl doc targets manually +dnl is set to 'no', we may still want to build some doc targets manually NUT_CHECK_ASCIIDOC case "${nut_with_doc}" in @@ -683,7 +664,7 @@ no) ;; esac -AC_MSG_CHECKING([if asciidoc version can build website (minimum required 8.6.3)]) +AC_MSG_CHECKING([if asciidoc version can build manpages (minimum required 8.6.3)]) AX_COMPARE_VERSION([${ASCIIDOC_VERSION}], [ge], [8.6.3], [ AC_MSG_RESULT(yes) nut_have_asciidoc="yes" @@ -692,7 +673,7 @@ AX_COMPARE_VERSION([${ASCIIDOC_VERSION}], [ge], [8.6.3], [ nut_have_asciidoc="no" ]) -AC_MSG_CHECKING([if a2x version can build website (minimum required 8.6.3)]) +AC_MSG_CHECKING([if a2x version can build manpages (minimum required 8.6.3)]) AX_COMPARE_VERSION([${A2X_VERSION}], [ge], [8.6.3], [ AC_MSG_RESULT(yes) ], [ @@ -1091,6 +1072,38 @@ else fi AM_CONDITIONAL(WITH_UDEV, test -n "${udevdir}") +dnl FreeBSD devd support: + +AC_MSG_CHECKING(whether to install FreeBSD devd.conf file) +AC_ARG_WITH(devd-dir, + AS_HELP_STRING([--with-devd-dir=PATH], [where to install devd.conf file (/usr/local/etc/devd or /etc/devd)]), +[ + case "${withval}" in + yes) + if test -z "${devddir}"; then + AC_MSG_RESULT(no) + AC_MSG_ERROR(["devd directory requested but not found"]) + fi + ;; + auto) + ;; + no) + devddir="" + ;; + *) + devddir="${withval}" + ;; + esac +], []) +if test -n "${devddir}"; then + AC_MSG_RESULT(using ${devddir}) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(WITH_DEVD, test -n "${devddir}") + +dnl + AC_PATH_PROGS([ASCIIDOC], [asciidoc], [none]) AM_CONDITIONAL([MANUALUPDATE], [test "x$ASCIIDOC" != "xnone"]) AC_PATH_PROGS([A2X], [a2x], [none]) @@ -1151,12 +1164,6 @@ AC_SUBST(LIBWRAP_CFLAGS) AC_SUBST(LIBWRAP_LIBS) AC_SUBST(LIBLTDL_CFLAGS) AC_SUBST(LIBLTDL_LIBS) -AC_SUBST(HAL_USER) -AC_SUBST(HAL_DEVICE_MATCH_KEY) -AC_SUBST(HAL_FDI_PATH) -AC_SUBST(HAL_CALLOUTS_PATH) -AC_SUBST(LIBHAL_CFLAGS) -AC_SUBST(LIBHAL_LIBS) AC_SUBST(DRIVER_BUILD_LIST) AC_SUBST(DRIVER_MAN_LIST) AC_SUBST(DRIVER_INSTALL_TARGET) @@ -1174,6 +1181,7 @@ AC_SUBST(RUN_AS_GROUP) AC_SUBST(SUN_LIBUSB) AC_SUBST(WORDS_BIGENDIAN) AC_SUBST(cgiexecdir) +AC_SUBST(devddir) AC_SUBST(driverexecdir) AC_SUBST(htmldir) AC_SUBST(pkgconfigdir) @@ -1194,7 +1202,6 @@ AC_OUTPUT([ data/driver.list docs/Makefile docs/man/Makefile - docs/website/Makefile drivers/Makefile include/Makefile lib/libupsclient-config @@ -1212,8 +1219,8 @@ AC_OUTPUT([ scripts/augeas/nuthostsconf.aug scripts/augeas/nutupssetconf.aug scripts/avahi/nut.service - scripts/hal/Makefile - scripts/hal/ups-nut-device.fdi + scripts/devd/Makefile + scripts/devd/nut-usb.conf scripts/hotplug/Makefile scripts/hotplug/libhidups scripts/HP-UX/nut.psf diff --git a/data/Makefile.in b/data/Makefile.in index 208724a..96bf232 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -77,10 +76,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -206,10 +204,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -221,8 +215,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -308,6 +300,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/data/driver.list.in b/data/driver.list.in index 96bb5a3..45db598 100644 --- a/data/driver.list.in +++ b/data/driver.list.in @@ -27,8 +27,8 @@ # ***** vendor provided protocol and hardware # # - driver [parameters]: mention the driver(s) (separated by "or" if there are -# several possibilities. Any mandatory parameter(s) must be referenced, as -# they will be parsed by configuration helper softwares. +# several possibilities). Any mandatory parameter(s) must be referenced, as +# they will be parsed by configuration helper software. # For example, genericups entries must mention the "upstype=nn" format. # # Duplicate text in the last field will be cooked out during the conversion @@ -99,8 +99,10 @@ "Atlantis Land" "ups" "2" "A03-P826" "" "blazer_ser" "Atlantis Land" "ups" "2" "A03-P551" "USB" "blazer_usb langid_fix=0x0409" # http://www.atlantisland.it/pub/prodotti.php?famiglia=1&l1=7&l2=24&articolo=QTAzLVA1NTE= +"Atlantis Land" "ups" "2" "HostPower 851 (A03-HP851)" "USB" "nutdrv_qx" "Atlantis Land" "ups" "2" "LinePower 1151 (A03-OP1151)" "Serial" "nutdrv_qx" "Atlantis Land" "ups" "2" "LinePower 1151 (A03-OP1151)" "USB" "nutdrv_qx" +"Atlantis Land" "ups" "2" "OnePower 841+ (A03-P841)" "USB" "nutdrv_qx" "Atlantis Land" "ups" "2" "(various)" "Serial" "nutdrv_qx" "Atlantis Land" "ups" "2" "(various)" "USB" "nutdrv_qx" @@ -154,6 +156,8 @@ "Borri" "ups" "2" "B500-R060-B/B500-R100-B" "" "blazer_usb" "Borri" "ups" "2" "B500EVO-100-B/B500EVO-200-B" "" "blazer_usb" +"CABAC" "ups" "2" "UPS-1700DV2" "" "blazer_usb" + "Chloride" "ups" "2" "Desk Power 650" "serial port" "blazer_ser" "Cito Power" "ups" "2" "CPG-SR1000" "" "blazer_ser" @@ -192,6 +196,7 @@ "Cyber Power Systems" "ups" "2" "CPS800AVR" "USB" "usbhid-ups" "Cyber Power Systems" "ups" "2" "AE550" "USB" "usbhid-ups" "Cyber Power Systems" "ups" "3" "CP 1500C" "USB" "usbhid-ups" +"Cyber Power Systems" "ups" "3" "CP825AVR-G / LE825G" "USB" "usbhid-ups" # http://www.cyberpowersystems.com/products/ups-systems/retail-products/LE825G.html "Cyber Power Systems" "ups" "3" "OR2200LCDRM2U" "USB" "usbhid-ups" "Cyber Power Systems" "ups" "3" "OR700LCDRM1U" "USB" "usbhid-ups" "Cyber Power Systems" "ups" "3" "PR6000LCDRTXL5U" "USB" "usbhid-ups" @@ -241,6 +246,7 @@ "Digital Loggers" "pdu" "1" "LPC, EPCR2, DIN" "8 outlets" "powerman-pdu (experimental)" +"Digitus" "ups" "1" "DN-170014" "USB" "richcomm_usb" # http://www.digitus.info/en/products/professional-network/security-and-surveillance/power-supply/uninterrruptable-power-supplies/ups-uninterruptible-power-systems-dn-170014/section/prof/ "Digitus" "ups" "2" "DN-170020" "" "blazer_ser" "Dynamix" "ups" "2" "UPS1700D" "" "blazer_ser" @@ -295,6 +301,7 @@ "Eaton" "pdu" "5" "ePDU Managed" "" "snmp-ups" "Eaton" "pdu" "5" "ePDU Switched" "" "snmp-ups" "Eaton" "pdu" "5" "ePDU Monitored" "" "snmp-ups or netxml-ups" +"Eaton" "ups" "5" "Powerware 3105" "USB" "bcmxcp_usb" # http://powerquality.eaton.com/Products-services/Backup-Power-UPS/3105-eol.aspx "Eaton" "ups" "5" "Powerware 9130" "" "bcmxcp or usbhid-ups" "Eaton" "ups" "5" "Powerware 9140" "" "bcmxcp or usbhid-ups" "Eaton" "ups" "5" "Powerware 5130" "" "usbhid-ups" @@ -414,6 +421,7 @@ "Infosec" "ups" "2" "iPEL 750" "" "blazer_ser" "Infosec" "ups" "2" "iPEL 1000" "" "blazer_ser" "Infosec" "ups" "2" "500XP" "" "blazer_ser" +"Infosec" "ups" "2" "X2, X3, X4, E2, E3, E4" "USB" "blazer_usb" "Infosec" "ups" "2" "XP 500" "USB" "blazer_usb" "Infosec" "ups" "2" "XP 1000" "" "blazer_ser" @@ -437,6 +445,8 @@ "Jageson Technology" "ups" "1" "Jasuny USPS" "" "genericups upstype=4" +"Kanji" "ups" "1" "800 VA" "USB" "nutdrv_atcl_usb" + "Kebo" "ups" "2" "1200D/D Series" "" "blazer_ser" "KOLFF" "ups" "2" "BLACK NOVA 1K/2K/3K/6K/10K/20K TOWER" "" "blazer_usb" @@ -458,6 +468,7 @@ "Liebert" "ups" "1" "GXT2-3000RT230" "" "liebert-esp2 (experimental)" "Liebert" "ups" "2" "PowerSure Personal XT" "USB" "usbhid-ups" "Liebert" "ups" "2" "PowerSure PSA" "USB" "usbhid-ups" +"Liebert" "ups" "2" "PowerSure PSI 1440" "USB" "usbhid-ups" # http://www.emersonnetworkpower.com/en-US/Products/ACPower/Pages/LiebertPowerSurePSILineInteractiveUPS10003000VA.aspx "LNXI" "pdu" "1" "Icebox" "10 outlets" "powerman-pdu (experimental)" @@ -641,6 +652,7 @@ "MicroDowell" "ups" "1" "B.Box BP 750" "" "powerpanel" "MicroDowell" "ups" "1" "B.Box BP 1000" "" "powerpanel" "MicroDowell" "ups" "1" "B.Box BP 1500" "" "powerpanel" +"MicroDowell" "ups" "1" "B.Box LP 500" "" "genericups upstype=7" "MicroDowell" "ups" "5" "Enterprise B8" "" "microdowell" "MicroDowell" "ups" "5" "Enterprise B10" "" "microdowell" "MicroDowell" "ups" "5" "Enterprise N8" "" "microdowell" @@ -674,6 +686,7 @@ "Mustek" "ups" "2" "Powermust" "600VA Plus" "blazer_ser" "Mustek" "ups" "2" "Powermust" "800VA Pro" "blazer_ser" "Mustek" "ups" "2" "Powermust" "1000VA Plus" "blazer_ser" +"Mustek" "ups" "2" "Powermust" "1000VA USB" "blazer_usb" "Mustek" "ups" "2" "Powermust" "1400VA Plus" "blazer_ser" "Mustek" "ups" "2" "Powermust" "2000VA USB" "blazer_ser" "Mustek" "ups" "2" "Powermust Office 650" "USB" "blazer_usb" @@ -687,7 +700,10 @@ "Nitram" "ups" "1" "Elite 2002" "" "genericups upstype=16" "Nitram" "ups" "1" "Elite 2005" "" "powerpanel" -"NUMERIC" "ups" "2" "3000 SW" "" "blazer_ser" +"Novex" "ups" "1" "NUPS-650" "USB" "blazer_usb protocol=megatec" # http://komp.1k.by/periphery-ups/novex/Novex_NUPS_650-130052.html + +"Numeric" "ups" "2" "3000 SW" "" "blazer_ser" +"Numeric" "ups" "2" "Digital 800 plus" "USB" "blazer_usb" "Oneac" "ups" "1" "ON400" "advanced interface" "oneac" "Oneac" "ups" "1" "ON600" "advanced interface" "oneac" @@ -715,6 +731,7 @@ "OnLite" "ups" "2" "AQUA" "50" "blazer_ser" "Opti-UPS" "ups" "1" "PowerES" "420E" "optiups" +"Opti-UPS" "ups" "1" "VS 575C" "type=OPTI" "powercom" "Orvaldi Power Protection" "ups" "2" "various" "not 400 or 600" "blazer_ser" "Orvaldi Power Protection" "ups" "2" "750 / 900SP" "" "blazer_usb" @@ -723,6 +740,7 @@ "Plexus" "ups" "2" "500VA" "USB" "blazer_usb" "Plexus" "ups" "2" "1000VA Pro" "USB" "blazer_usb" +"Plexus" "ups" "1" "800 VA" "USB" "nutdrv_atcl_usb" "Powercom" "ups" "4" "SMK" "" "blazer_ser" "Powercom" "ups" "4" "SXL" "" "blazer_ser" @@ -888,6 +906,8 @@ "Sweex" "ups" "1" "1000" "USB" "richcomm_usb" "Sweex" "ups" "2" "(various)" "" "blazer_ser" +"Syndome" "ups" "2" "Era 500VA" "USB" "blazer_usb" + "Sysgration" "ups" "2" "UPGUARDS Pro650" "" "blazer_ser" "Tecnoware" "ups" "2" "Easy Power 1200" "" "blazer_ser" @@ -1068,6 +1088,9 @@ "Voltronic Power" "ups" "2" "Frigate TX 1KVA" "USB" "nutdrv_qx" "Voltronic Power" "ups" "2" "Galleon 1KVA" "Serial" "nutdrv_qx" "Voltronic Power" "ups" "2" "Galleon 1KVA" "USB" "nutdrv_qx" +"Voltronic Power" "ups" "2" "Prosine 800" "Serial" "nutdrv_qx" +"Voltronic Power" "ups" "2" "Prosine 800" "USB" "nutdrv_qx" +"Voltronic Power" "ups" "2" "Vesta LED 850VA" "USB" "nutdrv_qx" "Voltronic Power" "ups" "2" "(various)" "Serial" "nutdrv_qx" "Voltronic Power" "ups" "2" "(various)" "USB" "nutdrv_qx" diff --git a/data/html/Makefile.in b/data/html/Makefile.in index 09f9e78..602ffcf 100644 --- a/data/html/Makefile.in +++ b/data/html/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,10 +74,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -165,10 +163,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -180,8 +174,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -267,6 +259,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/docs/FAQ.txt b/docs/FAQ.txt index df20987..0eff1a4 100644 --- a/docs/FAQ.txt +++ b/docs/FAQ.txt @@ -185,7 +185,7 @@ UPS. This is also a good option to consider if you can't use networked monitoring code for security or safety reasons. -See ideas.txt for more on this and other related topics. +See the TODO file for more on this and other related topics. == Why isn't upssched part of upsmon? @@ -219,12 +219,13 @@ a shell script and make upsmon call it. Everyone wins. There are at least two different protocols being used for hardware with very similar names. The bestups driver tends to support the -units built around the newer "PhoenixTec" protocol. +units built around the newer "PhoenixTec" protocol, and the bestfortress +driver supports the older Best hardware. -Previous releases of this software included a driver called -bestfortress which supported the older Best hardware. See the -earlier entries about updating old drivers which have been removed -from the tree. +There is a similar problem with the tripplite_usb driver: it only supports the +older, proprietary protocol. Newer standards-compliant Tripp Lite UPS models +are supported by usbhid-ups. We name drivers based on the information +available at that time, which often is incomplete. == What's this about 'data stale'? @@ -262,7 +263,7 @@ running. Maybe your state path is not configured properly. Check your syslog. upsd will complain regularly if it can't connect to a driver, and it should say why it can't connect. -Note: if you jumped in with both feet and didn't follow the INSTALL +Note: if you jumped in with both feet and didn't follow the INSTALL.nut document, you probably started upsd by itself. You have to run 'upsdrvctl start' to start the drivers after configuring ups.conf. @@ -285,7 +286,7 @@ might look like this: if (test -f /etc/killpower) then - /usr/local/ups/bin/upsdrvctl shutdown + /usr/local/ups/sbin/upsdrvctl shutdown sleep 600 # this should never return @@ -342,7 +343,7 @@ same effect with the following command: The following pages have some slightly more kludgy answers which involve the use of `setpci`, and are highly model-specific: - - http://mythic-beasts.com/support/macminicolo_howto.html + - https://www.mythic-beasts.com/support/servers/colo/macminicolo_howto - http://superuser.com/questions/212434/reboot-after-power-failure-for-mac-running-ubuntu - http://ubuntuforums.org/showthread.php?t=1209576 @@ -359,7 +360,7 @@ solution. == My Mac won't power back up by itself into Mac OS X after the UPS shuts down. What can I do about this? This is relatively simple to fix. If you have console or VNC access, log in as -an administrator, go to System Preferences, click on energy saver, click on the +an administrator, go to System Preferences, click on Energy Saver, click on the options tab, check "Restart automatically after a power failure". Alternatively, you can connect via SSH and run "sudo pmset autorestart 1" to @@ -387,7 +388,7 @@ For my development system this yields the following /dev entries: - Switch to root, then start the drivers: - # /usr/local/ups/bin/upsdrvctl -u nutdev start + # /usr/local/ups/sbin/upsdrvctl -u nutdev start - The listing for /var/state/ups then looks like this: @@ -492,11 +493,12 @@ any of the user accounts which run inside the jail. == upsd is running, so why can't I connect to it? -Assuming you haven't changed the TCP port number on the command line -or at compile-time, then you probably have some sort of firewall -blocking the connection. +Assuming you haven't changed the TCP port number on the command line or at +compile-time, then you may have some sort of firewall blocking the connection. -upsd listens on TCP port 3493 by default. +upsd listens on TCP port 3493 by default. If you do not specify a LISTEN +directive in upsd.conf, upsd only listens on the loopback interface. See the +upsd.conf man page for details. == How do you make upsmon reload the config file? @@ -759,7 +761,7 @@ Implement this by modifying your shutdown script like this: if (test -f /etc/killpower) then - /usr/local/ups/bin/upsdrvctl shutdown + /usr/local/ups/sbin/upsdrvctl shutdown sleep 120 diff --git a/docs/Makefile.am b/docs/Makefile.am index 0149f52..c7907c2 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -16,8 +16,7 @@ SHARED_DEPS = nut-names.txt asciidoc.conf USER_MANUAL_DEPS = acknowledgements.txt cables.txt config-notes.txt \ configure.txt download.txt documentation.txt features.txt history.txt \ - outlets.txt scheduling.txt security.txt support.txt user-manual.txt \ - stable-hcl.txt + outlets.txt scheduling.txt security.txt support.txt user-manual.txt DEVELOPER_GUIDE_DEPS = contact-closure.txt design.txt developers.txt \ developer-guide.txt hid-subdrivers.txt macros.txt new-clients.txt \ @@ -36,11 +35,12 @@ CABLES_IMAGES = images/cables/73-0724.png images/cables/940-0024C.jpg \ images/cables/SOLA-330.png ALL_TXT_SRC = nut-names.txt $(USER_MANUAL_DEPS) $(DEVELOPER_GUIDE_DEPS) \ - $(CABLES_DEPS) FAQ.txt nut-hal.txt nut-qa.txt packager-guide.txt snmp.txt + $(CABLES_DEPS) FAQ.txt nut-qa.txt packager-guide.txt snmp.txt NUT_SPELL_DICT = nut.dict EXTRA_DIST = $(ALL_TXT_SRC) $(SHARED_DEPS) $(IMAGE_FILES) \ - $(CABLES_IMAGES) docinfo.xml $(NUT_SPELL_DICT) + $(CABLES_IMAGES) docinfo.xml $(NUT_SPELL_DICT) \ + common.xsl xhtml.xsl chunked.xsl ASCIIDOC_HTML_SINGLE = user-manual.html \ developer-guide.html \ @@ -55,10 +55,10 @@ ASCIIDOC_HTML_CHUNKED = user-manual.chunked \ ASCIIDOC_PDF = user-manual.pdf \ developer-guide.pdf \ packager-guide.pdf \ + cables.pdf \ FAQ.pdf -# Force build in ./ and man/ before website -SUBDIRS = . man website +SUBDIRS = man SUFFIXES = .txt .html .pdf all: doc @@ -70,27 +70,13 @@ pdf: $(ASCIIDOC_PDF) html-single: $(ASCIIDOC_HTML_SINGLE) html-chunked: $(ASCIIDOC_HTML_CHUNKED) -if HAVE_ASCIIDOC -website: html-chunked pdf -else !HAVE_ASCIIDOC -website: - @echo "Not building website documentation since 'asciidoc' was not found." -endif !HAVE_ASCIIDOC - clean-local: rm -rf *.pdf *.html *.chunked docbook-xsl.css *.bak -# Static HCL is generated automatically -# This is more of a harness, since this file should have already been -# generated, due to the top level Makefile SUBDIRS ordering (tools before docs) -ups-html.txt: ../data/driver.list.in - cd ../data && $(MAKE) $(AM_MAKEFLAGS) driver.list - cd ../tools && $(MAKE) $(AM_MAKEFLAGS) website - ### TODO: automatic dependency generation # Add other directory deps (not for local EXTRA_DIST) and generated contents FULL_USER_MANUAL_DEPS = $(USER_MANUAL_DEPS) $(SHARED_DEPS) ../README \ - ../INSTALL ../UPGRADING ../TODO ../scripts/ufw/README + ../INSTALL.nut ../UPGRADING ../TODO ../scripts/ufw/README FULL_DEVELOPER_GUIDE_DEPS = $(DEVELOPER_GUIDE_DEPS) $(SHARED_DEPS) \ ../scripts/augeas/README ../TODO ../lib/README \ ../tools/nut-scanner/README @@ -112,11 +98,11 @@ A2X_COMMON_OPTS = $(ASCIIDOC_VERBOSE) --attribute icons \ --attribute tree_version=@TREE_VERSION@ \ -a toc -a numbered --destination-dir=. -.txt.html: - $(A2X) $(A2X_COMMON_OPTS) --attribute=xhtml11_format --format=xhtml $< +.txt.html: common.xsl xhtml.xsl + $(A2X) $(A2X_COMMON_OPTS) --attribute=xhtml11_format --format=xhtml --xsl-file=$(srcdir)/xhtml.xsl $< -.txt.chunked: - $(A2X) $(A2X_COMMON_OPTS) --attribute=chunked_format --format=chunked $< +.txt.chunked: common.xsl chunked.xsl + $(A2X) $(A2X_COMMON_OPTS) --attribute=chunked_format --format=chunked --xsl-file=$(srcdir)/chunked.xsl $< .txt.pdf: docinfo.xml $(A2X) $(A2X_COMMON_OPTS) --attribute=pdf_format --format=pdf -a docinfo1 $< @@ -144,4 +130,4 @@ spellcheck-interactive: @echo "Documentation spell check not available since 'aspell' was not found." endif !HAVE_ASPELL -.PHONY: html html-single pdf website +.PHONY: html html-single pdf diff --git a/docs/Makefile.in b/docs/Makefile.in index b2a6741..ad9ac5c 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -63,7 +63,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -73,10 +72,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -173,10 +171,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -188,8 +182,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -275,6 +267,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -334,8 +327,7 @@ IMAGE_FILES = images/asciidoc.png \ SHARED_DEPS = nut-names.txt asciidoc.conf USER_MANUAL_DEPS = acknowledgements.txt cables.txt config-notes.txt \ configure.txt download.txt documentation.txt features.txt history.txt \ - outlets.txt scheduling.txt security.txt support.txt user-manual.txt \ - stable-hcl.txt + outlets.txt scheduling.txt security.txt support.txt user-manual.txt DEVELOPER_GUIDE_DEPS = contact-closure.txt design.txt developers.txt \ developer-guide.txt hid-subdrivers.txt macros.txt new-clients.txt \ @@ -354,11 +346,12 @@ CABLES_IMAGES = images/cables/73-0724.png images/cables/940-0024C.jpg \ images/cables/SOLA-330.png ALL_TXT_SRC = nut-names.txt $(USER_MANUAL_DEPS) $(DEVELOPER_GUIDE_DEPS) \ - $(CABLES_DEPS) FAQ.txt nut-hal.txt nut-qa.txt packager-guide.txt snmp.txt + $(CABLES_DEPS) FAQ.txt nut-qa.txt packager-guide.txt snmp.txt NUT_SPELL_DICT = nut.dict EXTRA_DIST = $(ALL_TXT_SRC) $(SHARED_DEPS) $(IMAGE_FILES) \ - $(CABLES_IMAGES) docinfo.xml $(NUT_SPELL_DICT) + $(CABLES_IMAGES) docinfo.xml $(NUT_SPELL_DICT) \ + common.xsl xhtml.xsl chunked.xsl ASCIIDOC_HTML_SINGLE = user-manual.html \ developer-guide.html \ @@ -373,17 +366,16 @@ ASCIIDOC_HTML_CHUNKED = user-manual.chunked \ ASCIIDOC_PDF = user-manual.pdf \ developer-guide.pdf \ packager-guide.pdf \ + cables.pdf \ FAQ.pdf - -# Force build in ./ and man/ before website -SUBDIRS = . man website +SUBDIRS = man SUFFIXES = .txt .html .pdf ### TODO: automatic dependency generation # Add other directory deps (not for local EXTRA_DIST) and generated contents FULL_USER_MANUAL_DEPS = $(USER_MANUAL_DEPS) $(SHARED_DEPS) ../README \ - ../INSTALL ../UPGRADING ../TODO ../scripts/ufw/README + ../INSTALL.nut ../UPGRADING ../TODO ../scripts/ufw/README FULL_DEVELOPER_GUIDE_DEPS = $(DEVELOPER_GUIDE_DEPS) $(SHARED_DEPS) \ ../scripts/augeas/README ../TODO ../lib/README \ @@ -760,29 +752,18 @@ pdf: $(ASCIIDOC_PDF) html-single: $(ASCIIDOC_HTML_SINGLE) html-chunked: $(ASCIIDOC_HTML_CHUNKED) -@HAVE_ASCIIDOC_TRUE@website: html-chunked pdf -@HAVE_ASCIIDOC_FALSE@website: -@HAVE_ASCIIDOC_FALSE@ @echo "Not building website documentation since 'asciidoc' was not found." - clean-local: rm -rf *.pdf *.html *.chunked docbook-xsl.css *.bak -# Static HCL is generated automatically -# This is more of a harness, since this file should have already been -# generated, due to the top level Makefile SUBDIRS ordering (tools before docs) -ups-html.txt: ../data/driver.list.in - cd ../data && $(MAKE) $(AM_MAKEFLAGS) driver.list - cd ../tools && $(MAKE) $(AM_MAKEFLAGS) website - user-manual.html user-manual.chunked user-manual.pdf: $(FULL_USER_MANUAL_DEPS) developer-guide.html developer-guide.chunked developer-guide.pdf: $(FULL_DEVELOPER_GUIDE_DEPS) packager-guide.html packager-guide.chunked packager-guide.pdf: packager-guide.txt asciidoc.conf -.txt.html: - $(A2X) $(A2X_COMMON_OPTS) --attribute=xhtml11_format --format=xhtml $< +.txt.html: common.xsl xhtml.xsl + $(A2X) $(A2X_COMMON_OPTS) --attribute=xhtml11_format --format=xhtml --xsl-file=$(srcdir)/xhtml.xsl $< -.txt.chunked: - $(A2X) $(A2X_COMMON_OPTS) --attribute=chunked_format --format=chunked $< +.txt.chunked: common.xsl chunked.xsl + $(A2X) $(A2X_COMMON_OPTS) --attribute=chunked_format --format=chunked --xsl-file=$(srcdir)/chunked.xsl $< .txt.pdf: docinfo.xml $(A2X) $(A2X_COMMON_OPTS) --attribute=pdf_format --format=pdf -a docinfo1 $< @@ -807,7 +788,7 @@ packager-guide.html packager-guide.chunked packager-guide.pdf: packager-guide.tx @HAVE_ASPELL_FALSE@spellcheck-interactive: @HAVE_ASPELL_FALSE@ @echo "Documentation spell check not available since 'aspell' was not found." -.PHONY: html html-single pdf website +.PHONY: html html-single pdf # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/docs/acknowledgements.txt b/docs/acknowledgements.txt index bda575d..33aa5d4 100644 --- a/docs/acknowledgements.txt +++ b/docs/acknowledgements.txt @@ -21,8 +21,8 @@ Active members - Arnaud Quette: project leader (since 2005), Debian packager and jack of all trades - Charles Lepple: senior lieutenant -- Frederic Bohe: senior developer - Emilien Kia: senior developer +- Daniele Pezzini: senior developer - Václav Krpec: junior developer - Kjell Claesson: senior developer - Alexander Gordeev: junior developer @@ -36,7 +36,7 @@ Active members - Antoine Colombier: trainee For an up to date list of NUT developers, refer to -link:https://alioth.debian.org/project/memberlist.php?group_id=30602[Alioth]. +link:https://github.com/orgs/networkupstools/members[GitHub]. Retired members ~~~~~~~~~~~~~~~ @@ -56,26 +56,8 @@ blazer_ser and blazer_usb - Dominique Lallement: Consultant (chairman of the USB/HID PDC Forum) - Julius Malkiewicz: junior developer - Tomas Smetana: former Redhat packager (2007-2008) +- Frederic Bohe: senior developer, Eaton contractor (2009-2013) -[[Eaton]] -Our main supporter: Eaton -------------------------- - -Through the acquisition of MGE Office Protection Systems (a carve out of -the MGE UPS SYSTEMS small systems, up to 10 KVA), Eaton has been supporting -NUT, and more generally the Free/Libre Opensource Software Community -since around 2002. - -This support includes the following actions: - -- providing extensive technical documents (Eaton protocols library), -- providing units to developers of NUT and related projects, -- hosting the networkupstools.org webserver (from 2005 to August 2012), -- providing artwork, -- promoting NUT in general. - -For more detailed information on Eaton's Opensource commitment, please refer to -link:http://opensource.eaton.com[Eaton Opensource website]. Supporting manufacturers ------------------------ @@ -83,27 +65,46 @@ Supporting manufacturers UPS manufacturers ~~~~~~~~~~~~~~~~~ -- link:http://powerquality.eaton.com[Eaton], our main supporter, as presented in -the <>. +[[Eaton]] +* link:http://powerquality.eaton.com[Eaton], has been the main NUT supporter in +the past, between 2007 and 2011, continuing MGE UPS SYSTEMS efforts. +As such, Eaton has been: + - providing extensive technical documents (Eaton protocols library), + - providing units to developers of NUT and related projects, + - hosting the networkupstools.org webserver (from 2007 to August 2012), + - providing artwork, + - promoting NUT in general, + - supporting its customers using NUT. ++ +[WARNING] +================================================================================ +*The situation has evolved, and since 2011 Eaton does not support NUT anymore.* -- link:http://www.gamatronic.com[Gamatronic], through Nadav Moskovitch, has +*This may still evolve in the future.* + +*But for now, please do not consider anymore that buying Eaton products will +provide you with official support from Eaton, or a better level of device +support in NUT.* +================================================================================ + +* link:http://www.gamatronic.com[Gamatronic], through Nadav Moskovitch, has revived the 'sec' driver (as gamatronic), and expanded a bit genericups for its UPSs with alarm interface. -- link:http://www.microdowell.com[Microdowell], through Elio Corbolante, has +* link:http://www.microdowell.com[Microdowell], through Elio Corbolante, has created the 'microdowell' driver to support the Enterprise Nxx/Bxx serial devices. They also proposes NUT as an alternative to its software for link:http://www.microdowell.com/fra/download.html[Linux / Unix]. -- link:http://pcmups.com.tw[Powercom], through Alexey Morozov, has provided +* link:http://pcmups.com.tw[Powercom], through Alexey Morozov, has provided link:ups-protocols.html[extensive information] on its USB/HID devices, along with development units. -- link:http://www.riello-ups.com[Riello UPS], through Massimo Zampieri, has +* link:http://www.riello-ups.com[Riello UPS], through Massimo Zampieri, has provided link:ups-protocols.html[all protocols information]. Elio Parisi has also created riello_ser and riello_usb to support these protocols. -- link:http://www.tripplite.com[Tripp Lite], through Eric Cobb, has provided +* link:http://www.tripplite.com[Tripp Lite], through Eric Cobb, has provided test results from connecting their HID-compliant UPS hardware to NUT. Some of this information has been incorporated into the NUT hardware compatibility list, and the rest of the information is available via the @@ -133,13 +134,14 @@ safenet driver. Older entries (before 2005) --------------------------- -- MGE UPS SYSTEMS was the previous NUT sponsor. They provided protocols -information, many units for development of NUT-related projects. +- MGE UPS SYSTEMS was the previous NUT sponsor, from 2002 until its partial +acquisition by Eaton. They provided protocols information, many units for +development of NUT-related projects. Several drivers such as mge-utalk, mge-shut, snmp-ups, hidups, and usbhid-ups are the result of this collaboration, in addition to the WMNut, MGE HID Parser -the libhid projects, ... through Arnaud. -All the MGE supporters have now gone with Eaton (through MGE Office -Protection Systems), which is the new NUT sponsor. +the libhid projects, ... through Arnaud Quette (who was also an MGE employee). +All the MGE supporters have gone with Eaton (through MGE Office Protection +Systems), which was temporarily the new NUT sponsor. - Fenton Technologies contributed a PowerPal 660 to the project. Their open stance and quick responses to technical inquiries were appreciated for diff --git a/docs/chunked.xsl b/docs/chunked.xsl new file mode 100644 index 0000000..a8b698c --- /dev/null +++ b/docs/chunked.xsl @@ -0,0 +1,22 @@ + + + + + images/icons/ + images/icons/ + + + + + + + diff --git a/docs/common.xsl b/docs/common.xsl new file mode 100644 index 0000000..2e5cbc2 --- /dev/null +++ b/docs/common.xsl @@ -0,0 +1,106 @@ + + + + + + + + + + 1 + 0 + + + + + + +images/icons/ +0 + + + + 0 + #E0E0E0 + + + +images/icons/ + + + margin-left: 0; margin-right: 10%; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +article toc,title +book toc,title,figure,table,example,equation + + +chapter toc,title +part toc,title +preface toc,title +qandadiv toc +qandaset toc +reference toc,title +sect1 toc +sect2 toc +sect3 toc +sect4 toc +sect5 toc +section toc +set toc,title + + + +article nop +book nop + + + + + diff --git a/docs/config-notes.txt b/docs/config-notes.txt index 31a12fd..700d8fa 100644 --- a/docs/config-notes.txt +++ b/docs/config-notes.txt @@ -158,14 +158,14 @@ Starting the driver(s) Start the driver(s) for your hardware: - /usr/local/ups/bin/upsdrvctl start + /usr/local/ups/sbin/upsdrvctl start Make sure the driver doesn't report any errors. It should show a few details about the hardware and then enter the background. You should get back to the command prompt a few seconds later. For reference, a successful start of the `usbhid-ups` driver looks like this: - # /usr/local/ups/bin/upsdrvctl start + # /usr/local/ups/sbin/upsdrvctl start Network UPS Tools - Generic HID driver 0.34 (2.4.1) USB communication driver 0.31 Using subdriver: MGE HID 1.12 diff --git a/docs/configure.txt b/docs/configure.txt index a28aca6..282a1c9 100644 --- a/docs/configure.txt +++ b/docs/configure.txt @@ -112,14 +112,6 @@ more information. Enable IPv6 support. - --with-hal (default: no) - -Build and install Hardware Abstraction Layer support. -If you own a USB unit, only protect your local system and run the -Gnome or KDE desktop, this will enable a full Plug & Play usage. -See docs/nut-hal.txt for additional information on how to set up -and use HAL support. - --with-avahi (default: auto-detect) Build and install Avahi support, to publish NUT server availability @@ -173,7 +165,7 @@ for this software. If you use one of the --with-user and --with-group options, then you have to use the other one too. -See the INSTALL document and the FAQ for more on this topic. +See the INSTALL.nut document and the FAQ for more on this topic. --with-logfacility=FACILITY @@ -349,21 +341,6 @@ compiler flags that are needed. --with-neon-libs, --with-libltdl-libs --with-powerman-libs="-L/foo/bar -labcd -lxyz" -If your system doesn't have pkg-config and support for any of the above -libraries isn't found (but you know it is installed), you must specify the -linker flags that are needed. - -HAL addons (deprecated) ------------------------ - - --with-hal-includes="-DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/hal \ - -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include" - --with-hal-libs="-lhal -ldbus-1 -lpthread" - --with-hal-user="haldaemon" - --with-hal-device-match-key="info.bus" - --with-hal-callouts-path="${libdir}/hal" - --with-hal-fdi-path="${datarootdir}/hal/fdi/information/20thirdparty" - If system doesn't have pkg-config or it fails to provides hints for some of the settings that are needed to set it up properly and the build in defaults are not right, you can specify the right variables here. diff --git a/docs/developers.txt b/docs/developers.txt index bc555b4..7b2ec36 100644 --- a/docs/developers.txt +++ b/docs/developers.txt @@ -84,9 +84,7 @@ will get the right headers on every system. Device drivers - main.c ----------------------- -The device drivers use main.c as their core. The only exceptions are the -HAL-based drivers, which use the same dstate function calls while integrating -with the DBUS event loop. +The device drivers use main.c as their core. To write a new driver, you create a file with a series of support functions that will be called by main. These all have names that start diff --git a/docs/documentation.txt b/docs/documentation.txt index 280f945..b7cf5ee 100644 --- a/docs/documentation.txt +++ b/docs/documentation.txt @@ -9,7 +9,7 @@ User Documentation ifdef::website[] - FAQ - Frequently Asked Questions (link:docs/FAQ.html[online]) (link:docs/FAQ.pdf[PDF]) - NUT User Manual (link:docs/user-manual.chunked/index.html[online]) (link:docs/user-manual.pdf[PDF]) -- Cables information (link:cables.html[online]) (link:cables.pdf[PDF]) +- Cables information (link:cables.html[online]) (link:docs/cables.pdf[PDF]) - link:docs/man/index.html#User_man[User manual pages] endif::website[] ifndef::website[] diff --git a/docs/features.txt b/docs/features.txt index d114ea1..65690ba 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -58,19 +58,6 @@ WARNING: Be sure to plug your network's physical hardware (switches, hubs, routers, bridges, ...) into the UPS! -//////////////////////////////////////////////////////////////////////////////// -*FIXME* to be removed? - -- This has also allowed us to create easily the Power Management integration. - -=== Power Management integration === - -- Thanks to its modular design, NUT can feed data to the FreeDesktop Hardware Abstraction Layer (HAL).[[BR]] - This allow a seemless integration of USB UPSs, at a small cost (around 200 Kb), reusing the standard Power Management GUIs and providing to users a full Plug & Play system. - -- The added bonus is that this is the best Power Management existing, surpassing the one that exist on Windows and Mac OS, both in terms of devices supported and of features. -//////////////////////////////////////////////////////////////////////////////// - Redundancy support - Hot swap/high availability power supplies -------------------------------------------------------------- diff --git a/docs/macros.txt b/docs/macros.txt index 7bda240..efd9dd7 100644 --- a/docs/macros.txt +++ b/docs/macros.txt @@ -12,7 +12,6 @@ directory. #define a replacement if necessary. - NUT_CHECK_LIBGD -- NUT_CHECK_LIBHAL - NUT_CHECK_LIBNEON - NUT_CHECK_LIBNETSNMP - NUT_CHECK_LIBPOWERMAN diff --git a/docs/man/Makefile.am b/docs/man/Makefile.am index 0306370..d45d1f7 100644 --- a/docs/man/Makefile.am +++ b/docs/man/Makefile.am @@ -446,6 +446,7 @@ SRC_USB_LIBUSB_PAGES = \ bcmxcp_usb.txt \ blazer-common.txt \ blazer_usb.txt \ + nutdrv_atcl_usb.txt \ nutdrv_qx.txt \ richcomm_usb.txt \ riello_usb.txt \ @@ -455,6 +456,7 @@ SRC_USB_LIBUSB_PAGES = \ MAN_USB_LIBUSB_PAGES = \ bcmxcp_usb.8 \ blazer_usb.8 \ + nutdrv_atcl_usb.8 \ nutdrv_qx.8 \ richcomm_usb.8 \ riello_usb.8 \ @@ -469,6 +471,7 @@ HTML_USB_LIBUSB_MANS = \ bcmxcp_usb.html \ blazer_usb.html \ nutdrv_qx.html \ + nutdrv_atcl_usb.html \ richcomm_usb.html \ riello_usb.html \ tripplite_usb.html \ @@ -566,10 +569,7 @@ HTML_MANS = \ all: -man-index.html: index.html - cp -f $< $@ - -html-man: $(HTML_MANS) man-index.html +html-man: $(HTML_MANS) index.html CLEANFILES = *.xml *.html diff --git a/docs/man/Makefile.in b/docs/man/Makefile.in index 94f03a1..7936892 100644 --- a/docs/man/Makefile.in +++ b/docs/man/Makefile.in @@ -91,7 +91,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -101,10 +100,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -196,10 +194,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -211,8 +205,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -298,6 +290,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -744,6 +737,7 @@ HTML_DEV_MANS = \ @SOME_DRIVERS_FALSE@ bcmxcp_usb.txt \ @SOME_DRIVERS_FALSE@ blazer-common.txt \ @SOME_DRIVERS_FALSE@ blazer_usb.txt \ +@SOME_DRIVERS_FALSE@ nutdrv_atcl_usb.txt \ @SOME_DRIVERS_FALSE@ nutdrv_qx.txt \ @SOME_DRIVERS_FALSE@ richcomm_usb.txt \ @SOME_DRIVERS_FALSE@ riello_usb.txt \ @@ -753,6 +747,7 @@ HTML_DEV_MANS = \ @SOME_DRIVERS_FALSE@MAN_USB_LIBUSB_PAGES = \ @SOME_DRIVERS_FALSE@ bcmxcp_usb.8 \ @SOME_DRIVERS_FALSE@ blazer_usb.8 \ +@SOME_DRIVERS_FALSE@ nutdrv_atcl_usb.8 \ @SOME_DRIVERS_FALSE@ nutdrv_qx.8 \ @SOME_DRIVERS_FALSE@ richcomm_usb.8 \ @SOME_DRIVERS_FALSE@ riello_usb.8 \ @@ -763,6 +758,7 @@ HTML_DEV_MANS = \ @SOME_DRIVERS_FALSE@ bcmxcp_usb.html \ @SOME_DRIVERS_FALSE@ blazer_usb.html \ @SOME_DRIVERS_FALSE@ nutdrv_qx.html \ +@SOME_DRIVERS_FALSE@ nutdrv_atcl_usb.html \ @SOME_DRIVERS_FALSE@ richcomm_usb.html \ @SOME_DRIVERS_FALSE@ riello_usb.html \ @SOME_DRIVERS_FALSE@ tripplite_usb.html \ @@ -1227,10 +1223,7 @@ uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \ all: -man-index.html: index.html - cp -f $< $@ - -html-man: $(HTML_MANS) man-index.html +html-man: $(HTML_MANS) index.html @HAVE_ASCIIDOC_TRUE@.txt.html: @HAVE_ASCIIDOC_TRUE@ $(ASCIIDOC) --backend=xhtml11 \ diff --git a/docs/man/al175.8 b/docs/man/al175.8 index 3adb0c5..c86d122 100644 --- a/docs/man/al175.8 +++ b/docs/man/al175.8 @@ -2,12 +2,12 @@ .\" Title: al175 .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/20/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "AL175" "8" "11/20/2013" "Network UPS Tools 2\&.7\&.1" "NUT Manual" +.TH "AL175" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/apcsmart-old.8 b/docs/man/apcsmart-old.8 index 6395221..9aa7c06 100644 --- a/docs/man/apcsmart-old.8 +++ b/docs/man/apcsmart-old.8 @@ -2,12 +2,12 @@ .\" Title: apcsmart-old .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "APCSMART\-OLD" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "APCSMART\-OLD" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/apcsmart.8 b/docs/man/apcsmart.8 index a78856e..6b9b69f 100644 --- a/docs/man/apcsmart.8 +++ b/docs/man/apcsmart.8 @@ -2,12 +2,12 @@ .\" Title: apcsmart .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 10/30/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "APCSMART" "8" "10/30/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "APCSMART" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/apcupsd-ups.8 b/docs/man/apcupsd-ups.8 index 7944bed..8da8d88 100644 --- a/docs/man/apcupsd-ups.8 +++ b/docs/man/apcupsd-ups.8 @@ -2,12 +2,12 @@ .\" Title: apcupsd-ups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "APCUPSD\-UPS" "8" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "APCUPSD\-UPS" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/asciidoc.conf b/docs/man/asciidoc.conf index 08d5f10..d294d23 100644 --- a/docs/man/asciidoc.conf +++ b/docs/man/asciidoc.conf @@ -22,4 +22,8 @@ endif::backend-docbook[] ifdef::backend-xhtml11[] [linkman-inlinemacro] {target}{0?({0})} + +# Format-detection to prevent smartphones from being too smart +[+docinfo] + endif::backend-xhtml11[] diff --git a/docs/man/bcmxcp.8 b/docs/man/bcmxcp.8 index f419069..bcd38c2 100644 --- a/docs/man/bcmxcp.8 +++ b/docs/man/bcmxcp.8 @@ -2,12 +2,12 @@ .\" Title: bcmxcp .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BCMXCP" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BCMXCP" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/bcmxcp_usb.8 b/docs/man/bcmxcp_usb.8 index 08b99a5..c46b557 100644 --- a/docs/man/bcmxcp_usb.8 +++ b/docs/man/bcmxcp_usb.8 @@ -2,12 +2,12 @@ .\" Title: bcmxcp_usb .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BCMXCP_USB" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BCMXCP_USB" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/belkin.8 b/docs/man/belkin.8 index 23ed5f8..5c3716d 100644 --- a/docs/man/belkin.8 +++ b/docs/man/belkin.8 @@ -2,12 +2,12 @@ .\" Title: belkin .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BELKIN" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BELKIN" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/belkinunv.8 b/docs/man/belkinunv.8 index 45ff16b..83cb1c8 100644 --- a/docs/man/belkinunv.8 +++ b/docs/man/belkinunv.8 @@ -2,12 +2,12 @@ .\" Title: belkinunv .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BELKINUNV" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BELKINUNV" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/bestfcom.8 b/docs/man/bestfcom.8 index 9b7e4e5..702aea2 100644 --- a/docs/man/bestfcom.8 +++ b/docs/man/bestfcom.8 @@ -2,12 +2,12 @@ .\" Title: bestfcom .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BESTFCOM" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BESTFCOM" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/bestfortress.8 b/docs/man/bestfortress.8 index f1fb8e7..3710a39 100644 --- a/docs/man/bestfortress.8 +++ b/docs/man/bestfortress.8 @@ -2,12 +2,12 @@ .\" Title: bestfortress .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BESTFORTRESS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BESTFORTRESS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/bestuferrups.8 b/docs/man/bestuferrups.8 index 59b1d4e..9561420 100644 --- a/docs/man/bestuferrups.8 +++ b/docs/man/bestuferrups.8 @@ -2,12 +2,12 @@ .\" Title: bestuferrups .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BESTUFERRUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BESTUFERRUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/bestups.8 b/docs/man/bestups.8 index 70e1313..45cebad 100644 --- a/docs/man/bestups.8 +++ b/docs/man/bestups.8 @@ -2,12 +2,12 @@ .\" Title: bestups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BESTUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "BESTUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/blazer_ser.8 b/docs/man/blazer_ser.8 index c867e7d..c163ff4 100644 --- a/docs/man/blazer_ser.8 +++ b/docs/man/blazer_ser.8 @@ -2,12 +2,12 @@ .\" Title: blazer_ser .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/17/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BLAZER_SER" "8" "11/17/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "BLAZER_SER" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/blazer_usb.8 b/docs/man/blazer_usb.8 index b44a4ec..e552504 100644 --- a/docs/man/blazer_usb.8 +++ b/docs/man/blazer_usb.8 @@ -2,12 +2,12 @@ .\" Title: blazer_usb .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "BLAZER_USB" "8" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "BLAZER_USB" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/clone.8 b/docs/man/clone.8 index 8f3889f..8637a95 100644 --- a/docs/man/clone.8 +++ b/docs/man/clone.8 @@ -2,12 +2,12 @@ .\" Title: clone .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "CLONE" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "CLONE" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/dummy-ups.8 b/docs/man/dummy-ups.8 index 6af7deb..ea9d41b 100644 --- a/docs/man/dummy-ups.8 +++ b/docs/man/dummy-ups.8 @@ -2,12 +2,12 @@ .\" Title: dummy-ups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "DUMMY\-UPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "DUMMY\-UPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/etapro.8 b/docs/man/etapro.8 index 1cb6ca6..868a0bc 100644 --- a/docs/man/etapro.8 +++ b/docs/man/etapro.8 @@ -2,12 +2,12 @@ .\" Title: etapro .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "ETAPRO" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "ETAPRO" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/everups.8 b/docs/man/everups.8 index c95d57c..34c2e67 100644 --- a/docs/man/everups.8 +++ b/docs/man/everups.8 @@ -2,12 +2,12 @@ .\" Title: everups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "EVERUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "EVERUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/gamatronic.8 b/docs/man/gamatronic.8 index 43a975a..161d14f 100644 --- a/docs/man/gamatronic.8 +++ b/docs/man/gamatronic.8 @@ -2,12 +2,12 @@ .\" Title: gamatronic .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "GAMATRONIC" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "GAMATRONIC" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/genericups.8 b/docs/man/genericups.8 index f2a02bf..7d9f4df 100644 --- a/docs/man/genericups.8 +++ b/docs/man/genericups.8 @@ -2,12 +2,12 @@ .\" Title: genericups .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "GENERICUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "GENERICUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/hosts.conf.5 b/docs/man/hosts.conf.5 index 89538df..8044fd5 100644 --- a/docs/man/hosts.conf.5 +++ b/docs/man/hosts.conf.5 @@ -2,12 +2,12 @@ .\" Title: hosts.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "HOSTS\&.CONF" "5" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "HOSTS\&.CONF" "5" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/isbmex.8 b/docs/man/isbmex.8 index a2286bc..7c0ba16 100644 --- a/docs/man/isbmex.8 +++ b/docs/man/isbmex.8 @@ -2,12 +2,12 @@ .\" Title: isbmex .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "ISBMEX" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "ISBMEX" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/ivtscd.8 b/docs/man/ivtscd.8 index 6b07ba7..be2e1ee 100644 --- a/docs/man/ivtscd.8 +++ b/docs/man/ivtscd.8 @@ -2,12 +2,12 @@ .\" Title: ivtscd .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "IVTSCD" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "IVTSCD" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient.3 b/docs/man/libnutclient.3 index 6da4460..cab68f1 100644 --- a/docs/man/libnutclient.3 +++ b/docs/man/libnutclient.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT" "3" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT" "3" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_commands.3 b/docs/man/libnutclient_commands.3 index 06c9268..9899bf7 100644 --- a/docs/man/libnutclient_commands.3 +++ b/docs/man/libnutclient_commands.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_commands .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_COMMAND" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_COMMAND" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_devices.3 b/docs/man/libnutclient_devices.3 index 8fa5be7..2323630 100644 --- a/docs/man/libnutclient_devices.3 +++ b/docs/man/libnutclient_devices.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_devices .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_DEVICES" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_DEVICES" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_general.3 b/docs/man/libnutclient_general.3 index 132412a..3b7f5cb 100644 --- a/docs/man/libnutclient_general.3 +++ b/docs/man/libnutclient_general.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_general .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_GENERAL" "3" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_GENERAL" "3" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_misc.3 b/docs/man/libnutclient_misc.3 index 1468970..c2ef69b 100644 --- a/docs/man/libnutclient_misc.3 +++ b/docs/man/libnutclient_misc.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_misc .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_MISC" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_MISC" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_tcp.3 b/docs/man/libnutclient_tcp.3 index 2c8bc30..7af1ddc 100644 --- a/docs/man/libnutclient_tcp.3 +++ b/docs/man/libnutclient_tcp.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_tcp .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_TCP" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_TCP" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libnutclient_variables.3 b/docs/man/libnutclient_variables.3 index b86b921..0733cf2 100644 --- a/docs/man/libnutclient_variables.3 +++ b/docs/man/libnutclient_variables.3 @@ -2,12 +2,12 @@ .\" Title: libnutclient_variables .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBNUTCLIENT_VARIABL" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBNUTCLIENT_VARIABL" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/libupsclient-config.1 b/docs/man/libupsclient-config.1 index f081c77..b368ec0 100644 --- a/docs/man/libupsclient-config.1 +++ b/docs/man/libupsclient-config.1 @@ -2,12 +2,12 @@ .\" Title: libupsclient-config .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIBUPSCLIENT\-CONFIG" "1" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "LIBUPSCLIENT\-CONFIG" "1" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/liebert-esp2.8 b/docs/man/liebert-esp2.8 index f052acf..916b704 100644 --- a/docs/man/liebert-esp2.8 +++ b/docs/man/liebert-esp2.8 @@ -2,12 +2,12 @@ .\" Title: liebert-esp2 .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIEBERT\-ESP2" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "LIEBERT\-ESP2" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/liebert.8 b/docs/man/liebert.8 index 4a3b7ca..67a949c 100644 --- a/docs/man/liebert.8 +++ b/docs/man/liebert.8 @@ -2,12 +2,12 @@ .\" Title: liebert .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "LIEBERT" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "LIEBERT" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/macosx-ups.8 b/docs/man/macosx-ups.8 index d8e933a..4d29a0b 100644 --- a/docs/man/macosx-ups.8 +++ b/docs/man/macosx-ups.8 @@ -2,12 +2,12 @@ .\" Title: macosx-ups .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "MACOSX\-UPS" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "MACOSX\-UPS" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/masterguard.8 b/docs/man/masterguard.8 index fe49c79..423c696 100644 --- a/docs/man/masterguard.8 +++ b/docs/man/masterguard.8 @@ -2,12 +2,12 @@ .\" Title: masterguard .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "MASTERGUARD" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "MASTERGUARD" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/metasys.8 b/docs/man/metasys.8 index 073648f..edfe9a3 100644 --- a/docs/man/metasys.8 +++ b/docs/man/metasys.8 @@ -2,12 +2,12 @@ .\" Title: metasys .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "METASYS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "METASYS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/mge-shut.8 b/docs/man/mge-shut.8 index 5899482..cef01bb 100644 --- a/docs/man/mge-shut.8 +++ b/docs/man/mge-shut.8 @@ -2,12 +2,12 @@ .\" Title: mge-shut .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "MGE\-SHUT" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "MGE\-SHUT" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/mge-utalk.8 b/docs/man/mge-utalk.8 index 1b0a80a..445b862 100644 --- a/docs/man/mge-utalk.8 +++ b/docs/man/mge-utalk.8 @@ -2,12 +2,12 @@ .\" Title: mge-utalk .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "MGE\-UTALK" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "MGE\-UTALK" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/microdowell.8 b/docs/man/microdowell.8 index 9724e8e..d09dd0e 100644 --- a/docs/man/microdowell.8 +++ b/docs/man/microdowell.8 @@ -2,12 +2,12 @@ .\" Title: microdowell .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "MICRODOWELL" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "MICRODOWELL" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/netxml-ups.8 b/docs/man/netxml-ups.8 index 88e4d22..65dae82 100644 --- a/docs/man/netxml-ups.8 +++ b/docs/man/netxml-ups.8 @@ -2,12 +2,12 @@ .\" Title: netxml-ups .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 10/30/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NETXML\-UPS" "8" "10/30/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NETXML\-UPS" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nut-ipmipsu.8 b/docs/man/nut-ipmipsu.8 index 8190e2e..845c935 100644 --- a/docs/man/nut-ipmipsu.8 +++ b/docs/man/nut-ipmipsu.8 @@ -2,12 +2,12 @@ .\" Title: nut-ipmipsu .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUT\-IPMIPSU" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUT\-IPMIPSU" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nut-recorder.8 b/docs/man/nut-recorder.8 index 917ed44..4467a37 100644 --- a/docs/man/nut-recorder.8 +++ b/docs/man/nut-recorder.8 @@ -2,12 +2,12 @@ .\" Title: nut-recorder .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUT\-RECORDER" "8" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUT\-RECORDER" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nut-scanner.8 b/docs/man/nut-scanner.8 index 4998de9..f154875 100644 --- a/docs/man/nut-scanner.8 +++ b/docs/man/nut-scanner.8 @@ -2,12 +2,12 @@ .\" Title: nut-scanner .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUT\-SCANNER" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "NUT\-SCANNER" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nut.conf.5 b/docs/man/nut.conf.5 index bd27a97..726ce8f 100644 --- a/docs/man/nut.conf.5 +++ b/docs/man/nut.conf.5 @@ -2,12 +2,12 @@ .\" Title: nut.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUT\&.CONF" "5" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "NUT\&.CONF" "5" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutdrv_atcl_usb.8 b/docs/man/nutdrv_atcl_usb.8 new file mode 100644 index 0000000..78b4804 --- /dev/null +++ b/docs/man/nutdrv_atcl_usb.8 @@ -0,0 +1,72 @@ +'\" t +.\" Title: nutdrv_atcl_usb +.\" Author: [see the "AUTHORS" section] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 02/25/2014 +.\" Manual: NUT Manual +.\" Source: Network UPS Tools 2.7.1.5 +.\" Language: English +.\" +.TH "NUTDRV_ATCL_USB" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +nutdrv_atcl_usb \- Driver for \*(AqATCL FOR UPS\*(Aq equipment +.SH "NOTE" +.sp +This man page only documents the specific features of the nutdrv_atcl_usb driver\&. For information about the core driver, see \fBnutupsdrv\fR(8)\&. +.SH "SUPPORTED HARDWARE" +.sp +This driver is for UPS hardware which identifies itself as USB idVendor 0001 and idProduct 0000, and iManufacturer ATCL FOR UPS\&. Known manufacturers include Kanji and Plexus\&. The UPS interface seems to be a USB frontend to a traditional contact\-closure interface, which translates into only three states in ups\&.status: \fBOL\fR, \fBOB\fR and \fBOB LB\fR\&. See also \fBgenericups\fR(8)\&. +.SH "EXTRA ARGUMENTS" +.sp +This driver supports the following optional setting: +.PP +\fBvendor\fR=\fIname\fR +.RS 4 +In case your iManufacturer (Vendor) string does not exactly match +ATCL FOR UPS, you may provide an alternate string here\&. Note that a more likely case is that your device is handled by another driver for +0001:0000 +devices, such as +\fBnutdrv_qx\fR(8)\&. +.RE +.SH "BUGS" +.sp +The UPS returns the same code for "load power is off" as for "on line power"\&. This condition will not be observed if the NUT master is powered by the UPS, but may be an issue if the UPS is monitored by a remote system\&. +.sp +The time between the shutdown command and removal of power seems to be fixed at 30 seconds\&. Ensure that the NUT shutdown script is invoked as late as possible in the shutdown procedure (in case some services take longer than others to clean up)\&. +.sp +Most contact\-closure UPSes will not power down the load if the line power is present\&. This can create a race when using slave \fBupsmon\fR(8) systems\&. See the \fBupsmon\fR(8) man page for more information\&. The solution to this problem is to upgrade to a smart protocol UPS of some kind that allows detection and proper load cycling on command\&. +.SH "AUTHORS" +.sp +Charles Lepple +.SH "SEE ALSO" +.SS "The core driver:" +.sp +\fBnutupsdrv\fR(8) +.SS "The generic serial driver:" +.sp +\fBgenericups\fR(8) +.SS "The Qx driver:" +.sp +\fBnutdrv_qx\fR(8) +.SS "Internet resources:" +.sp +The NUT (Network UPS Tools) home page: http://www\&.networkupstools\&.org/ diff --git a/docs/man/nutdrv_atcl_usb.txt b/docs/man/nutdrv_atcl_usb.txt new file mode 100644 index 0000000..18f9257 --- /dev/null +++ b/docs/man/nutdrv_atcl_usb.txt @@ -0,0 +1,70 @@ +NUTDRV_ATCL_USB(8) +================== + +NAME +---- +nutdrv_atcl_usb - Driver for 'ATCL FOR UPS' equipment + +NOTE +---- +This man page only documents the specific features of the nutdrv_atcl_usb +driver. For information about the core driver, see linkman:nutupsdrv[8]. + +SUPPORTED HARDWARE +------------------ +This driver is for UPS hardware which identifies itself as USB idVendor 0001 +and idProduct 0000, and iManufacturer +ATCL FOR UPS+. Known manufacturers +include Kanji and Plexus. The UPS interface seems to be a USB frontend to a +traditional contact-closure interface, which translates into only three states +in ups.status: *OL*, *OB* and *OB LB*. See also linkman:genericups[8]. + +EXTRA ARGUMENTS +--------------- + +This driver supports the following optional setting: + +*vendor*='name':: +In case your iManufacturer (Vendor) string does not exactly match ++ATCL FOR UPS+, you may provide an alternate string here. Note that a more +likely case is that your device is handled by another driver for +0001:0000+ +devices, such as linkman:nutdrv_qx[8]. + +BUGS +---- +The UPS returns the same code for "load power is off" as for "on line power". +This condition will not be observed if the NUT master is powered by the UPS, +but may be an issue if the UPS is monitored by a remote system. + +The time between the shutdown command and removal of power seems to be fixed at +30 seconds. Ensure that the NUT shutdown script is invoked as late as possible +in the shutdown procedure (in case some services take longer than others to +clean up). + +Most contact-closure UPSes will not power down the load if the line power +is present. This can create a race when using slave linkman:upsmon[8] systems. +See the linkman:upsmon[8] man page for more information. The solution to this +problem is to upgrade to a smart protocol UPS of some kind that allows +detection and proper load cycling on command. + +AUTHORS +------- +Charles Lepple + +SEE ALSO +-------- + +The core driver: +~~~~~~~~~~~~~~~~ +linkman:nutupsdrv[8] + +The generic serial driver: +~~~~~~~~~~~~~~~~~~~~~~~~~~ +linkman:genericups[8] + +The Qx driver: +~~~~~~~~~~~~~~ +linkman:nutdrv_qx[8] + +Internet resources: +~~~~~~~~~~~~~~~~~~~ +The NUT (Network UPS Tools) home page: http://www.networkupstools.org/ diff --git a/docs/man/nutdrv_qx.8 b/docs/man/nutdrv_qx.8 index 463aaab..60c2591 100644 --- a/docs/man/nutdrv_qx.8 +++ b/docs/man/nutdrv_qx.8 @@ -2,12 +2,12 @@ .\" Title: nutdrv_qx .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTDRV_QX" "8" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTDRV_QX" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -34,7 +34,7 @@ nutdrv_qx \- Driver for Q* protocol serial and USB based UPS equipment This man page only documents the hardware\-specific features of the \fBnutdrv_qx\fR driver\&. For information about the core driver, see \fBnutupsdrv\fR(8)\&. .SH "SUPPORTED HARDWARE" .sp -The \fBnutdrv_qx\fR driver is known to work with various UPSes from \fIBlazer\fR, \fIEnergy Sistem\fR, \fIFenton Technologies\fR, \fIGeneral Electric\fR, \fIMustek\fR, \fIVoltronic Power\fR (rebranded by many, many \- have I said many? \- others\&.\&. Long story short: if your UPS came with a software called \fIViewpower\fR, chances are high that it works with this driver with the \fIvoltronic\fR protocol) and many others\&. +The \fBnutdrv_qx\fR driver is known to work with various UPSes from \fIBlazer\fR, \fIEnergy Sistem\fR, \fIFenton Technologies\fR, \fIGeneral Electric\fR, \fIMustek\fR, \fIVoltronic Power\fR (rebranded by many, many \- have I said many? \- others\&.\&. Long story short: if your UPS came with a software called \fIViewpower\fR, chances are high that it works with this driver with one of the \fIvoltronic*\fR protocols or with the \fImecer\fR one) and many others\&. .sp The NUT compatibility table lists all the known supported models\&. Keep in mind, however, that other models not listed there may also be supported, but haven\(cqt been tested\&. .sp @@ -47,9 +47,11 @@ The following are the ones that most likely will need changing (see \fBups.conf\ .PP \fBondelay =\fR \fIvalue\fR .RS 4 -Time to wait before switching on the UPS (seconds)\&. This value is truncated to units of 60 seconds\&. The acceptable range is -0\&.\&.599940 -seconds\&. Note that a value below 3 minutes, may cause earlier firmware versions to not switch on automatically, so it defaults to 3 minutes (i\&.e\&. 180 seconds)\&. This option provides a default value for +Time to wait before switching on the UPS (seconds)\&. This value is truncated to units of 60 seconds\&. +.sp +Note that a value below 3 minutes, may cause earlier firmware versions to not switch on automatically, so it defaults to 3 minutes (i\&.e\&. 180 seconds)\&. +.sp +This option provides a default value for \fBups\&.delay\&.start\fR that will then be used by the driver in the automatic shutdown sequence (i\&.e\&. calling the driver with the \fB\-k\fR @@ -69,7 +71,9 @@ with .PP \fBoffdelay =\fR \fIvalue\fR .RS 4 -Time to wait before shutting down the UPS (seconds)\&. This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds)\&. Defaults to 30 seconds\&. This option provides a default value for +Time to wait before shutting down the UPS (seconds)\&. This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds)\&. Defaults to 30 seconds\&. +.sp +This option provides a default value for \fBups\&.delay\&.shutdown\fR that will then be used by the driver in the automatic shutdown sequence (i\&.e\&. calling the driver with the \fB\-k\fR @@ -95,7 +99,8 @@ when FSD arises the UPS will call a \fBshutdown\&.stayoff\fR shutting down after \fBups\&.delay\&.shutdown\fR -seconds and won\(cqt return, otherwise (standard behaviour) the UPS will call +seconds and won\(cqt return (see +KNOWN PROBLEMS), otherwise (standard behaviour) the UPS will call \fBshutdown\&.return\fR shutting down after \fBups\&.delay\&.shutdown\fR @@ -106,14 +111,27 @@ seconds (if mains meanwhile returned)\&. .PP \fBprotocol =\fR \fIstring\fR .RS 4 -Skip autodetection of the protocol to use and only use the one specified\&. Supported values +Skip autodetection of the protocol to use and only use the one specified\&. Supported values: \fImecer\fR, \fImegatec\fR, \fImegatec/old\fR, \fImustek\fR, -\fIvoltronic\fR +\fIq1\fR, +\fIvoltronic\fR, +\fIvoltronic\-qs\fR and \fIzinto\fR\&. +.sp +Note that if you end up using the +\fIq1\fR +protocol, you may want to give a try to the +\fImecer\fR, +\fImegatec\fR +and +\fIzinto\fR +ones setting the +\fBnovendor\fR/\fBnorating\fR flags +(only one, or both)\&. .RE .PP \fBpollfreq =\fR \fIvalue\fR @@ -185,6 +203,13 @@ is also specified\&. .RE .SS "MECER, MEGATAEC, MEGATEC/OLD, MUSTEK, ZINTO PROTOCOLS" .PP +\fBondelay\fR +.RS 4 +The acceptable range is +0\&.\&.599940 +seconds\&. +.RE +.PP \fBoffdelay\fR .RS 4 The acceptable range is @@ -201,10 +226,47 @@ Some UPSes will lock up if you attempt to read rating information from them\&. S .RS 4 Some UPSes will lock up if you attempt to read vendor information from them\&. Setting this flag will make the driver skip this step\&. .RE +.SS "Q1 PROTOCOL" +.PP +\fBondelay\fR +.RS 4 +The acceptable range is +0\&.\&.599940 +seconds\&. +.RE +.PP +\fBoffdelay\fR +.RS 4 +The acceptable range is +12\&.\&.600 +seconds\&. +.RE +.SS "VOLTRONIC\-QS PROTOCOL" +.PP +\fBondelay\fR +.RS 4 +The acceptable range is +60\&.\&.599940 +seconds\&. +.RE +.PP +\fBoffdelay\fR +.RS 4 +The acceptable range is +12\&.\&.540 +seconds\&. +.RE .SS "VOLTRONIC PROTOCOL" .sp The following options are supported only by the \fIvoltronic\fR protocol\&. Not all of them are available on all the UPSes supported by this protocol\&. .PP +\fBondelay\fR +.RS 4 +The acceptable range is +0\&.\&.599940 +seconds\&. +.RE +.PP \fBoffdelay\fR .RS 4 The acceptable range is @@ -535,7 +597,7 @@ Perform a quick (10 second) battery test\&. .RS 4 Stop a running battery test\&. (Not available on some hardware) .RE -.SS "MECER, MEGATEC, MEGATEC/OLD, MUSTEK, ZINTO PROTOCOLS" +.SS "MECER, MEGATEC, MEGATEC/OLD, MUSTEK, Q1, ZINTO PROTOCOLS" .PP \fBtest\&.battery\&.start\fR \fIvalue\fR .RS 4 @@ -543,6 +605,22 @@ Perform a battery test for the duration of \fIvalue\fR seconds (truncated to 60 seconds) [60\&.\&.5940]\&. .RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBVOLTRONIC POWER P98 UNITS (WITH MECER PROTOCOL)\fR +.RS 4 +.PP +\fBtest\&.battery\&.start\fR \fIvalue\fR +.RS 4 +Perform a battery test for the duration of +\fIvalue\fR +seconds (truncated to 60 seconds) [12\&.\&.5940]\&. This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds)\&. +.RE +.RE .SS "VOLTRONIC PROTOCOL" .sp The following instant commands are available for the \fIvoltronic\fR protocol\&. Not all of them are available on all the UPSes supported by this protocol\&. @@ -878,6 +956,56 @@ Both the \fBload\&.off\fR and \fBshutdown\&.stayoff\fR instant commands are mean Some models report a bogus value for the beeper status (will always be \fIenabled\fR or \fIdisabled\fR)\&. So, the \fBbeeper\&.toggle\fR command may appear to have no effect in the status reported by the driver when, in fact, it is working fine\&. .sp The temperature and load value is known to be bogus in some models\&. +.SS "VOLTRONIC\-QS UNITS" +.sp +Both \fBload\&.off\fR and \fBshutdown\&.stayoff\fR instant commands are known to work as expected (i\&.e\&. turn the load off indefinitely) only if mains is present, otherwise, as soon as mains returns the load will be powered\&. +.sp +After issuing a \fBshutdown\&.return\fR instant command, the UPS won\(cqt wait \fBondelay\fR before powering on the load, provided the following conditions are met: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +if the load has been previously (no matter how long before) powered off through +\fBload\&.off\fR/\fBshutdown\&.stayoff\fR +\fIand\fR +powered on through +\fBload\&.on\fR/\fBshutdown\&.stop\fR +\fIand\fR +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +if AC wasn\(cqt cut after issuing the +\fBload\&.off\fR/\fBshutdown\&.stayoff\fR +(i\&.e\&. the UPS didn\(cqt turn itself off) +\fIand\fR +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +if there\(cqs a power outage after issuing the +\fBshutdown\&.return\fR +command +.RE +.sp +In this case, as soon as mains returns the load will be powered\&. .SH "UPS WARNINGS (VOLTRONIC PROTOCOL)" .sp The UPSes supported by \fIvoltronic\fR protocol report warnings through a 64bit flag (bit1bit2\&...bit63bit64) where 1 means that a warning arose, while 0 means no warning\&. Since more than one warning at a time can be signaled, and because of the limited space in the ups\&.alarm variable, if the length of the warnings exceeds that of ups\&.alarms variable, they will be reported as bits\&. If you want to know the explanation of that bit you can either watch the log or see the next table (unlisted bits equal to unknown warnings)\&. diff --git a/docs/man/nutdrv_qx.txt b/docs/man/nutdrv_qx.txt index f448282..963342c 100644 --- a/docs/man/nutdrv_qx.txt +++ b/docs/man/nutdrv_qx.txt @@ -17,7 +17,7 @@ For information about the core driver, see linkman:nutupsdrv[8]. SUPPORTED HARDWARE ------------------ -The *nutdrv_qx* driver is known to work with various UPSes from 'Blazer', 'Energy Sistem', 'Fenton Technologies', 'General Electric', 'Mustek', 'Voltronic Power' (rebranded by many, many - have I said many? - others.. Long story short: if your UPS came with a software called 'Viewpower', chances are high that it works with this driver with the 'voltronic' <<_extra_arguments,protocol>>) and many others. +The *nutdrv_qx* driver is known to work with various UPSes from 'Blazer', 'Energy Sistem', 'Fenton Technologies', 'General Electric', 'Mustek', 'Voltronic Power' (rebranded by many, many - have I said many? - others.. Long story short: if your UPS came with a software called 'Viewpower', chances are high that it works with this driver with one of the <<_extra_arguments,'voltronic*' protocols or with the 'mecer' one>>) and many others. The <<_internet_resources,NUT compatibility table>> lists all the known supported models. Keep in mind, however, that other models not listed there may also be supported, but haven't been tested. @@ -35,22 +35,26 @@ The following are the ones that most likely will need changing (see linkman:ups. *ondelay =* 'value':: Time to wait before switching on the UPS (seconds). This value is truncated to units of 60 seconds. -The acceptable range is +0..599940+ seconds. ++ Note that a value below 3 minutes, may cause earlier firmware versions to not switch on automatically, so it defaults to 3 minutes (i.e. 180 seconds). ++ This option provides a default value for *ups.delay.start* that will then be used by the driver in the automatic shutdown sequence (i.e. calling the driver with the *-k* option, calling linkman:upsdrvctl[8] with the *shutdown* option or when the +FSD+ flag is set and linkman:upsmon[8] enters its shutdown sequence): however you can change this value `on the fly' for the actual session, only for the use with instant commands, setting *ups.delay.start* with linkman:upsrw[8]. *offdelay =* 'value':: Time to wait before shutting down the UPS (seconds). This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds). Defaults to 30 seconds. ++ This option provides a default value for *ups.delay.shutdown* that will then be used by the driver in the automatic shutdown sequence (i.e. calling the driver with the *-k* option, calling linkman:upsdrvctl[8] with the *shutdown* option or when the +FSD+ flag is set and linkman:upsmon[8] enters its shutdown sequence): however you can change this value `on the fly' for the actual session, only for the use with instant commands, setting *ups.delay.shutdown* with linkman:upsrw[8]. *stayoff*:: -If you set stayoff in linkman:ups.conf[5] when FSD arises the UPS will call a *shutdown.stayoff* shutting down after *ups.delay.shutdown* seconds and won't return, otherwise (standard behaviour) the UPS will call *shutdown.return* shutting down after *ups.delay.shutdown* seconds and then turn on after *ups.delay.start* seconds (if mains meanwhile returned). +If you set stayoff in linkman:ups.conf[5] when FSD arises the UPS will call a *shutdown.stayoff* shutting down after *ups.delay.shutdown* seconds and won't return (see <<_known_problems,KNOWN PROBLEMS>>), otherwise (standard behaviour) the UPS will call *shutdown.return* shutting down after *ups.delay.shutdown* seconds and then turn on after *ups.delay.start* seconds (if mains meanwhile returned). *protocol =* 'string':: Skip autodetection of the protocol to use and only use the one specified. -Supported values 'mecer', 'megatec', 'megatec/old', 'mustek', 'voltronic' and 'zinto'. +Supported values: 'mecer', 'megatec', 'megatec/old', 'mustek', 'q1', 'voltronic', 'voltronic-qs' and 'zinto'. ++ +Note that if you end up using the 'q1' protocol, you may want to give a try to the 'mecer', 'megatec' and 'zinto' ones setting the <> (only one, or both). *pollfreq =* 'value':: Set polling frequency, in seconds, to reduce the data flow. @@ -99,9 +103,13 @@ If not specified, the driver defaults to 10%. Only used if *runtimecal* is also specified. +[[old-blazer-protocols-options]] MECER, MEGATAEC, MEGATEC/OLD, MUSTEK, ZINTO PROTOCOLS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*ondelay*:: +The acceptable range is +0..599940+ seconds. + *offdelay*:: The acceptable range is +12..600+ seconds. @@ -114,12 +122,35 @@ Some UPSes will lock up if you attempt to read vendor information from them. Setting this flag will make the driver skip this step. +Q1 PROTOCOL +~~~~~~~~~~~ + +*ondelay*:: +The acceptable range is +0..599940+ seconds. + +*offdelay*:: +The acceptable range is +12..600+ seconds. + + +VOLTRONIC-QS PROTOCOL +~~~~~~~~~~~~~~~~~~~~~ + +*ondelay*:: +The acceptable range is +60..599940+ seconds. + +*offdelay*:: +The acceptable range is +12..540+ seconds. + + VOLTRONIC PROTOCOL ~~~~~~~~~~~~~~~~~~ The following options are supported only by the 'voltronic' protocol. Not all of them are available on all the UPSes supported by this protocol. +*ondelay*:: +The acceptable range is +0..599940+ seconds. + *offdelay*:: The acceptable range is +12..5940+ seconds. @@ -317,13 +348,21 @@ Stop a running battery test. (Not available on some hardware) -MECER, MEGATEC, MEGATEC/OLD, MUSTEK, ZINTO PROTOCOLS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +MECER, MEGATEC, MEGATEC/OLD, MUSTEK, Q1, ZINTO PROTOCOLS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *test.battery.start* 'value':: Perform a battery test for the duration of 'value' seconds (truncated to 60 seconds) [+60..5940+]. +VOLTRONIC POWER P98 UNITS (WITH MECER PROTOCOL) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +*test.battery.start* 'value':: +Perform a battery test for the duration of 'value' seconds (truncated to 60 seconds) [+12..5940+]. +This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds). + + VOLTRONIC PROTOCOL ~~~~~~~~~~~~~~~~~~ @@ -540,6 +579,20 @@ So, the *beeper.toggle* command may appear to have no effect in the status repor The temperature and load value is known to be bogus in some models. +VOLTRONIC-QS UNITS +~~~~~~~~~~~~~~~~~~ + +Both *load.off* and *shutdown.stayoff* instant commands are known to work as expected (i.e. turn the load off indefinitely) only if mains is present, otherwise, as soon as mains returns the load will be powered. + +After issuing a *shutdown.return* instant command, the UPS won't wait *ondelay* before powering on the load, provided the following conditions are met: + +- if the load has been previously (no matter how long before) powered off through *load.off*/*shutdown.stayoff* _and_ powered on through *load.on*/*shutdown.stop* _and_ +- if AC wasn't cut after issuing the *load.off*/*shutdown.stayoff* (i.e. the UPS didn't turn itself off) _and_ +- if there's a power outage after issuing the *shutdown.return* command + +In this case, as soon as mains returns the load will be powered. + + UPS WARNINGS (VOLTRONIC PROTOCOL) --------------------------------- @@ -548,68 +601,68 @@ Since more than one warning at a time can be signaled, and because of the limite If you want to know the explanation of that bit you can either watch the log or see the next table (unlisted bits equal to unknown warnings). .UPS Warnings for 'voltronic' UPSes -[cols="5>,95",options="autowidth,header",frame="topbot",align="center",caption=""] +[cols="5>,95",options="autowidth,header",frame="topbot",grid="rows",align="center",caption=""] |==== -|# |Corresponding Warning -|1 |Battery disconnected -|2 |Neutral not connected -|3 |Site fault -|4 |Phase sequence incorrect -|5 |Phase sequence incorrect in bypass -|6 |Input frequency unstable in bypass -|7 |Battery overcharged -|8 |Low battery -|9 |Overload alarm -|10 |Fan alarm -|11 |EPO enabled -|12 |Unable to turn on UPS -|13 |Over temperature alarm -|14 |Charger alarm -|15 |Remote auto shutdown -|16 |L1 input fuse not working -|17 |L2 input fuse not working -|18 |L3 input fuse not working -|19 |Positive PFC abnormal in L1 -|20 |Negative PFC abnormal in L1 -|21 |Positive PFC abnormal in L2 -|22 |Negative PFC abnormal in L2 -|23 |Positive PFC abnormal in L3 -|24 |Negative PFC abnormal in L3 -|25 |Abnormal in CAN-bus communication -|26 |Abnormal in synchronous signal circuit -|27 |Abnormal in synchronous pulse signal circuit -|28 |Abnormal in host signal circuit -|29 |Male connector of parallel cable not connected well -|30 |Female connector of parallel cable not connected well -|31 |Parallel cable not connected well -|32 |Battery connection not consistent in parallel systems -|33 |AC connection not consistent in parallel systems -|34 |Bypass connection not consistent in parallel systems -|35 |UPS model types not consistent in parallel systems -|36 |Capacity of UPSs not consistent in parallel systems -|37 |Auto restart setting not consistent in parallel systems -|38 |Battery cell over charge -|39 |Battery protection setting not consistent in parallel systems -|40 |Battery detection setting not consistent in parallel systems -|41 |Bypass not allowed setting not consistent in parallel systems -|42 |Converter setting not consistent in parallel systems -|43 |High loss point for frequency in bypass mode not consistent in parallel systems -|44 |Low loss point for frequency in bypass mode not consistent in parallel systems -|45 |High loss point for voltage in bypass mode not consistent in parallel systems -|46 |Low loss point for voltage in bypass mode not consistent in parallel systems -|47 |High loss point for frequency in AC mode not consistent in parallel systems -|48 |Low loss point for frequency in AC mode not consistent in parallel systems -|49 |High loss point for voltage in AC mode not consistent in parallel systems -|50 |Low loss point for voltage in AC mode not consistent in parallel systems -|51 |Warning for locking in bypass mode after 3 consecutive overloads within 30 min -|52 |Warning for three-phase AC input current unbalance -|53 |Warning for a three-phase input current unbalance detected in battery mode -|54 |Warning for Inverter inter-current unbalance -|55 |Programmable outlets cut off pre-alarm -|56 |Warning for Battery replace -|57 |Abnormal warning on input phase angle -|58 |Warning!! Cover of maintain switch is open -|62 |EEPROM operation error +|# |Corresponding Warning +|1 |Battery disconnected +|2 |Neutral not connected +|3 |Site fault +|4 |Phase sequence incorrect +|5 |Phase sequence incorrect in bypass +|6 |Input frequency unstable in bypass +|7 |Battery overcharged +|8 |Low battery +|9 |Overload alarm +|10 |Fan alarm +|11 |EPO enabled +|12 |Unable to turn on UPS +|13 |Over temperature alarm +|14 |Charger alarm +|15 |Remote auto shutdown +|16 |L1 input fuse not working +|17 |L2 input fuse not working +|18 |L3 input fuse not working +|19 |Positive PFC abnormal in L1 +|20 |Negative PFC abnormal in L1 +|21 |Positive PFC abnormal in L2 +|22 |Negative PFC abnormal in L2 +|23 |Positive PFC abnormal in L3 +|24 |Negative PFC abnormal in L3 +|25 |Abnormal in CAN-bus communication +|26 |Abnormal in synchronous signal circuit +|27 |Abnormal in synchronous pulse signal circuit +|28 |Abnormal in host signal circuit +|29 |Male connector of parallel cable not connected well +|30 |Female connector of parallel cable not connected well +|31 |Parallel cable not connected well +|32 |Battery connection not consistent in parallel systems +|33 |AC connection not consistent in parallel systems +|34 |Bypass connection not consistent in parallel systems +|35 |UPS model types not consistent in parallel systems +|36 |Capacity of UPSs not consistent in parallel systems +|37 |Auto restart setting not consistent in parallel systems +|38 |Battery cell over charge +|39 |Battery protection setting not consistent in parallel systems +|40 |Battery detection setting not consistent in parallel systems +|41 |Bypass not allowed setting not consistent in parallel systems +|42 |Converter setting not consistent in parallel systems +|43 |High loss point for frequency in bypass mode not consistent in parallel systems +|44 |Low loss point for frequency in bypass mode not consistent in parallel systems +|45 |High loss point for voltage in bypass mode not consistent in parallel systems +|46 |Low loss point for voltage in bypass mode not consistent in parallel systems +|47 |High loss point for frequency in AC mode not consistent in parallel systems +|48 |Low loss point for frequency in AC mode not consistent in parallel systems +|49 |High loss point for voltage in AC mode not consistent in parallel systems +|50 |Low loss point for voltage in AC mode not consistent in parallel systems +|51 |Warning for locking in bypass mode after 3 consecutive overloads within 30 min +|52 |Warning for three-phase AC input current unbalance +|53 |Warning for a three-phase input current unbalance detected in battery mode +|54 |Warning for Inverter inter-current unbalance +|55 |Programmable outlets cut off pre-alarm +|56 |Warning for Battery replace +|57 |Abnormal warning on input phase angle +|58 |Warning!! Cover of maintain switch is open +|62 |EEPROM operation error |==== @@ -637,6 +690,7 @@ linkman:upsdrvctl[8], linkman:upsmon[8], linkman:upsrw[8] + Internet Resources: ~~~~~~~~~~~~~~~~~~~ diff --git a/docs/man/nutscan.3 b/docs/man/nutscan.3 index 6451be4..0f5e677 100644 --- a/docs/man/nutscan.3 +++ b/docs/man/nutscan.3 @@ -2,12 +2,12 @@ .\" Title: nutscan .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_add_device_to_device.3 b/docs/man/nutscan_add_device_to_device.3 index 89fc442..875732d 100644 --- a/docs/man/nutscan_add_device_to_device.3 +++ b/docs/man/nutscan_add_device_to_device.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_add_device_to_device .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_ADD_DEVICE_T" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_ADD_DEVICE_T" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_add_option_to_device.3 b/docs/man/nutscan_add_option_to_device.3 index f0947f3..bb1bd59 100644 --- a/docs/man/nutscan_add_option_to_device.3 +++ b/docs/man/nutscan_add_option_to_device.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_add_option_to_device .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_ADD_OPTION_T" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_ADD_OPTION_T" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_cidr_to_ip.3 b/docs/man/nutscan_cidr_to_ip.3 index e8fe9e8..0e2ae46 100644 --- a/docs/man/nutscan_cidr_to_ip.3 +++ b/docs/man/nutscan_cidr_to_ip.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_cidr_to_ip .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_CIDR_TO_IP" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_CIDR_TO_IP" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_display_parsable.3 b/docs/man/nutscan_display_parsable.3 index bd020f6..f812757 100644 --- a/docs/man/nutscan_display_parsable.3 +++ b/docs/man/nutscan_display_parsable.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_display_parsable .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_DISPLAY_PARS" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_DISPLAY_PARS" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_display_ups_conf.3 b/docs/man/nutscan_display_ups_conf.3 index f568e3f..917707f 100644 --- a/docs/man/nutscan_display_ups_conf.3 +++ b/docs/man/nutscan_display_ups_conf.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_display_ups_conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_DISPLAY_UPS_" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_DISPLAY_UPS_" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_free_device.3 b/docs/man/nutscan_free_device.3 index 7ba5008..c05bb8e 100644 --- a/docs/man/nutscan_free_device.3 +++ b/docs/man/nutscan_free_device.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_free_device .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_FREE_DEVICE" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_FREE_DEVICE" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_get_serial_ports_list.3 b/docs/man/nutscan_get_serial_ports_list.3 index f40111c..47b3bd4 100644 --- a/docs/man/nutscan_get_serial_ports_list.3 +++ b/docs/man/nutscan_get_serial_ports_list.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_get_serial_ports_list .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_GET_SERIAL_P" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_GET_SERIAL_P" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_init.3 b/docs/man/nutscan_init.3 index 8dbcb48..549cf0d 100644 --- a/docs/man/nutscan_init.3 +++ b/docs/man/nutscan_init.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_init .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_INIT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_INIT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_new_device.3 b/docs/man/nutscan_new_device.3 index ccce712..5248d3f 100644 --- a/docs/man/nutscan_new_device.3 +++ b/docs/man/nutscan_new_device.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_new_device .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_NEW_DEVICE" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_NEW_DEVICE" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_avahi.3 b/docs/man/nutscan_scan_avahi.3 index acadc07..d113387 100644 --- a/docs/man/nutscan_scan_avahi.3 +++ b/docs/man/nutscan_scan_avahi.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_avahi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_AVAHI" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_AVAHI" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_eaton_serial.3 b/docs/man/nutscan_scan_eaton_serial.3 index 8b41840..0d34a97 100644 --- a/docs/man/nutscan_scan_eaton_serial.3 +++ b/docs/man/nutscan_scan_eaton_serial.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_eaton_serial .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_EATON_S" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_EATON_S" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_ipmi.3 b/docs/man/nutscan_scan_ipmi.3 index 6cbca6b..3731954 100644 --- a/docs/man/nutscan_scan_ipmi.3 +++ b/docs/man/nutscan_scan_ipmi.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_ipmi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_IPMI" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_IPMI" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_nut.3 b/docs/man/nutscan_scan_nut.3 index cae5851..482aea7 100644 --- a/docs/man/nutscan_scan_nut.3 +++ b/docs/man/nutscan_scan_nut.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_nut .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_NUT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_NUT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_snmp.3 b/docs/man/nutscan_scan_snmp.3 index 99326c7..f255dc8 100644 --- a/docs/man/nutscan_scan_snmp.3 +++ b/docs/man/nutscan_scan_snmp.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_snmp .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_SNMP" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_SNMP" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_usb.3 b/docs/man/nutscan_scan_usb.3 index 965e7d1..9e223df 100644 --- a/docs/man/nutscan_scan_usb.3 +++ b/docs/man/nutscan_scan_usb.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_usb .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_USB" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_USB" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutscan_scan_xml_http.3 b/docs/man/nutscan_scan_xml_http.3 index fa4ee22..75f35c0 100644 --- a/docs/man/nutscan_scan_xml_http.3 +++ b/docs/man/nutscan_scan_xml_http.3 @@ -2,12 +2,12 @@ .\" Title: nutscan_scan_xml_http .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTSCAN_SCAN_XML_HTT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "NUTSCAN_SCAN_XML_HTT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/nutupsdrv.8 b/docs/man/nutupsdrv.8 index 650e088..991d88a 100644 --- a/docs/man/nutupsdrv.8 +++ b/docs/man/nutupsdrv.8 @@ -2,12 +2,12 @@ .\" Title: nutupsdrv .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/20/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "NUTUPSDRV" "8" "11/20/2013" "Network UPS Tools 2\&.7\&.1" "NUT Manual" +.TH "NUTUPSDRV" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/oneac.8 b/docs/man/oneac.8 index e9e3ac3..f4c54bc 100644 --- a/docs/man/oneac.8 +++ b/docs/man/oneac.8 @@ -2,12 +2,12 @@ .\" Title: oneac .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "ONEAC" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "ONEAC" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/optiups.8 b/docs/man/optiups.8 index 9d9d2b0..df62f9d 100644 --- a/docs/man/optiups.8 +++ b/docs/man/optiups.8 @@ -2,12 +2,12 @@ .\" Title: optiups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "OPTIUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "OPTIUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/powercom.8 b/docs/man/powercom.8 index 205f6b7..17f0ae3 100644 --- a/docs/man/powercom.8 +++ b/docs/man/powercom.8 @@ -2,12 +2,12 @@ .\" Title: powercom .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "POWERCOM" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "POWERCOM" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -73,8 +73,10 @@ The exact type of the communication protocol within the powercom family, that wi \fIKP625AP\fR, \fIIMP\fR, \fIKIN\fR, -\fIBNT\fR, and -\fIBNT\-other\fR\&. The default is +\fIBNT\fR, +\fIBNT\-other\fR +and +\fIOPTI\fR\&. The default is \fITrust\fR\&. .sp \fIBNT\-other\fR @@ -258,6 +260,20 @@ voltage = {2\&.0000,0\&.0000,2\&.0000,0\&.0000} .if n \{\ .RE .\} +.SS "OPTI" +.sp +.if n \{\ +.RS 4 +.\} +.nf +numOfBytesFromUPS = 16 +methodOfFlowControl = no_flow_control +validationSequence = {{5,0xFF},{7,0},{8,0}} +shutdownArguments = {{1,30},y} +.fi +.if n \{\ +.RE +.\} .SH "AUTHOR" .sp Peter Bieringer , Alexey Sidorov , Keven L\&. Ates diff --git a/docs/man/powercom.txt b/docs/man/powercom.txt index b7516ff..0657508 100644 --- a/docs/man/powercom.txt +++ b/docs/man/powercom.txt @@ -46,7 +46,7 @@ Like modelname above, but for the serial number. The default is 'Unknown'. The exact type of the communication protocol within the powercom family, that will be used to communicate with the UPS. The type is named after the first modelname that was coded with that protocol. The acceptable names are -'Trust', 'Egys', 'KP625AP', 'IMP', 'KIN', 'BNT', and 'BNT-other'. +'Trust', 'Egys', 'KP625AP', 'IMP', 'KIN', 'BNT', 'BNT-other' and 'OPTI'. The default is 'Trust'. + 'BNT-other' is a special type for other BNT models (such as the 1500A at 120V @@ -186,6 +186,13 @@ BNT-other batteryPercentage = {1.0000,0.0000,0.0000,1.0000,0.0000} voltage = {2.0000,0.0000,2.0000,0.0000} +OPTI +~~~~ + numOfBytesFromUPS = 16 + methodOfFlowControl = no_flow_control + validationSequence = {{5,0xFF},{7,0},{8,0}} + shutdownArguments = {{1,30},y} + AUTHOR ------ Peter Bieringer , diff --git a/docs/man/powerman-pdu.8 b/docs/man/powerman-pdu.8 index c8c9808..839b963 100644 --- a/docs/man/powerman-pdu.8 +++ b/docs/man/powerman-pdu.8 @@ -2,12 +2,12 @@ .\" Title: powerman-pdu .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "POWERMAN\-PDU" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "POWERMAN\-PDU" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/powerpanel.8 b/docs/man/powerpanel.8 index b7aa6ac..b36a90b 100644 --- a/docs/man/powerpanel.8 +++ b/docs/man/powerpanel.8 @@ -2,12 +2,12 @@ .\" Title: powerpanel .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "POWERPANEL" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "POWERPANEL" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/rhino.8 b/docs/man/rhino.8 index 54a37f4..280b4c6 100644 --- a/docs/man/rhino.8 +++ b/docs/man/rhino.8 @@ -2,12 +2,12 @@ .\" Title: rhino .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "RHINO" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "RHINO" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/richcomm_usb.8 b/docs/man/richcomm_usb.8 index 391e88a..cbc27d5 100644 --- a/docs/man/richcomm_usb.8 +++ b/docs/man/richcomm_usb.8 @@ -2,12 +2,12 @@ .\" Title: richcomm_usb .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "RICHCOMM_USB" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "RICHCOMM_USB" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/riello_ser.8 b/docs/man/riello_ser.8 index 58dcb8e..8d6227f 100644 --- a/docs/man/riello_ser.8 +++ b/docs/man/riello_ser.8 @@ -2,12 +2,12 @@ .\" Title: riello_ser .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "RIELLO_SER" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "RIELLO_SER" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/riello_usb.8 b/docs/man/riello_usb.8 index 94460d4..6297a49 100644 --- a/docs/man/riello_usb.8 +++ b/docs/man/riello_usb.8 @@ -2,12 +2,12 @@ .\" Title: riello_usb .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "RIELLO_USB" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "RIELLO_USB" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/safenet.8 b/docs/man/safenet.8 index 62b2ac9..813a87e 100644 --- a/docs/man/safenet.8 +++ b/docs/man/safenet.8 @@ -2,12 +2,12 @@ .\" Title: safenet .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "SAFENET" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "SAFENET" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/snmp-ups.8 b/docs/man/snmp-ups.8 index 2ec4c26..4f12539 100644 --- a/docs/man/snmp-ups.8 +++ b/docs/man/snmp-ups.8 @@ -2,12 +2,12 @@ .\" Title: snmp-ups .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "SNMP\-UPS" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "SNMP\-UPS" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -34,7 +34,12 @@ snmp-ups \- Multi\-MIB Driver for SNMP UPS equipment This man page only documents the hardware\-specific features of the snmp\-ups driver\&. For information about the core driver, see \fBnutupsdrv\fR(8)\&. .SH "SUPPORTED HARDWARE" .sp -The snmp\-ups driver automatically detects and supports a wide range of devices by loading various MIBS: \fBietf\fR:: UPS that is RFC 1628 (UPS MIB) compliant, e\&.g\&. MGE UPS SYSTEMS, Liebert, perhaps others (default) +The snmp\-ups driver automatically detects and supports a wide range of devices by loading various MIBS: +.PP +\fBietf\fR +.RS 4 +UPS that is RFC 1628 (UPS MIB) compliant, e\&.g\&. MGE UPS SYSTEMS, Liebert, perhaps others (default) +.RE .PP \fBmge\fR .RS 4 @@ -91,14 +96,12 @@ This driver supports the following optional settings in the \fBups.conf\fR(5): .PP \fBmibs\fR=\fIname\fR .RS 4 -Set MIB compliance (default=auto, allowed entries: refer to the above SUPPORTED HARDWARE)\&. With "auto", the driver will try a select set of SNMP objects until it finds one that the device responds to\&. Note that, since NUT 2\&.6\&.2, snmp\-ups has a new method that uses sysObjectID, which is a pointer to the prefered MIB of the device, to detect supported devices\&. This renders void the use of -\fImib\fR -option\&. +Set MIB compliance (default=auto, allowed entries: refer to SUPPORTED HARDWARE above)\&. With "auto", the driver will try a select set of SNMP objects until it finds one that the device responds to\&. Note that since NUT 2\&.6\&.2, snmp\-ups has a new method that uses sysObjectID (which is a pointer to the prefered MIB of the device) to detect supported devices\&. This renders void the use of "mibs" option\&. .RE .PP \fBcommunity\fR=\fIname\fR .RS 4 -Set community name (default = public)\&. Note that you require a RW community name to change UPS settings (as for a powerdown)\&. +Set community name (default = public)\&. Note that a RW community name is required to change UPS settings (as for a powerdown)\&. .RE .PP \fBsnmp_version\fR=\fIversion\fR @@ -150,16 +153,16 @@ Set the privacy protocol (DES or AES) used for encrypted SNMPv3 messages (defaul You will need to install the Net\-SNMP package from http://www\&.net\-snmp\&.org/ before building this driver\&. .sp SNMP v3 also requires OpenSSL support from http://www\&.openssl\&.org\&. -.SH "LIMITATION" +.SH "LIMITATIONS" .SS "Shutdown" .sp -This driver does not provide a proper upsdrv_shutdown() function\&. There probably never will be one, since at the time this script should run (near the end of the system halt script), there will be no network capabilities anymore\&. Probably the only way to shutdown an SNMP UPS is by sending it a shutdown with delay command through \fBupscmd\fR(8) and hope for the best that the system will have finished shutting down before the power is cut\&. +The shutdown sequence should be tested before relying on NUT to send a shutdown command to the UPS\&. The problem is that the host network stack may have been torn down by the time the driver is invoked to send the shutdown command\&. The driver attempts to send shutdown\&.return, shutdown\&.reboot, and load\&.off\&.delay commands to the UPS in sequence, stopping after the first supported command\&. .SH "INSTALLATION" .sp -This driver is only built if the Net\-SNMP development files are present on the system\&. You can also force it to be built by using "configure \-\-with\-snmp=yes" before calling make\&. -.SH "IMPLEMENTATION" +This driver is only built if the Net\-SNMP development files are present at configuration time\&. You can also force it to be built by using configure \-\-with\-snmp=yes before calling make\&. +.SH "EXAMPLES" .sp -The hostname of the UPS is specified with the "port" value in ups\&.conf, i\&.e\&.: +The hostname of the UPS is specified with the "port" value in ups\&.conf: .sp .if n \{\ .RS 4 diff --git a/docs/man/snmp-ups.txt b/docs/man/snmp-ups.txt index 9584d20..3ec3a52 100644 --- a/docs/man/snmp-ups.txt +++ b/docs/man/snmp-ups.txt @@ -16,6 +16,7 @@ SUPPORTED HARDWARE ------------------ The snmp-ups driver automatically detects and supports a wide range of devices by loading various MIBS: + *ietf*:: UPS that is RFC 1628 (UPS MIB) compliant, e.g. MGE UPS SYSTEMS, Liebert, perhaps others (default) @@ -56,15 +57,15 @@ This driver supports the following optional settings in the linkman:ups.conf[5]: *mibs*='name':: -Set MIB compliance (default=auto, allowed entries: refer to the above SUPPORTED HARDWARE). +Set MIB compliance (default=auto, allowed entries: refer to SUPPORTED HARDWARE above). With "auto", the driver will try a select set of SNMP objects until it finds -one that the device responds to. Note that, since NUT 2.6.2, snmp-ups has a new -method that uses sysObjectID, which is a pointer to the prefered MIB of the -device, to detect supported devices. This renders void the use of 'mib' option. +one that the device responds to. Note that since NUT 2.6.2, snmp-ups has a new +method that uses sysObjectID (which is a pointer to the prefered MIB of the +device) to detect supported devices. This renders void the use of "mibs" option. *community*='name':: Set community name (default = public). -Note that you require a RW community name to change UPS settings (as for a powerdown). +Note that a RW community name is required to change UPS settings (as for a powerdown). *snmp_version*='version':: Set SNMP version (default = v1, allowed: v2c, v3) @@ -107,27 +108,28 @@ http://www.net-snmp.org/ before building this driver. SNMP v3 also requires OpenSSL support from http://www.openssl.org. -LIMITATION ----------- +LIMITATIONS +----------- Shutdown ~~~~~~~~ -This driver does not provide a proper upsdrv_shutdown() function. There probably -never will be one, since at the time this script should run (near the end of -the system halt script), there will be no network capabilities anymore. -Probably the only way to shutdown an SNMP UPS is by sending it a shutdown -with delay command through linkman:upscmd[8] and hope for the best that the -system will have finished shutting down before the power is cut. +The shutdown sequence should be tested before relying on NUT to send a +shutdown command to the UPS. The problem is that the host network stack may +have been torn down by the time the driver is invoked to send the shutdown +command. The driver attempts to send +shutdown.return+, +shutdown.reboot+, +and +load.off.delay+ commands to the UPS in sequence, stopping after the first +supported command. INSTALLATION ------------ -This driver is only built if the Net-SNMP development files are present on the system. -You can also force it to be built by using "configure --with-snmp=yes" before calling make. +This driver is only built if the Net-SNMP development files are present at +configuration time. You can also force it to be built by using ++configure --with-snmp=yes+ before calling make. -IMPLEMENTATION --------------- +EXAMPLES +-------- The hostname of the UPS is specified with the "port" value in -`ups.conf`, i.e.: +`ups.conf`: [snmpv1] driver = snmp-ups diff --git a/docs/man/solis.8 b/docs/man/solis.8 index 15d273f..f643df6 100644 --- a/docs/man/solis.8 +++ b/docs/man/solis.8 @@ -2,12 +2,12 @@ .\" Title: solis .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "SOLIS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "SOLIS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/tripplite.8 b/docs/man/tripplite.8 index 8732e58..fcf979c 100644 --- a/docs/man/tripplite.8 +++ b/docs/man/tripplite.8 @@ -2,12 +2,12 @@ .\" Title: tripplite .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "TRIPPLITE" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "TRIPPLITE" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/tripplite_usb.8 b/docs/man/tripplite_usb.8 index f6a8def..feecd83 100644 --- a/docs/man/tripplite_usb.8 +++ b/docs/man/tripplite_usb.8 @@ -2,12 +2,12 @@ .\" Title: tripplite_usb .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "TRIPPLITE_USB" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "TRIPPLITE_USB" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/tripplitesu.8 b/docs/man/tripplitesu.8 index 584691c..d9bc32e 100644 --- a/docs/man/tripplitesu.8 +++ b/docs/man/tripplitesu.8 @@ -2,12 +2,12 @@ .\" Title: tripplitesu .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "TRIPPLITESU" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "TRIPPLITESU" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/ups.conf.5 b/docs/man/ups.conf.5 index 5f5f3bc..14584c8 100644 --- a/docs/man/ups.conf.5 +++ b/docs/man/ups.conf.5 @@ -2,12 +2,12 @@ .\" Title: ups.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPS\&.CONF" "5" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPS\&.CONF" "5" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -85,6 +85,23 @@ Optional\&. Path name of the directory in which the UPS driver executables resid Optional\&. Same as the UPS field of the same name, but this is the default for UPSes that don\(cqt have the field\&. .RE .PP +\fBmaxretry\fR +.RS 4 +Optional\&. Specify the number of attempts to start the driver(s), in case of failure, before giving up\&. A delay of +\fIretrydelay\fR +is inserted between each attempt\&. Caution should be taken when using this option, since it can impact the time taken by your system to start\&. +.sp +The default is 1 attempt\&. +.RE +.PP +\fBretrydelay\fR +.RS 4 +Optional\&. Specify the delay between each restart attempt of the driver(s), as specified by +\fImaxretry\fR\&. Caution should be taken when using this option, since it can impact the time taken by your system to start\&. +.sp +The default is 5 seconds\&. +.RE +.PP \fBpollinterval\fR .RS 4 Optional\&. The status of the UPS will be refreshed after a maximum delay which is controlled by this setting\&. This is normally 2 seconds\&. This may be useful if the driver is creating too much of a load on your system or network\&. diff --git a/docs/man/ups.conf.txt b/docs/man/ups.conf.txt index 8a72a83..4877852 100644 --- a/docs/man/ups.conf.txt +++ b/docs/man/ups.conf.txt @@ -58,6 +58,21 @@ directory, which is often /usr/local/ups/bin. Optional. Same as the UPS field of the same name, but this is the default for UPSes that don't have the field. +*maxretry*:: +Optional. Specify the number of attempts to start the driver(s), in case of +failure, before giving up. A delay of 'retrydelay' is inserted between each +attempt. Caution should be taken when using this option, since it can +impact the time taken by your system to start. ++ +The default is 1 attempt. + +*retrydelay*:: +Optional. Specify the delay between each restart attempt of the driver(s), +as specified by 'maxretry'. Caution should be taken when using this option, +since it can impact the time taken by your system to start. ++ +The default is 5 seconds. + *pollinterval*:: Optional. The status of the UPS will be refreshed after a maximum diff --git a/docs/man/upsc.8 b/docs/man/upsc.8 index 7fcb4a8..dab4787 100644 --- a/docs/man/upsc.8 +++ b/docs/man/upsc.8 @@ -2,12 +2,12 @@ .\" Title: upsc .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/31/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSC" "8" "07/31/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSC" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_add_host_cert.3 b/docs/man/upscli_add_host_cert.3 index c8dbdbc..ae8d6f1 100644 --- a/docs/man/upscli_add_host_cert.3 +++ b/docs/man/upscli_add_host_cert.3 @@ -2,12 +2,12 @@ .\" Title: upscli_add_host_cert .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_ADD_HOST_CERT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_ADD_HOST_CERT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_cleanup.3 b/docs/man/upscli_cleanup.3 index 3c362d4..6364c26 100644 --- a/docs/man/upscli_cleanup.3 +++ b/docs/man/upscli_cleanup.3 @@ -2,12 +2,12 @@ .\" Title: upscli_cleanup .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_CLEANUP" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_CLEANUP" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_connect.3 b/docs/man/upscli_connect.3 index 794ec69..f5743bc 100644 --- a/docs/man/upscli_connect.3 +++ b/docs/man/upscli_connect.3 @@ -2,12 +2,12 @@ .\" Title: upscli_connect .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_CONNECT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_CONNECT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_disconnect.3 b/docs/man/upscli_disconnect.3 index 8a26aaf..fff9b19 100644 --- a/docs/man/upscli_disconnect.3 +++ b/docs/man/upscli_disconnect.3 @@ -2,12 +2,12 @@ .\" Title: upscli_disconnect .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_DISCONNECT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_DISCONNECT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_fd.3 b/docs/man/upscli_fd.3 index 1aca6a0..338eca3 100644 --- a/docs/man/upscli_fd.3 +++ b/docs/man/upscli_fd.3 @@ -2,12 +2,12 @@ .\" Title: upscli_fd .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_FD" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_FD" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_get.3 b/docs/man/upscli_get.3 index fd825a0..8c88bd3 100644 --- a/docs/man/upscli_get.3 +++ b/docs/man/upscli_get.3 @@ -2,12 +2,12 @@ .\" Title: upscli_get .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_GET" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_GET" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_init.3 b/docs/man/upscli_init.3 index 488df32..9a666a0 100644 --- a/docs/man/upscli_init.3 +++ b/docs/man/upscli_init.3 @@ -2,12 +2,12 @@ .\" Title: upscli_init .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_INIT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_INIT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_list_next.3 b/docs/man/upscli_list_next.3 index f7a0180..6e64479 100644 --- a/docs/man/upscli_list_next.3 +++ b/docs/man/upscli_list_next.3 @@ -2,12 +2,12 @@ .\" Title: upscli_list_next .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_LIST_NEXT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_LIST_NEXT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_list_start.3 b/docs/man/upscli_list_start.3 index 87fe4c6..9b66ccf 100644 --- a/docs/man/upscli_list_start.3 +++ b/docs/man/upscli_list_start.3 @@ -2,12 +2,12 @@ .\" Title: upscli_list_start .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_LIST_START" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_LIST_START" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_readline.3 b/docs/man/upscli_readline.3 index 6b8a698..925d683 100644 --- a/docs/man/upscli_readline.3 +++ b/docs/man/upscli_readline.3 @@ -2,12 +2,12 @@ .\" Title: upscli_readline .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_READLINE" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_READLINE" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_sendline.3 b/docs/man/upscli_sendline.3 index 8aab0a3..1f54d10 100644 --- a/docs/man/upscli_sendline.3 +++ b/docs/man/upscli_sendline.3 @@ -2,12 +2,12 @@ .\" Title: upscli_sendline .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_SENDLINE" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_SENDLINE" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_splitaddr.3 b/docs/man/upscli_splitaddr.3 index c8cd9c6..1db69f3 100644 --- a/docs/man/upscli_splitaddr.3 +++ b/docs/man/upscli_splitaddr.3 @@ -2,12 +2,12 @@ .\" Title: upscli_splitaddr .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_SPLITADDR" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_SPLITADDR" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_splitname.3 b/docs/man/upscli_splitname.3 index 56ac4ed..2dc54da 100644 --- a/docs/man/upscli_splitname.3 +++ b/docs/man/upscli_splitname.3 @@ -2,12 +2,12 @@ .\" Title: upscli_splitname .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_SPLITNAME" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_SPLITNAME" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_ssl.3 b/docs/man/upscli_ssl.3 index 37a3565..2460c43 100644 --- a/docs/man/upscli_ssl.3 +++ b/docs/man/upscli_ssl.3 @@ -2,12 +2,12 @@ .\" Title: upscli_ssl .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_SSL" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_SSL" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_strerror.3 b/docs/man/upscli_strerror.3 index cf0dd9f..28069f8 100644 --- a/docs/man/upscli_strerror.3 +++ b/docs/man/upscli_strerror.3 @@ -2,12 +2,12 @@ .\" Title: upscli_strerror .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_STRERROR" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_STRERROR" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscli_upserror.3 b/docs/man/upscli_upserror.3 index e2d0577..bcfb5a3 100644 --- a/docs/man/upscli_upserror.3 +++ b/docs/man/upscli_upserror.3 @@ -2,12 +2,12 @@ .\" Title: upscli_upserror .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLI_UPSERROR" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLI_UPSERROR" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsclient.3 b/docs/man/upsclient.3 index 87471fa..3f822f8 100644 --- a/docs/man/upsclient.3 +++ b/docs/man/upsclient.3 @@ -2,12 +2,12 @@ .\" Title: upsclient .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCLIENT" "3" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSCLIENT" "3" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscmd.8 b/docs/man/upscmd.8 index c1e64b8..d21afa1 100644 --- a/docs/man/upscmd.8 +++ b/docs/man/upscmd.8 @@ -2,12 +2,12 @@ .\" Title: upscmd .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/31/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCMD" "8" "07/31/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSCMD" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upscode2.8 b/docs/man/upscode2.8 index 4ab981f..1ea0a85 100644 --- a/docs/man/upscode2.8 +++ b/docs/man/upscode2.8 @@ -2,12 +2,12 @@ .\" Title: upscode2 .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSCODE2" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSCODE2" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsd.8 b/docs/man/upsd.8 index 37273cf..026be3d 100644 --- a/docs/man/upsd.8 +++ b/docs/man/upsd.8 @@ -2,12 +2,12 @@ .\" Title: upsd .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSD" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSD" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsd.conf.5 b/docs/man/upsd.conf.5 index 039b09a..7e13883 100644 --- a/docs/man/upsd.conf.5 +++ b/docs/man/upsd.conf.5 @@ -2,12 +2,12 @@ .\" Title: upsd.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSD\&.CONF" "5" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSD\&.CONF" "5" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsd.users.5 b/docs/man/upsd.users.5 index 7ef3211..ee73e73 100644 --- a/docs/man/upsd.users.5 +++ b/docs/man/upsd.users.5 @@ -2,12 +2,12 @@ .\" Title: upsd.users .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSD\&.USERS" "5" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSD\&.USERS" "5" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsdrvctl.8 b/docs/man/upsdrvctl.8 index 5d85226..a8610d8 100644 --- a/docs/man/upsdrvctl.8 +++ b/docs/man/upsdrvctl.8 @@ -2,12 +2,12 @@ .\" Title: upsdrvctl .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSDRVCTL" "8" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSDRVCTL" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -84,7 +84,12 @@ upsdrvctl supports three commands \- start, stop and shutdown\&. They take an op .PP \fBstart\fR .RS 4 -Start the UPS driver(s)\&. +Start the UPS driver(s)\&. In case of failure, further attempts may be executed by using the +\fImaxretry\fR +and +\fIretrydelay\fR +options \- see +\fBups.conf\fR(5)\&. .RE .PP \fBstop\fR diff --git a/docs/man/upsdrvctl.txt b/docs/man/upsdrvctl.txt index f19fd77..52e5509 100644 --- a/docs/man/upsdrvctl.txt +++ b/docs/man/upsdrvctl.txt @@ -63,7 +63,8 @@ Without that argument, they operate on every UPS that is currently configured. *start*:: -Start the UPS driver(s). +Start the UPS driver(s). In case of failure, further attempts may be executed +by using the 'maxretry' and 'retrydelay' options - see linkman:ups.conf[5]. *stop*:: Stop the UPS driver(s). diff --git a/docs/man/upsimage.cgi.8 b/docs/man/upsimage.cgi.8 index cae7201..8847895 100644 --- a/docs/man/upsimage.cgi.8 +++ b/docs/man/upsimage.cgi.8 @@ -2,12 +2,12 @@ .\" Title: upsimage.cgi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 03/21/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSIMAGE\&.CGI" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSIMAGE\&.CGI" "8" "03/21/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -64,6 +64,6 @@ upsstats will only talk to \fBupsd\fR(8) servers that have been defined in your \fBupsd\fR(8), \fBupsstats.cgi\fR(8) .SS "Internet resources:" .sp -The gd home page: http://www\&.boutell\&.com/gd/ +The gd home page: http://libgd\&.bitbucket\&.org .sp The NUT (Network UPS Tools) home page: http://www\&.networkupstools\&.org/ diff --git a/docs/man/upsimage.cgi.txt b/docs/man/upsimage.cgi.txt index 1118bd2..9ede74a 100644 --- a/docs/man/upsimage.cgi.txt +++ b/docs/man/upsimage.cgi.txt @@ -45,6 +45,6 @@ linkman:upsd[8], linkman:upsstats.cgi[8] Internet resources: ~~~~~~~~~~~~~~~~~~~ -The gd home page: http://www.boutell.com/gd/ +The gd home page: http://libgd.bitbucket.org The NUT (Network UPS Tools) home page: http://www.networkupstools.org/ diff --git a/docs/man/upslog.8 b/docs/man/upslog.8 index 10d260e..1f3da75 100644 --- a/docs/man/upslog.8 +++ b/docs/man/upslog.8 @@ -2,12 +2,12 @@ .\" Title: upslog .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSLOG" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSLOG" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsmon.8 b/docs/man/upsmon.8 index 2466689..7830762 100644 --- a/docs/man/upsmon.8 +++ b/docs/man/upsmon.8 @@ -2,12 +2,12 @@ .\" Title: upsmon .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSMON" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSMON" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsmon.conf.5 b/docs/man/upsmon.conf.5 index 7686f4f..9c7b002 100644 --- a/docs/man/upsmon.conf.5 +++ b/docs/man/upsmon.conf.5 @@ -2,12 +2,12 @@ .\" Title: upsmon.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 11/18/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre2 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSMON\&.CONF" "5" "11/18/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSMON\&.CONF" "5" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsrw.8 b/docs/man/upsrw.8 index d616695..280505d 100644 --- a/docs/man/upsrw.8 +++ b/docs/man/upsrw.8 @@ -2,12 +2,12 @@ .\" Title: upsrw .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/31/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSRW" "8" "07/31/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSRW" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upssched.8 b/docs/man/upssched.8 index 809fed3..05b759a 100644 --- a/docs/man/upssched.8 +++ b/docs/man/upssched.8 @@ -2,12 +2,12 @@ .\" Title: upssched .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSCHED" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSSCHED" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upssched.conf.5 b/docs/man/upssched.conf.5 index e37dfe2..0483b31 100644 --- a/docs/man/upssched.conf.5 +++ b/docs/man/upssched.conf.5 @@ -2,12 +2,12 @@ .\" Title: upssched.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSCHED\&.CONF" "5" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "UPSSCHED\&.CONF" "5" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsset.cgi.8 b/docs/man/upsset.cgi.8 index be36b86..b5b563a 100644 --- a/docs/man/upsset.cgi.8 +++ b/docs/man/upsset.cgi.8 @@ -2,12 +2,12 @@ .\" Title: upsset.cgi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSET\&.CGI" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSSET\&.CGI" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsset.conf.5 b/docs/man/upsset.conf.5 index bd6a256..87a5601 100644 --- a/docs/man/upsset.conf.5 +++ b/docs/man/upsset.conf.5 @@ -2,12 +2,12 @@ .\" Title: upsset.conf .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSET\&.CONF" "5" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSSET\&.CONF" "5" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsstats.cgi.8 b/docs/man/upsstats.cgi.8 index e1925b3..1458bad 100644 --- a/docs/man/upsstats.cgi.8 +++ b/docs/man/upsstats.cgi.8 @@ -2,12 +2,12 @@ .\" Title: upsstats.cgi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSTATS\&.CGI" "8" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSSTATS\&.CGI" "8" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/upsstats.html.5 b/docs/man/upsstats.html.5 index 2db5bb6..e9639ca 100644 --- a/docs/man/upsstats.html.5 +++ b/docs/man/upsstats.html.5 @@ -2,12 +2,12 @@ .\" Title: upsstats.html .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 09/13/2013 +.\" Date: 02/25/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.7.1-pre1 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "UPSSTATS\&.HTML" "5" "09/13/2013" "Network UPS Tools 2\&.7\&.1\-p" "NUT Manual" +.TH "UPSSTATS\&.HTML" "5" "02/25/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/usbhid-ups.8 b/docs/man/usbhid-ups.8 index 87f1e3d..6fd4034 100644 --- a/docs/man/usbhid-ups.8 +++ b/docs/man/usbhid-ups.8 @@ -2,12 +2,12 @@ .\" Title: usbhid-ups .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "USBHID\-UPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "USBHID\-UPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/man/victronups.8 b/docs/man/victronups.8 index 1fc6868..6934487 100644 --- a/docs/man/victronups.8 +++ b/docs/man/victronups.8 @@ -2,12 +2,12 @@ .\" Title: victronups .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 07/26/2013 +.\" Date: 02/15/2014 .\" Manual: NUT Manual -.\" Source: Network UPS Tools 2.6.5 +.\" Source: Network UPS Tools 2.7.1.5 .\" Language: English .\" -.TH "VICTRONUPS" "8" "07/26/2013" "Network UPS Tools 2\&.6\&.5" "NUT Manual" +.TH "VICTRONUPS" "8" "02/15/2014" "Network UPS Tools 2\&.7\&.1\&." "NUT Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/docs/net-protocol.txt b/docs/net-protocol.txt index 650effa..6357a72 100644 --- a/docs/net-protocol.txt +++ b/docs/net-protocol.txt @@ -13,6 +13,7 @@ query commands as authentication is impossible over a UDP socket. A library, named libupsclient, that implement this protocol is provided in both static and shared version to help the client application development. + Old command removal notice -------------------------- @@ -20,6 +21,7 @@ Before version 1.5.0, a number of old commands were supported. These have been removed from the specification. For more information, consult an older version of the software. + Command reference ----------------- @@ -28,13 +30,14 @@ Embedded quotes are escaped with backslashes. Embedded backslashes are also escaped by representing them as \\. This protocol is intended to be interpreted with parseconf (NUT parser) or something similar. + Revision history ---------------- Here's a table to present the various changes that happened to the NUT network protocol, over the time: -[options="header",style="asciidoc",cols="^.^,^.^,<"] +[options="header,autowidth",frame="topbot",grid="rows",cols="^.^,^.^,<",align="center"] |=============================================================================== |Protocol version |NUT version |Description |1.0 |< 1.5.0 |Original protocol (legacy version) @@ -46,6 +49,7 @@ NUT network protocol, over the time: NOTE: any new version of the protocol implies an update of NUT_NETVERSION in *configure.in*. + GET --- @@ -53,6 +57,7 @@ Retrieve a single response from the server. Possible sub-commands: + NUMLOGINS ~~~~~~~~~ @@ -72,6 +77,7 @@ still connected when starting the shutdown process. This replaces the old "REQ NUMLOGINS" command. + UPSDESC ~~~~~~~ @@ -91,6 +97,7 @@ is not set, upsd will return "Unavailable". This can be used to provide human-readable descriptions instead of a cryptic "upsname@hostname" string. + VAR ~~~ @@ -106,6 +113,7 @@ Response: This replaces the old "REQ" command. + TYPE ~~~~ @@ -131,6 +139,7 @@ The default , when omitted, is integer. This replaces the old "VARTYPE" command. + DESC ~~~~ @@ -153,6 +162,7 @@ provide for localization and internationalization. This replaces the old "VARDESC" command. + CMDDESC ~~~~~~~ @@ -170,6 +180,7 @@ This is like DESC above, but it applies to the instant commands. This replaces the old "INSTCMDDESC" command. + LIST ---- @@ -183,6 +194,7 @@ of client possible. You can send a LIST query and then go off and wait for it to get back to you. When it arrives, you don't need complicated state machines to remember which list is which. + UPS ~~~ @@ -211,6 +223,7 @@ handle situations where a single upsd supports multiple drivers. Clients which perform a UPS discovery process may find this useful. + VAR ~~~ @@ -234,6 +247,7 @@ Response: This replaces the old "LISTVARS" command. + RW ~~ @@ -257,6 +271,7 @@ Response: This replaces the old "LISTRW" command. + CMD ~~~ @@ -280,6 +295,7 @@ Response: This replaces the old "LISTINSTCMD" command. + ENUM ~~~~ @@ -306,6 +322,7 @@ This replaces the old "ENUM" command. NOTE: this does not support the old "SELECTED" notation. You must request the current value separately. + RANGE ~~~~~ @@ -327,6 +344,7 @@ Response: ... END LIST RANGE su700 input.transfer.low + CLIENT ~~~~~~ @@ -347,6 +365,7 @@ Response: CLIENT ups1 192.168.1.2 END LIST CLIENT ups1 + SET --- @@ -355,6 +374,7 @@ Form: SET VAR "" SET VAR su700 ups.id "My UPS" + INSTCMD ------- @@ -363,6 +383,7 @@ Form: INSTCMD INSTCMD su700 test.panel.start + LOGOUT ------ @@ -377,6 +398,7 @@ Response: Used to disconnect gracefully from the server. + LOGIN ----- @@ -387,7 +409,8 @@ Form: Response: OK (upon success) - or <> + +or <> NOTE: This requires "upsmon slave" or "upsmon master" in upsd.users @@ -398,6 +421,7 @@ The upsmon master will wait until the count of attached systems reaches NOTE: You probably shouldn't send this command unless you are upsmon, or a upsmon replacement. + MASTER ------ @@ -408,13 +432,15 @@ Form: Response: OK (upon success) - or <> + +or <> NOTE: This requires "upsmon master" in upsd.users This function doesn't do much by itself. It is used by upsmon to make sure that master-level functions like FSD are available if necessary. + FSD --- @@ -425,7 +451,8 @@ Form: Response: OK FSD-SET (success) - or <> + +or <> NOTE: This requires "upsmon master" in upsd.users, or "FSD" action granted in upsd.users @@ -443,6 +470,7 @@ no way to clear it short of restarting upsd or dropping then re-adding it in the ups.conf. This may cause issues when upsd is running on a system that is not shut down due to the UPS event. + PASSWORD -------- @@ -453,11 +481,13 @@ Form: Response: OK (upon success) - or <> + +or <> Sets the password associated with a connection. Used for later authentication for commands that require it. + USERNAME -------- @@ -468,11 +498,13 @@ Form: Response: OK (upon success) - or <> + +or <> Sets the username associated with a connection. This is also used for authentication, specifically in conjunction with the upsd.users file. + STARTTLS -------- @@ -483,12 +515,14 @@ Form: Response: OK STARTTLS - or <> + +or <> This tells upsd to switch to TLS mode internally, so all future communications will be encrypted. You must also change to TLS mode in the client after receiving the OK, or the connection will be useless. + Other commands -------------- @@ -502,6 +536,8 @@ telnet, make sure you don't have it set to negotiate extra options. upsd doesn't speak telnet and will probably misunderstand your first request due to the extra junk in the buffer. + +[[np-errors]] Error responses --------------- @@ -639,9 +675,11 @@ The value specified in the request is not valid. This usually applies to a SET of an ENUM type which is using a value which is not in the list of allowed values. + Future ideas ------------ + Dense lists ~~~~~~~~~~~ @@ -649,12 +687,14 @@ The LIST commands may be given the ability to handle options some day. For example, "LIST VARS +DESC" would return the current value like now, but it would also append the description of that variable. + Command status ~~~~~~~~~~~~~~ After sending an INSTCMD or SET, a client will eventually be able to poll to see whether it was completed successfully by the driver. + Get collection ~~~~~~~~~~~~~~ diff --git a/docs/new-drivers.txt b/docs/new-drivers.txt index 0300db5..bdd5084 100644 --- a/docs/new-drivers.txt +++ b/docs/new-drivers.txt @@ -494,8 +494,7 @@ Structure and macro You should us the usb_device_id structure, and the USB_DEVICE macro to declare the supported devices. This allows the automatic extraction of -USB information, to generate the HAL, Hotplug, udev and DeviceKit-power -support files. +USB information, to generate the Hotplug, udev and UPower support files. For example: diff --git a/docs/nut-hal.txt b/docs/nut-hal.txt deleted file mode 100644 index de0e53c..0000000 --- a/docs/nut-hal.txt +++ /dev/null @@ -1,118 +0,0 @@ -Desc: NUT integration with FreeDesktop HAL - Hardware Abstraction Layer -File: nut-hal.txt -Date: 05 March 2008 -Auth: Arnaud Quette - -This document introduces NUT integration with FreeDesktop HAL -(Hardware Abstraction Layer), also called Integrated Power Management (IPM). - -Introduction ------------- - -This feature, also known as the Common Power Management integration, -allows NUT drivers to feed the HAL system, which will itself feeds -applications such as the Gnome Power Manager, in charge of the -system protection and notification. - -This allows a better integration with the HAL supported systems -(Linux, *BSD and Solaris), and to reuse applications that have -been written to support laptop batteries. This also means that -we avoid the code / application redundancy by not using the upsd -and upsmon / NUT Client layer. - -Since the NUT driver subset is limited to USB only, at least for -the moment, this should allow this feature to be shipped with a -base system. - -From a user point of view, since all the needed components are -present on the system, we can achieve a full plug and play system. -That is to say when you plug your USB UPS, the needed driver is -automatically loaded and the according application (ie GPM) is -made available (displayed) at runtime without having to install -anything else than the base system. Nothing more to install, -nothing more to configure... - -Detailed usage ---------------- - -Since this feature is still a work in progress, the below information -details how to get, install and test it. - -Note that the minimum HAL version required is 0.5.8 - -* install libhal-dev and its dependencies (libdbus-dev) -or equivalent packages for your system. - -* "./configure --with-hal && make" from within the nut dir - -* either do a "make install" or simply copy the file -drivers/hald-addon* to the HAL addons directory (ie -/usr/lib/hal/ on Debian) or equivalent dir. - -* copy the scripts/hal/20-ups-nut-device.fdi file to -$datadir/hal/fdi/information/20thirdparty -for example on Debian: /usr/share/hal/fdi/information/20thirdparty/ - -* create the (nut user and) group for the udev rule: -addgroup --quiet --system nut - -* add the hal user (ex: haldaemon) to the nut group using: -adduser --quiet haldaemon nut - -* restart HAL (ie using "/etc/init.d/dbus restart"). -I've personaly used "killall hal" and restarted it using -"hald --daemon=no --verbose=yes" to see the verbose logs - -* plug your UPS' USB cord into your computer - -* you should now see the UPS using: -- [kde-]hal-device-manager, -- gnome power manager (standard applet for battery management), which -will pop up and state that there is an UPS -- ... - -Packaging information ---------------------- - -The HAL support in NUT must currently be packaged separatly (ie in a -specific nut-hal package) and must conflict with the classic nut packages. -This is in order to: -- allow shipping of the HAL support only in the base system, -without including all the NUT drivers and software, -- prevent the NUT HAL addons to get an exclusive -and automatic access on a device, when a user only want to use the -USB support with a classic NUT installation. - -This will be addressed when the new NUT configuration framework -will be merged in the main code branch. - -Developing information ----------------------- - -As of NUT 2.2.2, the HAL integration also provide a DBus interface to -allow the calling of two method: -- Shutdown -- SetBeeper (boolean) - -Example: -dbus-send --system --print-reply --dest=org.freedesktop.Hal \ - /org/freedesktop/Hal/devices/usb_device_463_ffff_1H2E300AH \ - org.freedesktop.Hal.Device.UPS.Shutdown - -For development purposes, you might want to set the environment variable -"NUT_HAL_DEBUG" to something between "1" and "5". This matches the NUT debug -levels (-DDDDD). - -Credits -------- - -Thanks to the following people who made this possible: -- David Zeuthen, HAL Project Leader, -- Richard Hughes, Gnome Power Manager Developer. - -References ----------- - -* FreeDesktop HAL: http://freedesktop.org/wiki/Software_2fhal -* Gnome Power Manager: http://www.gnome.org/projects/gnome-power-manager/ - diff --git a/docs/nut-qa.txt b/docs/nut-qa.txt index 392b3e0..604e101 100644 --- a/docs/nut-qa.txt +++ b/docs/nut-qa.txt @@ -1,124 +1,136 @@ -NUT Quality Assurance -===================== - -Recognizing the critical nature of NUT, the NUT Quality Assurance (NQA) effort -has been established to improve NUT where necessary, and to maintain software -quality as high as it should be. - -NQA is present in many aspects and areas of NUT. - -Documentation -------------- - -The documentation toolchain now use -link:http://www.methods.co.nz/asciidoc/[AsciiDoc] to output both HTML pages and -manual pages (troff). This single point of control permitted to fill many gaps, -to suppress many redundancies and to optimize documentation management in -general. - -- the NUT website and HTML documentation are tested for W3C XHTML 1.1 and CSS -compliance. This can be counter verified by clicking the W3C XHTML 1.1 and CSS -icons, at the bottom of each page. - -- the manual pages conformance is tested with -link:http://catb.org/~esr/doclifter/index.html[doclifter] (outdated) - -- Documentation source files are spell checked, using -link:http://aspell.net[Aspell], both interactively (using -'make spellcheck-interactive') and automatically in Buildbot (using -'make spellcheck'). - -NOTE: A NUT dictionnary is also available (docs/nut.dict), providing a glossary -of terms related to power devices and management. - -Source code ------------ - -Use of standards -~~~~~~~~~~~~~~~~ - -NUT promotes and uses many standards, like: - -- the variable names standard used in NUT, -- the coding rules and best practices for developers, -- the use of a software architecture limiting developments to the very minimum, -- the use of standard Free and OpenSource Software components, like: - * the USB library, - * the Net SNMP project, - * the Neon library, - * the OpenSSL library (to be replaced by NSS, which is more license compliant - with NUT and is FIPS 140 certified), - * the TCP Wrappers library. - -QA tools and metrics -~~~~~~~~~~~~~~~~~~~~ - -NUT's quality is constently monitored using many tools, like: - -- a Revision Control System (link:http://svn.debian.org/wsvn/nut[Subversion]) to -track development and ease regression fixes. Any modification on the NUT source -trees are reported on the link:http://lists.alioth.debian.org/mailman/listinfo/nut-commits[NUT Commits] -mailing list. -- link:http://buildbot.networkupstools.org/public/nut/[Buildbot] to automate the compile/test -cycle. Any build failure is caught early, reported through the -link:http://lists.alioth.debian.org/mailman/listinfo/nut-commits[NUT Commits] -mailing list, and fixed quickly. -- a project portal with trackers for bugs, feature request, patchs -and tasks - -NUT QA also relies on external tools, like: - -//////////////////////////////////////////////////////////////////////////////// -FIXME (POST): -- integrate static code analysis - - consider splint, Frama-C, BLAST and Clang, and choose one. - - integrate link:http://scan.coverity.com[Coverity Scan] program. - Note: request made by Arnaud to scan-admin@coverity.com on Sep 24 2009 -- point other distro BTS (use Launchpad as an aggregator?!) - -//////////////////////////////////////////////////////////////////////////////// - - -- the Debian QA tools, available through the link:http://packages.qa.debian.org/n/nut.html[NUT Package Tracking System]: - - * Lintian general QA checks, - * link:http://piuparts.debian.org/sid/source/n/nut.html[piuparts] automates - the installation, upgrade and removal testing processes. - -- a runtime testing suite, which automates the inter layer communication testing -(driver - upsd - upsmon / clients), that is part of Ubuntu. -link:http://bazaar.launchpad.net/~ubuntu-bugcontrol/qa-regression-testing/master/view/head:/scripts/test-nut.py[The NUT testing script] -is available in the link:https://code.edge.launchpad.net/qa-regression-testing[Ubuntu QA Regression Testing suite]. -It installs nut, configure with for the dummy-ups driver, changes a few data and -check that these are well propagated with upsc. - - -Runtime quality -~~~~~~~~~~~~~~~ - -- NUT provides many link:user-manual.html#NUT_Security[security features] to -ensure a maximum runtime security level. - -- Packages use several link:http://wiki.debian.org/Hardening[Hardening methods] -to protect NUT binaries. - -//////////////////////////////////////////////////////////////////////////////// -FIXME (POST): - -- write a code conformance checker (nut-lint) -- write a § on driver maintainance status -- consider using [http://forge.novell.com/modules/xfmod/project/?opensuse OpenSUSE Build Service tools] -- provide software metrics and evolution over the time - - * [http://www.flossmetrics.org/ FlossMetrics] - * [http://en.wikipedia.org/wiki/Software_metric Wikipedia] - * [http://cccc.sourceforge.net/ CCCC - C and C++ Code Counter] - * [http://open.ncsu.edu/se/tutorials/metrics/ Metrics with Eclipse] - -- Code documentation, for the core architecture (client and drivers are already -documented) - - * [http://doxygen.org/ Doxygen] - * [http://naturaldocs.org/ NaturalDocs] - -//////////////////////////////////////////////////////////////////////////////// +NUT Quality Assurance +===================== + +Recognizing the critical nature of NUT, the NUT Quality Assurance (NQA) effort +has been established to improve NUT where necessary, and to maintain software +quality as high as it should be. + +NQA is present in many aspects and areas of NUT. + +Documentation +------------- + +The documentation toolchain uses +link:http://www.methods.co.nz/asciidoc/[AsciiDoc] to output both HTML pages and +manual pages (troff). This single point of control fills many gaps, +suppresses many redundancies, and optimizes documentation management in +general. + +- The NUT website and HTML documentation are tested for W3C XHTML 1.1 and CSS +compliance. This can be counter verified by clicking the W3C XHTML 1.1 and CSS +icons, at the bottom of each page. + +//////////////////////////////////////////////////////////////////////////////// +- the manual pages conformance is tested with +link:http://catb.org/~esr/doclifter/index.html[doclifter] (outdated) +//////////////////////////////////////////////////////////////////////////////// + +- Documentation source files are spell checked, using +link:http://aspell.net[Aspell], both interactively (using +'make spellcheck-interactive') and automatically in Buildbot (using +'make spellcheck'). + +NOTE: A NUT dictionary is also available (docs/nut.dict), providing a glossary +of terms related to power devices and management. + +Source code +----------- + +Use of standards +~~~~~~~~~~~~~~~~ + +NUT promotes and uses many standards, such as: + +- the variable names standard used in NUT, +- the coding rules and best practices for developers, +- the use of a software architecture limiting developments to the very minimum, +- the use of standard Free and OpenSource Software components, like: + * the USB library, + * the Net SNMP project, + * the Neon library, + * the OpenSSL library (to be replaced by NSS, which is more license compliant + with NUT and can be FIPS 140 certified), + * the TCP Wrappers library. + +QA tools and metrics +~~~~~~~~~~~~~~~~~~~~ + +NUT's quality is constently monitored using many tools, like: + +- a Revision Control System (link:https://github.com/networkupstools/nut[Git]) to +track development and ease regression fixes. + +//////////////////////////////////////////////////////////////////////////////// +Any modification on the NUT source +trees are reported on the link:http://lists.alioth.debian.org/mailman/listinfo/nut-commits[NUT Commits] +mailing list. +//////////////////////////////////////////////////////////////////////////////// + +- link:http://buildbot.networkupstools.org/public/nut/[Buildbot] to automate the compile/test +cycle. Any build failure is caught early, and fixed quickly. + +//////////////////////////////////////////////////////////////////////////////// + reported through the +link:http://lists.alioth.debian.org/mailman/listinfo/nut-commits[NUT Commits] +mailing list, and fixed quickly. +//////////////////////////////////////////////////////////////////////////////// + +- a project portal with trackers for bugs, feature request, patchs +and tasks + +NUT QA also relies on external tools, like: + +//////////////////////////////////////////////////////////////////////////////// +FIXME (POST): +- integrate static code analysis + - consider splint, Frama-C, BLAST and Clang, and choose one. + - integrate link:http://scan.coverity.com[Coverity Scan] program. + Note: request made by Arnaud to scan-admin@coverity.com on Sep 24 2009 +- point other distro BTS (use Launchpad as an aggregator?!) + +//////////////////////////////////////////////////////////////////////////////// + +- Clang +- the Debian QA tools, available through the link:http://packages.qa.debian.org/n/nut.html[NUT Package Tracking System]: + + * Lintian general QA checks, + * link:http://piuparts.debian.org/sid/source/n/nut.html[piuparts] automates + the installation, upgrade and removal testing processes. + +- a runtime testing suite, which automates the inter-layer communication testing +(driver - upsd - upsmon / clients), that is part of Ubuntu. +link:http://bazaar.launchpad.net/~ubuntu-bugcontrol/qa-regression-testing/master/view/head:/scripts/test-nut.py[The NUT testing script] +is available in the link:https://code.edge.launchpad.net/qa-regression-testing[Ubuntu QA Regression Testing suite]. +It installs NUT, configures it with the dummy-ups driver, changes a few data and +checks that these are well propagated with upsc. + + +Runtime quality +~~~~~~~~~~~~~~~ + +- NUT provides many link:user-manual.html#NUT_Security[security features] to +ensure a maximum runtime security level. + +- Packages use several link:http://wiki.debian.org/Hardening[Hardening methods] +to protect NUT binaries. + +//////////////////////////////////////////////////////////////////////////////// +FIXME (POST): + +- write a code conformance checker (nut-lint) +- write a § on driver maintenance status +- consider using [http://forge.novell.com/modules/xfmod/project/?opensuse OpenSUSE Build Service tools] +- provide software metrics and evolution over the time + + * [http://www.flossmetrics.org/ FlossMetrics] + * [http://en.wikipedia.org/wiki/Software_metric Wikipedia] + * [http://cccc.sourceforge.net/ CCCC - C and C++ Code Counter] + * [http://open.ncsu.edu/se/tutorials/metrics/ Metrics with Eclipse] + +- Code documentation, for the core architecture (client and drivers are already +documented) + + * [http://doxygen.org/ Doxygen] + * [http://naturaldocs.org/ NaturalDocs] + +//////////////////////////////////////////////////////////////////////////////// diff --git a/docs/nutdrv_qx-subdrivers.txt b/docs/nutdrv_qx-subdrivers.txt index 18e21a1..56d19f3 100644 --- a/docs/nutdrv_qx-subdrivers.txt +++ b/docs/nutdrv_qx-subdrivers.txt @@ -1,6 +1,7 @@ How to make a new subdriver to support another Q* UPS ----------------------------------------------------- + Overall concept ~~~~~~~~~~~~~~~ @@ -187,19 +188,19 @@ Otherwise: Driver's own flags. + -- -[cols="l,",options="autowidth"] +[cols="m,",options="autowidth",frame="topbot",grid="rows"] |==== -|QX_FLAG_STATIC |Retrieve this variable only once. -|QX_FLAG_SEMI_STATIC |Retrieve this info smartly, i.e. only when a command/setvar is executed and we expect that data could have been changed. -|QX_FLAG_ABSENT |Data is absent in the device, use default value. -|QX_FLAG_QUICK_POLL |Mandatory vars. -|QX_FLAG_CMD |Instant command. -|QX_FLAG_SETVAR |The var is settable and the actual item stores info on how to set it. -|QX_FLAG_TRIM |This var's value need to be trimmed of leading/trailing spaces/hashes. -|QX_FLAG_ENUM |Enum values exist. -|QX_FLAG_RANGE |Ranges for this var are available. -|QX_FLAG_NONUT |This var doesn't have a corresponding var in NUT. -|QX_FLAG_SKIP |Skip this var: this item won't be processed. +|QX_FLAG_STATIC |Retrieve this variable only once. +|QX_FLAG_SEMI_STATIC |Retrieve this info smartly, i.e. only when a command/setvar is executed and we expect that data could have been changed. +|QX_FLAG_ABSENT |Data is absent in the device, use default value. +|QX_FLAG_QUICK_POLL |Mandatory vars. +|QX_FLAG_CMD |Instant command. +|QX_FLAG_SETVAR |The var is settable and the actual item stores info on how to set it. +|QX_FLAG_TRIM |This var's value need to be trimmed of leading/trailing spaces/hashes. +|QX_FLAG_ENUM |Enum values exist. +|QX_FLAG_RANGE |Ranges for this var are available. +|QX_FLAG_NONUT |This var doesn't have a corresponding var in NUT. +|QX_FLAG_SKIP |Skip this var: this item won't be processed. |==== [NOTE] @@ -254,25 +255,48 @@ Here's the +item_t+: { "output.voltage", 0, NULL, "QGS\r", "", 76, '(', "", 12, 16, "%.1f", 0, NULL }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+output.voltage+ -|info_flags |+0+ -|info_rw |+NULL+ -|command |+QGS\r+ -|answer |Filled at runtime -|answer_len |+76+ -|leading |+(+ -|value |Filled at runtime -|from |+12+ -> the index at which the info (i.e. +value+) starts -|to |+16+ -> the index at which the info (i.e. +value+) ends -|dfl |+%.1f+ +[horizontal] ++info_type+:: ++output.voltage+ ++info_flags+:: ++0+ + ++info_rw+:: ++NULL+ + ++command+:: ++QGS\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++76+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++12+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++16+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: ++%.1f+ ++ We are expecting a number, so at first the core driver will check if it's made up entirely of digits/points/spaces, then it'll convert it into a double. Because of that we need to provide a floating point specifier. -|qxflags |+0+ -|preprocess |+NULL+ -|==== + ++qxflags+:: ++0+ + ++preprocess+:: ++NULL+ Mandatory vars @@ -293,27 +317,50 @@ Here's the +item_t+: { "ups.status", 0, NULL, "QGS\r", "", 76, '(', "", 71, 71, "%s", QX_FLAG_QUICK_POLL, voltronic_status }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+ups.status+ -|info_flags |+0+ -|info_rw |+NULL+ -|command |+QGS\r+ -|answer |Filled at runtime -|answer_len |+76+ -|leading |+(+ -|value |Filled at runtime -|from |+71+ -> the index at which the info (i.e. +value+) starts -|to |+71+ -> the index at which the info (i.e. +value+) ends -|dfl |+%s+ +[horizontal] ++info_type+:: ++ups.status+ ++info_flags+:: ++0+ + ++info_rw+:: ++NULL+ + ++command+:: ++QGS\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++76+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++71+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++71+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: ++%s+ ++ Since a +preprocess+ function is defined for this item, this could have been +NULL+, however, if we want - like here -, we can use it in our +preprocess+ function. -|qxflags |+QX_FLAG_QUICK_POLL+ -> this item will be polled every time the driver will check for updates. -Since this item is mandatory to run the driver, if a problem arises in +QX_WALKMODE_INIT+ the driver won't skip it an it'll set +datastale+. -|preprocess |+voltronic_status+ ++qxflags+:: ++QX_FLAG_QUICK_POLL+ -> this item will be polled every time the driver will check for updates. +Since this item is mandatory to run the driver, if a problem arises in +QX_WALKMODE_INIT+ the driver won't skip it an it'll set +datastale+. + ++preprocess+:: ++voltronic_status+ ++ This function will be called *after* the +command+ has been sent to the UPS and we got back the +answer+ and stored the +value+ in order to process it to NUT standards: in this case we will convert the binary +value+ to a NUT status. -|==== Settable vars @@ -334,30 +381,53 @@ Here's the +item_t+: { "battery.type", ST_FLAG_RW, voltronic_e_batt_type, "QBT\r", "", 4, '(', "", 1, 2, "%s", QX_FLAG_SEMI_STATIC | QX_FLAG_ENUM, voltronic_p31b }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+battery.type+ -|info_flags |+ST_FLAG_RW+ -> this is a r/w var -|info_rw |+voltronic_e_batt_type+ +[horizontal] ++info_type+:: ++battery.type+ ++info_flags+:: ++ST_FLAG_RW+ -> this is a r/w var + ++info_rw+:: ++voltronic_e_batt_type+ ++ The values stored here will be added to the NUT variable, setting its boundaries: in this case +Li+, +Flooded+ and +AGM+ will be added as enumerated values. -|command |+QBT\r+ -|answer |Filled at runtime -|answer_len |+4+ -|leading |+(+ -|value |Filled at runtime -|from |+1+ -> the index at which the info (i.e. +value+) starts -|to |+2+ -> the index at which the info (i.e. +value+) ends -|dfl |+%s+ ++command+:: ++QBT\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++4+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++1+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++2+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: ++%s+ ++ Since a +preprocess+ function is defined for this item, this could have been +NULL+, however, if we want - like here -, we can use it in our +preprocess+ function. -|qxflags |+QX_FLAG_SEMI_STATIC+ -> this item changes - and will therefore updated - only when we send a command/setvar to the UPS ++qxflags+:: ++QX_FLAG_SEMI_STATIC+ -> this item changes - and will therefore updated - only when we send a command/setvar to the UPS ++ +QX_FLAG_ENUM+ -> this r/w variable is of the enumerated type and the enumerated values are listed in the +info_rw+ structure (i.e. +voltronic_e_batt_type+) -|preprocess |+voltronic_p31b+ ++preprocess+:: ++voltronic_p31b+ ++ This function will be called *after* the +command+ has been sent to the UPS and we got back the +answer+ and stored the +value+ in order to process it to NUT standards: in this case we will check if the value is in the range and then publish the human readable form of it (i.e. +Li+, +Flooded+ or +AGM+). -|==== We also know that we can change battery type with the +PBTnn\r+ command; we are expecting either +(ACK\r+ if the command succeded or +(NAK\r+ if the command is rejected. @@ -374,28 +444,51 @@ Here's the +item_t+: { "battery.type", 0, voltronic_e_batt_type, "PBT%02.0f\r", "", 5, '(', "", 1, 4, NULL, QX_FLAG_SETVAR | QX_FLAG_ENUM, voltronic_p31b_set }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+battery.type+ -|info_flags |+0+ -|info_rw |+voltronic_e_batt_type+ +[horizontal] ++info_type+:: ++battery.type+ ++info_flags+:: ++0+ + ++info_rw+:: ++voltronic_e_batt_type+ ++ The value provided by the user will be automagically checked by the core nutdrv_qx driver against the enumerated values already set by the non setvar item (i.e. +Li+, +Flooded+ or +AGM+), so this could have been +NULL+, however if we want - like here - we can use it in our +preprocess+ function. -|command |+PBT%02.0f\r+ -|answer |Filled at runtime -|answer_len |+5+ <- either +(NAK\r+ or +(ACK\r+ -|leading |+(+ -|value |Filled at runtime -|from |+1+ -> the index at which the info (i.e. +value+) starts -|to |+3+ -> the index at which the info (i.e. +value+) ends -|dfl |Not used for +QX_FLAG_SETVAR+ -|qxflags |+QX_FLAG_SETVAR+ -> this item is used to set the variable +info_type+ (i.e. +battery.type+) ++command+:: ++PBT%02.0f\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++5+ <- either +(NAK\r+ or +(ACK\r+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++1+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++3+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: +Not used for +QX_FLAG_SETVAR+ + ++qxflags+:: ++QX_FLAG_SETVAR+ -> this item is used to set the variable +info_type+ (i.e. +battery.type+) ++ +QX_FLAG_ENUM+ -> this r/w variable is of the enumerated type and the enumerated values are listed in the +info_rw+ structure (i.e. +voltronic_e_batt_type+) -|preprocess |+voltronic_p31b_set+ ++preprocess+:: ++voltronic_p31b_set+ ++ This function will be called *before* the +command+ is sent to the UPS so that we can fill +command+ with the value provided by the user: in this case the function will simply translate the human readable form of battery type (i.e. +Li+, +Flooded+ or +AGM+) to the UPS compliant type (i.e. +00+, +01+ and +02+) and then fill +value+ (the second argument passed to the +preprocess+ function). -|==== Instant commands @@ -416,24 +509,47 @@ Here's the +item_t+: { "test.battery.start", 0, NULL, "T%s\r", "", 5, '(', "", 1, 4, NULL, QX_FLAG_CMD, voltronic_process_command }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+test.battery.start+ -|info_flags |+0+ -|info_rw |+NULL+ -|command |+T%s\r+ -|answer |Filled at runtime -|answer_len |+5+ <- either +(NAK\r+ or +(ACK\r+ -|leading |+(+ -|value |Filled at runtime -|from |+1+ -> the index at which the info (i.e. +value+) starts -|to |+3+ -> the index at which the info (i.e. +value+) ends -|dfl |Not used for +QX_TYPECMD+ -|qxflags |+QX_FLAG_CMD+ -> this item is an instant command that will be fired when +info_type+ (i.e. +test.battery.start+) is called -|preprocess |+voltronic_process_command+ +[horizontal] ++info_type+:: ++test.battery.start+ ++info_flags+:: ++0+ + ++info_rw+:: ++NULL+ + ++command+:: ++T%s\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++5+ <- either +(NAK\r+ or +(ACK\r+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++1+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++3+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: +Not used for +QX_FLAG_CMD+ + ++qxflags+:: ++QX_FLAG_CMD+ -> this item is an instant command that will be fired when +info_type+ (i.e. +test.battery.start+) is called + ++preprocess+:: ++voltronic_process_command+ ++ This function will be called *before* the +command+ is sent to the UPS so that we can fill +command+ with the value provided by the user: in this case the function will check if the value is in the accepted range and then fill +value+ (the second argument passed to the +preprocess+ function) with +command+ and the given value. -|==== Informations absent in the device @@ -445,31 +561,54 @@ In order to set the server-side var +ups.delay.start+, that will be then used by { "ups.delay.start", ST_FLAG_RW, voltronic_r_ondelay, NULL, "", 0, 0, "", 0, 0, "180", QX_FLAG_ABSENT | QX_FLAG_SETVAR | QX_FLAG_RANGE, voltronic_process_setvar }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+ups.delay.start+ -|info_flags |+ST_FLAG_RW+ -> this is a r/w var -|info_rw |+voltronic_r_ondelay+ +[horizontal] ++info_type+:: ++ups.delay.start+ ++info_flags+:: ++ST_FLAG_RW+ -> this is a r/w var + ++info_rw+:: ++voltronic_r_ondelay+ ++ The values stored here will be added to the NUT variable, setting its boundaries: in this case +0+ and +599940+ will be set as the minimum and maximum value of the variable's range. Those values will then be used by the driver to check the user provided value. -|command |Not used for +QX_FLAG_ABSENT+ -|answer |Not used for +QX_FLAG_ABSENT+ -|answer_len |Not used for +QX_FLAG_ABSENT+ -|leading |Not used for +QX_FLAG_ABSENT+ -|value |Not used for +QX_FLAG_ABSENT+ -|from |Not used for +QX_FLAG_ABSENT+ -|to |Not used for +QX_FLAG_ABSENT+ -|dfl |+180+ <- the default value that will be set for this variable -|qxflags |+QX_FLAG_ABSENT+ -> this item isn't available in the device ++command+:: +Not used for +QX_FLAG_ABSENT+ + ++answer+:: +Not used for +QX_FLAG_ABSENT+ + ++answer_len+:: +Not used for +QX_FLAG_ABSENT+ + ++leading+:: +Not used for +QX_FLAG_ABSENT+ + ++value+:: +Not used for +QX_FLAG_ABSENT+ + ++from+:: +Not used for +QX_FLAG_ABSENT+ + ++to+:: +Not used for +QX_FLAG_ABSENT+ + ++dfl+:: ++180+ <- the default value that will be set for this variable + ++qxflags+:: ++QX_FLAG_ABSENT+ -> this item isn't available in the device ++ +QX_FLAG_SETVAR+ -> this item is used to set the variable +info_type+ (i.e. +ups.delay.start+) - ++ +QX_FLAG_RANGE+ -> this r/w variable has a settable range and its boundaries are listed in the +info_rw+ structure (i.e. +voltronic_r_ondelay+) -|preprocess |+voltronic_process_setvar+ -This function will be called, in setvar, before the driver stores the value in the NUT var: here is used to truncate the user-provided value to the neareset settable interval. -|==== ++preprocess+:: ++voltronic_process_setvar+ ++ +This function will be called, in setvar, before the driver stores the value in the NUT var: here it's used to truncate the user-provided value to the neareset settable interval. Informations not yet available in NUT @@ -492,31 +631,54 @@ Here's the +item_t+ for input phase angle: { "input_phase_angle", 0, NULL, "QPD\r", "", 9, '(', "", 1, 3, "%03.0f", QX_FLAG_STATIC | QX_FLAG_NONUT, voltronic_phase }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+input_phase_angle+ - +[horizontal] ++info_type+:: ++input_phase_angle+ ++ This information will be used to print the value we got back from the UPS in the logs. -|info_flags |+0+ -|info_rw |+NULL+ -|command |+QPD\r+ -|answer |Filled at runtime -|answer_len |+9+ -|leading |+(+ -|value |Filled at runtime -|from |+1+ -> the index at which the info (i.e. +value+) starts -|to |+3+ -> the index at which the info (i.e. +value+) ends -|dfl |+%03.0f+ ++info_flags+:: ++0+ + ++info_rw+:: ++NULL+ + ++command+:: ++QPD\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++9+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++1+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++3+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: ++%03.0f+ ++ If there's no +preprocess+ function, the format is used to print the value to the logs. -Here instead is used by the +preprocess+ function. -|qxflags |+QX_FLAG_STATIC+ -> this item doesn't change +Here instead it's used by the +preprocess+ function. ++qxflags+:: ++QX_FLAG_STATIC+ -> this item doesn't change ++ +QX_FLAG_NONUT+ -> this item doesn't have yet a NUT variable -|preprocess |+voltronic_phase+ ++preprocess+:: ++voltronic_phase+ ++ This function will be called *after* the +command+ has been sent to the UPS so that we can parse the value we got back and check it. -|==== Here's the +item_t+ for output phase angle: @@ -524,39 +686,62 @@ Here's the +item_t+ for output phase angle: { "output_phase_angle", ST_FLAG_RW, voltronic_e_phase, "QPD\r", "", 9, '(', "", 5, 7, "%03.0f", QX_FLAG_SEMI_STATIC | QX_FLAG_ENUM | QX_FLAG_NONUT, voltronic_phase }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+output_phase_angle+ - +[horizontal] ++info_type+:: ++output_phase_angle+ ++ This information will be used to print the value we got back from the UPS in the logs. -|info_flags |+ST_FLAG_RW+ ++info_flags+:: ++ST_FLAG_RW+ ++ This could also be +0+ (it's not really used by the driver), but it's set to +ST_FLAG_RW+ for cohesion with other rw vars - also, if ever a NUT variable would become available for this item, it'll be easier to change this item and its +QX_FLAG_SETVAR+ counterpart to use it. -|info_rw |+voltronic_e_phase+ ++info_rw+:: ++voltronic_e_phase+ ++ Enumerated list of available value (here: +000+, +120+, +240+ and +360+). Since +QX_FLAG_NONUT+ is set the driver will print those values to the logs, plus you could use it in the +preprocess+ function to check the value we got back from the UPS (as done here). -|command |+QPD\r+ -|answer |Filled at runtime -|answer_len |+9+ -|leading |+(+ -|value |Filled at runtime -|from |+5+ -> the index at which the info (i.e. +value+) starts -|to |+7+ -> the index at which the info (i.e. +value+) ends -|dfl |+%03.0f+ ++command+:: ++QPD\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++9+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+ :: ++5+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++7+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: ++%03.0f+ ++ If there's no +preprocess+ function, the format is used to print the value to the logs. -Here instead is used by the +preprocess+ function. -|qxflags |+QX_FLAG_SEMI_STATIC+ -> this item changes - and will therefore updated - only when we send a command/setvar to the UPS +Here instead it's used by the +preprocess+ function. ++qxflags+:: ++QX_FLAG_SEMI_STATIC+ -> this item changes - and will therefore updated - only when we send a command/setvar to the UPS ++ +QX_FLAG_ENUM+ -> this r/w variable is of the enumerated type and the enumerated values are listed in the +info_rw+ structure (i.e. +voltronic_e_phase+). - ++ +QX_FLAG_NONUT+ -> this item doesn't have yet a NUT variable -|preprocess |+voltronic_phase+ ++preprocess+:: ++voltronic_phase+ ++ This function will be called *after* the +command+ has been sent to the UPS so that we can parse the value we got back and check it. -Here is used also to store a var that will then be used to check the value in setvar's preprocess function. -|==== +Here it's used also to store a var that will then be used to check the value in setvar's preprocess function. If you need also to change some values in the UPS you can add a +ups.conf+ var/flag in the subdriver's own +makevartable+ and then process it adding to its +qxflags+ both +QX_FLAG_NONUT+ and +QX_FLAG_SETVAR+: this item will be processed only once in +QX_WALKMODE_INIT+. @@ -577,34 +762,57 @@ Here's the +item_t+ { "output_phase_angle", 0, voltronic_e_phase, "PPD%03.0f\r", "", 5, '(', "", 1, 4, NULL, QX_FLAG_SETVAR | QX_FLAG_ENUM | QX_FLAG_NONUT, voltronic_phase_set }, ---- -[cols="l,",options="autowidth"] -|==== -|info_type |+output_phase_angle+ - +[horizontal] ++info_type+:: ++output_phase_angle+ ++ This information will be used to print the value we got back from the UPS in the logs and to retrieve the user-provided value in +ups.conf+. So, name it after the variable you created to use in +ups.conf+ in the subdriver's own +makevartable+. -|info_flags |+0+ -|info_rw |+voltronic_e_phase+ ++info_flags+:: ++0+ + ++info_rw+:: ++voltronic_e_phase+ ++ Enumerated list of available values (here: +000+, +120+, +240+ and +360+). The value provided by the user will be automagically checked by the core nutdrv_qx driver against the enumerated values stored here. -|command |+PPD%03.0f\r+ -|answer |Filled at runtime -|answer_len |+5+ <- either +(NAK\r+ or +(ACK\r+ -|leading |+(+ -|value |Filled at runtime -|from |+1+ -> the index at which the info (i.e. +value+) starts -|to |+3+ -> the index at which the info (i.e. +value+) ends -|dfl |Not used for +QX_FLAG_SETVAR+ -|qxflags |+QX_FLAG_SETVAR+ -> this item is used to set the variable +info_type+ (i.e. +output_phase_angle+) ++command+:: ++PPD%03.0f\r+ + ++answer+:: +Filled at runtime + ++answer_len+:: ++5+ <- either +(NAK\r+ or +(ACK\r+ + ++leading+:: ++(+ + ++value+:: +Filled at runtime + ++from+:: ++1+ -> the index at which the info (i.e. +value+) starts + ++to+:: ++3+ -> the index at which the info (i.e. +value+) ends + ++dfl+:: +Not used for +QX_FLAG_SETVAR+ + ++qxflags+:: ++QX_FLAG_SETVAR+ -> this item is used to set the variable +info_type+ (i.e. +output_phase_angle+) ++ +QX_FLAG_ENUM+ -> this r/w variable is of the enumerated type and the enumerated values are listed in the +info_rw+ structure (i.e. +voltronic_e_phase+). - ++ +QX_FLAG_NONUT+ -> this item doesn't have yet a NUT variable -|preprocess |+voltronic_phase_set+ ++preprocess+:: ++voltronic_phase_set+ ++ This function will be called *before* the +command+ is sent to the UPS so that we can check user-provided value and fill +command+ with it and then fill +value+ (the second argument passed to the +preprocess+ function). -|==== Support functions @@ -656,6 +864,8 @@ For more informations, have a look at the currently available subdrivers: - +nutdrv_qx_megatec.+{+c+,+h+} - +nutdrv_qx_megatec-old.+{+c+,+h+} - +nutdrv_qx_mustek.+{+c+,+h+} +- +nutdrv_qx_q1.+{+c+,+h+} - +nutdrv_qx_voltronic.+{+c+,+h+} +- +nutdrv_qx_voltronic-qs.+{+c+,+h+} - +nutdrv_qx_zinto.+{+c+,+h+} diff --git a/docs/packager-guide.txt b/docs/packager-guide.txt index e11a6f6..c6ea86b 100644 --- a/docs/packager-guide.txt +++ b/docs/packager-guide.txt @@ -35,7 +35,7 @@ support and maintenance accross the supported OSes. ------------------------------------------------------------------------ *sandbox* This document assumes that you have read the other NUT document such -as INSTALL, FAQ, shutdown.txt, ... +as INSTALL.nut, FAQ, shutdown.txt, ... Facts about NUT packaging ========================= @@ -54,7 +54,7 @@ Let's now have an overview on how NUT is currently packaged: 1) Debian: http://packages.qa.debian.org/n/nut.html - nut, nut-dev, nut-usb, nut-snmp, nut-xml, nut-cgi, nut-doc [, nut-hal-drivers] + nut, nut-dev, nut-usb, nut-snmp, nut-xml, nut-cgi, nut-doc 2) Mandriva http://cvs.mandriva.com/cgi-bin/cvsweb.cgi/SPECS/nut/ @@ -169,7 +169,6 @@ FIXME: make a dependency graph - <> - <> - <> -- <> - <> - <> - <> @@ -238,13 +237,6 @@ nut-cgi - Size: - Deps: -[[pkg-nut-hal-drivers]] -nut-hal-drivers -^^^^^^^^^^^^^^^ -- Desc: -- Files: -- Size: -- Deps: [[pkg-nut-powerman-pdu]] nut-powerman-pdu diff --git a/docs/stable-hcl.txt b/docs/stable-hcl.txt deleted file mode 100644 index 13b0c36..0000000 --- a/docs/stable-hcl.txt +++ /dev/null @@ -1,188 +0,0 @@ -ifdef::website[] -Hardware compatibility list -=========================== -endif::website[] - -[NOTE] -================================================================================ - -Before you buy, take a look at the link:acknowledgements.html[Acknowledgements] -for information about which drivers are developed with the support of the manufacturer. - -Be sure to also read the <>. - -================================================================================ - -ifdef::website[] -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -
- Support level legend -
-
1
protocol based on reverse engineering
-
2
based on fragments of publicly available protocol
-
3
based on publicly available protocol
-
4
vendor provided protocol
-
5
vendor provided protocol and hardware
-
-
-
- Filters - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
- -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -include::ups-html.txt[] - -endif::website[] - -[[footnotes]] -[NOTE] -================================================================================ - - -*If your device isn't listed* - -First, if there are other models by the same manufacturer, try their drivers. -You may find that it "just works" or mostly works. - -In either case, send in a report so this list and the driver can be improved. - -Next, if you don't find any match, there are a few drivers that have a good -chance of working on random hardware. These are indicated in the -link:stable-hcl.html?manufacturer=Various[Various] entries above. - -After doing that, if those aren't working, you might try running other ones -from the set to see if anything works. Sometimes you get lucky. Finally, if -absolutely nothing works and your cabling is OK, try contacting the list and -we will see what we can do for you. - -In general, if a driver does not exist, that's due to the lack of overlap -between the set of developers and the set of owners of that hardware. - -The way to fix it is to turn a developer into an owner, or an owner into a -developer. - - -*Report new devices, omissions or errors* - -There are a lot of power devices hardware for sale, and it's possible -that we have missed listing some that are supported, or made an error. - -So that this list can be as accurate as possible, please report any -omissions to the -link:http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev[NUT Developers] mailing list -or the NUT link:https://github.com/networkupstools/nut/issues/new[issue tracker on GitHub], -including the following information: - -- mail subject: [HCL] supported by -- or tag the issue "HCL" and title it: supported by -replacing Manufacturer, Device and driver by your specific values, -- mail or issue body: - - Device manufacturer and name, - - upsc output (upsrw and upscmd outputs are also welcome), - - link:docs/user-manual.chunked/ar01s06.html#Shutdown_design[shutdown sequence] -testing results: a statement that you have actually tested it successfully is -enough for now, - - a link to the manufacturer's online description of the device is also appreciated. - - -*Linking to the HCL* - -You can create a direct link to the HCL, specifying some filters within the URL -(JavaScript must be enabled in the browser for this to work). This allows you -to select devices that matches some specific criteria, like a connection type -or a manufacturer. All filters available on the page itself are also available -for use in the URL. - -The form of the URL is the following: - - http://www.networkupstools.org/stable-hcl.html?= - -.Possible values -[options="header,autowidth",style="asciidoc",cols="<,<"] -|=================================================================== -| | -|support-level |a number from '1' to '5' -|device-type |- 'ups' for uninterruptible power supply - - 'pdu' for power distribution unit - - 'psu' for power supply unit - - 'scd' for solar controller device -|manufacturer |a manufacturer name from the selection list -|model |a model name from the selection list -|connection |- 'USB' - - 'Serial' - - 'Network' -|=================================================================== - -You can combine multiple filters, using ampersand (*&*). - -For example, if you only want to select USB units from Eaton, use: - - http://www.networkupstools.org/stable-hcl.html?manufacturer=Eaton&connection=USB - - - -================================================================================ - -//////////////////////////////////////////////////////////////////////////////// -FIXME: -- point and complete the "user manual -> support" section for success report -link:user-manual.html#Support_Request[Support instructions] in the user manual. -//////////////////////////////////////////////////////////////////////////////// diff --git a/docs/user-manual.txt b/docs/user-manual.txt index 4728454..d25083d 100644 --- a/docs/user-manual.txt +++ b/docs/user-manual.txt @@ -81,7 +81,7 @@ include::download.txt[] [[_installation_instructions]] -include::../INSTALL[] +include::../INSTALL.nut[] [[Configuration_notes]] @@ -139,13 +139,7 @@ include::nut-names.txt[] Appendix D: Hardware Compatibility List ======================================= -ifdef::website[] -include::stable-hcl.txt[] -endif::website[] - -ifndef::website[] Refer to the link:http://www.networkupstools.org/stable-hcl.html[online HCL]. -endif::website[] Appendix E: Documentation diff --git a/docs/website/Makefile.am b/docs/website/Makefile.am deleted file mode 100644 index 703f247..0000000 --- a/docs/website/Makefile.am +++ /dev/null @@ -1,130 +0,0 @@ -# FIXME: do we really have to distribute these many Kb too? -# RCS should be enough, and website generation should use -# source from subversion tags! -EXTRA_DIST = news.txt old-news.txt projects.txt website.txt \ - ups-protocols.txt $(LAYOUT).conf $(SCRIPT_FILES) $(LAYOUT_FILES) \ - $(FAVICON_FILES) - -IMAGE_FILES = images/asciidoc.png \ - images/hostedby.png \ - images/blue-arrow.png \ - images/simple.png \ - images/advanced.png \ - images/bigbox.png \ - images/bizarre.png \ - images/note.png \ - images/nut-logo.png \ - images/warning.png - -FAVICON_FILES = faviconut.ico faviconut.png - -LAYOUT_FILES = css/ie-overrides.css \ - css/web-layout.css \ - css/xhtml11-quirks.css \ - css/xhtml11.css - -SCRIPT_FILES = scripts/filter_png.js \ - scripts/jquery.js \ - scripts/nut_jquery.js \ - scripts/toc.js - -WEBSITE_FILES = index.html projects.html stable-hcl.html \ - documentation.html acknowledgements.html features.html \ - ups-protocols.html cables.html nut-qa.html download.html \ - support.html old-news.html - -WEBSITE_DEPS = ../user-manual.chunked ../packager-guide.chunked \ - ../FAQ.html ../developer-guide.chunked \ - ../user-manual.pdf \ - ../developer-guide.pdf \ - ../packager-guide.pdf \ - ../FAQ.pdf ../man/man-index.html - -# CSS based simulated frames layout. -LAYOUT = web-layout - -# Add --unsafe to allow includes on older versions of asciidoc ( < 8.5.3 ): -ASCIIDOC_PARAMS = --unsafe --backend=xhtml11 \ - --conf-file=$(srcdir)/$(LAYOUT).conf \ - --attribute icons \ - --attribute iconsdir=$(srcdir)/images \ - --attribute scriptsdir=$(srcdir)/scripts \ - --attribute=badges \ - --attribute=website \ - --attribute=quirks \ - --attribute=revision=$(PACKAGE_VERSION) \ - --attribute tree_version=@TREE_VERSION@ \ - --attribute localdate=`TZ=UTC date +%Y-%m-%d` \ - --attribute localtime=`TZ=UTC date +%H:%M:%S` \ - --attribute=date="`TZ=UTC date`" - -all: - -OUTDIR = output -$(WEBSITE_FILES): $(LAYOUT).conf - -images/: - $(MKDIR_P) images - -$(IMAGE_FILES): images/ - cp -f ../$@ images/ - -# Keep using 'HAVE_ASCIIDOC', instead of 'WITH_ASCIIDOC' since we have -# an explicit target -if HAVE_ASCIIDOC -website: $(WEBSITE_FILES) $(WEBSITE_DEPS) $(IMAGE_FILES) $(SCRIPT_FILES) \ - $(LAYOUT_FILES) scripts/ups_data.js ../stable-hcl.txt ../ups-html.txt \ - $(OUTDIR) $(FAVICON_FILES) - -else !HAVE_ASCIIDOC -website: - @echo "Not building website since 'asciidoc' was not found." -endif !HAVE_ASCIIDOC - -.PHONY: website $(OUTDIR) - -$(OUTDIR): - $(RM) -r $(OUTDIR) - $(MKDIR_P) $(OUTDIR)/docs/man - cp -fR $(WEBSITE_FILES) css images scripts $(OUTDIR) - cp -fR $(WEBSITE_DEPS) $(OUTDIR)/docs/ - cp -f ../man/man-index.html $(OUTDIR)/docs/man/ - cp -f ../man/*.html $(OUTDIR)/docs/man/ - -clean-local: - rm -rf $(WEBSITE_FILES) $(OUTDIR) images/ - -SUFFIXES = .txt .html - -index.html: website.txt news.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a index-only $< - -acknowledgements.html: ../acknowledgements.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -features.html: ../features.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -cables.html: ../cables.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -download.html: ../download.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -documentation.html: ../documentation.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -projects.html: projects.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -support.html: ../support.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -nut-qa.html: ../nut-qa.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -stable-hcl.html: ../stable-hcl.txt ../ups-html.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a hcl $< - -.txt.html: - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< diff --git a/docs/website/Makefile.in b/docs/website/Makefile.in deleted file mode 100644 index 97ca5e4..0000000 --- a/docs/website/Makefile.in +++ /dev/null @@ -1,600 +0,0 @@ -# Makefile.in generated by automake 1.11.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -am__make_dryrun = \ - { \ - am__dry=no; \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ - | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ - *) \ - for am__flg in $$MAKEFLAGS; do \ - case $$am__flg in \ - *=*|--*) ;; \ - *n*) am__dry=yes; break;; \ - esac; \ - done;; \ - esac; \ - test $$am__dry = yes; \ - } -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = docs/website -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/nut_arg_with.m4 \ - $(top_srcdir)/m4/nut_check_asciidoc.m4 \ - $(top_srcdir)/m4/nut_check_libavahi.m4 \ - $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ - $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ - $(top_srcdir)/m4/nut_check_libltdl.m4 \ - $(top_srcdir)/m4/nut_check_libneon.m4 \ - $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ - $(top_srcdir)/m4/nut_check_libnss.m4 \ - $(top_srcdir)/m4/nut_check_libopenssl.m4 \ - $(top_srcdir)/m4/nut_check_libpowerman.m4 \ - $(top_srcdir)/m4/nut_check_libusb.m4 \ - $(top_srcdir)/m4/nut_check_libwrap.m4 \ - $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ - $(top_srcdir)/m4/nut_report_feature.m4 \ - $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/include/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -A2X = @A2X@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -ASCIIDOC = @ASCIIDOC@ -ASPELL = @ASPELL@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BINDIR = @BINDIR@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFPATH = @CONFPATH@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DBLATEX = @DBLATEX@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_BUILD_LIST = @DOC_BUILD_LIST@ -DRIVER_BUILD_LIST = @DRIVER_BUILD_LIST@ -DRIVER_INSTALL_TARGET = @DRIVER_INSTALL_TARGET@ -DRIVER_MAN_LIST = @DRIVER_MAN_LIST@ -DRVPATH = @DRVPATH@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ -LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ -LIBGD_CFLAGS = @LIBGD_CFLAGS@ -LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ -LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ -LIBIPMI_LIBS = @LIBIPMI_LIBS@ -LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ -LIBLTDL_LIBS = @LIBLTDL_LIBS@ -LIBNEON_CFLAGS = @LIBNEON_CFLAGS@ -LIBNEON_LIBS = @LIBNEON_LIBS@ -LIBNETSNMP_CFLAGS = @LIBNETSNMP_CFLAGS@ -LIBNETSNMP_LIBS = @LIBNETSNMP_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBPOWERMAN_CFLAGS = @LIBPOWERMAN_CFLAGS@ -LIBPOWERMAN_LIBS = @LIBPOWERMAN_LIBS@ -LIBS = @LIBS@ -LIBSSL_CFLAGS = @LIBSSL_CFLAGS@ -LIBSSL_LIBS = @LIBSSL_LIBS@ -LIBTOOL = @LIBTOOL@ -LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ -LIBUSB_LIBS = @LIBUSB_LIBS@ -LIBWRAP_CFLAGS = @LIBWRAP_CFLAGS@ -LIBWRAP_LIBS = @LIBWRAP_LIBS@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NETLIBS = @NETLIBS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -NUT_NETVERSION = @NUT_NETVERSION@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OS_NAME = @OS_NAME@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PIDPATH = @PIDPATH@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -PORT = @PORT@ -RANLIB = @RANLIB@ -RUN_AS_GROUP = @RUN_AS_GROUP@ -RUN_AS_USER = @RUN_AS_USER@ -SBINDIR = @SBINDIR@ -SED = @SED@ -SERLIBS = @SERLIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATEPATH = @STATEPATH@ -STRIP = @STRIP@ -SUN_LIBUSB = @SUN_LIBUSB@ -TREE_VERSION = @TREE_VERSION@ -VERSION = @VERSION@ -WORDS_BIGENDIAN = @WORDS_BIGENDIAN@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -cgiexecdir = @cgiexecdir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -driverexecdir = @driverexecdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -hotplugdir = @hotplugdir@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -systemdsystemshutdowndir = @systemdsystemshutdowndir@ -systemdsystemunitdir = @systemdsystemunitdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -udevdir = @udevdir@ - -# FIXME: do we really have to distribute these many Kb too? -# RCS should be enough, and website generation should use -# source from subversion tags! -EXTRA_DIST = news.txt old-news.txt projects.txt website.txt \ - ups-protocols.txt $(LAYOUT).conf $(SCRIPT_FILES) $(LAYOUT_FILES) \ - $(FAVICON_FILES) - -IMAGE_FILES = images/asciidoc.png \ - images/hostedby.png \ - images/blue-arrow.png \ - images/simple.png \ - images/advanced.png \ - images/bigbox.png \ - images/bizarre.png \ - images/note.png \ - images/nut-logo.png \ - images/warning.png - -FAVICON_FILES = faviconut.ico faviconut.png -LAYOUT_FILES = css/ie-overrides.css \ - css/web-layout.css \ - css/xhtml11-quirks.css \ - css/xhtml11.css - -SCRIPT_FILES = scripts/filter_png.js \ - scripts/jquery.js \ - scripts/nut_jquery.js \ - scripts/toc.js - -WEBSITE_FILES = index.html projects.html stable-hcl.html \ - documentation.html acknowledgements.html features.html \ - ups-protocols.html cables.html nut-qa.html download.html \ - support.html old-news.html - -WEBSITE_DEPS = ../user-manual.chunked ../packager-guide.chunked \ - ../FAQ.html ../developer-guide.chunked \ - ../user-manual.pdf \ - ../developer-guide.pdf \ - ../packager-guide.pdf \ - ../FAQ.pdf ../man/man-index.html - - -# CSS based simulated frames layout. -LAYOUT = web-layout - -# Add --unsafe to allow includes on older versions of asciidoc ( < 8.5.3 ): -ASCIIDOC_PARAMS = --unsafe --backend=xhtml11 \ - --conf-file=$(srcdir)/$(LAYOUT).conf \ - --attribute icons \ - --attribute iconsdir=$(srcdir)/images \ - --attribute scriptsdir=$(srcdir)/scripts \ - --attribute=badges \ - --attribute=website \ - --attribute=quirks \ - --attribute=revision=$(PACKAGE_VERSION) \ - --attribute tree_version=@TREE_VERSION@ \ - --attribute localdate=`TZ=UTC date +%Y-%m-%d` \ - --attribute localtime=`TZ=UTC date +%H:%M:%S` \ - --attribute=date="`TZ=UTC date`" - -OUTDIR = output -SUFFIXES = .txt .html -all: all-am - -.SUFFIXES: -.SUFFIXES: .txt .html -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/website/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu docs/website/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-local mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - clean-local distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am - - -all: -$(WEBSITE_FILES): $(LAYOUT).conf - -images/: - $(MKDIR_P) images - -$(IMAGE_FILES): images/ - cp -f ../$@ images/ - -# Keep using 'HAVE_ASCIIDOC', instead of 'WITH_ASCIIDOC' since we have -# an explicit target -@HAVE_ASCIIDOC_TRUE@website: $(WEBSITE_FILES) $(WEBSITE_DEPS) $(IMAGE_FILES) $(SCRIPT_FILES) \ -@HAVE_ASCIIDOC_TRUE@ $(LAYOUT_FILES) scripts/ups_data.js ../stable-hcl.txt ../ups-html.txt \ -@HAVE_ASCIIDOC_TRUE@ $(OUTDIR) $(FAVICON_FILES) - -@HAVE_ASCIIDOC_FALSE@website: -@HAVE_ASCIIDOC_FALSE@ @echo "Not building website since 'asciidoc' was not found." - -.PHONY: website $(OUTDIR) - -$(OUTDIR): - $(RM) -r $(OUTDIR) - $(MKDIR_P) $(OUTDIR)/docs/man - cp -fR $(WEBSITE_FILES) css images scripts $(OUTDIR) - cp -fR $(WEBSITE_DEPS) $(OUTDIR)/docs/ - cp -f ../man/man-index.html $(OUTDIR)/docs/man/ - cp -f ../man/*.html $(OUTDIR)/docs/man/ - -clean-local: - rm -rf $(WEBSITE_FILES) $(OUTDIR) images/ - -index.html: website.txt news.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a index-only $< - -acknowledgements.html: ../acknowledgements.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -features.html: ../features.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -cables.html: ../cables.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -download.html: ../download.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -documentation.html: ../documentation.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -projects.html: projects.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a toc $< - -support.html: ../support.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -nut-qa.html: ../nut-qa.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -stable-hcl.html: ../stable-hcl.txt ../ups-html.txt - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ -a hcl $< - -.txt.html: - $(ASCIIDOC) $(ASCIIDOC_PARAMS) -o $@ $< - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/docs/website/css/ie-overrides.css b/docs/website/css/ie-overrides.css deleted file mode 100644 index f21c9c5..0000000 --- a/docs/website/css/ie-overrides.css +++ /dev/null @@ -1,7 +0,0 @@ -#layout-content-box { - margin-left: 207px; -} - -#support-level-legend { width: 400px; } -#support-level-legend ul { margin: 0; } -.support-level-descr { float: none; } \ No newline at end of file diff --git a/docs/website/css/web-layout.css b/docs/website/css/web-layout.css deleted file mode 100644 index 477bbba..0000000 --- a/docs/website/css/web-layout.css +++ /dev/null @@ -1,222 +0,0 @@ -body { - margin: 0; - font-size: 0.9em; - background-color: #f4f4f4; -} - -#layout-banner-box { - width: 100%; - height: 110px; - z-index: 2; - background-color: #0067cd; -} - -#layout-menu-box { - float: left; - height: 100%; - z-index: 1; -} - -#layout-content-box { - border-left: 3px solid #eeeeee; - background-color: white; - overflow-y: auto; -} - -h1 { - margin-top: 0.5em; -} - -#layout-banner { - color: white; - font-family: sans-serif; - text-align: left; - padding: 0.8em 20px; -} - -#layout-logo { - float: left; - padding: 5px 20px 5px 10px; -} - -#layout-title { - font-family: monospace; - font-size: 3.5em; - font-weight: bold; - letter-spacing: 0.2em; - margin: 0; -} - -#layout-description { - font-size: 1.2em; - letter-spacing: 0.1em; -} - -#sponsor { - clear: both; - font-size: small; - margin-top: 50px; - margin-bottom: 10px; - color:#0067CD; - font-weight:bold; -} - -#sponsor span { margin-left: 10px; } -#sponsor img { border: 0; } - -#layout-menu { - padding-top: 0.8em; - padding-left: 20px; - margin-left: 0; - font-size: 1.0em; - font-family: sans-serif; - font-weight: bold; - list-style: none; - list-style-image: url(../images/blue-arrow.png) -} -#layout-menu li { margin-left: 10px; } -#layout-menu a { - line-height: 2em; - margin-left: 0.5em; -} -#layout-menu a:link, #layout-menu a:visited, #layout-menu a:hover { - color: #0067cd; - text-decoration: none; -} -#layout-menu a:hover { - color: navy; - text-decoration: none; -} -#layout-menu #page-source { - border-top: 2px solid silver; - margin-top: 0.2em; -} - -#layout-content { - padding-top: 0.2em; - padding-left: 1.0em; - padding-right: 0.4em; -} - -@media print { - #layout-banner-box { display: none; } - #layout-menu-box { display: none; } - #layout-content-box { margin-top: 0; margin-left: 0; } -} - - -#ups_list -{ - margin: 20px 0 0 0; width: 100%; - border-collapse: collapse; -} -#ups_list td { border: 1px solid silver; } -#ups_list thead { font-weight: bold; background: #bbb; } -#ups_list .odd { background: #eee; } -#ups_list .even { background: #ddd; } -.filter { min-width: 100px; } - -td#manufacturer-col { width: 20%; } -td#model-col { width: 50%; } -td#driver-col { width: 30%; } - -.blue { background-color: #cfd9fe; } -.green { background-color: #b1fea7; } -.yellow { background-color: #fdf88e; } -.orange { background-color: #fccb81; } -.red { background-color: #ffa4a4; } - -.hidden { display: none; } - -/* HCL Chooser/Legend */ -#filters-set { - display: none; - border: 1px solid silver; - padding: 10px; -} - -#filters-set legend, #support-level-legend legend { - font-weight: bold; -} - -#filters-set td { - border: 0; -} - -#filters-set select { - max-width: 200px; -} - -/* Clear HCL Legend */ -#filters-set + * { - clear: both; -} - -#support-level-legend { - width: 31.25em; - float: right; - margin: 0 0 1em 1em; - padding: 10px; - border: 1px solid silver; -} - -#support-level-legend dt { - margin: 0; - padding: 0; - width: 15%; - float: left; -} - -.hcl-legend-level { - visibility: hidden; - position: relative; -} - -.red.hcl-legend-level:after { - content: '*'; - position: absolute; - visibility: visible; - background-color: #ffa4a4; -} - -.orange.hcl-legend-level:after { - content: '**'; - position: absolute; - visibility: visible; - background-color: #fccb81; -} - -.yellow.hcl-legend-level:after { - content: '***'; - position: absolute; - visibility: visible; - background-color: #fdf88e; -} - -.blue.hcl-legend-level:after { - content: '****'; - position: absolute; - visibility: visible; - background-color: #cfd9fe; -} - -.green.hcl-legend-level:after { - content: '*****'; - position: absolute; - visibility: visible; - background-color: #b1fea7; -} - -#support-level-legend dd { - margin: 0; - padding: 0; - width: 85%; - float: left; -} - -/*.support-level-descr { margin-left: 20px; float: right; }*/ - -/* Remove text underscores on href */ -div#footer-badges a:link, #layout-menu a:visited, #layout-menu a:hover { - text-decoration: none; -} diff --git a/docs/website/css/xhtml11-quirks.css b/docs/website/css/xhtml11-quirks.css deleted file mode 100644 index 16e4015..0000000 --- a/docs/website/css/xhtml11-quirks.css +++ /dev/null @@ -1,41 +0,0 @@ -/* Workarounds for IE6's broken and incomplete CSS2. */ - -div.sidebar-content { - background: #ffffee; - border: 1px solid silver; - padding: 0.5em; -} -div.sidebar-title, div.image-title { - color: #527bbd; - font-family: sans-serif; - font-weight: bold; - margin-top: 0.0em; - margin-bottom: 0.5em; -} - -div.listingblock div.content { - border: 1px solid silver; - background: #f4f4f4; - padding: 0.5em; -} - -div.quoteblock-attribution { - padding-top: 0.5em; - text-align: right; -} - -div.verseblock-content { - white-space: pre; -} -div.verseblock-attribution { - padding-top: 0.75em; - text-align: left; -} - -div.exampleblock-content { - border-left: 2px solid silver; - padding-left: 0.5em; -} - -/* IE6 sets dynamically generated links as visited. */ -div#toc a:visited { color: blue; } diff --git a/docs/website/css/xhtml11.css b/docs/website/css/xhtml11.css deleted file mode 100644 index 1e6bf5a..0000000 --- a/docs/website/css/xhtml11.css +++ /dev/null @@ -1,333 +0,0 @@ -/* Debug borders */ -p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 { -/* - border: 1px solid red; -*/ -} - -body { - margin: 1em 5% 1em 5%; -} - -a { - color: blue; - text-decoration: underline; -} -a:visited { - color: fuchsia; -} - -em { - font-style: italic; - color: navy; -} - -strong { - font-weight: bold; - color: #083194; -} - -tt { - color: navy; -} - -h1, h2, h3, h4, h5, h6 { - color: #527bbd; - font-family: sans-serif; - margin-top: 1.2em; - margin-bottom: 0.5em; - line-height: 1.3; -} - -h1, h2, h3 { - border-bottom: 2px solid silver; -} -h2 { - padding-top: 0.5em; -} -h3 { - float: left; -} -h3 + * { - clear: left; -} - -div.sectionbody { - font-family: serif; - margin-left: 0; -} - -hr { - border: 1px solid silver; -} - -p { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -ul, ol, li > p { - margin-top: 0; -} - -pre { - padding: 0; - margin: 0; -} - -span#author { - color: #527bbd; - font-family: sans-serif; - font-weight: bold; - font-size: 1.1em; -} -span#email { -} -span#revnumber, span#revdate, span#revremark { - font-family: sans-serif; -} - -div#footer { - font-family: sans-serif; - font-size: small; - border-top: 2px solid silver; - padding-top: 0.5em; - margin-top: 4.0em; -} -div#footer-text { - float: left; - padding-bottom: 0.5em; -} -div#footer-badges { - float: right; - padding-bottom: 0.5em; -} - -div#preamble { - margin-top: 1.5em; - margin-bottom: 1.5em; -} -div.tableblock, div.imageblock, div.exampleblock, div.verseblock, -div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, -div.admonitionblock { - margin-top: 1.5em; - margin-bottom: 1.5em; -} -div.admonitionblock { - margin-top: 2.5em; - margin-bottom: 2.5em; -} - -div.content { /* Block element content. */ - padding: 0; -} - -/* Block element titles. */ -div.title, caption.title { - color: #527bbd; - font-family: sans-serif; - font-weight: bold; - text-align: left; - margin-top: 1.0em; - margin-bottom: 0.5em; -} -div.title + * { - margin-top: 0; -} - -td div.title:first-child { - margin-top: 0.0em; -} -div.content div.title:first-child { - margin-top: 0.0em; -} -div.content + div.title { - margin-top: 0.0em; -} - -div.sidebarblock > div.content { - background: #ffffee; - border: 1px solid silver; - padding: 0.5em; -} - -div.listingblock > div.content { - border: 1px solid silver; - background: #f4f4f4; - padding: 0.5em; -} - -div.quoteblock { - padding-left: 2.0em; - margin-right: 10%; -} -div.quoteblock > div.attribution { - padding-top: 0.5em; - text-align: right; -} - -div.verseblock { - padding-left: 2.0em; - margin-right: 10%; -} -div.verseblock > div.content { - white-space: pre; -} -div.verseblock > div.attribution { - padding-top: 0.75em; - text-align: left; -} -/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ -div.verseblock + div.attribution { - text-align: left; -} - -div.admonitionblock .icon { - vertical-align: top; - font-size: 1.1em; - font-weight: bold; - text-decoration: underline; - color: #527bbd; - padding-right: 0.5em; -} -div.admonitionblock td.content { - padding-left: 0.5em; - border-left: 2px solid silver; -} - -div.exampleblock > div.content { - border-left: 2px solid silver; - padding: 0.5em; -} - -div.imageblock div.content { padding-left: 0; } -span.image img { border-style: none; } -a.image:visited { color: white; } - -dl { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -dt { - margin-top: 0.5em; - margin-bottom: 0; - font-style: normal; - color: navy; -} -dd > *:first-child { - margin-top: 0.1em; -} - -ul, ol { - list-style-position: outside; -} -ol.arabic { - list-style-type: decimal; -} -ol.loweralpha { - list-style-type: lower-alpha; -} -ol.upperalpha { - list-style-type: upper-alpha; -} -ol.lowerroman { - list-style-type: lower-roman; -} -ol.upperroman { - list-style-type: upper-roman; -} - -div.compact ul, div.compact ol, -div.compact p, div.compact p, -div.compact div, div.compact div { - margin-top: 0.1em; - margin-bottom: 0.1em; -} - -div.tableblock > table { - border: 3px solid #527bbd; -} -thead { - font-family: sans-serif; - font-weight: bold; -} -tfoot { - font-weight: bold; -} -td > div.verse { - white-space: pre; -} -p.table { - margin-top: 0; -} -/* Because the table frame attribute is overriden by CSS in most browsers. */ -div.tableblock > table[frame="void"] { - border-style: none; -} -div.tableblock > table[frame="hsides"] { - border-left-style: none; - border-right-style: none; -} -div.tableblock > table[frame="vsides"] { - border-top-style: none; - border-bottom-style: none; -} - - -div.hdlist { - margin-top: 0.8em; - margin-bottom: 0.8em; -} -div.hdlist tr { - padding-bottom: 15px; -} -dt.hdlist1.strong, td.hdlist1.strong { - font-weight: bold; -} -td.hdlist1 { - vertical-align: top; - font-style: normal; - padding-right: 0.8em; - color: navy; -} -td.hdlist2 { - vertical-align: top; -} -div.hdlist.compact tr { - margin: 0; - padding-bottom: 0; -} - -.comment { - background: yellow; -} - -@media print { - div#footer-badges { display: none; } -} - -div#toctitle { - color: #527bbd; - font-family: sans-serif; - font-size: 1.1em; - font-weight: bold; - margin-top: 1.0em; - margin-bottom: 0.1em; -} - -div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { - margin-top: 0; - margin-bottom: 0; -} -div.toclevel2 { - margin-left: 2em; - font-size: 0.9em; -} -div.toclevel3 { - margin-left: 4em; - font-size: 0.9em; -} -div.toclevel4 { - margin-left: 6em; - font-size: 0.9em; -} diff --git a/docs/website/faviconut.ico b/docs/website/faviconut.ico deleted file mode 100644 index eb5c4d3..0000000 Binary files a/docs/website/faviconut.ico and /dev/null differ diff --git a/docs/website/faviconut.png b/docs/website/faviconut.png deleted file mode 100644 index 20a48c0..0000000 Binary files a/docs/website/faviconut.png and /dev/null differ diff --git a/docs/website/news.txt b/docs/website/news.txt deleted file mode 100644 index 2b11798..0000000 --- a/docs/website/news.txt +++ /dev/null @@ -1,18 +0,0 @@ -- November 20, 2013: 2.7.1 released -- June 21, 2013: new client link:https://github.com/zykh/walNUT[walNUT] released -- February 10, 2013: NUT source repository is converted to link:https://github.com/networkupstools/nut[Git] using link:http://www.catb.org/~esr/reposurgeon/[reposurgeon] -- September 19, 2012: link:download.html#_binary_packages[Beta NUT 2.6.5-3 package for Windows released] -- September 17, 2012: link:download.html#_binary_packages[Beta NUT 2.6.5-2 package for Windows released] -- August 9, 2012: link:download.html#_binary_packages[Beta NUT 2.6.5-1 package for Windows released] -- August 8, 2012: 2.6.5 released -- June 27, 2012: link:download.html#_virtualization_packages[VMware NUT client for ESXI 5.0] -- June 5, 2012: link:http://wmnut.networkupstools.org[WMNut] 0.64 released, and move hosting -- June 4, 2012: link:download.html#_binary_packages[Beta NUT 2.6.4-1 package for Windows released] -- May 31, 2012: 2.6.4 released, including link:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2944[CVE-2012-2944] fix -- May 10, 2012: link:http://wmnut.mgeops.org[WMNut] 0.63 released -- May 9, 2012: Official publication of Riello communication protocols -- May 2, 2012: link:download.html#_binary_packages[Beta NUT 2.6.3-3 package for Windows released] -- April 26, 2012: link:download.html#_binary_packages[Beta NUT 2.6.3-1 package for Windows released] -- January 4, 2012: 2.6.3 released - -link:old-news.html[Older news] diff --git a/docs/website/old-news.txt b/docs/website/old-news.txt deleted file mode 100644 index 28d29fc..0000000 --- a/docs/website/old-news.txt +++ /dev/null @@ -1,63 +0,0 @@ -Archived news -------------- - -- October 31, 2011: link:download.html#_java_packages[jNUT and jNutWebAPI 0.2-SNAPSHOT released] -- September 15, 2011: 2.6.2 released -- September 2, 2011: link:download.html#_java_packages[jNUT (NUT Java support) 0.1-SNAPSHOT released] -- July 4, 2011: link:download.html#_binary_packages[Beta NUT 2.6.1-1 package for Windows released] -- June 8, 2011: link:http://www.dell.com/us/business/p/powervault-nx3500/pd[Dell PowerVault NX3500] use NUT for power protection -- June 1, 2011: 2.6.1 released -- May 19, 2011: link:download.html#_binary_packages[Beta NUT 2.6.0-1 package for Windows released] -- January 14, 2011: 2.6.0 released -- December 24, 2010: 2.6.0-pre1 released -- December 16, 2010: link:http://www.lestat.st/en/informatique/projets/nut-monitor[NUT-Monitor] 1.3 released -- July 22, 2010: new client link:http://www.revpol.com/xymon_nut_scripts[Hobbit (Xymon) monitor plugin] -- July 2, 2010: link:http://knut.prynych.cz[KNutClient] 1.0.3 and link update -- May 12, 2010: link:http://www.lestat.st/en/informatique/projets/nut-monitor[NUT-Monitor] 1.2 released -- March 22, 2010: link:http://knut.prynych.cz[KNutClient] 1.0 -- February 23, 2010: 2.4.3 released -- February 19, 2010: 2.4.2 released -- February 17, 2009: 2.4.1 released -- January 28, 2009: 2.4.0 released -- January 21, 2009: 2.4.0-pre2 released -- December 24, 2008: 2.4.0-pre1 released -- July 7, 2008: Client activity: new client link:http://www.lestat.st/en/informatique/projets/nut-monitor[NUT-Monitor] -- June 27, 2008: Client activity: new Python class link:http://www.lestat.st/en/informatique/projets/pynut[PyNUT] -- June 19, 2008: Client activity: KNutClient 0.9.4 -- May 7, 2008: 2.2.2 released -- April 25, 2008: 2.2.2-pre3 released -- April 15, 2008: 2.2.2-pre2 released -- April 2, 2008: 2.2.2-pre1 released -- December 21, 2007: 2.2.1 released -- December 17, 2007: 2.2.1-pre2 released -- October 4, 2007: 2.2.1-pre1 released -- August 31, 2007: Client activity: UPS Monitor link update -- August 31, 2007: Client activity: link:http://sourceforge.net/projects/winnutclient/[Windows NUT client 1.5.0] -- July 5, 2007: 2.2.0 released -- June 26, 2007: 2.2.0-pre2 released -- June 5, 2007: Client activity: link:http://collectd.org/[collectd NUT plugin] -- June 4, 2007: 2.2.0-pre1 released -- April 10, 2007: Client activity: KNutClient 0.9.3 -- January 15, 2007: 2.0.5 released -- January 8, 2007: Client activity: link:http://sourceforge.net/projects/winnutclient/[Windows NUT client] -- January 4, 2007: 2.0.5-pre2 released -- December 20, 2006: 2.0.5-pre1 released -- July 27, 2006: 2.0.4 released -- July 18, 2006: 2.0.4-pre2 released -- July 7, 2006: 2.0.4-pre1 released -- February 7, 2006: 2.0.3 released -- December 22, 2005: 2.0.3-pre2 released -- August 16, 2005: 2.0.3-pre1 released -- June 27, 2005: 2.0.2 released -- June 22, 2005: 2.0.2-pre2 released -- June 15, 2005: new mailing lists ready on link:http://alioth.debian.org/mail/?group_id=30602[Alioth] -- May 4, 2005: 2.0.2-pre1 released -- April 15, 2005: new development infrastructure ready on link:http://alioth.debian.org/projects/nut/[Alioth] -- March 15, 2005: Client activity: first beta of MGE Personal Solution Pac -- March 11, 2005: Client activity: UPS Monitor 0.8 released -- February 24, 2005: 2.0.1 released -- February 2, 2005: Belated announcement: WMNut 0.61 released -- October 20, 2004: Client activity: KNutClient 0.8.5 released -- September 22, 2004: New driver project: BCMXCP -- September 3, 2004: New EU mirror (thanks to Gilles, from Signetic) -- August 10, 2004: Client activity: ups_control 1.7 released diff --git a/docs/website/projects.txt b/docs/website/projects.txt deleted file mode 100644 index 4d17455..0000000 --- a/docs/website/projects.txt +++ /dev/null @@ -1,233 +0,0 @@ -Related projects -================ - -There are many programs and devices that integrate NUT support. - -This page tries to track them. - -Graphical desktop clients -------------------------- - -link:http://knut.prynych.cz[KNutClient] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -KNutClient is a visual client for NUT. - -link:http://www.lestat.st/en/informatique/projets/nut-monitor[NUT-Monitor] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -NUT-Monitor is a graphical application to monitor and manage UPSes connected to -a NUT server. This application is written in Python and PyGTK, and uses the -<> class. - -NOTE: NUT-Monitor is part of NUT since version NUT 2.4.1. -It will further evolve toward the NUT Control Center. - -link:https://github.com/zykh/walNUT[walNUT] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A Gnome Shell extension that uses upsc/upscmd to monitor devices and invoke instant commands. - -link:http://sourceforge.net/projects/winnutclient[Windows NUT client] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Windows NUT client is a partial port of KNutClient to Windows using -link:http://www.autoitscript.com[AUTOIT] scripting language. - -link:http://csociety.ecn.purdue.edu/~delpha/winnut/[WinNUT] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -WinNUT is a partial port of the client side of Network UPS Tools (NUT) to Windows. - -NOTE: WinNUT is currently being replaced by a full port to Windows, part of the -official NUT distribution. link:download.html#_binary_packages[MSI packages] -are available too. - -link:http://wmnut.networkupstools.org[WMNUT] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -WMNut is a dockapp program to monitor multiple UPSs statistics through the NUT -(Network UPS Tools) framework on Linux and other systems. - -Network Management Systems (NMS) integration --------------------------------------------- - -link:http://bigsister.graeff.com/[Big Sister system and network monitor] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The "nut" module monitors uninterruptible power supplies under control of the -NUT (Network UPS Tools) free software suite. -It sends alerts on power outages, overload and battery problems. The longterm -graphing may point you to battery aging problems. - -link:http://cacti.net[Cacti monitoring tool] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are three different scripts that add NUT support to Cacti: - -- link:http://forums.cacti.net/about19250.html[PHP script] -- link:http://forums.cacti.net/about14475.html[Ruby script] -- link:http://forums.cacti.net/about9729.html[shell script] - -[[collectd]] -link:http://collectd.org[collectd] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The `collectd` system statistics collection daemon features a -link:http://collectd.org/wiki/index.php/Plugin:NUT[NUT plugin] to -collect statistics from UPSes. - -link:http://xymon.sourceforge.net/[Xymon (Hobbit) monitor] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A link:http://www.revpol.com/xymon_nut_scripts[NUT plugin] is available. - -link:http://monami.sourceforge.net[MonAMI NUT plugin] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A plugin to return UPS status to the MonAMI universal sensor framework. - -link:http://munin.projects.linpro.no[Munin NUT plugin] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A link:http://muninexchange.projects.linpro.no/?search&cid=0&pid=136&phid=279[NUT plugin] is available. - -link:http://www.nagios.org/[Nagios plugin] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The link:http://sourceforge.net/projects/nagiosplug/[check_ups] plugin returns -UPS status to the Nagios monitoring system using NUT. - -Configuration GUIs ------------------- - -link:http://www.knut.noveradsl.cz/knutsetting/index.html[KNutSetting] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -KNutSetting is a visual KDE tool for configuring NUT - Network UPS Tools. - -Other software projects ------------------------ - -[[PyNUT]] -link:http://www.lestat.st/en/informatique/projets/pynut[PyNUT] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -PyNUT is an abstraction class written in Python to access NUT (Network UPS -Tools) server and execute commands without needing to know the communication -protocol. - -NOTE: PyNUT is part of NUT since version NUT 2.4.1. - -link:http://bugs.debian.org/343530[RRDtool logging support] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This patch adds link:http://oss.oetiker.ch/rrdtool[RRDtool] logging support to -NUT. (See also <>.) - -link:http://elrik75.free.fr/ups_control/[ups_control] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A developing Python wrapper to upsc which can generate mails and shutdown the -machine. - -link:http://search.cpan.org/search?dist=ups-nut[UPS::Nut] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A Perl module to talk to an UPS via NUT (Network UPS Tools) upsd. - -NOTE: UPS::Nut is part of NUT since version NUT 2.6.1. - -Hardware projects involving NUT -------------------------------- - -This is an incomplete list of the hardware known to embed NUT. - -link:http://www.dell.com/us/business/p/powervault-nx3500/pd[Dell PowerVault NX3500] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Dell is using NUT to protect the new PowerVault NX3500 storage devices. - -link:http://www.opengear.com/UPS.html[OpenGear] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Opengear provides an advanced NUT integration into many models. -There is also a -link:http://www.opengear.com/Videos/Network-UPS-Tools/Network-UPS-Tools.html[video presentation] -of the NUT integration. - -For more information on Opengear's contributions to NUT, have a look at the -link:acknowledgements.html[acknowledgements information]. - -Synology -~~~~~~~~ - -link:http://www.synology.com[Synology] has worked closely with Arnaud to integrate -link:http://www.synology.com/support/faq_show.php?lang=enu&q_id=300[UPS support] on all -its devices. - -Alcatel Lucent IPBX -~~~~~~~~~~~~~~~~~~~ - -Alcatel has been working for years with us (Patrick Agrain and Arnaud) to -improve NUT integration into some of their IPBX. - -link:http://www.readynas.com/?page_id=92[Netgear ReadyNAS] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The RAIDiator firmware for the ReadyNAS product line includes NUT to either -monitor a local USB UPS, or to connect as a slave to a NUT server. - -link:http://www.thecus.com[Thecus NAS] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Thecus NAS firmware includes NUT for UPS support. The -link:http://www.thecus.com/Downloads/Compatible_List/UPS_List_v1.0_ALL.pdf[following list of devices] is known to be supported. - - -link:http://www.buffalotech.com[Buffalo NAS] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Buffalo TeraStation NAS (Business-class) include NUT for UPS support. - -link:http://www.webbastards.com/projects/[lcd-nut] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A Project to display the status of a UPS on computer through one of the many -cheap LCD matrix displays available on the market. - - -Legacy and discontinued projects --------------------------------- - -link:http://sourceforge.net/projects/gknut/[GKrellM NUT] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Simple UPS monitoring plugin for GKrellM. Uses NUT (Network UPS Tools) for UPS -connection. - -Nut-Graph -~~~~~~~~~ - -PHP4 / GD / MySQL / jpgraph package to visualize logged UPS status data. - -Eaton - Personal Solution Pac -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -NUT configuration and monitoring software for Eaton (previously MGE Office -Protection Systems) units. - -UPS Monitor -~~~~~~~~~~~ - -Multi-threaded python/GTK2 graphical monitoring application. - - -Notes -------- - -- Client authors: send updates on your releases to the NUT users mailing list. -We will also put a link to you in the news section of the top page when things -change. - -- If you know of a project which should be listed, please send in the URL. diff --git a/docs/website/scripts/filter_png.js b/docs/website/scripts/filter_png.js deleted file mode 100644 index eb54390..0000000 --- a/docs/website/scripts/filter_png.js +++ /dev/null @@ -1,14 +0,0 @@ -$(function() -{ - var imgs = $("img"); - for(var i = 0; i < imgs.length; i++) - { - var img = $(imgs[i]); - if(img.attr("src").match(/\.png$/i)) - { - img.replaceWith( - "
" - ); - } - } -}); \ No newline at end of file diff --git a/docs/website/scripts/jquery.js b/docs/website/scripts/jquery.js deleted file mode 100644 index b1ae21d..0000000 --- a/docs/website/scripts/jquery.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/docs/website/scripts/nut_jquery.js b/docs/website/scripts/nut_jquery.js deleted file mode 100644 index 76e9fa7..0000000 --- a/docs/website/scripts/nut_jquery.js +++ /dev/null @@ -1,577 +0,0 @@ -var NUT = { - - // UPS table DOM ids - listID: "#ups_list", - listBodyID: "#ups_list_body", - - // Field names - fields: [ - "manufacturer", - "device-type", - "support-level", - "model", - "comment", - "driver" - ], - - // Actual HTML table columns - columns: [ - [ "manufacturer" ], - [ "model", "comment" ], - [ "driver" ], - [ "support-level" ], - ], - - // driver => connection type mappings - driverMap: function(driver) { - - // Try not to catch "usb" across a word boundary: - if (driver.match(/_usb|usbserial|usbhid-ups/)) - return "USB"; - - // TODO: what about IPMI/powerman-pdu? - if (driver.match(/snmp-ups|netxml-ups/)) - return "Network"; - - return "Serial"; - - }, - - // Support level => CSS class mappings - supportLevelClasses: { - 0: "", - 1: "red", - 2: "orange", - 3: "yellow", - 4: "blue", - 5: "green" - }, - - tableCache: false, - - // Parse GET parameters from window url and return them as a hash - // The call format is: - // stable-hcl.html?= - // Refer to docs/stable-hcl.txt for examples - parseGetParameters: function() { - - var url = window.location.href; - url = url.replace(/#$/, ""); - - var fieldPos = url.indexOf("?"); - - var get = {}; - - if (fieldPos > -1) { - - var fileName = url.substring(0, fieldPos); - var getList = url.substring(fieldPos + 1).split("&"); - - for (var i = 0; i < getList.length; i++) { - - var getField = getList[i].split("="); - - key = unescape(getField[0]).toLowerCase(); - - value = unescape(getField[1]); - - // just in case there are any old links out there. - if (key === "manufacturer" && value === "Tripp-Lite") { - value = "Tripp Lite"; - } - - get[key] = value; - - } - - } - - return get; - - }, - - // UPS filter renderers by data column index - filterRenderers: { - - "support-level": function(value) { - - var result = []; - - for (var i = 0; i < value; i++) - result.push("*"); - - return result.join(""); - - }, - - "driver": function(value) { - - return this.driverMap(value); - - }, - - "device-type": function(value) { - - var map = { - "pdu": "Power Distribution Unit", - "ups": "Uninterruptible Power Supply", - "scd": "Solar Controller Device" - } - - return map[value]; - - } - - }, - - // Specific filter handlers - filterHandlers: { - - // Filter functions: - // @param {string} value value to filter - // @param {array} row raw data fields - // @return {boolean} true if value passes the filter, false otherwise - - "driver": function(value, row) { - - var driver = row[this.fields.indexOf("driver")]; - - if (this.driverMap(driver) == value) - return true; - - return false; - - }, - - "support-level": function(value, row) { - - var level = row[this.fields.indexOf("support-level")]; - - if (level >= value) - return true; - - return false; - - } - - }, - - // Returns rendered UPS data according to column index - // @param {integer} index - // @param {string} value - renderFilter: function(index, value) { - - var renderer = this.filterRenderers[this.fields[index]]; - - if (typeof renderer == "function") - return renderer.call(this, value); - - return value; - - }, - - // Initialization method - init: function() { - - this.initFilters(); - this.sortUPSData(UPSData); - this.buildUPSList(UPSData); - this.buildFilters(UPSData); - - var get = this.parseGetParameters(); - - for (var param in get) { - - var filter = $("#"+param); - - if (filter) { - - filter.val(get[param]); - - this.doFilter(); - - } - - } - - }, - - // Initialize filter filters references - initFilters: function() { - - // Display filters fieldset hidden by default for user-agents not using javascript - $("#filters-set").show(); - - this.filters = { - - "support-level": { - index: this.fields.indexOf("support-level"), - field: $("#support-level") - }, - - "device-type": { - index: this.fields.indexOf("device-type"), - field: $("#device-type") - }, - - "manufacturer": { - index: this.fields.indexOf("manufacturer"), - field: $("#manufacturer") - }, - - "model": { - index: this.fields.indexOf("model"), - field: $("#model") - }, - - "driver": { - index: this.fields.indexOf("driver"), - field: $("#connection") - } - - } - - }, - - // Sorts table data by manufacturer and driver - // @param {Object} data - sortUPSData: function(data) { - - var mI = this.fields.indexOf("manufacturer"), - dI = this.fields.indexOf("driver"); - - data.sort(function(a, b) { - - var toLower = function(ar) { - - var res = ar.slice(); - - res.forEach(function(i, index) { - - if (typeof i == "string") - res[index] = i.toLowerCase() - - }); - - return res; - - } - - var c = toLower(a), - d = toLower(b); - - return c[mI] == d[mI] ? c[dI] > d[dI] : c[mI] > d[mI]; - - }); - - }, - - // Builds UPS list from provided data - // @param {array} data - buildUPSList: function(data) { - - var list = $(this.listBodyID); - - // Initialize table cache - if (!this.tableCache) - this.tableCache = list.html(); - - // If we're rebuilding the original table, just use the one in cache - if (data == UPSData && this.tableCache) { - list.html(this.tableCache); - return; - } - - list.empty(); - - // Bailout if no data - if (!data || data.length == 0) - return; - - // Build rows - var cellHistory = [], rows = []; - - var rowHistory = data[0][0]; - - var classes = [ "even", "odd" ], - manufIndex = this.fields.indexOf("manufacturer"), - currentClass = 0; - - data.forEach(function(upsRow, rowIndex) { - - if (upsRow[manufIndex] != rowHistory) { - currentClass = Number(!currentClass); - rowHistory = upsRow[manufIndex]; - } - - var cells = []; - - // Build cells - this.columns.forEach(function(column, colIndex) { - - var cellContent = []; - - column.forEach(function(field) { - cellContent.push(upsRow[this.fields.indexOf(field)]) - }, this); - - cellContent = cellContent.join("
"); - - // Inspect the last cell on this column and increase row span if the current cell has the same content - var cH = cellHistory[colIndex]; - - if (column.indexOf("driver") == -1 && cH && cH.html == cellContent) - cH.rowSpan += 1; - else { - - var cell = ""; - - if (column.indexOf("driver") != -1) { - - cell = { - html: cellContent, - rowSpan: 1, - cls: this.supportLevelClasses[upsRow[this.fields.indexOf("support-level") || ""]] - }; - - } else { - - cell = { - html: cellContent, - rowSpan: 1, - cls: classes[currentClass] - } - - } - - if (column.indexOf("support-level") != -1) - cell.cls += " hidden"; - - cells.push(cell); - - cellHistory[colIndex] = cell; - - } - - }, this); - - rows.push(cells); - - }, this); - - // Generate actual rows/cells tags - rows.forEach(function(r, index) { - - r.forEach(function(c, index) { - r[index] = [ "", c.html, "" ].join(""); - }); - - rows[index] = [ "", r.join(""), "" ].join(""); - - }); - - list.html(rows.join("")); - - }, - - // Initialize filters event listeners - // @param {Object} data - buildFilters: function(data) { - - for (var f in this.filters) { - - var filter = this.filters[f]; - - this.populateCombo(data, filter); - - filter.field.change(this.doFilter); - - var op = $("#op-" + (filter.index)); - - if (op) - op.change(this.doFilter); - - } - - }, - - // Load data in filter combos - // @param {array} data - // @param {object} combo - // @param {integer} index - populateCombo: function(data, filter) { - - var values = []; - var valueDict = {}; - - var combo = filter.field; - var oldValue = combo.val(); - - combo.html(""); - - // Special case for connection type - if (filter.field.attr("id") == "connection") { - - [ "Serial", "USB", "Network" ].forEach(function(type) { - - values.push([ type, type ]); - - }, this); - - } else { - - data.forEach(function(row) { - - var value = row[filter.index]; - - if (value != "" && !valueDict[value]) { - - values.push([ value, this.renderFilter(filter.index, value) ]); - - valueDict[value] = true; - - } - - }, this); - - values = values.sort(); - - } - - values.forEach(function(value) { - - var option = $(document.createElement("option")); - - option.val(value[0]); - option.text(value[1]); - - combo.append(option); - - }, this); - - combo.val(oldValue); - - }, - - // Apply selected filters on UPS list - doFilter: function() { - - var initialRows = UPSData.slice(); - var filteredRows = UPSData.slice(); - - // Applies a single filter on provided UPS data set - // @param {string} value - // @param {integer} index - // @param {array} data - // @returns {array} filtered data set - var applyFilter = function(value, index, data) { - - var tmpData = []; - tmpData = data.slice(); - - tmpData.forEach(function(row, rowIndex) { - - var field = row[index]; - - var handler = this.filterHandlers[this.fields[index]]; - - if (handler) { - - if (!handler.apply(this, [ value, row ])) - data.splice(data.indexOf(row), 1); - - } else if (row[index] != value) - data.splice(data.indexOf(row), 1); - - }, this); - - return data; - - } - - // Sequentially apply filters - for (var f in NUT.filters) { - - var filter = NUT.filters[f]; - var value = filter.field.val(); - - // Is filter active, i.e have the user picked a value in the filter combo - if (value != "-1") { - var opField = $("#op-" + filter.index); - filteredRows = applyFilter.apply(NUT, [ value, filter.index, filteredRows ]); - } - - } - - // Rebuild UPS list and combos according to filtered data - NUT.buildUPSList(filteredRows); - - [ "manufacturer", "model", "driver" ].forEach(function(id) { - - if (this.id != id) - this.populateCombo(filteredRows, this.filters[id]); - - }, NUT); - - }, - - resetCombos: function() { - - for (var f in this.filters) { - - var field = this.filters[f].field; - - this.populateCombo(UPSData, this.filters[f]); - - field.val("-1"); - - } - - this.buildUPSList(UPSData); - - } - -} - -if (typeof Array.prototype.indexOf != "function") { - - Array.prototype.indexOf = function(elt) { - - var i = 0; - - while (i < this.length) { - - if (this[i] == elt) - return i; - - i++; - - } - - return -1; - - } - -} - -if (typeof Array.prototype.forEach != "function") { - - Array.prototype.forEach = function(cb, scope) { - - for (var i = 0, n = this.length; i < n; i++) { - - if (i in this) - cb.call(scope, this[i], i, this); - - } - - } - -} - -// Global initialization -$(function() { - - NUT.init.call(NUT); - -}); diff --git a/docs/website/scripts/toc.js b/docs/website/scripts/toc.js deleted file mode 100644 index be6daba..0000000 --- a/docs/website/scripts/toc.js +++ /dev/null @@ -1,69 +0,0 @@ -/* Author: Mihai Bazon, September 2002 - * http://students.infoiasi.ro/~mishoo - * - * Table Of Content generator - * Version: 0.4 - * - * Feel free to use this script under the terms of the GNU General Public - * License, as long as you do not remove or alter this notice. - */ - - /* modified by Troy D. Hanson, September 2006. License: GPL */ - /* modified by Stuart Rackham, October 2006. License: GPL */ - -function getText(el) { - var text = ""; - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants. - text += i.data; - else if (i.firstChild != null) - text += getText(i); - } - return text; -} - -function TocEntry(el, text, toclevel) { - this.element = el; - this.text = text; - this.toclevel = toclevel; -} - -function tocEntries(el, toclevels) { - var result = new Array; - var re = new RegExp('[hH]([2-'+(toclevels+1)+'])'); - // Function that scans the DOM tree for header elements (the DOM2 - // nodeIterator API would be a better technique but not supported by all - // browsers). - var iterate = function (el) { - for (var i = el.firstChild; i != null; i = i.nextSibling) { - if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { - var mo = re.exec(i.tagName) - if (mo) - result[result.length] = new TocEntry(i, getText(i), mo[1]-1); - iterate(i); - } - } - } - iterate(el); - return result; -} - -// This function does the work. toclevels = 1..4. -function generateToc(toclevels) { - var toc = document.getElementById("toc"); - var entries = tocEntries(document.getElementsByTagName("body")[0], toclevels); - for (var i = 0; i < entries.length; ++i) { - var entry = entries[i]; - if (entry.element.id == "") - entry.element.id = "toc" + i; - var a = document.createElement("a"); - a.href = "#" + entry.element.id; - a.appendChild(document.createTextNode(entry.text)); - var div = document.createElement("div"); - div.appendChild(a); - div.className = "toclevel" + entry.toclevel; - toc.appendChild(div); - } - if (entries.length == 0) - document.getElementById("header").removeChild(toc); -} diff --git a/docs/website/ups-protocols.txt b/docs/website/ups-protocols.txt deleted file mode 100644 index fd20cc6..0000000 --- a/docs/website/ups-protocols.txt +++ /dev/null @@ -1,110 +0,0 @@ - -WARNING: this is a Work In Progress document. For the time being, you -should refer to the -link:http://old.networkupstools.org/protocols/[old NUT website library]. - -UPS Protocols -------------- - -All protocol information on this site is provided in the hope that it will be -useful. - -Some are officialy provided by the manufacturers, while others are the result of -reverse engineering work. - -However, UPS hardware is plentiful and varied. Test your software thoroughly, as -these documents may not always reflect the reality within your equipment! - -APC -~~~ - -- link:ups-protocols/apcsmart.html[APC's smart protocol] - unofficial decoding work - -Belkin -~~~~~~ - -- link:ups-protocols/belkinsmart.html[Belkin's smart protocol] - unofficial decoding work on the Regulator Pro - -- link:ups-protocols/belkinuniversal.html[Belkin Universal UPS] - courtesy of Peter Selinger - -Eaton -~~~~~ - -- Eaton Protocols Library - all official Eaton documents are here, including Powerware, MGE, ... - -- Best Fortress protocol - for LI 520, 720, 1020, and 1420 models - -- SOLA/Best Power protocol (Phoenixtec) - courtesy of Invensys Energy Systems - -MicroDowell -~~~~~~~~~~~ - -- MicroDowell UPS Serial Protocol v3.3.1 (PDF, 225KB) - -MGE -~~~ - -- MGE Protocols Library - all official MGE documents are here - -ONEAC -~~~~~ - -- ONEAC serial information - two scans - -Opti-UPS -~~~~~~~~ - -- Opti-UPS protocol - more guesswork - -Powercom -~~~~~~~~ - -All these document are officially provided by Powercom - -- link:ups-protocols/powercom/Software_USB_communication_controller_BNT_series.doc[USB information for BNT series] -- link:ups-protocols/powercom/Software_USB_communication_controller_IMPERIAL_series_R21.doc[USB information for IMPERIAL series] -- link:ups-protocols/powercom/Software_USB_communication_controller_SKP_series.doc[USB information for SKP series] -- link:ups-protocols/powercom/Software_USB_communication_controller_WOW_series.doc[USB information for WOW series] - -PowerKinetics -~~~~~~~~~~~~~ - -- PowerKinetics MiniCOL protocol - courtesy of PowerKinetics technical support - -Riello -~~~~~~ - -All these document are officially provided by Riello - -- link:ups-protocols/riello/PSGPSER-0104.pdf[GPSER protocol] -- link:ups-protocols/riello/PSSENTR-0100.pdf[Sentry HPS / HTS protocol] -- link:ups-protocols/riello/Riello_UPS_protocol_list.pdf[UPS protocol list] - -Standard protocols -~~~~~~~~~~~~~~~~~~ - -SEC -^^^ -- link:ups-protocols/sec.html[SEC protocol] - superset of the US9003, below - -- link:ups-protocols/sec-standard.html[SEC standard UPS Communication interface] - 15 scanned pages - -- link:us9003.html[US9003 UPS Communication Interface] - -SNMP -^^^^ - -- link:ups-protocols/snmp.html[SNMP] -- link:http://powerquality.eaton.com/Support/Software-Drivers/Downloads/connectivity-firmware/bestpwr2.mib[Best Power MIB] - -USB/HID Power Devices Class -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- link:http://www.usb.org/developers/devclass_docs/pdcv10.pdf[USB Usage Tables for HID Power Devices] (offsite PDF, 351K) - - -Various -~~~~~~~ - -- link:ups-protocols/megatec.html[Megatec] UPS Protocol - diff --git a/docs/website/web-layout.conf b/docs/website/web-layout.conf deleted file mode 100644 index 29ba745..0000000 --- a/docs/website/web-layout.conf +++ /dev/null @@ -1,185 +0,0 @@ -# -# Network UPS Tools website layout (based on AsciiDoc's). -# Three division CSS based layout -# -# Simulated frames using CSS (fixed banner and menu, scrolling content). -# NOTE: This layout does not work with IE6. -# -# +-----------------------------------------------------+ -# | #layout-banner | -# +--------------+--------------------------------------+ -# | | | -# | | | -# | #layout-menu | #layout-content | -# | | | -# | | | -# | | | -# +--------------+--------------------------------------+ -# -# Each of the three divisions is enclosed in a same-named *-box division -# which position and size the layout. -# -# - The #layout-content division is a container for AsciiDoc page documents. -# - Documents rendered in the #layout-content use the standard AsciiDoc -# xhtml11 backend stylesheets. - -[specialwords] -#emphasizedwords=(?u)\\?\bNetwork UPS Tools\b -#monospacedwords=(?u)\\?\basciidoc\(1\) (?u)\\?\ba2x\(1\) - -[header] - - - -Network UPS Tools - {doctitle} - - - - - -{doctype-manpage} -ifdef::quirks[] - -endif::quirks[] - - - -ifdef::toc[] - - -endif::toc[] -ifdef::hcl[] - - - -endif::hcl[] - - - - -
-
- -
Network UPS Tools
-
Power Devices support
-
-
- -
-
-# Article, book header. -ifndef::doctype-manpage[] - -ifdef::toc[] -
-
Table of Contents
- -
-endif::toc[] -endif::doctype-manpage[] -# Man page header. -ifdef::doctype-manpage[] - -endif::doctype-manpage[] - -[footer] - -
-
- - -endif::analytics[] - - diff --git a/docs/website/website.txt b/docs/website/website.txt deleted file mode 100644 index 18ff58a..0000000 --- a/docs/website/website.txt +++ /dev/null @@ -1,19 +0,0 @@ -Welcome -======= - -The primary goal of the Network UPS Tools (NUT) project is to provide support -for Power Devices, such as Uninterruptible Power Supplies, Power Distribution -Units and Solar Controllers. - -NUT provides many control and monitoring link:features.html[features], with a -uniform control and management interface. - -More than 100 different manufacturers, and several thousands models are -link:stable-hcl.html[compatible]. - -This software is the combined effort of many -link:acknowledgements.html[individuals and companies]. - -News ----- -include::news.txt[] diff --git a/docs/xhtml.xsl b/docs/xhtml.xsl new file mode 100644 index 0000000..b84425d --- /dev/null +++ b/docs/xhtml.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/drivers/Makefile.am b/drivers/Makefile.am index f8158d5..be71e91 100644 --- a/drivers/Makefile.am +++ b/drivers/Makefile.am @@ -5,7 +5,6 @@ #FIXME: SERLIBS is only useful for LDADD_DRIVERS_SERIAL not for LDADD_COMMON LDADD_COMMON = ../common/libcommon.la ../common/libparseconf.la LDADD_DRIVERS = $(LDADD_COMMON) main.o dstate.o -LDADD_HAL_DRIVERS = $(LDADD_COMMON) libnuthalmain.a LDADD_DRIVERS_SERIAL = $(LDADD_DRIVERS) $(SERLIBS) serial.o # most targets are drivers, so make this the default @@ -14,9 +13,6 @@ LDADD = $(LDADD_DRIVERS_SERIAL) # files. In any case, CFLAGS are only -I options, so there is no harm, # but only add them if we really use the target. AM_CFLAGS = -I$(top_srcdir)/include -if WITH_HAL - AM_CFLAGS += $(LIBHAL_CFLAGS) -endif if WITH_USB AM_CFLAGS += $(LIBUSB_CFLAGS) endif @@ -42,11 +38,10 @@ SERIAL_DRIVERLIST = al175 bcmxcp belkin belkinunv bestfcom \ nutdrv_qx SNMP_DRIVERLIST = snmp-ups USB_LIBUSB_DRIVERLIST = usbhid-ups bcmxcp_usb tripplite_usb \ - blazer_usb richcomm_usb riello_usb nutdrv_qx + blazer_usb richcomm_usb riello_usb \ + nutdrv_atcl_usb \ + nutdrv_qx USB_DRIVERLIST = $(USB_LIBUSB_DRIVERLIST) -HAL_DRIVERLIST = hald-addon-usbhid-ups hald-addon-bcmxcp_usb \ - hald-addon-tripplite_usb hald-addon-blazer_usb hald-addon-riello_usb \ - hald-addon-nutdrv_qx NEONXML_DRIVERLIST = netxml-ups MACOSX_DRIVERLIST = macosx-ups @@ -67,10 +62,6 @@ endif if WITH_USB driverexec_PROGRAMS += $(USB_LIBUSB_DRIVERLIST) endif -if WITH_HAL - halexecdir = $(HAL_CALLOUTS_PATH) - halexec_PROGRAMS = $(HAL_DRIVERLIST) -endif if WITH_NEON driverexec_PROGRAMS += $(NEONXML_DRIVERLIST) endif @@ -88,7 +79,7 @@ else endif # always build upsdrvctl -driverexec_PROGRAMS += upsdrvctl +sbin_PROGRAMS = upsdrvctl # ========================================================================== # Driver build details @@ -185,12 +176,16 @@ bcmxcp_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) blazer_usb_SOURCES = blazer.c blazer_usb.c libusb.c usb-common.c blazer_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) -lm +nutdrv_atcl_usb_SOURCES = nutdrv_atcl_usb.c usb-common.c +nutdrv_atcl_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) + richcomm_usb_SOURCES = richcomm_usb.c usb-common.c richcomm_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) riello_usb_SOURCES = riello.c riello_usb.c libusb.c usb-common.c riello_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) -lm + # HID-over-serial mge_shut_SOURCES = usbhid-ups.c libshut.c libhid.c hidparser.c mge-hid.c # per-target CFLAGS are necessary here @@ -200,30 +195,10 @@ mge_shut_LDADD = $(LDADD) # SNMP snmp_ups_SOURCES = snmp-ups.c apc-mib.c baytech-mib.c compaq-mib.c eaton-mib.c \ ietf-mib.c mge-mib.c netvision-mib.c powerware-mib.c raritan-pdu-mib.c \ - bestpower-mib.c cyberpower-mib.c delta_ups-mib.c + bestpower-mib.c cyberpower-mib.c delta_ups-mib.c \ + xppc-mib.c snmp_ups_LDADD = $(LDADD_DRIVERS) $(LIBNETSNMP_LIBS) -# HAL -hald_addon_usbhid_ups_SOURCES = usbhid-ups.c libhid.c libusb.c hidparser.c \ - $(USBHID_UPS_SUBDRIVERS) -hald_addon_usbhid_ups_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) - -hald_addon_tripplite_usb_SOURCES = tripplite_usb.c libusb.c -hald_addon_tripplite_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm - -hald_addon_bcmxcp_usb_SOURCES = bcmxcp_usb.c bcmxcp.c -hald_addon_bcmxcp_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) - -hald_addon_blazer_usb_SOURCES = blazer.c blazer_usb.c libusb.c -hald_addon_blazer_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm - -hald_addon_riello_usb_SOURCES = riello.c riello_usb.c libusb.c -hald_addon_riello_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm - -hald_addon_nutdrv_qx_SOURCES = nutdrv_qx.c libusb.c $(NUTDRV_QX_SUBDRIVERS) -hald_addon_nutdrv_qx_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm -hald_addon_nutdrv_qx_CFLAGS = $(AM_CFLAGS) -DQX_USB - # NEON XML/HTTP netxml_ups_SOURCES = netxml-ups.c mge-xml.c netxml_ups_LDADD = $(LDADD_DRIVERS) $(LIBNEON_LIBS) @@ -259,7 +234,7 @@ nutdrv_qx_LDADD += $(LIBUSB_LIBS) endif NUTDRV_QX_SUBDRIVERS = nutdrv_qx_blazer-common.c nutdrv_qx_mecer.c \ nutdrv_qx_megatec.c nutdrv_qx_megatec-old.c nutdrv_qx_mustek.c \ - nutdrv_qx_voltronic.c nutdrv_qx_zinto.c + nutdrv_qx_q1.c nutdrv_qx_voltronic.c nutdrv_qx_voltronic-qs.c nutdrv_qx_zinto.c nutdrv_qx_SOURCES += $(NUTDRV_QX_SUBDRIVERS) # ---------------------------------------------------------------------- @@ -269,30 +244,20 @@ nutdrv_qx_SOURCES += $(NUTDRV_QX_SUBDRIVERS) dist_noinst_HEADERS = apc-mib.h apc-hid.h baytech-mib.h bcmxcp.h \ bcmxcp_io.h belkin.h belkin-hid.h bestpower-mib.h blazer.h cps-hid.h dstate.h \ - dstate-hal.h dummy-ups.h eaton-mib.h explore-hid.h gamatronic.h genericups.h \ + dummy-ups.h eaton-mib.h explore-hid.h gamatronic.h genericups.h \ hidparser.h hidtypes.h ietf-mib.h libhid.h libshut.h libusb.h liebert-hid.h \ - main.h main-hal.h mge-hid.h mge-mib.h mge-shut.h mge-utalk.h \ + main.h mge-hid.h mge-mib.h mge-shut.h mge-utalk.h \ mge-xml.h microdowell.h netvision-mib.h netxml-ups.h nut-ipmi.h oneac.h \ powercom.h powerpanel.h powerp-bin.h powerp-txt.h powerware-mib.h raritan-pdu-mib.h \ safenet.h serial.h snmp-ups.h solis.h tripplite.h tripplite-hid.h \ upshandler.h usb-common.h usbhid-ups.h powercom-hid.h compaq-mib.h idowell-hid.h \ apcsmart.h apcsmart_tabs.h apcsmart-old.h apcupsd-ups.h cyberpower-mib.h riello.h openups-hid.h \ delta_ups-mib.h nutdrv_qx.h nutdrv_qx_blazer-common.h nutdrv_qx_mecer.h \ - nutdrv_qx_megatec.h nutdrv_qx_megatec-old.h nutdrv_qx_mustek.h nutdrv_qx_voltronic.h \ - nutdrv_qx_zinto.h + nutdrv_qx_megatec.h nutdrv_qx_megatec-old.h nutdrv_qx_mustek.h nutdrv_qx_q1.h \ + nutdrv_qx_voltronic.h nutdrv_qx_voltronic-qs.h nutdrv_qx_zinto.h \ + xppc-mib.h # Define a dummy library so that Automake builds rules for the # corresponding object files. This library is not actually built, EXTRA_LIBRARIES = libdummy.a libdummy_a_SOURCES = main.c dstate.c serial.c - -# the nuthalmain library combines the code for main-hal.c and -# dstate-hal.c. It is necessary for Automake-technical reasons, -# because per-object CFLAGS can only be specified for libraries, not -# for object files. This library is used during the build process, -# and is not meant to be installed. - -EXTRA_LIBRARIES += libnuthalmain.a -libnuthalmain_a_SOURCES = main-hal.c dstate-hal.c usb-common.c - -MOSTLYCLEANFILES = libnuthalmain.a diff --git a/drivers/Makefile.in b/drivers/Makefile.in index b85633c..11a9f93 100644 --- a/drivers/Makefile.in +++ b/drivers/Makefile.in @@ -55,42 +55,38 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -@WITH_HAL_TRUE@am__append_1 = $(LIBHAL_CFLAGS) -@WITH_USB_TRUE@am__append_2 = $(LIBUSB_CFLAGS) -@WITH_SNMP_TRUE@am__append_3 = $(LIBNETSNMP_CFLAGS) -@WITH_NEON_TRUE@am__append_4 = $(LIBNEON_CFLAGS) -@WITH_LIBPOWERMAN_TRUE@am__append_5 = $(LIBPOWERMAN_CFLAGS) -@WITH_IPMI_TRUE@am__append_6 = $(LIBIPMI_CFLAGS) +@WITH_USB_TRUE@am__append_1 = $(LIBUSB_CFLAGS) +@WITH_SNMP_TRUE@am__append_2 = $(LIBNETSNMP_CFLAGS) +@WITH_NEON_TRUE@am__append_3 = $(LIBNEON_CFLAGS) +@WITH_LIBPOWERMAN_TRUE@am__append_4 = $(LIBPOWERMAN_CFLAGS) +@WITH_IPMI_TRUE@am__append_5 = $(LIBIPMI_CFLAGS) EXTRA_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) @SOME_DRIVERS_FALSE@driverexec_PROGRAMS = $(am__EXEEXT_7) \ @SOME_DRIVERS_FALSE@ $(am__EXEEXT_8) $(am__EXEEXT_9) \ @SOME_DRIVERS_FALSE@ $(am__EXEEXT_10) $(am__EXEEXT_11) \ -@SOME_DRIVERS_FALSE@ $(am__EXEEXT_12) $(am__EXEEXT_13) \ -@SOME_DRIVERS_FALSE@ upsdrvctl$(EXEEXT) +@SOME_DRIVERS_FALSE@ $(am__EXEEXT_12) $(am__EXEEXT_13) @SOME_DRIVERS_TRUE@driverexec_PROGRAMS = $(DRIVER_BUILD_LIST) \ @SOME_DRIVERS_TRUE@ $(am__EXEEXT_7) $(am__EXEEXT_8) \ @SOME_DRIVERS_TRUE@ $(am__EXEEXT_9) $(am__EXEEXT_10) \ @SOME_DRIVERS_TRUE@ $(am__EXEEXT_11) $(am__EXEEXT_12) \ -@SOME_DRIVERS_TRUE@ $(am__EXEEXT_13) skel$(EXEEXT) \ -@SOME_DRIVERS_TRUE@ upsdrvctl$(EXEEXT) -@SOME_DRIVERS_FALSE@@WITH_SERIAL_TRUE@am__append_7 = $(SERIAL_DRIVERLIST) -@SOME_DRIVERS_FALSE@@WITH_SNMP_TRUE@am__append_8 = $(SNMP_DRIVERLIST) -@SOME_DRIVERS_FALSE@@WITH_USB_TRUE@am__append_9 = $(USB_LIBUSB_DRIVERLIST) -@SOME_DRIVERS_FALSE@@WITH_HAL_TRUE@halexec_PROGRAMS = \ -@SOME_DRIVERS_FALSE@@WITH_HAL_TRUE@ $(am__EXEEXT_14) -@SOME_DRIVERS_FALSE@@WITH_NEON_TRUE@am__append_10 = $(NEONXML_DRIVERLIST) -@SOME_DRIVERS_FALSE@@WITH_LIBPOWERMAN_TRUE@am__append_11 = powerman-pdu -@SOME_DRIVERS_FALSE@@WITH_IPMI_TRUE@am__append_12 = nut-ipmipsu -@SOME_DRIVERS_FALSE@@WITH_MACOSX_TRUE@am__append_13 = $(MACOSX_DRIVERLIST) -@WITH_SSL_TRUE@am__append_14 = $(LIBSSL_CFLAGS) -@WITH_SSL_TRUE@am__append_15 = $(LIBSSL_LIBS) -@WITH_FREEIPMI_TRUE@am__append_16 = nut-libfreeipmi.c -@WITH_SERIAL_TRUE@am__append_17 = -DQX_SERIAL -@WITH_SERIAL_TRUE@am__append_18 = $(SERLIBS) serial.o -@WITH_USB_TRUE@am__append_19 = -DQX_USB -@WITH_USB_TRUE@am__append_20 = libusb.c usb-common.c -@WITH_USB_TRUE@am__append_21 = $(LIBUSB_LIBS) +@SOME_DRIVERS_TRUE@ $(am__EXEEXT_13) skel$(EXEEXT) +@SOME_DRIVERS_FALSE@@WITH_SERIAL_TRUE@am__append_6 = $(SERIAL_DRIVERLIST) +@SOME_DRIVERS_FALSE@@WITH_SNMP_TRUE@am__append_7 = $(SNMP_DRIVERLIST) +@SOME_DRIVERS_FALSE@@WITH_USB_TRUE@am__append_8 = $(USB_LIBUSB_DRIVERLIST) +@SOME_DRIVERS_FALSE@@WITH_NEON_TRUE@am__append_9 = $(NEONXML_DRIVERLIST) +@SOME_DRIVERS_FALSE@@WITH_LIBPOWERMAN_TRUE@am__append_10 = powerman-pdu +@SOME_DRIVERS_FALSE@@WITH_IPMI_TRUE@am__append_11 = nut-ipmipsu +@SOME_DRIVERS_FALSE@@WITH_MACOSX_TRUE@am__append_12 = $(MACOSX_DRIVERLIST) +sbin_PROGRAMS = upsdrvctl$(EXEEXT) +@WITH_SSL_TRUE@am__append_13 = $(LIBSSL_CFLAGS) +@WITH_SSL_TRUE@am__append_14 = $(LIBSSL_LIBS) +@WITH_FREEIPMI_TRUE@am__append_15 = nut-libfreeipmi.c +@WITH_SERIAL_TRUE@am__append_16 = -DQX_SERIAL +@WITH_SERIAL_TRUE@am__append_17 = $(SERLIBS) serial.o +@WITH_USB_TRUE@am__append_18 = -DQX_USB +@WITH_USB_TRUE@am__append_19 = libusb.c usb-common.c +@WITH_USB_TRUE@am__append_20 = $(LIBUSB_LIBS) subdir = drivers DIST_COMMON = $(dist_noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -104,7 +100,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -114,10 +109,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -130,11 +124,6 @@ libdummy_a_LIBADD = am_libdummy_a_OBJECTS = main.$(OBJEXT) dstate.$(OBJEXT) \ serial.$(OBJEXT) libdummy_a_OBJECTS = $(am_libdummy_a_OBJECTS) -libnuthalmain_a_AR = $(AR) $(ARFLAGS) -libnuthalmain_a_LIBADD = -am_libnuthalmain_a_OBJECTS = main-hal.$(OBJEXT) dstate-hal.$(OBJEXT) \ - usb-common.$(OBJEXT) -libnuthalmain_a_OBJECTS = $(am_libnuthalmain_a_OBJECTS) am__EXEEXT_1 = al175$(EXEEXT) bcmxcp$(EXEEXT) belkin$(EXEEXT) \ belkinunv$(EXEEXT) bestfcom$(EXEEXT) bestfortress$(EXEEXT) \ bestuferrups$(EXEEXT) bestups$(EXEEXT) dummy-ups$(EXEEXT) \ @@ -153,7 +142,8 @@ am__EXEEXT_1 = al175$(EXEEXT) bcmxcp$(EXEEXT) belkin$(EXEEXT) \ am__EXEEXT_2 = snmp-ups$(EXEEXT) am__EXEEXT_3 = usbhid-ups$(EXEEXT) bcmxcp_usb$(EXEEXT) \ tripplite_usb$(EXEEXT) blazer_usb$(EXEEXT) \ - richcomm_usb$(EXEEXT) riello_usb$(EXEEXT) nutdrv_qx$(EXEEXT) + richcomm_usb$(EXEEXT) riello_usb$(EXEEXT) \ + nutdrv_atcl_usb$(EXEEXT) nutdrv_qx$(EXEEXT) am__EXEEXT_4 = $(am__EXEEXT_3) am__EXEEXT_5 = netxml-ups$(EXEEXT) am__EXEEXT_6 = macosx-ups$(EXEEXT) @@ -165,14 +155,8 @@ am__EXEEXT_6 = macosx-ups$(EXEEXT) @SOME_DRIVERS_FALSE@@WITH_IPMI_TRUE@am__EXEEXT_12 = \ @SOME_DRIVERS_FALSE@@WITH_IPMI_TRUE@ nut-ipmipsu$(EXEEXT) @SOME_DRIVERS_FALSE@@WITH_MACOSX_TRUE@am__EXEEXT_13 = $(am__EXEEXT_6) -am__installdirs = "$(DESTDIR)$(driverexecdir)" \ - "$(DESTDIR)$(halexecdir)" -am__EXEEXT_14 = hald-addon-usbhid-ups$(EXEEXT) \ - hald-addon-bcmxcp_usb$(EXEEXT) \ - hald-addon-tripplite_usb$(EXEEXT) \ - hald-addon-blazer_usb$(EXEEXT) hald-addon-riello_usb$(EXEEXT) \ - hald-addon-nutdrv_qx$(EXEEXT) -PROGRAMS = $(driverexec_PROGRAMS) $(halexec_PROGRAMS) +am__installdirs = "$(DESTDIR)$(driverexecdir)" "$(DESTDIR)$(sbindir)" +PROGRAMS = $(driverexec_PROGRAMS) $(sbin_PROGRAMS) am_al175_OBJECTS = al175.$(OBJEXT) al175_OBJECTS = $(am_al175_OBJECTS) al175_LDADD = $(LDADD) @@ -264,56 +248,6 @@ am_genericups_OBJECTS = genericups.$(OBJEXT) genericups_OBJECTS = $(am_genericups_OBJECTS) genericups_LDADD = $(LDADD) genericups_DEPENDENCIES = $(am__DEPENDENCIES_2) -am_hald_addon_bcmxcp_usb_OBJECTS = bcmxcp_usb.$(OBJEXT) \ - bcmxcp.$(OBJEXT) -hald_addon_bcmxcp_usb_OBJECTS = $(am_hald_addon_bcmxcp_usb_OBJECTS) -hald_addon_bcmxcp_usb_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_hald_addon_blazer_usb_OBJECTS = blazer.$(OBJEXT) \ - blazer_usb.$(OBJEXT) libusb.$(OBJEXT) -hald_addon_blazer_usb_OBJECTS = $(am_hald_addon_blazer_usb_OBJECTS) -hald_addon_blazer_usb_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am__objects_1 = \ - hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_mecer.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_megatec.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_mustek.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_voltronic.$(OBJEXT) \ - hald_addon_nutdrv_qx-nutdrv_qx_zinto.$(OBJEXT) -am_hald_addon_nutdrv_qx_OBJECTS = \ - hald_addon_nutdrv_qx-nutdrv_qx.$(OBJEXT) \ - hald_addon_nutdrv_qx-libusb.$(OBJEXT) $(am__objects_1) -hald_addon_nutdrv_qx_OBJECTS = $(am_hald_addon_nutdrv_qx_OBJECTS) -hald_addon_nutdrv_qx_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -hald_addon_nutdrv_qx_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -am_hald_addon_riello_usb_OBJECTS = riello.$(OBJEXT) \ - riello_usb.$(OBJEXT) libusb.$(OBJEXT) -hald_addon_riello_usb_OBJECTS = $(am_hald_addon_riello_usb_OBJECTS) -hald_addon_riello_usb_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_hald_addon_tripplite_usb_OBJECTS = tripplite_usb.$(OBJEXT) \ - libusb.$(OBJEXT) -hald_addon_tripplite_usb_OBJECTS = \ - $(am_hald_addon_tripplite_usb_OBJECTS) -hald_addon_tripplite_usb_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am__objects_2 = apc-hid.$(OBJEXT) belkin-hid.$(OBJEXT) \ - cps-hid.$(OBJEXT) explore-hid.$(OBJEXT) liebert-hid.$(OBJEXT) \ - mge-hid.$(OBJEXT) powercom-hid.$(OBJEXT) \ - tripplite-hid.$(OBJEXT) idowell-hid.$(OBJEXT) \ - openups-hid.$(OBJEXT) -am_hald_addon_usbhid_ups_OBJECTS = usbhid-ups.$(OBJEXT) \ - libhid.$(OBJEXT) libusb.$(OBJEXT) hidparser.$(OBJEXT) \ - $(am__objects_2) -hald_addon_usbhid_ups_OBJECTS = $(am_hald_addon_usbhid_ups_OBJECTS) -hald_addon_usbhid_ups_DEPENDENCIES = $(LDADD_HAL_DRIVERS) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_isbmex_OBJECTS = isbmex.$(OBJEXT) isbmex_OBJECTS = $(am_isbmex_OBJECTS) isbmex_DEPENDENCIES = $(am__DEPENDENCIES_3) @@ -363,25 +297,32 @@ am_netxml_ups_OBJECTS = netxml-ups.$(OBJEXT) mge-xml.$(OBJEXT) netxml_ups_OBJECTS = $(am_netxml_ups_OBJECTS) netxml_ups_DEPENDENCIES = $(LDADD_DRIVERS) $(am__DEPENDENCIES_1) am__nut_ipmipsu_SOURCES_DIST = nut-ipmipsu.c nut-libfreeipmi.c -@WITH_FREEIPMI_TRUE@am__objects_3 = nut-libfreeipmi.$(OBJEXT) -am_nut_ipmipsu_OBJECTS = nut-ipmipsu.$(OBJEXT) $(am__objects_3) +@WITH_FREEIPMI_TRUE@am__objects_1 = nut-libfreeipmi.$(OBJEXT) +am_nut_ipmipsu_OBJECTS = nut-ipmipsu.$(OBJEXT) $(am__objects_1) nut_ipmipsu_OBJECTS = $(am_nut_ipmipsu_OBJECTS) nut_ipmipsu_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +am_nutdrv_atcl_usb_OBJECTS = nutdrv_atcl_usb.$(OBJEXT) \ + usb-common.$(OBJEXT) +nutdrv_atcl_usb_OBJECTS = $(am_nutdrv_atcl_usb_OBJECTS) +nutdrv_atcl_usb_DEPENDENCIES = $(LDADD_DRIVERS) $(am__DEPENDENCIES_1) am__nutdrv_qx_SOURCES_DIST = nutdrv_qx.c libusb.c usb-common.c \ nutdrv_qx_blazer-common.c nutdrv_qx_mecer.c \ nutdrv_qx_megatec.c nutdrv_qx_megatec-old.c nutdrv_qx_mustek.c \ - nutdrv_qx_voltronic.c nutdrv_qx_zinto.c -@WITH_USB_TRUE@am__objects_4 = nutdrv_qx-libusb.$(OBJEXT) \ + nutdrv_qx_q1.c nutdrv_qx_voltronic.c nutdrv_qx_voltronic-qs.c \ + nutdrv_qx_zinto.c +@WITH_USB_TRUE@am__objects_2 = nutdrv_qx-libusb.$(OBJEXT) \ @WITH_USB_TRUE@ nutdrv_qx-usb-common.$(OBJEXT) -am__objects_5 = nutdrv_qx-nutdrv_qx_blazer-common.$(OBJEXT) \ +am__objects_3 = nutdrv_qx-nutdrv_qx_blazer-common.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_mecer.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_megatec.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_megatec-old.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_mustek.$(OBJEXT) \ + nutdrv_qx-nutdrv_qx_q1.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_voltronic.$(OBJEXT) \ + nutdrv_qx-nutdrv_qx_voltronic-qs.$(OBJEXT) \ nutdrv_qx-nutdrv_qx_zinto.$(OBJEXT) -am_nutdrv_qx_OBJECTS = nutdrv_qx-nutdrv_qx.$(OBJEXT) $(am__objects_4) \ - $(am__objects_5) +am_nutdrv_qx_OBJECTS = nutdrv_qx-nutdrv_qx.$(OBJEXT) $(am__objects_2) \ + $(am__objects_3) nutdrv_qx_OBJECTS = $(am_nutdrv_qx_OBJECTS) @WITH_SERIAL_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) serial.o @WITH_USB_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) @@ -438,7 +379,7 @@ am_snmp_ups_OBJECTS = snmp-ups.$(OBJEXT) apc-mib.$(OBJEXT) \ ietf-mib.$(OBJEXT) mge-mib.$(OBJEXT) netvision-mib.$(OBJEXT) \ powerware-mib.$(OBJEXT) raritan-pdu-mib.$(OBJEXT) \ bestpower-mib.$(OBJEXT) cyberpower-mib.$(OBJEXT) \ - delta_ups-mib.$(OBJEXT) + delta_ups-mib.$(OBJEXT) xppc-mib.$(OBJEXT) snmp_ups_OBJECTS = $(am_snmp_ups_OBJECTS) snmp_ups_DEPENDENCIES = $(LDADD_DRIVERS) $(am__DEPENDENCIES_1) am_solis_OBJECTS = solis.$(OBJEXT) @@ -462,9 +403,14 @@ upscode2_DEPENDENCIES = $(am__DEPENDENCIES_3) am_upsdrvctl_OBJECTS = upsdrvctl.$(OBJEXT) upsdrvctl_OBJECTS = $(am_upsdrvctl_OBJECTS) upsdrvctl_DEPENDENCIES = $(LDADD_COMMON) +am__objects_4 = apc-hid.$(OBJEXT) belkin-hid.$(OBJEXT) \ + cps-hid.$(OBJEXT) explore-hid.$(OBJEXT) liebert-hid.$(OBJEXT) \ + mge-hid.$(OBJEXT) powercom-hid.$(OBJEXT) \ + tripplite-hid.$(OBJEXT) idowell-hid.$(OBJEXT) \ + openups-hid.$(OBJEXT) am_usbhid_ups_OBJECTS = usbhid-ups.$(OBJEXT) libhid.$(OBJEXT) \ libusb.$(OBJEXT) hidparser.$(OBJEXT) usb-common.$(OBJEXT) \ - $(am__objects_2) + $(am__objects_4) usbhid_ups_OBJECTS = $(am_usbhid_ups_OBJECTS) usbhid_ups_DEPENDENCIES = $(LDADD_DRIVERS) $(am__DEPENDENCIES_1) am_victronups_OBJECTS = victronups.$(OBJEXT) @@ -484,25 +430,20 @@ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -SOURCES = $(libdummy_a_SOURCES) $(libnuthalmain_a_SOURCES) \ - $(al175_SOURCES) $(apcsmart_SOURCES) $(apcsmart_old_SOURCES) \ - $(apcupsd_ups_SOURCES) $(bcmxcp_SOURCES) $(bcmxcp_usb_SOURCES) \ - $(belkin_SOURCES) $(belkinunv_SOURCES) $(bestfcom_SOURCES) \ - bestfortress.c $(bestuferrups_SOURCES) $(bestups_SOURCES) \ +SOURCES = $(libdummy_a_SOURCES) $(al175_SOURCES) $(apcsmart_SOURCES) \ + $(apcsmart_old_SOURCES) $(apcupsd_ups_SOURCES) \ + $(bcmxcp_SOURCES) $(bcmxcp_usb_SOURCES) $(belkin_SOURCES) \ + $(belkinunv_SOURCES) $(bestfcom_SOURCES) bestfortress.c \ + $(bestuferrups_SOURCES) $(bestups_SOURCES) \ $(blazer_ser_SOURCES) $(blazer_usb_SOURCES) $(clone_SOURCES) \ $(clone_outlet_SOURCES) $(dummy_ups_SOURCES) $(etapro_SOURCES) \ $(everups_SOURCES) $(gamatronic_SOURCES) $(genericups_SOURCES) \ - $(hald_addon_bcmxcp_usb_SOURCES) \ - $(hald_addon_blazer_usb_SOURCES) \ - $(hald_addon_nutdrv_qx_SOURCES) \ - $(hald_addon_riello_usb_SOURCES) \ - $(hald_addon_tripplite_usb_SOURCES) \ - $(hald_addon_usbhid_ups_SOURCES) $(isbmex_SOURCES) \ - $(ivtscd_SOURCES) $(liebert_SOURCES) $(liebert_esp2_SOURCES) \ - $(macosx_ups_SOURCES) $(masterguard_SOURCES) \ - $(metasys_SOURCES) $(mge_shut_SOURCES) $(mge_utalk_SOURCES) \ - $(microdowell_SOURCES) $(netxml_ups_SOURCES) \ - $(nut_ipmipsu_SOURCES) $(nutdrv_qx_SOURCES) \ + $(isbmex_SOURCES) $(ivtscd_SOURCES) $(liebert_SOURCES) \ + $(liebert_esp2_SOURCES) $(macosx_ups_SOURCES) \ + $(masterguard_SOURCES) $(metasys_SOURCES) $(mge_shut_SOURCES) \ + $(mge_utalk_SOURCES) $(microdowell_SOURCES) \ + $(netxml_ups_SOURCES) $(nut_ipmipsu_SOURCES) \ + $(nutdrv_atcl_usb_SOURCES) $(nutdrv_qx_SOURCES) \ $(oldmge_shut_SOURCES) $(oneac_SOURCES) $(optiups_SOURCES) \ $(powercom_SOURCES) $(powerman_pdu_SOURCES) \ $(powerpanel_SOURCES) $(rhino_SOURCES) $(richcomm_usb_SOURCES) \ @@ -512,25 +453,20 @@ SOURCES = $(libdummy_a_SOURCES) $(libnuthalmain_a_SOURCES) \ $(tripplitesu_SOURCES) $(upscode2_SOURCES) \ $(upsdrvctl_SOURCES) $(usbhid_ups_SOURCES) \ $(victronups_SOURCES) -DIST_SOURCES = $(libdummy_a_SOURCES) $(libnuthalmain_a_SOURCES) \ - $(al175_SOURCES) $(apcsmart_SOURCES) $(apcsmart_old_SOURCES) \ +DIST_SOURCES = $(libdummy_a_SOURCES) $(al175_SOURCES) \ + $(apcsmart_SOURCES) $(apcsmart_old_SOURCES) \ $(apcupsd_ups_SOURCES) $(bcmxcp_SOURCES) $(bcmxcp_usb_SOURCES) \ $(belkin_SOURCES) $(belkinunv_SOURCES) $(bestfcom_SOURCES) \ bestfortress.c $(bestuferrups_SOURCES) $(bestups_SOURCES) \ $(blazer_ser_SOURCES) $(blazer_usb_SOURCES) $(clone_SOURCES) \ $(clone_outlet_SOURCES) $(dummy_ups_SOURCES) $(etapro_SOURCES) \ $(everups_SOURCES) $(gamatronic_SOURCES) $(genericups_SOURCES) \ - $(hald_addon_bcmxcp_usb_SOURCES) \ - $(hald_addon_blazer_usb_SOURCES) \ - $(hald_addon_nutdrv_qx_SOURCES) \ - $(hald_addon_riello_usb_SOURCES) \ - $(hald_addon_tripplite_usb_SOURCES) \ - $(hald_addon_usbhid_ups_SOURCES) $(isbmex_SOURCES) \ - $(ivtscd_SOURCES) $(liebert_SOURCES) $(liebert_esp2_SOURCES) \ - $(macosx_ups_SOURCES) $(masterguard_SOURCES) \ - $(metasys_SOURCES) $(mge_shut_SOURCES) $(mge_utalk_SOURCES) \ - $(microdowell_SOURCES) $(netxml_ups_SOURCES) \ - $(am__nut_ipmipsu_SOURCES_DIST) $(am__nutdrv_qx_SOURCES_DIST) \ + $(isbmex_SOURCES) $(ivtscd_SOURCES) $(liebert_SOURCES) \ + $(liebert_esp2_SOURCES) $(macosx_ups_SOURCES) \ + $(masterguard_SOURCES) $(metasys_SOURCES) $(mge_shut_SOURCES) \ + $(mge_utalk_SOURCES) $(microdowell_SOURCES) \ + $(netxml_ups_SOURCES) $(am__nut_ipmipsu_SOURCES_DIST) \ + $(nutdrv_atcl_usb_SOURCES) $(am__nutdrv_qx_SOURCES_DIST) \ $(oldmge_shut_SOURCES) $(oneac_SOURCES) $(optiups_SOURCES) \ $(powercom_SOURCES) $(powerman_pdu_SOURCES) \ $(powerpanel_SOURCES) $(rhino_SOURCES) $(richcomm_usb_SOURCES) \ @@ -591,10 +527,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -606,8 +538,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -693,6 +623,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -740,7 +671,6 @@ udevdir = @udevdir@ #FIXME: SERLIBS is only useful for LDADD_DRIVERS_SERIAL not for LDADD_COMMON LDADD_COMMON = ../common/libcommon.la ../common/libparseconf.la LDADD_DRIVERS = $(LDADD_COMMON) main.o dstate.o -LDADD_HAL_DRIVERS = $(LDADD_COMMON) libnuthalmain.a LDADD_DRIVERS_SERIAL = $(LDADD_DRIVERS) $(SERLIBS) serial.o # most targets are drivers, so make this the default @@ -749,8 +679,7 @@ LDADD = $(LDADD_DRIVERS_SERIAL) # files. In any case, CFLAGS are only -I options, so there is no harm, # but only add them if we really use the target. AM_CFLAGS = -I$(top_srcdir)/include $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) $(am__append_5) \ - $(am__append_6) + $(am__append_3) $(am__append_4) $(am__append_5) SERIAL_DRIVERLIST = al175 bcmxcp belkin belkinunv bestfcom \ bestfortress bestuferrups bestups dummy-ups etapro everups \ gamatronic genericups isbmex liebert liebert-esp2 masterguard metasys \ @@ -761,16 +690,13 @@ SERIAL_DRIVERLIST = al175 bcmxcp belkin belkinunv bestfcom \ SNMP_DRIVERLIST = snmp-ups USB_LIBUSB_DRIVERLIST = usbhid-ups bcmxcp_usb tripplite_usb \ - blazer_usb richcomm_usb riello_usb nutdrv_qx + blazer_usb richcomm_usb riello_usb \ + nutdrv_atcl_usb \ + nutdrv_qx USB_DRIVERLIST = $(USB_LIBUSB_DRIVERLIST) -HAL_DRIVERLIST = hald-addon-usbhid-ups hald-addon-bcmxcp_usb \ - hald-addon-tripplite_usb hald-addon-blazer_usb hald-addon-riello_usb \ - hald-addon-nutdrv_qx - NEONXML_DRIVERLIST = netxml-ups MACOSX_DRIVERLIST = macosx-ups -@SOME_DRIVERS_FALSE@@WITH_HAL_TRUE@halexecdir = $(HAL_CALLOUTS_PATH) # ========================================================================== # Driver build details @@ -830,9 +756,9 @@ riello_ser_LDADD = $(LDADD) -lm # dummy dummy_ups_SOURCES = dummy-ups.c dummy_ups_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/clients \ - $(am__append_14) + $(am__append_13) dummy_ups_LDADD = $(LDADD_DRIVERS) ../clients/libupsclient.la \ - $(am__append_15) + $(am__append_14) # Clone drivers clone_SOURCES = clone.c @@ -862,6 +788,8 @@ bcmxcp_usb_SOURCES = bcmxcp_usb.c bcmxcp.c usb-common.c bcmxcp_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) blazer_usb_SOURCES = blazer.c blazer_usb.c libusb.c usb-common.c blazer_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) -lm +nutdrv_atcl_usb_SOURCES = nutdrv_atcl_usb.c usb-common.c +nutdrv_atcl_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) richcomm_usb_SOURCES = richcomm_usb.c usb-common.c richcomm_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LIBS) riello_usb_SOURCES = riello.c riello_usb.c libusb.c usb-common.c @@ -876,27 +804,11 @@ mge_shut_LDADD = $(LDADD) # SNMP snmp_ups_SOURCES = snmp-ups.c apc-mib.c baytech-mib.c compaq-mib.c eaton-mib.c \ ietf-mib.c mge-mib.c netvision-mib.c powerware-mib.c raritan-pdu-mib.c \ - bestpower-mib.c cyberpower-mib.c delta_ups-mib.c + bestpower-mib.c cyberpower-mib.c delta_ups-mib.c \ + xppc-mib.c snmp_ups_LDADD = $(LDADD_DRIVERS) $(LIBNETSNMP_LIBS) -# HAL -hald_addon_usbhid_ups_SOURCES = usbhid-ups.c libhid.c libusb.c hidparser.c \ - $(USBHID_UPS_SUBDRIVERS) - -hald_addon_usbhid_ups_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -hald_addon_tripplite_usb_SOURCES = tripplite_usb.c libusb.c -hald_addon_tripplite_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm -hald_addon_bcmxcp_usb_SOURCES = bcmxcp_usb.c bcmxcp.c -hald_addon_bcmxcp_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -hald_addon_blazer_usb_SOURCES = blazer.c blazer_usb.c libusb.c -hald_addon_blazer_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm -hald_addon_riello_usb_SOURCES = riello.c riello_usb.c libusb.c -hald_addon_riello_usb_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm -hald_addon_nutdrv_qx_SOURCES = nutdrv_qx.c libusb.c $(NUTDRV_QX_SUBDRIVERS) -hald_addon_nutdrv_qx_LDADD = $(LDADD_HAL_DRIVERS) $(LIBUSB_LIBS) $(LIBHAL_LIBS) -lm -hald_addon_nutdrv_qx_CFLAGS = $(AM_CFLAGS) -DQX_USB - # NEON XML/HTTP netxml_ups_SOURCES = netxml-ups.c mge-xml.c netxml_ups_LDADD = $(LDADD_DRIVERS) $(LIBNEON_LIBS) @@ -906,7 +818,7 @@ powerman_pdu_SOURCES = powerman-pdu.c powerman_pdu_LDADD = $(LDADD) $(LIBPOWERMAN_LIBS) # IPMI PSU -nut_ipmipsu_SOURCES = nut-ipmipsu.c $(am__append_16) +nut_ipmipsu_SOURCES = nut-ipmipsu.c $(am__append_15) nut_ipmipsu_LDADD = $(LDADD) $(LIBIPMI_LIBS) # Mac OS X metadriver @@ -915,14 +827,14 @@ macosx_ups_LDFLAGS = $(LDFLAGS) -framework IOKit -framework CoreFoundation macosx_ups_SOURCES = macosx-ups.c # nutdrv_qx USB/Serial -nutdrv_qx_SOURCES = nutdrv_qx.c $(am__append_20) \ +nutdrv_qx_SOURCES = nutdrv_qx.c $(am__append_19) \ $(NUTDRV_QX_SUBDRIVERS) -nutdrv_qx_LDADD = $(LDADD_DRIVERS) -lm $(am__append_18) \ - $(am__append_21) -nutdrv_qx_CFLAGS = $(AM_CFLAGS) $(am__append_17) $(am__append_19) +nutdrv_qx_LDADD = $(LDADD_DRIVERS) -lm $(am__append_17) \ + $(am__append_20) +nutdrv_qx_CFLAGS = $(AM_CFLAGS) $(am__append_16) $(am__append_18) NUTDRV_QX_SUBDRIVERS = nutdrv_qx_blazer-common.c nutdrv_qx_mecer.c \ nutdrv_qx_megatec.c nutdrv_qx_megatec-old.c nutdrv_qx_mustek.c \ - nutdrv_qx_voltronic.c nutdrv_qx_zinto.c + nutdrv_qx_q1.c nutdrv_qx_voltronic.c nutdrv_qx_voltronic-qs.c nutdrv_qx_zinto.c # ---------------------------------------------------------------------- @@ -931,31 +843,24 @@ NUTDRV_QX_SUBDRIVERS = nutdrv_qx_blazer-common.c nutdrv_qx_mecer.c \ # distributed by "make dist". dist_noinst_HEADERS = apc-mib.h apc-hid.h baytech-mib.h bcmxcp.h \ bcmxcp_io.h belkin.h belkin-hid.h bestpower-mib.h blazer.h cps-hid.h dstate.h \ - dstate-hal.h dummy-ups.h eaton-mib.h explore-hid.h gamatronic.h genericups.h \ + dummy-ups.h eaton-mib.h explore-hid.h gamatronic.h genericups.h \ hidparser.h hidtypes.h ietf-mib.h libhid.h libshut.h libusb.h liebert-hid.h \ - main.h main-hal.h mge-hid.h mge-mib.h mge-shut.h mge-utalk.h \ + main.h mge-hid.h mge-mib.h mge-shut.h mge-utalk.h \ mge-xml.h microdowell.h netvision-mib.h netxml-ups.h nut-ipmi.h oneac.h \ powercom.h powerpanel.h powerp-bin.h powerp-txt.h powerware-mib.h raritan-pdu-mib.h \ safenet.h serial.h snmp-ups.h solis.h tripplite.h tripplite-hid.h \ upshandler.h usb-common.h usbhid-ups.h powercom-hid.h compaq-mib.h idowell-hid.h \ apcsmart.h apcsmart_tabs.h apcsmart-old.h apcupsd-ups.h cyberpower-mib.h riello.h openups-hid.h \ delta_ups-mib.h nutdrv_qx.h nutdrv_qx_blazer-common.h nutdrv_qx_mecer.h \ - nutdrv_qx_megatec.h nutdrv_qx_megatec-old.h nutdrv_qx_mustek.h nutdrv_qx_voltronic.h \ - nutdrv_qx_zinto.h + nutdrv_qx_megatec.h nutdrv_qx_megatec-old.h nutdrv_qx_mustek.h nutdrv_qx_q1.h \ + nutdrv_qx_voltronic.h nutdrv_qx_voltronic-qs.h nutdrv_qx_zinto.h \ + xppc-mib.h # Define a dummy library so that Automake builds rules for the # corresponding object files. This library is not actually built, - -# the nuthalmain library combines the code for main-hal.c and -# dstate-hal.c. It is necessary for Automake-technical reasons, -# because per-object CFLAGS can only be specified for libraries, not -# for object files. This library is used during the build process, -# and is not meant to be installed. -EXTRA_LIBRARIES = libdummy.a libnuthalmain.a +EXTRA_LIBRARIES = libdummy.a libdummy_a_SOURCES = main.c dstate.c serial.c -libnuthalmain_a_SOURCES = main-hal.c dstate-hal.c usb-common.c -MOSTLYCLEANFILES = libnuthalmain.a all: all-am .SUFFIXES: @@ -994,10 +899,6 @@ libdummy.a: $(libdummy_a_OBJECTS) $(libdummy_a_DEPENDENCIES) $(EXTRA_libdummy_a_ -rm -f libdummy.a $(libdummy_a_AR) libdummy.a $(libdummy_a_OBJECTS) $(libdummy_a_LIBADD) $(RANLIB) libdummy.a -libnuthalmain.a: $(libnuthalmain_a_OBJECTS) $(libnuthalmain_a_DEPENDENCIES) $(EXTRA_libnuthalmain_a_DEPENDENCIES) - -rm -f libnuthalmain.a - $(libnuthalmain_a_AR) libnuthalmain.a $(libnuthalmain_a_OBJECTS) $(libnuthalmain_a_LIBADD) - $(RANLIB) libnuthalmain.a install-driverexecPROGRAMS: $(driverexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(driverexec_PROGRAMS)'; test -n "$(driverexecdir)" || list=; \ @@ -1044,12 +945,12 @@ clean-driverexecPROGRAMS: list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list -install-halexecPROGRAMS: $(halexec_PROGRAMS) +install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) - @list='$(halexec_PROGRAMS)'; test -n "$(halexecdir)" || list=; \ + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(halexecdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(halexecdir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ @@ -1067,23 +968,23 @@ install-halexecPROGRAMS: $(halexec_PROGRAMS) while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(halexecdir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(halexecdir)$$dir" || exit $$?; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done -uninstall-halexecPROGRAMS: +uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(halexec_PROGRAMS)'; test -n "$(halexecdir)" || list=; \ + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(halexecdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(halexecdir)" && rm -f $$files + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files -clean-halexecPROGRAMS: - @list='$(halexec_PROGRAMS)'; test -n "$$list" || exit 0; \ +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ @@ -1153,24 +1054,6 @@ gamatronic$(EXEEXT): $(gamatronic_OBJECTS) $(gamatronic_DEPENDENCIES) $(EXTRA_ga genericups$(EXEEXT): $(genericups_OBJECTS) $(genericups_DEPENDENCIES) $(EXTRA_genericups_DEPENDENCIES) @rm -f genericups$(EXEEXT) $(LINK) $(genericups_OBJECTS) $(genericups_LDADD) $(LIBS) -hald-addon-bcmxcp_usb$(EXEEXT): $(hald_addon_bcmxcp_usb_OBJECTS) $(hald_addon_bcmxcp_usb_DEPENDENCIES) $(EXTRA_hald_addon_bcmxcp_usb_DEPENDENCIES) - @rm -f hald-addon-bcmxcp_usb$(EXEEXT) - $(LINK) $(hald_addon_bcmxcp_usb_OBJECTS) $(hald_addon_bcmxcp_usb_LDADD) $(LIBS) -hald-addon-blazer_usb$(EXEEXT): $(hald_addon_blazer_usb_OBJECTS) $(hald_addon_blazer_usb_DEPENDENCIES) $(EXTRA_hald_addon_blazer_usb_DEPENDENCIES) - @rm -f hald-addon-blazer_usb$(EXEEXT) - $(LINK) $(hald_addon_blazer_usb_OBJECTS) $(hald_addon_blazer_usb_LDADD) $(LIBS) -hald-addon-nutdrv_qx$(EXEEXT): $(hald_addon_nutdrv_qx_OBJECTS) $(hald_addon_nutdrv_qx_DEPENDENCIES) $(EXTRA_hald_addon_nutdrv_qx_DEPENDENCIES) - @rm -f hald-addon-nutdrv_qx$(EXEEXT) - $(hald_addon_nutdrv_qx_LINK) $(hald_addon_nutdrv_qx_OBJECTS) $(hald_addon_nutdrv_qx_LDADD) $(LIBS) -hald-addon-riello_usb$(EXEEXT): $(hald_addon_riello_usb_OBJECTS) $(hald_addon_riello_usb_DEPENDENCIES) $(EXTRA_hald_addon_riello_usb_DEPENDENCIES) - @rm -f hald-addon-riello_usb$(EXEEXT) - $(LINK) $(hald_addon_riello_usb_OBJECTS) $(hald_addon_riello_usb_LDADD) $(LIBS) -hald-addon-tripplite_usb$(EXEEXT): $(hald_addon_tripplite_usb_OBJECTS) $(hald_addon_tripplite_usb_DEPENDENCIES) $(EXTRA_hald_addon_tripplite_usb_DEPENDENCIES) - @rm -f hald-addon-tripplite_usb$(EXEEXT) - $(LINK) $(hald_addon_tripplite_usb_OBJECTS) $(hald_addon_tripplite_usb_LDADD) $(LIBS) -hald-addon-usbhid-ups$(EXEEXT): $(hald_addon_usbhid_ups_OBJECTS) $(hald_addon_usbhid_ups_DEPENDENCIES) $(EXTRA_hald_addon_usbhid_ups_DEPENDENCIES) - @rm -f hald-addon-usbhid-ups$(EXEEXT) - $(LINK) $(hald_addon_usbhid_ups_OBJECTS) $(hald_addon_usbhid_ups_LDADD) $(LIBS) isbmex$(EXEEXT): $(isbmex_OBJECTS) $(isbmex_DEPENDENCIES) $(EXTRA_isbmex_DEPENDENCIES) @rm -f isbmex$(EXEEXT) $(LINK) $(isbmex_OBJECTS) $(isbmex_LDADD) $(LIBS) @@ -1207,6 +1090,9 @@ netxml-ups$(EXEEXT): $(netxml_ups_OBJECTS) $(netxml_ups_DEPENDENCIES) $(EXTRA_ne nut-ipmipsu$(EXEEXT): $(nut_ipmipsu_OBJECTS) $(nut_ipmipsu_DEPENDENCIES) $(EXTRA_nut_ipmipsu_DEPENDENCIES) @rm -f nut-ipmipsu$(EXEEXT) $(LINK) $(nut_ipmipsu_OBJECTS) $(nut_ipmipsu_LDADD) $(LIBS) +nutdrv_atcl_usb$(EXEEXT): $(nutdrv_atcl_usb_OBJECTS) $(nutdrv_atcl_usb_DEPENDENCIES) $(EXTRA_nutdrv_atcl_usb_DEPENDENCIES) + @rm -f nutdrv_atcl_usb$(EXEEXT) + $(LINK) $(nutdrv_atcl_usb_OBJECTS) $(nutdrv_atcl_usb_LDADD) $(LIBS) nutdrv_qx$(EXEEXT): $(nutdrv_qx_OBJECTS) $(nutdrv_qx_DEPENDENCIES) $(EXTRA_nutdrv_qx_DEPENDENCIES) @rm -f nutdrv_qx$(EXEEXT) $(nutdrv_qx_LINK) $(nutdrv_qx_OBJECTS) $(nutdrv_qx_LDADD) $(LIBS) @@ -1308,7 +1194,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cps-hid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cyberpower-mib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delta_ups-mib.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dstate-hal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dstate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy_ups-dummy-ups.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaton-mib.Po@am__quote@ @@ -1317,15 +1202,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/explore-hid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamatronic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genericups.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-libusb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hidparser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idowell-hid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ietf-mib.Po@am__quote@ @@ -1337,7 +1213,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liebert-hid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liebert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macosx-ups.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-hal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/masterguard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metasys.Po@am__quote@ @@ -1356,6 +1231,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netxml-ups.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nut-ipmipsu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nut-libfreeipmi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_atcl_usb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-libusb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_blazer-common.Po@am__quote@ @@ -1363,6 +1239,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_megatec-old.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_megatec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_mustek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-nutdrv_qx_zinto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nutdrv_qx-usb-common.Po@am__quote@ @@ -1396,6 +1274,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usb-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usbhid-ups.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/victronups.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xppc-mib.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -1446,132 +1325,6 @@ dummy_ups-dummy-ups.obj: dummy-ups.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dummy_ups_CFLAGS) $(CFLAGS) -c -o dummy_ups-dummy-ups.obj `if test -f 'dummy-ups.c'; then $(CYGPATH_W) 'dummy-ups.c'; else $(CYGPATH_W) '$(srcdir)/dummy-ups.c'; fi` -hald_addon_nutdrv_qx-nutdrv_qx.o: nutdrv_qx.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx.o `test -f 'nutdrv_qx.c' || echo '$(srcdir)/'`nutdrv_qx.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx.c' object='hald_addon_nutdrv_qx-nutdrv_qx.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx.o `test -f 'nutdrv_qx.c' || echo '$(srcdir)/'`nutdrv_qx.c - -hald_addon_nutdrv_qx-nutdrv_qx.obj: nutdrv_qx.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx.obj `if test -f 'nutdrv_qx.c'; then $(CYGPATH_W) 'nutdrv_qx.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx.c' object='hald_addon_nutdrv_qx-nutdrv_qx.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx.obj `if test -f 'nutdrv_qx.c'; then $(CYGPATH_W) 'nutdrv_qx.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx.c'; fi` - -hald_addon_nutdrv_qx-libusb.o: libusb.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-libusb.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Tpo -c -o hald_addon_nutdrv_qx-libusb.o `test -f 'libusb.c' || echo '$(srcdir)/'`libusb.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libusb.c' object='hald_addon_nutdrv_qx-libusb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-libusb.o `test -f 'libusb.c' || echo '$(srcdir)/'`libusb.c - -hald_addon_nutdrv_qx-libusb.obj: libusb.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-libusb.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Tpo -c -o hald_addon_nutdrv_qx-libusb.obj `if test -f 'libusb.c'; then $(CYGPATH_W) 'libusb.c'; else $(CYGPATH_W) '$(srcdir)/libusb.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-libusb.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libusb.c' object='hald_addon_nutdrv_qx-libusb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-libusb.obj `if test -f 'libusb.c'; then $(CYGPATH_W) 'libusb.c'; else $(CYGPATH_W) '$(srcdir)/libusb.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.o: nutdrv_qx_blazer-common.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.o `test -f 'nutdrv_qx_blazer-common.c' || echo '$(srcdir)/'`nutdrv_qx_blazer-common.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_blazer-common.c' object='hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.o `test -f 'nutdrv_qx_blazer-common.c' || echo '$(srcdir)/'`nutdrv_qx_blazer-common.c - -hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.obj: nutdrv_qx_blazer-common.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.obj `if test -f 'nutdrv_qx_blazer-common.c'; then $(CYGPATH_W) 'nutdrv_qx_blazer-common.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_blazer-common.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_blazer-common.c' object='hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_blazer-common.obj `if test -f 'nutdrv_qx_blazer-common.c'; then $(CYGPATH_W) 'nutdrv_qx_blazer-common.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_blazer-common.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_mecer.o: nutdrv_qx_mecer.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_mecer.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_mecer.o `test -f 'nutdrv_qx_mecer.c' || echo '$(srcdir)/'`nutdrv_qx_mecer.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_mecer.c' object='hald_addon_nutdrv_qx-nutdrv_qx_mecer.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_mecer.o `test -f 'nutdrv_qx_mecer.c' || echo '$(srcdir)/'`nutdrv_qx_mecer.c - -hald_addon_nutdrv_qx-nutdrv_qx_mecer.obj: nutdrv_qx_mecer.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_mecer.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_mecer.obj `if test -f 'nutdrv_qx_mecer.c'; then $(CYGPATH_W) 'nutdrv_qx_mecer.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_mecer.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mecer.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_mecer.c' object='hald_addon_nutdrv_qx-nutdrv_qx_mecer.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_mecer.obj `if test -f 'nutdrv_qx_mecer.c'; then $(CYGPATH_W) 'nutdrv_qx_mecer.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_mecer.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_megatec.o: nutdrv_qx_megatec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_megatec.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec.o `test -f 'nutdrv_qx_megatec.c' || echo '$(srcdir)/'`nutdrv_qx_megatec.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_megatec.c' object='hald_addon_nutdrv_qx-nutdrv_qx_megatec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec.o `test -f 'nutdrv_qx_megatec.c' || echo '$(srcdir)/'`nutdrv_qx_megatec.c - -hald_addon_nutdrv_qx-nutdrv_qx_megatec.obj: nutdrv_qx_megatec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_megatec.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec.obj `if test -f 'nutdrv_qx_megatec.c'; then $(CYGPATH_W) 'nutdrv_qx_megatec.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_megatec.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_megatec.c' object='hald_addon_nutdrv_qx-nutdrv_qx_megatec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec.obj `if test -f 'nutdrv_qx_megatec.c'; then $(CYGPATH_W) 'nutdrv_qx_megatec.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_megatec.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.o: nutdrv_qx_megatec-old.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.o `test -f 'nutdrv_qx_megatec-old.c' || echo '$(srcdir)/'`nutdrv_qx_megatec-old.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_megatec-old.c' object='hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.o `test -f 'nutdrv_qx_megatec-old.c' || echo '$(srcdir)/'`nutdrv_qx_megatec-old.c - -hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.obj: nutdrv_qx_megatec-old.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.obj `if test -f 'nutdrv_qx_megatec-old.c'; then $(CYGPATH_W) 'nutdrv_qx_megatec-old.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_megatec-old.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_megatec-old.c' object='hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_megatec-old.obj `if test -f 'nutdrv_qx_megatec-old.c'; then $(CYGPATH_W) 'nutdrv_qx_megatec-old.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_megatec-old.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_mustek.o: nutdrv_qx_mustek.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_mustek.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_mustek.o `test -f 'nutdrv_qx_mustek.c' || echo '$(srcdir)/'`nutdrv_qx_mustek.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_mustek.c' object='hald_addon_nutdrv_qx-nutdrv_qx_mustek.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_mustek.o `test -f 'nutdrv_qx_mustek.c' || echo '$(srcdir)/'`nutdrv_qx_mustek.c - -hald_addon_nutdrv_qx-nutdrv_qx_mustek.obj: nutdrv_qx_mustek.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_mustek.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_mustek.obj `if test -f 'nutdrv_qx_mustek.c'; then $(CYGPATH_W) 'nutdrv_qx_mustek.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_mustek.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_mustek.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_mustek.c' object='hald_addon_nutdrv_qx-nutdrv_qx_mustek.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_mustek.obj `if test -f 'nutdrv_qx_mustek.c'; then $(CYGPATH_W) 'nutdrv_qx_mustek.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_mustek.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_voltronic.o: nutdrv_qx_voltronic.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_voltronic.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_voltronic.o `test -f 'nutdrv_qx_voltronic.c' || echo '$(srcdir)/'`nutdrv_qx_voltronic.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_voltronic.c' object='hald_addon_nutdrv_qx-nutdrv_qx_voltronic.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_voltronic.o `test -f 'nutdrv_qx_voltronic.c' || echo '$(srcdir)/'`nutdrv_qx_voltronic.c - -hald_addon_nutdrv_qx-nutdrv_qx_voltronic.obj: nutdrv_qx_voltronic.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_voltronic.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_voltronic.obj `if test -f 'nutdrv_qx_voltronic.c'; then $(CYGPATH_W) 'nutdrv_qx_voltronic.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_voltronic.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_voltronic.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_voltronic.c' object='hald_addon_nutdrv_qx-nutdrv_qx_voltronic.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_voltronic.obj `if test -f 'nutdrv_qx_voltronic.c'; then $(CYGPATH_W) 'nutdrv_qx_voltronic.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_voltronic.c'; fi` - -hald_addon_nutdrv_qx-nutdrv_qx_zinto.o: nutdrv_qx_zinto.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_zinto.o -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_zinto.o `test -f 'nutdrv_qx_zinto.c' || echo '$(srcdir)/'`nutdrv_qx_zinto.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_zinto.c' object='hald_addon_nutdrv_qx-nutdrv_qx_zinto.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_zinto.o `test -f 'nutdrv_qx_zinto.c' || echo '$(srcdir)/'`nutdrv_qx_zinto.c - -hald_addon_nutdrv_qx-nutdrv_qx_zinto.obj: nutdrv_qx_zinto.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -MT hald_addon_nutdrv_qx-nutdrv_qx_zinto.obj -MD -MP -MF $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Tpo -c -o hald_addon_nutdrv_qx-nutdrv_qx_zinto.obj `if test -f 'nutdrv_qx_zinto.c'; then $(CYGPATH_W) 'nutdrv_qx_zinto.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_zinto.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Tpo $(DEPDIR)/hald_addon_nutdrv_qx-nutdrv_qx_zinto.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_zinto.c' object='hald_addon_nutdrv_qx-nutdrv_qx_zinto.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hald_addon_nutdrv_qx_CFLAGS) $(CFLAGS) -c -o hald_addon_nutdrv_qx-nutdrv_qx_zinto.obj `if test -f 'nutdrv_qx_zinto.c'; then $(CYGPATH_W) 'nutdrv_qx_zinto.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_zinto.c'; fi` - mge_shut-usbhid-ups.o: usbhid-ups.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mge_shut_CFLAGS) $(CFLAGS) -MT mge_shut-usbhid-ups.o -MD -MP -MF $(DEPDIR)/mge_shut-usbhid-ups.Tpo -c -o mge_shut-usbhid-ups.o `test -f 'usbhid-ups.c' || echo '$(srcdir)/'`usbhid-ups.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mge_shut-usbhid-ups.Tpo $(DEPDIR)/mge_shut-usbhid-ups.Po @@ -1754,6 +1507,20 @@ nutdrv_qx-nutdrv_qx_mustek.obj: nutdrv_qx_mustek.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_mustek.obj `if test -f 'nutdrv_qx_mustek.c'; then $(CYGPATH_W) 'nutdrv_qx_mustek.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_mustek.c'; fi` +nutdrv_qx-nutdrv_qx_q1.o: nutdrv_qx_q1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_q1.o -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Tpo -c -o nutdrv_qx-nutdrv_qx_q1.o `test -f 'nutdrv_qx_q1.c' || echo '$(srcdir)/'`nutdrv_qx_q1.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_q1.c' object='nutdrv_qx-nutdrv_qx_q1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_q1.o `test -f 'nutdrv_qx_q1.c' || echo '$(srcdir)/'`nutdrv_qx_q1.c + +nutdrv_qx-nutdrv_qx_q1.obj: nutdrv_qx_q1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_q1.obj -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Tpo -c -o nutdrv_qx-nutdrv_qx_q1.obj `if test -f 'nutdrv_qx_q1.c'; then $(CYGPATH_W) 'nutdrv_qx_q1.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_q1.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_q1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_q1.c' object='nutdrv_qx-nutdrv_qx_q1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_q1.obj `if test -f 'nutdrv_qx_q1.c'; then $(CYGPATH_W) 'nutdrv_qx_q1.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_q1.c'; fi` + nutdrv_qx-nutdrv_qx_voltronic.o: nutdrv_qx_voltronic.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_voltronic.o -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic.Tpo -c -o nutdrv_qx-nutdrv_qx_voltronic.o `test -f 'nutdrv_qx_voltronic.c' || echo '$(srcdir)/'`nutdrv_qx_voltronic.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic.Po @@ -1768,6 +1535,20 @@ nutdrv_qx-nutdrv_qx_voltronic.obj: nutdrv_qx_voltronic.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_voltronic.obj `if test -f 'nutdrv_qx_voltronic.c'; then $(CYGPATH_W) 'nutdrv_qx_voltronic.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_voltronic.c'; fi` +nutdrv_qx-nutdrv_qx_voltronic-qs.o: nutdrv_qx_voltronic-qs.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_voltronic-qs.o -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Tpo -c -o nutdrv_qx-nutdrv_qx_voltronic-qs.o `test -f 'nutdrv_qx_voltronic-qs.c' || echo '$(srcdir)/'`nutdrv_qx_voltronic-qs.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_voltronic-qs.c' object='nutdrv_qx-nutdrv_qx_voltronic-qs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_voltronic-qs.o `test -f 'nutdrv_qx_voltronic-qs.c' || echo '$(srcdir)/'`nutdrv_qx_voltronic-qs.c + +nutdrv_qx-nutdrv_qx_voltronic-qs.obj: nutdrv_qx_voltronic-qs.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_voltronic-qs.obj -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Tpo -c -o nutdrv_qx-nutdrv_qx_voltronic-qs.obj `if test -f 'nutdrv_qx_voltronic-qs.c'; then $(CYGPATH_W) 'nutdrv_qx_voltronic-qs.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_voltronic-qs.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_voltronic-qs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nutdrv_qx_voltronic-qs.c' object='nutdrv_qx-nutdrv_qx_voltronic-qs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -c -o nutdrv_qx-nutdrv_qx_voltronic-qs.obj `if test -f 'nutdrv_qx_voltronic-qs.c'; then $(CYGPATH_W) 'nutdrv_qx_voltronic-qs.c'; else $(CYGPATH_W) '$(srcdir)/nutdrv_qx_voltronic-qs.c'; fi` + nutdrv_qx-nutdrv_qx_zinto.o: nutdrv_qx_zinto.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nutdrv_qx_CFLAGS) $(CFLAGS) -MT nutdrv_qx-nutdrv_qx_zinto.o -MD -MP -MF $(DEPDIR)/nutdrv_qx-nutdrv_qx_zinto.Tpo -c -o nutdrv_qx-nutdrv_qx_zinto.o `test -f 'nutdrv_qx_zinto.c' || echo '$(srcdir)/'`nutdrv_qx_zinto.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nutdrv_qx-nutdrv_qx_zinto.Tpo $(DEPDIR)/nutdrv_qx-nutdrv_qx_zinto.Po @@ -1874,7 +1655,7 @@ check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(driverexecdir)" "$(DESTDIR)$(halexecdir)"; do \ + for dir in "$(DESTDIR)$(driverexecdir)" "$(DESTDIR)$(sbindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -1897,7 +1678,6 @@ install-strip: "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -1910,8 +1690,8 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-driverexecPROGRAMS clean-generic clean-halexecPROGRAMS \ - clean-libtool mostlyclean-am +clean-am: clean-driverexecPROGRAMS clean-generic clean-libtool \ + clean-sbinPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -1937,7 +1717,7 @@ install-dvi: install-dvi-am install-dvi-am: -install-exec-am: install-driverexecPROGRAMS install-halexecPROGRAMS +install-exec-am: install-driverexecPROGRAMS install-sbinPROGRAMS install-html: install-html-am @@ -1977,25 +1757,25 @@ ps: ps-am ps-am: -uninstall-am: uninstall-driverexecPROGRAMS uninstall-halexecPROGRAMS +uninstall-am: uninstall-driverexecPROGRAMS uninstall-sbinPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ - clean-driverexecPROGRAMS clean-generic clean-halexecPROGRAMS \ - clean-libtool ctags distclean distclean-compile \ + clean-driverexecPROGRAMS clean-generic clean-libtool \ + clean-sbinPROGRAMS ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-driverexecPROGRAMS \ install-dvi install-dvi-am install-exec install-exec-am \ - install-halexecPROGRAMS install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-sbinPROGRAMS install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-driverexecPROGRAMS \ - uninstall-halexecPROGRAMS + uninstall-sbinPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/drivers/al175.c b/drivers/al175.c index 4b4b652..7d0b02e 100644 --- a/drivers/al175.c +++ b/drivers/al175.c @@ -53,7 +53,7 @@ typedef uint8_t byte_t; #define DRIVER_NAME "Eltek AL175/COMLI driver" -#define DRIVER_VERSION "0.11" +#define DRIVER_VERSION "0.12" /* driver description structure */ upsdrv_info_t upsdrv_info = { @@ -462,7 +462,7 @@ static int al_parse_reply_head(io_head_t *io, const raw_data_t raw_reply_head) const byte_t *reply_head = raw_reply_head.begin - 1; if ( (raw_reply_head.end - raw_reply_head.begin) != 10) { - upsdebugx(3, "%s: wrong size\t(%i != 10)", __func__, (raw_reply_head.end - raw_reply_head.begin)); + upsdebugx(3, "%s: wrong size\t(%i != 10)", __func__, (int)(raw_reply_head.end - raw_reply_head.begin)); return -1; /* wrong size */ } @@ -549,7 +549,7 @@ static int al_parse_reply(io_head_t *io_head, raw_data_t *io_buf, /*const*/ raw_ if ( (raw_reply.end - raw_reply.begin) != (ptrdiff_t)(10 + io_head->len)) { upsdebugx(3, "%s: corrupt sentence\t(%i != %i)", - __func__, raw_reply.end - raw_reply.begin, 10 + io_head->len); + __func__, (int)(raw_reply.end - raw_reply.begin), 10 + io_head->len); return -1; /* corrupt sentence */ } @@ -597,7 +597,7 @@ static int al_check_ack(/*const*/ raw_data_t raw_ack) const byte_t *ack = raw_ack.begin - 1; if ( (raw_ack.end - raw_ack.begin) !=5) { - upsdebugx(3, "%s: wrong size\t(%i != 5)", __func__, raw_ack.end - raw_ack.begin); + upsdebugx(3, "%s: wrong size\t(%i != 5)", __func__, (int)(raw_ack.end - raw_ack.begin)); return -1; /* wrong size */ } @@ -965,7 +965,8 @@ static int al175_read(byte_t *dst, unsigned addr, size_t count) if ( (io.addr != addr) || (io.len != count) ) { upsdebugx(3, "%s: io_head mismatch\t(%x,%x != %x,%x)", - __func__, io.addr, io.len, addr, count); + __func__, io.addr, io.len, addr, + (unsigned int)count); return -1; } diff --git a/drivers/apc-mib.c b/drivers/apc-mib.c index 8851a6f..b52ad1f 100644 --- a/drivers/apc-mib.c +++ b/drivers/apc-mib.c @@ -72,7 +72,7 @@ static info_lkp_t apcc_pwr_info[] = { { 1, "" }, /* unknown */ { 2, "OL" }, /* onLine */ { 3, "OB" }, /* onBattery */ - { 4, "BOOST" }, /* onSmartBoost */ + { 4, "OL BOOST" }, /* onSmartBoost */ { 5, "OFF" }, /* timedSleeping */ { 6, "OFF" }, /* softwareBypass */ { 7, "OFF" }, /* off */ @@ -80,7 +80,7 @@ static info_lkp_t apcc_pwr_info[] = { { 9, "BYPASS" }, /* switchedBypass */ { 10, "BYPASS" }, /* hardwareFailureBypass */ { 11, "OFF" }, /* sleepingUntilPowerReturn */ - { 12, "TRIM" }, /* onSmartTrim */ + { 12, "OL TRIM" }, /* onSmartTrim */ { 0, "NULL" } } ; diff --git a/drivers/belkin-hid.c b/drivers/belkin-hid.c index e95b17a..212d6f3 100644 --- a/drivers/belkin-hid.c +++ b/drivers/belkin-hid.c @@ -3,7 +3,7 @@ * Copyright (C) * 2003 - 2008 Arnaud Quette * 2005 Peter Selinger - * 2011 Charles Lepple + * 2011, 2014 Charles Lepple * * Sponsored by MGE UPS SYSTEMS * @@ -29,7 +29,7 @@ #include "belkin-hid.h" #include "usb-common.h" -#define BELKIN_HID_VERSION "Belkin HID 0.15" +#define BELKIN_HID_VERSION "Belkin HID 0.16" /* Belkin */ #define BELKIN_VENDORID 0x050d @@ -65,6 +65,8 @@ static usb_device_id_t belkin_usb_device_table[] = { /* Liebert PowerSure PSA UPS */ { USB_DEVICE(LIEBERT_VENDORID, 0x0001), NULL }, + /* Liebert PowerSure PSI 1440 */ + { USB_DEVICE(LIEBERT_VENDORID, 0x0004), NULL }, /* Terminating entry */ { -1, -1, NULL } diff --git a/drivers/blazer_ser.c b/drivers/blazer_ser.c index 5c75726..7fa7280 100644 --- a/drivers/blazer_ser.c +++ b/drivers/blazer_ser.c @@ -100,7 +100,7 @@ int blazer_command(const char *cmd, char *buf, size_t buflen) void upsdrv_help(void) { - printf("Read The Fine Manual ('man 8 blazer')\n"); + printf("Read The Fine Manual ('man 8 blazer_ser')\n"); } diff --git a/drivers/blazer_usb.c b/drivers/blazer_usb.c index e3ef3fc..7ba4df2 100644 --- a/drivers/blazer_usb.c +++ b/drivers/blazer_usb.c @@ -28,7 +28,7 @@ #include "blazer.h" #define DRIVER_NAME "Megatec/Q1 protocol USB driver" -#define DRIVER_VERSION "0.10" +#define DRIVER_VERSION "0.11" /* driver description structure */ upsdrv_info_t upsdrv_info = { @@ -176,7 +176,7 @@ static int phoenix_command(const char *cmd, char *buf, size_t buflen) static int ippon_command(const char *cmd, char *buf, size_t buflen) { char tmp[64]; - int ret; + int ret, len; size_t i; snprintf(tmp, sizeof(tmp), "%s", cmd); @@ -207,10 +207,19 @@ static int ippon_command(const char *cmd, char *buf, size_t buflen) return ret; } - snprintf(buf, buflen, "%.*s", ret, tmp); - - upsdebugx(3, "read: %.*s", (int)strcspn(buf, "\r"), buf); - return ret; + /* + * As Ippon will always return 64 bytes in response, we have to + * calculate and return length of actual response data here. + * Empty response will look like 0x00 0x0D, otherwise it will be + * data string terminated by 0x0D. + */ + len = (int)strcspn(tmp, "\r"); + upsdebugx(3, "read: %.*s", len, tmp); + if (len > 0) { + len ++; + } + snprintf(buf, buflen, "%.*s", len, tmp); + return len; } @@ -443,7 +452,9 @@ int blazer_command(const char *cmd, char *buf, size_t buflen) case -ETIMEDOUT: /* Connection timed out */ case -EOVERFLOW: /* Value too large for defined data type */ +#ifdef EPROTO case -EPROTO: /* Protocol error */ +#endif default: break; } @@ -480,7 +491,7 @@ int blazer_command(const char *cmd, char *buf, size_t buflen) void upsdrv_help(void) { - printf("Read The Fine Manual ('man 8 blazer')\n"); + printf("Read The Fine Manual ('man 8 blazer_usb')\n"); } @@ -585,7 +596,7 @@ void upsdrv_initups(void) "and make sure you have an up-to-date version of NUT. If this does not help,\n" "try running the driver with at least 'subdriver', 'vendorid' and 'productid'\n" "options specified. Please refer to the man page for details about these options\n" - "(man 8 blazer).\n"); + "(man 8 blazer_usb).\n"); } if (!subdriver_command) { diff --git a/drivers/compaq-mib.c b/drivers/compaq-mib.c index febb9c0..fc9fdd9 100644 --- a/drivers/compaq-mib.c +++ b/drivers/compaq-mib.c @@ -30,7 +30,7 @@ #include "compaq-mib.h" -#define CPQPOWER_MIB_VERSION "1.5" +#define CPQPOWER_MIB_VERSION "1.6" #define DEFAULT_ONDELAY 30 #define DEFAULT_OFFDELAY 20 @@ -188,9 +188,10 @@ static snmp_info_t cpqpower_mib[] = { { "ups.L3.realpower", 0, 0.1, CPQPOWER_OID_OUT_POWER ".3", "", SU_OUTPUT_3, NULL }, { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_POWER_STATUS, "OFF", SU_STATUS_PWR, cpqpower_pwr_info }, { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_BATT_STATUS, "", SU_STATUS_PWR, cpqpower_battery_abm_status }, - { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_ALARM_OB, "", SU_STATUS_BATT, cpqpower_alarm_ob }, - { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_ALARM_LB, "", SU_STATUS_BATT, cpqpower_alarm_lb }, -/* { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, IETF_OID_BATT_STATUS, "", SU_STATUS_BATT, ietf_batt_info }, */ + /* The next two lines are no longer supported by MIB ver. 1.76 (Github issue 118) + * { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_ALARM_OB, "", SU_STATUS_BATT, cpqpower_alarm_ob }, + * { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_ALARM_LB, "", SU_STATUS_BATT, cpqpower_alarm_lb }, */ + /* { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, IETF_OID_BATT_STATUS, "", SU_STATUS_BATT, ietf_batt_info }, */ /* FIXME: this should use either .1.3.6.1.4.1.232.165.3.11.1.0 (upsTopologyType) * or .1.3.6.1.4.1.232.165.3.11.2.0 (upsTopoMachineCode) */ { "ups.type", ST_FLAG_STRING, SU_INFOSIZE, CPQPOWER_OID_POWER_STATUS, "", SU_STATUS_PWR, cpqpower_mode_info }, diff --git a/drivers/dstate-hal.c b/drivers/dstate-hal.c deleted file mode 100644 index 6728f0f..0000000 --- a/drivers/dstate-hal.c +++ /dev/null @@ -1,710 +0,0 @@ -/* dstate-hal.c - Network UPS Tools driver-side state management - This is a compatibility interface that encapsulate the HAL bridge - into the NUT dstate API for NUT drivers - - Copyright (C) 2006-2007 Arnaud Quette - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include "common.h" -#include "config.h" -#include "dstate-hal.h" -#include "extstate.h" -/* #include "state.h" -#include "parseconf.h" */ - -#include - -/* FIXME: export command and RW variables (using the HAL example: addon-cpufreq and macbook addon) */ -/* beeper.enable, beeper.disable => SetBeeper(bool) - beeper.toggle => ToggleBeeper(void) - -org.freedesktop.Hal.Device.UPS.SetSounder (bool) - - -Shutdown() or ShutOff() - shutdown.return - shutdown.stayoff - shutdown.reboot - shutdown.reboot.graceful - -#define UPS_ERROR_GENERAL "GeneralError" -#define UPS_ERROR_UNSUPPORTED_FEATURE "FeatureNotSupported" -#define UPS_ERROR_PERMISSION_DENIED "PermissionDenied" - -****** implementation ******* - -#define DBUS_INTERFACE "org.freedesktop.Hal.Device.UPS" - -if (!libhal_device_claim_interface(halctx, udi, DBUS_INTERFACE, - - " \n" - " \n" - " \n" - " \n" - - &dbus_dbus_error)) { - fprintf(stderr, "Cannot claim interface: %s", dbus_dbus_error.message); - goto Error; - } - - -*/ - -/* - * static int sockfd = -1, stale = 1, alarm_active = 0; - * static struct st_tree_t *dtree_root = NULL; - * static struct conn_t *connhead = NULL; - * static struct cmdlist_t *cmdhead = NULL; - * static char *sockfn = NULL; - * static char status_buf[ST_MAX_VALUE_LEN], - * alarm_buf[ST_MAX_VALUE_LEN]; - */ - -struct ups_handler upsh; - -LibHalContext *halctx = NULL; -char *udi; -int ac_present = 0; /* 0 = false ; 1 = true */ -extern char *dbus_methods_introspection; - -static void* runtime_handler(LibHalChangeSet *cs, char* runtime); -static void* level_handler(LibHalChangeSet *cs, char* critical_level); -static void* battery_type_handler(LibHalChangeSet *cs, char* battery_type); - -/* Structure to lookup between NUT and HAL data */ -typedef struct { - const char *nut_name; /* NUT variable name */ - const char *hal_name; /* HAL variable name */ - int hal_type; /* HAL variable type */ - void *(*fun)(LibHalChangeSet *cs, - char *value); /* conversion function. */ -} info_lkp_t; - -enum hal_type_t -{ - NONE = 0, - HAL_TYPE_INT, - HAL_TYPE_BOOL, - HAL_TYPE_STRING -}; - -/* Structure to lookup between NUT commands and HAL/DBus methods */ -typedef struct { - char *nut_name; /* NUT command name */ - char *hal_name; /* HAL/DBus method name */ - char *xml_introspection; /* HAL/DBus method introspection */ -/* FIXME: how to lookup param values between HAL and NUT?? */ -/* void *(*fun)(LibHalChangeSet *cs, - char *value);*/ /* NUT function */ -} method_lkp_t; - -#if 0 -/* Data to lookup between NUT commands and HAL/DBus methods - * for dstate_addcmd() */ -static method_lkp_t nut2hal_cmd[] = -{ - /* ups.status is handled by status_set() calls */ - { - "beeper.enable", - "SetBeeper", - " \n" - " \n" - " \n" - " \n" - }, - - /* Terminating element */ - { NULL, NULL, NULL } -}; -#endif - -/* Data to lookup between NUT and HAL for dstate_setinfo() */ -static info_lkp_t nut2hal_info[] = -{ - /* ups.status is handled by status_set() calls */ - { "battery.charge.low", "battery.charge_level.low", HAL_TYPE_INT, *level_handler }, - /* { "battery.charge.low", "battery.reporting.low", HAL_TYPE_INT, NULL }, */ - { "battery.charge.low", "battery.alarm.design", HAL_TYPE_INT, NULL }, - - { "battery.charge", "battery.charge_level.current", HAL_TYPE_INT, NULL }, - { "battery.charge", "battery.charge_level.percentage", HAL_TYPE_INT, NULL }, - { "battery.charge", "battery.reporting.current", HAL_TYPE_INT, NULL }, - { "battery.charge", "battery.reporting.percentage", HAL_TYPE_INT, NULL }, - { "battery.runtime", "battery.remaining_time", HAL_TYPE_INT, *runtime_handler }, - /* raw version (PbAc) */ - { "battery.type", "battery.reporting.technology", HAL_TYPE_STRING, NULL }, - /* Human readable version */ - { "battery.type", "battery.technology", HAL_TYPE_STRING, *battery_type_handler }, - - /* AQ note: Not sure it fits! */ - /* HAL marked as mandatory! */ - { "battery.voltage", "battery.voltage.current", HAL_TYPE_INT, NULL }, - { "battery.voltage.nominal", "battery.voltage.design", HAL_TYPE_INT, NULL }, - - { "ups.mfr", "battery.vendor", HAL_TYPE_STRING, NULL }, - { "ups.model", "battery.model", HAL_TYPE_STRING, NULL }, - { "ups.serial", "battery.serial", HAL_TYPE_STRING, NULL }, - - /* Terminating element */ - { NULL, NULL, NONE, NULL } -}; - -/* Functions to lookup between NUT and HAL */ -static info_lkp_t *find_nut_info(const char *nut_varname, info_lkp_t *prev_info_item); - -/* HAL accessors wrappers */ -void hal_set_string(LibHalChangeSet *cs, const char *key, const char *value); -void hal_set_int(LibHalChangeSet *cs, const char *key, const int value); -void hal_set_bool(LibHalChangeSet *cs, const char *key, const dbus_bool_t value); -int hal_get_int(const char *key); -char *hal_get_string(const char *key); - -/* Handle warning charge level according to the critical level */ -static void* level_handler(LibHalChangeSet *cs, char* critical_level) -{ - /* Magic formula to generate the warning level */ - int int_critical_level = atoi(critical_level); - /* warning level = critical + 1/3 of (100 % - critical level), approx at the leat mod 10 */ - int int_warning_level = int_critical_level + ((100 - int_critical_level) / 3); - int_warning_level -= (int_warning_level % 10); - - /* Set the critical level value */ - hal_set_int (cs, "battery.charge_level.low", int_critical_level); - hal_set_int (cs, "battery.reporting.low", int_critical_level); - - /* Set the warning level value (FIXME: set to 50 % for now) */ - hal_set_int (cs, "battery.charge_level.warning", int_warning_level); - hal_set_int (cs, "battery.reporting.warning", int_warning_level); - - return NULL; /* Nothing to return */ -} - -/* Handle runtime exposition according to the AC status */ -static void* runtime_handler(LibHalChangeSet *cs, char* runtime) -{ - if (ac_present == 0) { - /* unSet the runtime auto computation and rely upon NUT.battery.runtime*/ - hal_set_bool (cs, "battery.remaining_time.calculate_per_time", FALSE); - - /* Set the runtime value */ - hal_set_int (cs, "battery.remaining_time", atoi(runtime)); - } - else { - /* Set the runtime auto computation */ - hal_set_bool (cs, "battery.remaining_time.calculate_per_time", TRUE); - - /* Set the runtime value */ - hal_set_int (cs, "battery.remaining_time", 0); - } - return NULL; /* Nothing to return */ -} - -/* Handle the battery technology reporting */ -static void* battery_type_handler(LibHalChangeSet *cs, char* battery_type) -{ - if (!strncmp (battery_type, "PbAc", 4)) { - hal_set_string(cs, "battery.technology", "lead-acid"); - } - /* FIXME: manage other types (lithium-ion, lithium-polymer, - * nickel-metal-hydride, unknown */ - - return NULL; /* Nothing to return */ -} - -/******************************************************************** - * dstate compatibility interface - *******************************************************************/ -void dstate_init(const char *prog, const char *port) -{ - DBusError dbus_error; - LibHalChangeSet *cs; - - dbus_error_init (&dbus_error); - - cs = libhal_device_new_changeset (udi); - if (cs == NULL) { - fatalx (EXIT_FAILURE, "Cannot initialize changeset"); - } - - /* UPS always report charge as percent */ - hal_set_string (cs, "battery.charge_level.unit", "percent"); - hal_set_string (cs, "battery.reporting.unit", "percent"); - hal_set_string (cs, "battery.alarm.unit", "percent"); - - /* Various UPSs assumptions */ - /****************************/ - /* UPS are always rechargeable! */ - /* FIXME: Check for NUT extension however: ie HID->UPS.PowerSummary.Rechargeable - * into battery.rechargeable - * or always expose it? - */ - hal_set_bool (cs, "battery.is_rechargeable", TRUE); - - /* UPS always has a max battery charge of 100 % */ - hal_set_int (cs, "battery.charge_level.design", 100); - hal_set_int (cs, "battery.charge_level.last_full", 100); - hal_set_int (cs, "battery.reporting.design", 100); - hal_set_int (cs, "battery.reporting.last_full", 100); - - /* NUT always express Voltage in Volts "V" */ - /* But not all UPSs provide the data - * battery.voltage.{design,current} */ - hal_set_string (cs, "battery.voltage.unit", "V"); - - /* UPS always have a battery! */ - /* Note(AQU): wrong with some solar panel usage, where the UPS */ - /* is just an energy source switch! */ - /* FIXME: to be processed (need possible NUT extension) */ - hal_set_bool (cs, "battery.present", TRUE); - - /* FIXME: can be improved?! (implies "info.recall.vendor") */ - hal_set_bool (cs, "info.is_recalled", FALSE); - - /* Set generic properties */ - hal_set_string (cs, "battery.type", "ups"); - libhal_device_add_capability (halctx, udi, "battery", &dbus_error); - libhal_device_add_capability (halctx, udi, "ac_adaptor", &dbus_error); - - /* FIXME: can be improved?! Set granularity (1 %)*/ - hal_set_int (cs, "battery.charge_level.granularity_1", 1); - hal_set_int (cs, "battery.charge_level.granularity_2", 1); - hal_set_int (cs, "battery.reporting.granularity_1", 1); - hal_set_int (cs, "battery.reporting.granularity_2", 1); - - dbus_error_init (&dbus_error); - /* NOTE: commit_changeset won't do IPC if set is empty */ - libhal_device_commit_changeset (halctx, cs, &dbus_error); - libhal_device_free_changeset (cs); - - if (dbus_error_is_set (&dbus_error)) - dbus_error_free (&dbus_error); -} - - -const char *dstate_getinfo(const char *var) -{ - info_lkp_t *nut2hal_info = find_nut_info(var, NULL); - -/* FIXME: use the data exposed by NUT on the DBus when available */ - - if (nut2hal_info != NULL) { - - switch (nut2hal_info->hal_type) - { -/* case HAL_TYPE_INT: - static char value[8]; - snprintf(value, sizeof(value), "%i", hal_get_int(nut2hal_info->hal_name)); - return value; - case HAL_TYPE_BOOL: - hal_set_bool(cs, nut2hal_info->hal_name, TRUE); - break; -*/ - case HAL_TYPE_STRING: - return hal_get_string(nut2hal_info->hal_name); - } - } - return NULL; -} - -int dstate_setinfo(const char *var, const char *fmt, ...) -{ - va_list ap; - int ret = 1; - LibHalChangeSet *cs; - DBusError dbus_error; - char value[ST_MAX_VALUE_LEN]; - info_lkp_t *nut2hal_info = NULL, *prev_nut2hal_info = NULL; - - va_start(ap, fmt); - vsnprintf(value, sizeof(value), fmt, ap); - va_end(ap); - - cs = libhal_device_new_changeset (udi); - if (cs == NULL) { - fatalx (EXIT_FAILURE, "Cannot initialize changeset"); - } - - /* Loop on getting HAL variable(s) matching this NUT variable */ - while ( (nut2hal_info = find_nut_info(var, prev_nut2hal_info)) != NULL) - { - upsdebugx(2, "dstate_setinfo: %s => %s (%s)\n", var, nut2hal_info->hal_name, value); - - if (nut2hal_info->fun != NULL) - nut2hal_info->fun(cs, value); - else { - switch (nut2hal_info->hal_type) - { - case HAL_TYPE_INT: - hal_set_int(cs, nut2hal_info->hal_name, atoi(value)); - break; - case HAL_TYPE_BOOL: - /* FIXME: howto lookup TRUE/FALSE? */ - hal_set_bool(cs, nut2hal_info->hal_name, TRUE); - break; - case HAL_TYPE_STRING: - hal_set_string(cs, nut2hal_info->hal_name, value); - break; - } - } - prev_nut2hal_info = nut2hal_info; - } - - dbus_error_init (&dbus_error); - /* NOTE: commit_changeset won't do IPC if set is empty */ - libhal_device_commit_changeset(halctx,cs,&dbus_error); - libhal_device_free_changeset (cs); - - if (dbus_error_is_set (&dbus_error)) - dbus_error_free (&dbus_error); - - return ret; -} - - -int dstate_addenum(const char *var, const char *fmt, ...) -{ - return 0; -} - -int dstate_addrange(const char *var, const int min, const int max) -{ - return 0; -} - -const st_tree_t *dstate_getroot(void) -{ - return NULL; -} - -int dstate_delinfo(const char *var) -{ - return 0; -} - -int dstate_delcmd(const char *var) -{ - return 0; -} - -void dstate_setflags(const char *var, int flags) -{ - return; -} - -void dstate_setaux(const char *var, int aux) -{ - return; -} - -void dstate_dataok(void) -{ - return; -} - -void dstate_datastale(void) -{ - return; -} - -void dstate_free(void) -{ - return; -} - -/* extrafd: provided for waking up based on the driver's UPS fd */ -int dstate_poll_fds(struct timeval timeout, int extrafd) -{ - /* drivers expect us to limit the polling rate here */ - sleep(timeout.tv_sec); - - /* the timeout expired */ - return 1; -} - -/* clean out the temp space for a new pass */ -void status_init(void) -{ - /* Nothing to do */ - return; -} - -/* ups.status element conversion */ -void status_set(const char *buf) -{ - upsdebugx(2, "status_set: %s", buf); - - /* Note: only usbhid-ups supported devices expose [DIS]CHRG status */ - /* along with the standard OL (online) / OB (on battery) status! */ - if ( (strcmp(buf, "DISCHRG") == 0) || (strcmp(buf, "OB") == 0) ) - { - ac_present = 0; - } - else if ( (strcmp(buf, "CHRG") == 0) || (strcmp(buf, "OL") == 0) ) - { - ac_present = 1; - } - else - upsdebugx(2, "status_set: dropping status %s (not managed)\n", buf); - - return; -} - -/* write the status_buf into the externally visible dstate storage */ -void status_commit(void) -{ - LibHalChangeSet *cs; - DBusError dbus_error; - int curlevel, warnlevel, lowlevel; - - upsdebugx(2, "status_commit"); - - cs = libhal_device_new_changeset (udi); - if (cs == NULL) { - fatalx (EXIT_FAILURE, "Cannot initialize changeset"); - } - - /* Retrieve the levels */ - curlevel = hal_get_int ("battery.charge_level.current"); - warnlevel = hal_get_int ("battery.charge_level.warning"); - lowlevel = hal_get_int ("battery.charge_level.low"); - - /* Set AC present status */ - /* Note: UPSs are also AC adaptors! */ - hal_set_bool (cs, "ac_adaptor.present", (ac_present == 0)?FALSE:TRUE); - - /* Set discharging status */ - hal_set_bool (cs, "battery.rechargeable.is_discharging", (ac_present == 0)?TRUE:FALSE); - - /* Set charging status */ - if (curlevel != 100) - hal_set_bool (cs, "battery.rechargeable.is_charging", (ac_present == 0)?FALSE:TRUE); - - /* Set the battery status (FIXME: are these values valid?) */ - if (curlevel <= lowlevel) - hal_set_string(cs, "battery.charge_level.capacity_state", "critical"); - else if (curlevel <= warnlevel) - hal_set_string(cs, "battery.charge_level.capacity_state", "warning"); /*low?*/ - else - hal_set_string(cs, "battery.charge_level.capacity_state", "ok"); - - dbus_error_init (&dbus_error); - /* NOTE: commit_changeset won't do IPC if set is empty */ - libhal_device_commit_changeset (halctx, cs, &dbus_error); - libhal_device_free_changeset (cs); - - if (dbus_error_is_set (&dbus_error)) - dbus_error_free (&dbus_error); - - return; -} - -/* similar functions for ups.alarm */ -void alarm_init(void) -{ - return; -} - -void alarm_set(const char *buf) -{ - return; -} - -void alarm_commit(void) -{ - return; -} - -/* FIXME: complete and use nut2hal_cmd */ -/* Register DBus methods, by feeling the methods buffer */ -void dstate_addcmd(const char *cmdname) -{ - DBusError dbus_error; - dbus_error_init (&dbus_error); - - upsdebugx(2, "dstate_addcmd: %s\n", cmdname); - - /* beeper.{on,off} */ - /* FIXME: how to deal with beeper.toggle */ - if (!strncasecmp(cmdname, "beeper.disable", 14)) - { - strcat(dbus_methods_introspection, - " \n" - " \n" - " \n" - " \n"); - } -} - - - -/******************************************************************* - * internal functions - *******************************************************************/ - -/**************** - * HAL wrappers * - ****************/ -/* Only update HAL string values if there are real changes */ -void hal_set_string(LibHalChangeSet *cs, const char *key, const char *value) -{ - DBusError dbus_error; - char *new_value = NULL; - - upsdebugx(2, "hal_set_string: %s => %s", key, value); - - dbus_error_init(&dbus_error); - - /* Check if the property already exists */ - if (libhal_device_property_exists (halctx, udi, key, &dbus_error) == TRUE) { - - new_value = libhal_device_get_property_string (halctx, udi, - key, &dbus_error); - - /* Check if the value has really changed */ - if (strcmp(value, new_value)) - libhal_changeset_set_property_string (cs, key, value); - - /* Free the new_value string */ - if (new_value != NULL) - libhal_free_string (new_value); - } - else { - libhal_changeset_set_property_string (cs, key, value); - } -} - -/* Only update HAL int values if there are real changes */ -void hal_set_int(LibHalChangeSet *cs, const char *key, const int value) -{ - DBusError dbus_error; - int new_value; - - upsdebugx(2, "hal_set_int: %s => %i", key, value); - - dbus_error_init(&dbus_error); - - /* Check if the property already exists */ - if (libhal_device_property_exists (halctx, udi, key, &dbus_error) == TRUE) { - - new_value = libhal_device_get_property_int (halctx, udi, - key, &dbus_error); - - /* Check if the value has really changed */ - if (value != new_value) - libhal_changeset_set_property_int (cs, key, value); - } - else { - libhal_changeset_set_property_int (cs, key, value); - } -} - -char *hal_get_string(const char *key) -{ - DBusError dbus_error; - char *value = NULL; - - upsdebugx(2, "hal_get_string: %s", key); - - dbus_error_init(&dbus_error); - - /* Check if the property already exists */ - if (libhal_device_property_exists (halctx, udi, key, &dbus_error) == TRUE) { - - value = libhal_device_get_property_string (halctx, udi, - key, &dbus_error); - } - return value; -} - -int hal_get_int(const char *key) -{ - DBusError dbus_error; - int value = -1; - - upsdebugx(2, "hal_get_int: %s", key); - - dbus_error_init(&dbus_error); - - /* Check if the property already exists */ - if (libhal_device_property_exists (halctx, udi, key, &dbus_error) == TRUE) { - - value = libhal_device_get_property_int (halctx, udi, - key, &dbus_error); - } - return value; -} - -/* Only update HAL int values if there are real changes */ -void hal_set_bool(LibHalChangeSet *cs, const char *key, const dbus_bool_t value) -{ - DBusError dbus_error; - dbus_bool_t new_value; - - upsdebugx(2, "hal_set_bool: %s => %s", key, (value==TRUE)?"true":"false"); - - dbus_error_init(&dbus_error); - - /* Check if the property already exists */ - if (libhal_device_property_exists (halctx, udi, key, &dbus_error) == TRUE) { - - new_value = libhal_device_get_property_bool (halctx, udi, - key, &dbus_error); - - /* Check if the value has really changed */ - if (value != new_value) - libhal_changeset_set_property_bool (cs, key, value); - } - else { - libhal_changeset_set_property_bool (cs, key, value); - } -} - -/* find the next info element definition in info array - * that matches nut_varname, and that is after prev_info_item - * if specified. - * Note that 1 nut item can matches several HAL items - */ -static info_lkp_t *find_nut_info(const char *nut_varname, info_lkp_t *prev_info_item) -{ - info_lkp_t *info_item; - - upsdebugx(2, "find_nut_info: looking up => %s\n", nut_varname); - - if (prev_info_item != NULL) { - /* Start from the item following prev_info_item */ - info_item = ++prev_info_item; - } - else { - info_item = nut2hal_info; - } - - for ( ; info_item != NULL && info_item->nut_name != NULL ; info_item++) { - - if (!strcasecmp(info_item->nut_name, nut_varname)) - return info_item; - } - - return NULL; -} diff --git a/drivers/dstate-hal.h b/drivers/dstate-hal.h deleted file mode 100644 index 6a2ad2f..0000000 --- a/drivers/dstate-hal.h +++ /dev/null @@ -1,94 +0,0 @@ -/* dstate-hal.h - Network UPS Tools driver-side state management - - Copyright (C) 2006 Arnaud Quette - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef DSTATE_HAL_H_SEEN -#define DSTATE_HAL_H_SEEN 1 - -#include "state.h" -#include "attribute.h" - -/*#include "parseconf.h"*/ -#include "upshandler.h" - -#include -#include -#include -#include - -#define DS_LISTEN_BACKLOG 16 -#define DS_MAX_READ 256 /* don't read forever from upsd */ - -/* HAL specific */ -#define DBUS_INTERFACE "org.freedesktop.Hal.Device.UPS" - -DBusHandlerResult dbus_filter_function(DBusConnection *connection, - DBusMessage *message, - void *user_data); - -gboolean dbus_init_local (void); - -#define HAL_WARNING - -/* track client connections */ -/* typedef struct conn_s { - * int fd; - * PCONF_CTX_t ctx; - * struct conn_s *next; - *} conn_t; - */ - extern struct ups_handler upsh; - -void dstate_init(const char *prog, const char *port); -int dstate_poll_fds(struct timeval timeout, int extrafd); -int dstate_setinfo(const char *var, const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 2, 3))); -int dstate_addenum(const char *var, const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 2, 3))); -int dstate_addrange(const char *var, const int min, const int max); -void dstate_setflags(const char *var, int flags); -void dstate_setaux(const char *var, int aux); -const char *dstate_getinfo(const char *var); -void dstate_addcmd(const char *cmdname); -int dstate_delinfo(const char *var); -int dstate_delenum(const char *var, const char *val); -int dstate_delcmd(const char *cmd); -void dstate_free(void); -const st_tree_t *dstate_getroot(void); -const cmdlist_t *dstate_getcmdlist(void); - -void dstate_dataok(void); -void dstate_datastale(void); - -int dstate_is_stale(void); - -/* clean out the temp space for a new pass */ -void status_init(void); - -/* add a status element */ -void status_set(const char *buf); - -/* write the temporary status_buf into ups.status */ -void status_commit(void); - -/* similar functions for ups.alarm */ -void alarm_init(void); -void alarm_set(const char *buf); -void alarm_commit(void); - -#endif /* DSTATE_HAL_H_SEEN */ diff --git a/drivers/libshut.c b/drivers/libshut.c index 30651d0..1e2cd8d 100644 --- a/drivers/libshut.c +++ b/drivers/libshut.c @@ -312,7 +312,7 @@ int libshut_open(int *upsfd, SHUTDevice_t *curDevice, char *device_path, /* FIXME: add variable baudrate detection */ *upsfd = ser_open(device_path); ser_set_speed(*upsfd, device_path, B2400); - setline(*upsfd, 0); + setline(*upsfd, 1); /* initialise communication */ if (!shut_synchronise(*upsfd)) diff --git a/drivers/libusb.c b/drivers/libusb.c index 234b9f1..fd8f5b9 100644 --- a/drivers/libusb.c +++ b/drivers/libusb.c @@ -33,9 +33,6 @@ #include "usb-common.h" #include "libusb.h" -/* USB standard timeout */ -#define USB_TIMEOUT 5000 - #define USB_DRIVER_NAME "USB communication driver" #define USB_DRIVER_VERSION "0.32" @@ -375,7 +372,9 @@ static int libusb_strerror(const int ret, const char *desc) return 0; case -EOVERFLOW: /* Value too large for defined data type */ +#ifdef EPROTO case -EPROTO: /* Protocol error */ +#endif upsdebugx(2, "%s: %s", desc, usb_strerror()); return 0; diff --git a/drivers/main-hal.c b/drivers/main-hal.c deleted file mode 100644 index 8cd3275..0000000 --- a/drivers/main-hal.c +++ /dev/null @@ -1,571 +0,0 @@ -/* main-hal.c - Network UPS Tools driver core for HAL - - Copyright (C) 2006 Arnaud Quette - Copyright (C) 1999 Russell Kroll - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -/* TODO list: - * -more cleanup - * - dstate-hal: expose all data on org.freedesktop.NUT to prepare - * a full HAL/DBus enabled nut (remove the need of {d,s}state layer - * - use HAL logging functions - */ - -#include "main-hal.h" -#include "dstate-hal.h" -#include - -#ifdef HAVE_POLKIT -#include -#endif - - /* HAL specific */ - extern LibHalContext *halctx; - extern char *udi; - - /* data which may be useful to the drivers */ - int upsfd = -1; - char *device_path = NULL; - const char *progname = NULL, *upsname = NULL, - *device_name = NULL; - - /* may be set by the driver to wake up while in dstate_poll_fds */ - int extrafd = -1; - - /* for ser_open */ - int do_lock_port = 1; - - /* set by the drivers */ - int experimental_driver = 0; - int broken_driver = 0; - - static vartab_t *vartab_h = NULL; - - /* variables possibly set by the global part of ups.conf */ - unsigned int poll_interval = 2; - static char *chroot_path = NULL; - - /* signal handling */ - int exit_flag = 0; - - /* everything else */ - static char *pidfn = NULL; - GMainLoop *gmain; - char *dbus_methods_introspection; - -/* retrieve the value of variable if possible */ -char *getval(const char *var) -{ - vartab_t *tmp = vartab_h; - - while (tmp) { - if (!strcasecmp(tmp->var, var)) - return(tmp->val); - tmp = tmp->next; - } - - return NULL; -} - -/* see if has been defined, even if no value has been given to it */ -int testvar(const char *var) -{ - vartab_t *tmp = vartab_h; - - while (tmp) { - if (!strcasecmp(tmp->var, var)) - return tmp->found; - tmp = tmp->next; - } - - return 0; /* not found */ -} - -/* callback from driver - create the table for -x/conf entries */ -void addvar(int vartype, const char *name, const char *desc) -{ - vartab_t *tmp, *last; - - tmp = last = vartab_h; - - while (tmp) { - last = tmp; - tmp = tmp->next; - } - - tmp = xmalloc(sizeof(vartab_t)); - - tmp->vartype = vartype; - tmp->var = xstrdup(name); - tmp->val = NULL; - tmp->desc = xstrdup(desc); - tmp->found = 0; - tmp->next = NULL; - - if (last) - last->next = tmp; - else - vartab_h = tmp; -} - -static void vartab_free(void) -{ - vartab_t *tmp, *next; - - tmp = vartab_h; - - while (tmp) { - next = tmp->next; - - free(tmp->var); - free(tmp->val); - free(tmp->desc); - free(tmp); - - tmp = next; - } -} - -static void exit_cleanup(int sig) -{ - upsdebugx(2, "exit_cleanup(%i", sig); - - exit_flag = sig; - - upsdrv_cleanup(); - - free(chroot_path); - free(device_path); - - if (pidfn) { - unlink(pidfn); - free(pidfn); - } - - dstate_free(); - vartab_free(); - - /* break the main loop */ - g_main_loop_quit(gmain); -} - -static void setup_signals(void) -{ - struct sigaction sa; - - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART | SA_NOCLDSTOP; - - sa.sa_handler = exit_cleanup; - sigaction(SIGTERM, &sa, NULL); - sigaction(SIGINT, &sa, NULL); - sigaction(SIGQUIT, &sa, NULL); - -/* sa.sa_handler = SIG_IGN; - sigaction(SIGHUP, &sa, NULL); - sigaction(SIGPIPE, &sa, NULL);*/ -} - -/* (*GSourceFunc) wrapper */ -static gboolean update_data (gpointer data) -{ - upsdrv_updateinfo(); - return (exit_flag == 0); -} - -int main(int argc, char **argv) -{ - DBusError dbus_error; - DBusConnection *dbus_connection; - struct passwd *new_uid = NULL; - char *hal_debug_level; -/* int i, do_forceshutdown = 0; */ - - if (experimental_driver) { - printf("Warning: This is an experimental driver.\n"); - printf("Some features may not function correctly.\n\n"); - } - - progname = xbasename(argv[0]); - open_syslog(progname); - - dbus_methods_introspection = xmalloc(1024); - - /* Register the basic supported method (Shutdown) - * Leave other methods registration to driver core calls to - * dstate_addcmd(), at initinfo() time - */ - snprintf(dbus_methods_introspection, 1024, "%s", - " \n" -/* " \n" */ - " \n" - " \n"); - - /* initialise HAL and DBus interface*/ - halctx = NULL; - udi = getenv ("UDI"); - if (udi == NULL) { - fprintf(stderr, "Error: UDI is null.\n"); - exit(EXIT_FAILURE); - } - - dbus_error_init (&dbus_error); - if ((halctx = libhal_ctx_init_direct (&dbus_error)) == NULL) { - fprintf(stderr, "Error: can't initialise libhal.\n"); - exit(EXIT_FAILURE); - } - if (dbus_error_is_set (&dbus_error)) - { - fatalx(EXIT_FAILURE, "Error in context creation: %s\n", dbus_error.message); - dbus_error_free (&dbus_error); - } - - if ((dbus_connection = libhal_ctx_get_dbus_connection(halctx)) == NULL) { - fprintf(stderr, "Error: can't get DBus connection.\n"); - exit(EXIT_FAILURE); - } - - /* FIXME: rework HAL param interface! or get path/regex from UDI - * Example: - * /org/freedesktop/Hal/devices/usb_device_463_ffff_1H2E300AH - * => linux.device_file = /dev/bus/usb/002/065 - */ - /* FIXME: the naming should be abstracted to os.device_file! */ - device_path = xstrdup("auto"); - - /* FIXME: bridge debug/warning on HAL equivalent (need them - * to externalize these in a lib... */ - hal_debug_level = getenv ("NUT_HAL_DEBUG"); - if (hal_debug_level == NULL) - nut_debug_level = 0; - else - nut_debug_level = atoi(hal_debug_level); - - /* Sleep 2 seconds to be able to view the device through usbfs! */ - sleep(2); - - /* build the driver's extra (-x) variable table */ - upsdrv_makevartable(); - - /* Switch to the HAL user */ - new_uid = get_user_pwent(HAL_USER); - become_user(new_uid); - - /* Only switch to statepath if we're not powering off */ - /* This avoid case where ie /var is umounted */ -/* ?! Not needed for HAL !? - if (!do_forceshutdown) - if (chdir(dflt_statepath())) - fatal_with_errno(EXIT_FAILURE, "Can't chdir to %s", dflt_statepath()); -*/ - setup_signals(); - - /* clear out callback handler data */ - memset(&upsh, '\0', sizeof(upsh)); - - upsdrv_initups(); - -#if 0 - if (do_forceshutdown) - forceshutdown(); -#endif - - /* get the supported data and commands before allowing connections */ - upsdrv_initinfo(); - upsdrv_updateinfo(); - - /* now we can start servicing requests */ - dstate_init(NULL, NULL); - - /* Commit DBus methods */ - if (!libhal_device_claim_interface(halctx, udi, DBUS_INTERFACE, - dbus_methods_introspection, &dbus_error)) { - fprintf(stderr, "Cannot claim interface: %s\n", dbus_error.message); - } - else - fprintf(stdout, "Claimed the following DBus interfaces on %s:\n%s", - DBUS_INTERFACE, dbus_methods_introspection); - - /* Complete DBus binding */ - dbus_connection_setup_with_g_main(dbus_connection, NULL); - dbus_connection_add_filter(dbus_connection, dbus_filter_function, NULL, NULL); - dbus_connection_set_exit_on_disconnect(dbus_connection, 0); - - dbus_init_local(); - /* end of HAL init */ - -#if 0 - /* publish the top-level data: version number, driver name */ - dstate_setinfo("driver.version", "%s", UPS_VERSION); - dstate_setinfo("driver.name", "%s", progname); - - /* The poll_interval may have been changed from the default */ - dstate_setinfo("driver.parameter.pollinterval", "%d", poll_interval); - -/* FIXME: needed? */ - if (nut_debug_level == 0) { - background(); - writepid(pidfn); - } -#endif - /* End HAL init */ - dbus_error_init (&dbus_error); - if (!libhal_device_addon_is_ready (halctx, udi, &dbus_error)) { - fprintf(stderr, "Error (libhal): device addon is not ready\n"); - exit(EXIT_FAILURE); - } - - /* add a timer for data update */ -#ifdef HAVE_G_TIMEOUT_ADD_SECONDS - g_timeout_add_seconds (poll_interval, -#else - g_timeout_add (1000 * poll_interval, /* seconds */ -#endif - (GSourceFunc)update_data, - NULL); - - /* setup and run the main loop */ - gmain = g_main_loop_new(NULL, FALSE); - g_main_loop_run(gmain); - - /* reached upon addon exit */ - upslogx(LOG_INFO, "Signal %d: exiting", exit_flag); - exit(EXIT_SUCCESS); -} - -/******************************************************************** - * DBus interface functions and data - *******************************************************************/ - -static DBusHandlerResult dbus_filter_function_local(DBusConnection *connection, - DBusMessage *message, - void *user_data) -{ - if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) { - upsdebugx(1, "DBus daemon disconnected. Trying to reconnect..."); - dbus_connection_unref(connection); - g_timeout_add(5000, (GSourceFunc)dbus_init_local, NULL); - } - return DBUS_HANDLER_RESULT_HANDLED; -} - -/* returns FALSE on success because it's used as a callback */ -gboolean dbus_init_local(void) -{ - DBusConnection *dbus_connection; - DBusError dbus_error; - - dbus_error_init(&dbus_error); - - dbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbus_error); - if (dbus_error_is_set(&dbus_error)) { - upsdebugx(1, "Cannot get D-Bus connection"); -/* dbus_error_free (&dbus_error); */ - return TRUE; - } - - dbus_connection_setup_with_g_main(dbus_connection, NULL); - dbus_connection_add_filter(dbus_connection, dbus_filter_function_local, - NULL, NULL); - dbus_connection_set_exit_on_disconnect(dbus_connection, 0); - return FALSE; -} - -#ifdef HAVE_POLKIT -/** - * dbus_is_privileged: - * @connection: connection to D-Bus - * @message: Message - * @error: the error - * - * Returns: TRUE if the caller is privileged - * - * checks if caller of message possesses the CPUFREQ_POLKIT_PRIVILGE - */ -static gboolean -dbus_is_privileged (DBusConnection *connection, DBusMessage *message, DBusError *error) -{ - gboolean ret; - char *polkit_result; - const char *invoked_by_syscon_name; - - ret = FALSE; - polkit_result = NULL; -/* FIXME: CPUFREQ_POLKIT_PRIVILEGE, CPUFREQ_ERROR_GENERAL */ - invoked_by_syscon_name = dbus_message_get_sender (message); - - polkit_result = libhal_device_is_caller_privileged (halctx, - udi, - CPUFREQ_POLKIT_PRIVILEGE, - invoked_by_syscon_name, - error); - if (polkit_result == NULL) { - dbus_raise_error (connection, message, CPUFREQ_ERROR_GENERAL, - "Cannot determine if caller is privileged"); - } - else { - if (strcmp (polkit_result, "yes") != 0) { - - dbus_raise_error (connection, message, - "org.freedesktop.Hal.Device.PermissionDeniedByPolicy", - "%s %s <-- (action, result)", - CPUFREQ_POLKIT_PRIVILEGE, polkit_result); - } - else - ret = TRUE; - } - - if (polkit_result != NULL) - libhal_free_string (polkit_result); - return ret; -} -#endif - -/** - * dbus_send_reply: - * @connection: connection to D-Bus - * @message: Message - * @type: the type of data param - * @data: data to send - * - * Returns: TRUE/FALSE - * - * sends a reply to message with the given data and its dbus_type - */ -static gboolean dbus_send_reply(DBusConnection *connection, DBusMessage *message, - int dbus_type, void *data) -{ - DBusMessage *reply; - - if ((reply = dbus_message_new_method_return(message)) == NULL) { - upslogx(LOG_WARNING, "Could not allocate memory for the DBus reply"); - return FALSE; - } - - if (data != NULL) - dbus_message_append_args(reply, dbus_type, data, DBUS_TYPE_INVALID); - - if (!dbus_connection_send(connection, reply, NULL)) { - upslogx(LOG_WARNING, "Could not sent reply"); - return FALSE; - } - dbus_connection_flush(connection); - dbus_message_unref(reply); - - return TRUE; -} - -/** - * dbus_get_argument: - * @connection: connection to D-Bus - * @message: Message - * @dbus_error: the D-Bus error - * @type: the type of arg param - * @arg: the value to get from the message - * - * Returns: TRUE/FALSE - * - * gets one argument from message with the given dbus_type and stores it in arg - */ -static gboolean dbus_get_argument(DBusConnection *connection, DBusMessage *message, - DBusError *dbus_error, int dbus_type, void *arg) -{ - dbus_message_get_args(message, dbus_error, dbus_type, arg, - DBUS_TYPE_INVALID); - if (dbus_error_is_set(dbus_error)) { - upslogx(LOG_WARNING, "Could not get argument of DBus message: %s", - dbus_error->message); - dbus_error_free(dbus_error); - return FALSE; - } - return TRUE; -} - -/** - * dbus_filter_function: - * @connection: connection to D-Bus - * @message: message - * @user_data: pointer to the data - * - * Returns: the result - * - * @raises UnknownMethod - * - * D-Bus filter function - */ -DBusHandlerResult dbus_filter_function(DBusConnection *connection, - DBusMessage *message, - void *user_data) -{ - DBusError dbus_error; - int retcode = -1; - const char *member = dbus_message_get_member(message); - const char *path = dbus_message_get_path(message); -/* int ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; */ - - /* upsdebugx(2, "Received DBus message with member %s path %s", member, path); */ - fprintf(stdout, "Received DBus message with member %s on path %s\n", member, path); - - dbus_error_init(&dbus_error); - if (dbus_error_is_set (&dbus_error)) - { - fprintf (stderr, "an error occurred: %s\n", dbus_error.message); -/* dbus_error_free (&dbus_error); */ - } - else - { -#ifdef HAVE_POLKIT - if (!dbus_is_privileged(connection, message, &dbus_error)) - return DBUS_HANDLER_RESULT_HANDLED; -#endif - - if (dbus_message_is_method_call(message, DBUS_INTERFACE, "Shutdown")) { - - fprintf(stdout, "executing Shutdown\n"); - upsdrv_shutdown(); - dbus_send_reply(connection, message, DBUS_TYPE_INVALID, NULL); - - } else if (dbus_message_is_method_call(message, - DBUS_INTERFACE, "SetBeeper")) { - fprintf(stdout, "executing SetBeeper\n"); - gboolean b_enable; - if (!dbus_get_argument(connection, message, &dbus_error, - DBUS_TYPE_BOOLEAN, &b_enable)) { - fprintf(stderr, "Error receiving boolean argument\n"); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - fprintf(stdout, "Received argument: %s\n", (b_enable==TRUE)?"true":"false"); - - if (b_enable==TRUE) { - if (upsh.instcmd("beeper.enable", NULL) != STAT_INSTCMD_HANDLED) { - dbus_send_reply(connection, message, DBUS_TYPE_INT32, &retcode); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - } - else { - if (upsh.instcmd("beeper.disable", NULL) != STAT_INSTCMD_HANDLED) { - dbus_send_reply(connection, message, DBUS_TYPE_INT32, &retcode); - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - } - } else { - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - } - } - dbus_send_reply(connection, message, DBUS_TYPE_INVALID, NULL); - return DBUS_HANDLER_RESULT_HANDLED; -} diff --git a/drivers/main-hal.h b/drivers/main-hal.h deleted file mode 100644 index e612133..0000000 --- a/drivers/main-hal.h +++ /dev/null @@ -1,51 +0,0 @@ -#include "common.h" -#include "config.h" -/* #include "upsconf.h" */ -#include "dstate.h" -#include "extstate.h" - -/* public functions & variables from main.c */ -extern const char *progname; -extern char *device_path; -extern const char *device_name; -extern int upsfd, extrafd, broken_driver, experimental_driver, exit_flag; -extern unsigned int poll_interval; - -/* functions & variables required in each driver */ -void upsdrv_initups(void); /* open connection to UPS, fail if not found */ -void upsdrv_initinfo(void); /* prep data, settings for UPS monitoring */ -void upsdrv_updateinfo(void); /* update state data if possible */ -void upsdrv_shutdown(void); /* make the UPS power off the load */ -void upsdrv_help(void); /* tack on anything useful for the -h text */ -void upsdrv_banner(void); /* print your version information */ -void upsdrv_cleanup(void); /* free any resources before shutdown */ - -/* --- details for the variable/value sharing --- */ - -/* main calls this driver function - it needs to call addvar */ -void upsdrv_makevartable(void); - -/* retrieve the value of variable if possible */ -char *getval(const char *var); - -/* see if has been defined, even if no value has been given to it */ -int testvar(const char *var); - -/* extended variable table - used for -x defines/flags */ -typedef struct vartab_s { - int vartype; /* VAR_* value, below */ - char *var; /* left side of =, or whole word if none */ - char *val; /* right side of = */ - char *desc; /* 40 character description for -h text */ - int found; /* set once encountered, for testvar() */ - struct vartab_s *next; -} vartab_t; - -/* flags to define types in the vartab */ - -#define VAR_FLAG 0x0001 /* argument is a flag (no value needed) */ -#define VAR_VALUE 0x0002 /* argument requires a value setting */ -#define VAR_SENSITIVE 0x0004 /* do not publish in driver.parameter */ - -/* callback from driver - create the table for future -x entries */ -void addvar(int vartype, const char *name, const char *desc); diff --git a/drivers/mge-hid.c b/drivers/mge-hid.c index 6383379..93ccde6 100644 --- a/drivers/mge-hid.c +++ b/drivers/mge-hid.c @@ -36,7 +36,7 @@ #include "usbhid-ups.h" #include "mge-hid.h" -#define MGE_HID_VERSION "MGE HID 1.32" +#define MGE_HID_VERSION "MGE HID 1.33" /* (prev. MGE Office Protection Systems, prev. MGE UPS SYSTEMS) */ /* Eaton */ @@ -98,7 +98,8 @@ typedef enum { MGE_PULSAR_M = 0x400, /* MGE Pulsar M series */ MGE_PULSAR_M_2200, MGE_PULSAR_M_3000, - MGE_PULSAR_M_3000_XL + MGE_PULSAR_M_3000_XL, + EATON_5P = 0x500 /* Eaton 5P / 5PX series */ } models_type_t; /* Default to line-interactive or online (ie, not offline). @@ -211,6 +212,7 @@ static const char *mge_battery_voltage_nominal_fun(double value) break; case MGE_PULSAR_M: + case EATON_5P: break; default: @@ -234,6 +236,7 @@ static const char *mge_battery_voltage_fun(double value) { case MGE_EVOLUTION: case MGE_PULSAR_M: + case EATON_5P: break; default: @@ -774,6 +777,12 @@ static models_name_t mge_model_names [] = { "Evolution", "S 2500", MGE_EVOLUTION_S_2500, NULL }, { "Evolution", "S 3000", MGE_EVOLUTION_S_3000, NULL }, + /* Eaton 5P */ + { "Eaton 5P", "650", EATON_5P, "5P 650" }, + { "Eaton 5P", "850", EATON_5P, "5P 850" }, + { "Eaton 5P", "1150", EATON_5P, "5P 1150" }, + { "Eaton 5P", "1550", EATON_5P, "5P 1550" }, + /* Pulsar M models */ { "PULSAR M", "2200", MGE_PULSAR_M_2200, NULL }, { "PULSAR M", "3000", MGE_PULSAR_M_3000, NULL }, diff --git a/drivers/mge-xml.c b/drivers/mge-xml.c index adb8262..560d432 100644 --- a/drivers/mge-xml.c +++ b/drivers/mge-xml.c @@ -31,7 +31,7 @@ #include "netxml-ups.h" #include "mge-xml.h" -#define MGE_XML_VERSION "MGEXML/0.22" +#define MGE_XML_VERSION "MGEXML/0.23" #define MGE_XML_INITUPS "/" #define MGE_XML_INITINFO "/mgeups/product.xml /product.xml /ws/product.xml" @@ -1489,7 +1489,7 @@ char *vvalue_mge_xml2nut(const char *name, const char *value, size_t len) { /* Convert */ if (NULL != info->convert) { - char *vconv = info->convert(vcpy); + char *vconv = (char *)info->convert(vcpy); free(vcpy); @@ -1510,7 +1510,7 @@ void vname_register_rw(void) { xml_info_t *info = mge_xml2nut + i; if (NULL != info->nutname && info->nutflags & ST_FLAG_RW) { - dstate_setinfo(info->nutname, ""); + dstate_setinfo(info->nutname, "%s", ""); dstate_setflags(info->nutname, ST_FLAG_RW); } } diff --git a/drivers/nutdrv_atcl_usb.c b/drivers/nutdrv_atcl_usb.c new file mode 100644 index 0000000..7424493 --- /dev/null +++ b/drivers/nutdrv_atcl_usb.c @@ -0,0 +1,498 @@ +/* + * nutdrv_atcl_usb.c - driver for generic-brand "ATCL FOR UPS" + * + * Copyright (C) 2013-2014 Charles Lepple + * + * Loosely based on richcomm_usb.c, + * Copyright (C) 2007 Peter van Valderen + * Dirk Teurlings + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "main.h" +#include "usb-common.h" + +/* driver version */ +#define DRIVER_NAME "'ATCL FOR UPS' USB driver" +#define DRIVER_VERSION "1.1" + +/* driver description structure */ +upsdrv_info_t upsdrv_info = { + DRIVER_NAME, + DRIVER_VERSION, + "Charles Lepple ", + DRV_EXPERIMENTAL, + { NULL } +}; + +#define STATUS_ENDPOINT (USB_ENDPOINT_IN | 1) +#define SHUTDOWN_ENDPOINT (USB_ENDPOINT_OUT | 2) +#define STATUS_PACKETSIZE 8 +#define SHUTDOWN_PACKETSIZE 8 + +/* Probably can reduce this, since the pcap file shows mostly 1050-ish ms response times */ +#define ATCL_USB_TIMEOUT USB_TIMEOUT + +/* limit the amount of spew that goes in the syslog when we lose the UPS (from nut_usb.h) */ +#define USB_ERR_LIMIT 10 /* start limiting after 10 in a row */ +#define USB_ERR_RATE 10 /* then only print every 10th error */ + +#define USB_VENDOR_STRING "ATCL FOR UPS" + +static usb_device_id_t atcl_usb_id[] = { + /* ATCL FOR UPS */ + { USB_DEVICE(0x0001, 0x0000), NULL }, + + /* end of list */ + {-1, -1, NULL} +}; + +static usb_dev_handle *udev = NULL; +static USBDevice_t usbdevice; +static unsigned int comm_failures = 0; + +static int device_match_func(USBDevice_t *device, void *privdata) +{ + char *requested_vendor; + switch (is_usb_device_supported(atcl_usb_id, device)) + { + case SUPPORTED: + if(!device->Vendor) { + upsdebugx(1, "Couldn't retrieve USB string descriptor for vendor. Check permissions?"); + requested_vendor = getval("vendor"); + if(requested_vendor) { + if(!strcmp("NULL", requested_vendor)) { + upsdebugx(3, "Matched device with NULL vendor string."); + return 1; + } + } + upsdebugx(1, "To keep trying (in case your device does not have a vendor string), use vendor=NULL"); + return 0; + } + + if(!strcmp(device->Vendor, USB_VENDOR_STRING)) { + upsdebugx(4, "Matched expected vendor='%s'.", USB_VENDOR_STRING); + return 1; + } + /* Didn't match, but the user provided an alternate vendor ID: */ + requested_vendor = getval("vendor"); + if(requested_vendor) { + if(!strcmp(device->Vendor, requested_vendor)) { + upsdebugx(3, "Matched device with vendor='%s'.", requested_vendor); + return 1; + } else { + upsdebugx(2, "idVendor=%04x and idProduct=%04x, but provided vendor '%s' does not match device: '%s'.", + device->VendorID, device->ProductID, requested_vendor, device->Vendor); + return 0; + } + } + + /* TODO: automatic way of suggesting other drivers? */ + upsdebugx(2, "idVendor=%04x and idProduct=%04x, but device vendor string '%s' does not match expected string '%s'. " + "Have you tried the nutdrv_qx driver?", + device->VendorID, device->ProductID, device->Vendor, USB_VENDOR_STRING); + return 0; + + case POSSIBLY_SUPPORTED: + case NOT_SUPPORTED: + default: + return 0; + } +} + +static USBDeviceMatcher_t device_matcher = { + &device_match_func, + NULL, + NULL +}; + +static int query_ups(char *reply) +{ + int ret; + + ret = usb_interrupt_read(udev, STATUS_ENDPOINT, reply, STATUS_PACKETSIZE, ATCL_USB_TIMEOUT); + + if (ret <= 0) { + upsdebugx(2, "status interrupt read: %s", ret ? usb_strerror() : "timeout"); + return ret; + } + + upsdebug_hex(3, "read", reply, ret); + return ret; +} + +static void usb_comm_fail(const char *fmt, ...) +{ + int ret; + char why[SMALLBUF]; + va_list ap; + + /* this means we're probably here because select was interrupted */ + if (exit_flag != 0) { + return; /* ignored, since we're about to exit anyway */ + } + + comm_failures++; + + if ((comm_failures == USB_ERR_LIMIT) || ((comm_failures % USB_ERR_RATE) == 0)) { + upslogx(LOG_WARNING, "Warning: excessive comm failures, limiting error reporting"); + } + + /* once it's past the limit, only log once every USB_ERR_LIMIT calls */ + if ((comm_failures > USB_ERR_LIMIT) && ((comm_failures % USB_ERR_LIMIT) != 0)) { + return; + } + + /* generic message if the caller hasn't elaborated */ + if (!fmt) { + upslogx(LOG_WARNING, "Communications with UPS lost - check cabling"); + return; + } + + va_start(ap, fmt); + ret = vsnprintf(why, sizeof(why), fmt, ap); + va_end(ap); + + if ((ret < 1) || (ret >= (int) sizeof(why))) { + upslogx(LOG_WARNING, "usb_comm_fail: vsnprintf needed more than %d bytes", (int)sizeof(why)); + } + + upslogx(LOG_WARNING, "Communications with UPS lost: %s", why); +} + +static void usb_comm_good(void) +{ + if (comm_failures == 0) { + return; + } + + upslogx(LOG_NOTICE, "Communications with UPS re-established"); + comm_failures = 0; +} + +/* + * Callback that is called by usb_device_open() that handles USB device + * settings prior to accepting the devide. At the very least claim the + * device here. Detaching the kernel driver will be handled by the + * caller, don't do this here. Return < 0 on error, 0 or higher on + * success. + */ +static int driver_callback(usb_dev_handle *handle, USBDevice_t *device) +{ + if (usb_set_configuration(handle, 1) < 0) { + upslogx(LOG_WARNING, "Can't set USB configuration: %s", usb_strerror()); + return -1; + } + + if (usb_claim_interface(handle, 0) < 0) { + upslogx(LOG_WARNING, "Can't claim USB interface: %s", usb_strerror()); + return -1; + } + + /* TODO: HID SET_IDLE to 0 (not necessary?) */ + + return 1; +} + +static int usb_device_close(usb_dev_handle *handle) +{ + if (!handle) { + return 0; + } + + /* usb_release_interface() sometimes blocks and goes + into uninterruptible sleep. So don't do it. */ + /* usb_release_interface(handle, 0); */ + return usb_close(handle); +} + +static int usb_device_open(usb_dev_handle **handlep, USBDevice_t *device, USBDeviceMatcher_t *matcher, + int (*callback)(usb_dev_handle *handle, USBDevice_t *device)) +{ + struct usb_bus *bus; + + /* libusb base init */ + usb_init(); + usb_find_busses(); + usb_find_devices(); + +#ifndef __linux__ /* SUN_LIBUSB (confirmed to work on Solaris and FreeBSD) */ + /* Causes a double free corruption in linux if device is detached! */ + usb_device_close(*handlep); +#endif + + for (bus = usb_busses; bus; bus = bus->next) { + + struct usb_device *dev; + usb_dev_handle *handle; + + for (dev = bus->devices; dev; dev = dev->next) { + + int i, ret; + USBDeviceMatcher_t *m; + + upsdebugx(3, "Checking USB device [%04x:%04x] (%s/%s)", dev->descriptor.idVendor, + dev->descriptor.idProduct, bus->dirname, dev->filename); + + /* supported vendors are now checked by the supplied matcher */ + + /* open the device */ + *handlep = handle = usb_open(dev); + if (!handle) { + upsdebugx(4, "Failed to open USB device, skipping: %s", usb_strerror()); + continue; + } + + /* collect the identifying information of this + device. Note that this is safe, because + there's no need to claim an interface for + this (and therefore we do not yet need to + detach any kernel drivers). */ + + free(device->Vendor); + free(device->Product); + free(device->Serial); + free(device->Bus); + + memset(device, 0, sizeof(*device)); + + device->VendorID = dev->descriptor.idVendor; + device->ProductID = dev->descriptor.idProduct; + device->Bus = strdup(bus->dirname); + + if (dev->descriptor.iManufacturer) { + char buf[SMALLBUF]; + ret = usb_get_string_simple(handle, dev->descriptor.iManufacturer, + buf, sizeof(buf)); + if (ret > 0) { + device->Vendor = strdup(buf); + } + } + + if (dev->descriptor.iProduct) { + char buf[SMALLBUF]; + ret = usb_get_string_simple(handle, dev->descriptor.iProduct, + buf, sizeof(buf)); + if (ret > 0) { + device->Product = strdup(buf); + } + } + + if (dev->descriptor.iSerialNumber) { + char buf[SMALLBUF]; + ret = usb_get_string_simple(handle, dev->descriptor.iSerialNumber, + buf, sizeof(buf)); + if (ret > 0) { + device->Serial = strdup(buf); + } + } + + upsdebugx(4, "- VendorID : %04x", device->VendorID); + upsdebugx(4, "- ProductID : %04x", device->ProductID); + upsdebugx(4, "- Manufacturer : %s", device->Vendor ? device->Vendor : "unknown"); + upsdebugx(4, "- Product : %s", device->Product ? device->Product : "unknown"); + upsdebugx(4, "- Serial Number: %s", device->Serial ? device->Serial : "unknown"); + upsdebugx(4, "- Bus : %s", device->Bus ? device->Bus : "unknown"); + + for (m = matcher; m; m = m->next) { + + switch (m->match_function(device, m->privdata)) + { + case 0: + upsdebugx(4, "Device does not match - skipping"); + goto next_device; + case -1: + fatal_with_errno(EXIT_FAILURE, "matcher"); + goto next_device; + case -2: + upsdebugx(4, "matcher: unspecified error"); + goto next_device; + } + } + + for (i = 0; i < 3; i++) { + + ret = callback(handle, device); + if (ret >= 0) { + upsdebugx(3, "USB device [%04x:%04x] opened", device->VendorID, device->ProductID); + return ret; + } +#ifdef HAVE_USB_DETACH_KERNEL_DRIVER_NP + /* this method requires at least libusb 0.1.8: + * it forces device claiming by unbinding + * attached driver... From libhid */ + if (usb_detach_kernel_driver_np(handle, 0) < 0) { + upsdebugx(1, "failed to detach kernel driver from USB device: %s", usb_strerror()); + } else { + upsdebugx(4, "detached kernel driver from USB device..."); + } +#endif + } + + fatalx(EXIT_FAILURE, "USB device [%04x:%04x] matches, but driver callback failed: %s", + device->VendorID, device->ProductID, usb_strerror()); + + next_device: + usb_close(handle); + } + } + + *handlep = NULL; + upsdebugx(3, "No matching USB device found"); + + return -1; +} + +/* + * Initialise the UPS + */ +void upsdrv_initups(void) +{ + int i; + + upsdebugx(1, "Searching for USB device..."); + + for (i = 0; usb_device_open(&udev, &usbdevice, &device_matcher, &driver_callback) < 0; i++) { + + if ((i < 3) && (sleep(5) == 0)) { + usb_comm_fail("Can't open USB device, retrying ..."); + continue; + } + + fatalx(EXIT_FAILURE, + "Unable to find ATCL FOR UPS\n\n" + + "Things to try:\n" + " - Connect UPS device to USB bus\n" + " - Run this driver as another user (upsdrvctl -u or 'user=...' in ups.conf).\n" + " See upsdrvctl(8) and ups.conf(5).\n\n" + + "Fatal error: unusable configuration"); + } + +} + +void upsdrv_cleanup(void) +{ + usb_device_close(udev); + + free(usbdevice.Vendor); + free(usbdevice.Product); + free(usbdevice.Serial); + free(usbdevice.Bus); +} + +void upsdrv_initinfo(void) +{ + dstate_setinfo("ups.mfr", "%s", usbdevice.Vendor ? usbdevice.Vendor : "unknown"); + dstate_setinfo("ups.model", "%s", usbdevice.Product ? usbdevice.Product : "unknown"); + if(usbdevice.Serial && usbdevice.Product && strcmp(usbdevice.Serial, usbdevice.Product)) { + /* Only set "ups.serial" if it isn't the same as "ups.model": */ + dstate_setinfo("ups.serial", "%s", usbdevice.Serial); + } + + dstate_setinfo("ups.vendorid", "%04x", usbdevice.VendorID); + dstate_setinfo("ups.productid", "%04x", usbdevice.ProductID); +} + +void upsdrv_updateinfo(void) +{ + char reply[STATUS_PACKETSIZE]; + int ret; + + if (!udev) { + ret = usb_device_open(&udev, &usbdevice, &device_matcher, &driver_callback); + + if (ret < 0) { + return; + } + } + + ret = query_ups(reply); + + if (ret != STATUS_PACKETSIZE) { + usb_comm_fail("Query to UPS failed"); + dstate_datastale(); + + usb_device_close(udev); + udev = NULL; + + return; + } + + usb_comm_good(); + dstate_dataok(); + + status_init(); + + switch(reply[0]) { + case 3: + upsdebugx(2, "reply[0] = 0x%02x -> OL", reply[0]); + status_set("OL"); + break; + case 2: + upsdebugx(2, "reply[0] = 0x%02x -> LB", reply[0]); + status_set("LB"); + /* fall through */ + case 1: + upsdebugx(2, "reply[0] = 0x%02x -> OB", reply[0]); + status_set("OB"); + break; + default: + upslogx(LOG_ERR, "Unknown status: 0x%02x", reply[0]); + } + if(strnlen(reply + 1, 7) != 0) { + upslogx(LOG_NOTICE, "Status bytes 1-7 are not all zero"); + } + + status_commit(); +} + +/* If the UPS is on battery, it should shut down about 30 seconds after + * receiving this packet. + */ +void upsdrv_shutdown(void) +{ + const char shutdown_packet[SHUTDOWN_PACKETSIZE] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + int ret; + + upslogx(LOG_DEBUG, "%s: attempting to call usb_interrupt_write(01 00 00 00 00 00 00 00)", __func__); + + ret = usb_interrupt_write(udev, SHUTDOWN_ENDPOINT, (char *)shutdown_packet, SHUTDOWN_PACKETSIZE, ATCL_USB_TIMEOUT); + + if (ret <= 0) { + upslogx(LOG_NOTICE, "%s: first usb_interrupt_write() failed: %s", __func__, ret ? usb_strerror() : "timeout"); + } + + /* Totally guessing from the .pcap file here. TODO: configurable delay? */ + usleep(170*1000); + + ret = usb_interrupt_write(udev, SHUTDOWN_ENDPOINT, (char *)shutdown_packet, SHUTDOWN_PACKETSIZE, ATCL_USB_TIMEOUT); + + if (ret <= 0) { + upslogx(LOG_ERR, "%s: second usb_interrupt_write() failed: %s", __func__, ret ? usb_strerror() : "timeout"); + } + +} + +void upsdrv_help(void) +{ +} + +void upsdrv_makevartable(void) +{ + addvar(VAR_VALUE, "vendor", "USB vendor string (or NULL if none)"); +} diff --git a/drivers/nutdrv_qx.c b/drivers/nutdrv_qx.c index efde86e..f27e89b 100644 --- a/drivers/nutdrv_qx.c +++ b/drivers/nutdrv_qx.c @@ -33,7 +33,7 @@ * */ -#define DRIVER_VERSION "0.01" +#define DRIVER_VERSION "0.06" #include "main.h" @@ -66,17 +66,22 @@ #include "nutdrv_qx_megatec.h" #include "nutdrv_qx_megatec-old.h" #include "nutdrv_qx_mustek.h" +#include "nutdrv_qx_q1.h" #include "nutdrv_qx_voltronic.h" +#include "nutdrv_qx_voltronic-qs.h" #include "nutdrv_qx_zinto.h" /* Master list of avaiable subdrivers */ static subdriver_t *subdriver_list[] = { &voltronic_subdriver, + &voltronic_qs_subdriver, &mustek_subdriver, &megatec_old_subdriver, - &megatec_subdriver, &mecer_subdriver, + &megatec_subdriver, &zinto_subdriver, + /* Fallback Q1 subdriver */ + &q1_subdriver, NULL }; @@ -534,7 +539,7 @@ static int phoenix_command(const char *cmd, char *buf, size_t buflen) static int ippon_command(const char *cmd, char *buf, size_t buflen) { char tmp[64]; - int ret; + int ret, len; size_t i; /* Send command */ @@ -562,10 +567,19 @@ static int ippon_command(const char *cmd, char *buf, size_t buflen) return ret; } - snprintf(buf, buflen, "%.*s", ret, tmp); - - upsdebugx(3, "read: %.*s", (int)strcspn(buf, "\r"), buf); - return ret; + /* + * As Ippon will always return 64 bytes in response, we have to + * calculate and return length of actual response data here. + * Empty response will look like 0x00 0x0D, otherwise it will be + * data string terminated by 0x0D. + */ + len = (int)strcspn(tmp, "\r"); + upsdebugx(3, "read: %.*s", len, tmp); + if (len > 0) { + len ++; + } + snprintf(buf, buflen, "%.*s", len, tmp); + return len; } /* Krauler communication subdriver */ @@ -1759,7 +1773,9 @@ static int qx_command(const char *cmd, char *buf, size_t buflen) case -ETIMEDOUT: /* Connection timed out */ case -EOVERFLOW: /* Value too large for defined data type */ +#ifdef EPROTO case -EPROTO: /* Protocol error */ +#endif default: break; } diff --git a/drivers/nutdrv_qx.h b/drivers/nutdrv_qx.h index e42e9a0..b904689 100644 --- a/drivers/nutdrv_qx.h +++ b/drivers/nutdrv_qx.h @@ -45,7 +45,11 @@ #define DEFAULT_OFFDELAY "30" /* Delay before power off, in seconds */ #define DEFAULT_POLLFREQ 30 /* Polling interval between full updates, in seconds; the driver will do quick polls in the meantime */ +#ifndef TRUE typedef enum { FALSE, TRUE } bool_t; +#else +typedef int bool_t; +#endif /* Structure for rw vars */ typedef struct { diff --git a/drivers/nutdrv_qx_blazer-common.c b/drivers/nutdrv_qx_blazer-common.c index 950dfc8..1221778 100644 --- a/drivers/nutdrv_qx_blazer-common.c +++ b/drivers/nutdrv_qx_blazer-common.c @@ -1,4 +1,4 @@ -/* nutdrv_qx_blazer-common.c - Common functions/settings for nutdrv_qx_{mecer,megatec,megatec-old,mustek,zinto}.{c,h} +/* nutdrv_qx_blazer-common.c - Common functions/settings for nutdrv_qx_{mecer,megatec,megatec-old,mustek,q1,voltronic-qs,zinto}.{c,h} * * Copyright (C) * 2013 Daniele Pezzini @@ -88,6 +88,30 @@ int blazer_claim(void) { } +/* This function allows the subdriver to "claim" a device: return 1 if the device is supported by this subdriver, else 0. + * NOTE: this 'light' version only checks for status (Q1/QS/D/..) */ +int blazer_claim_light(void) { + + /* To tell whether the UPS is supported or not, we'll check just status (Q1/QS/D/..). */ + + item_t *item = find_nut_info("input.voltage", 0, 0); + + /* Don't know what happened */ + if (!item) + return 0; + + /* No reply/Unable to get value */ + if (qx_process(item, NULL)) + return 0; + + /* Unable to process value */ + if (ups_infoval_set(item) != 1) + return 0; + + return 1; + +} + /* Subdriver-specific flags/vars */ void blazer_makevartable(void) { diff --git a/drivers/nutdrv_qx_blazer-common.h b/drivers/nutdrv_qx_blazer-common.h index ec5fb5c..aee3864 100644 --- a/drivers/nutdrv_qx_blazer-common.h +++ b/drivers/nutdrv_qx_blazer-common.h @@ -1,4 +1,4 @@ -/* nutdrv_qx_blazer-common.h - Common functions/settings for nutdrv_qx_{mecer,megatec,megatec-old,mustek,zinto}.{c,h} +/* nutdrv_qx_blazer-common.h - Common functions/settings for nutdrv_qx_{mecer,megatec,megatec-old,mustek,q1,voltronic-qs,zinto}.{c,h} * * Copyright (C) * 2013 Daniele Pezzini @@ -28,6 +28,7 @@ void blazer_makevartable(void); void blazer_initups(item_t *qx2nut); int blazer_claim(void); +int blazer_claim_light(void); /* Preprocess functions */ int blazer_process_command(item_t *item, char *value, size_t valuelen); diff --git a/drivers/nutdrv_qx_mecer.c b/drivers/nutdrv_qx_mecer.c index a8299db..5160343 100644 --- a/drivers/nutdrv_qx_mecer.c +++ b/drivers/nutdrv_qx_mecer.c @@ -1,4 +1,4 @@ -/* nutdrv_qx_mecer.c - Subdriver for Mecer UPSes +/* nutdrv_qx_mecer.c - Subdriver for Mecer/Voltronic Power P98 UPSes * * Copyright (C) * 2013 Daniele Pezzini @@ -25,11 +25,29 @@ #include "nutdrv_qx_mecer.h" -#define MECER_VERSION "Mecer 0.01" +#define MECER_VERSION "Mecer 0.02" -/* qx2nut lookup table */ +/* Support functions */ +static int mecer_claim(void); +static void mecer_initups(void); + +/* Preprocess functions */ +static int voltronic_p98_protocol(item_t *item, char *value, size_t valuelen); +static int mecer_process_test_battery(item_t *item, char *value, size_t valuelen); + + +/* == qx2nut lookup table == */ static item_t mecer_qx2nut[] = { + /* Query UPS for protocol (Voltronic Power UPSes) + * > [QPI\r] + * < [(PI98\r] + * 012345 + * 0 + */ + + { "ups.firmware.aux", 0, NULL, "QPI\r", "", 6, '(', "", 1, 4, "%s", QX_FLAG_STATIC, voltronic_p98_protocol }, + /* * > [Q1\r] * < [(226.0 195.0 226.0 014 49.0 27.5 30.0 00001000\r] @@ -87,7 +105,7 @@ static item_t mecer_qx2nut[] = { { "shutdown.return", 0, NULL, "S%s\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, blazer_process_command }, { "shutdown.stayoff", 0, NULL, "S%sR0000\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, blazer_process_command }, { "shutdown.stop", 0, NULL, "C\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, NULL }, - { "test.battery.start", 0, NULL, "T%02d\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, blazer_process_command }, + { "test.battery.start", 0, NULL, "T%s\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, mecer_process_test_battery }, { "test.battery.start.deep", 0, NULL, "TL\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, NULL }, { "test.battery.start.quick", 0, NULL, "T\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, NULL }, { "test.battery.stop", 0, NULL, "CT\r", "", 5, '(', "", 1, 3, NULL, QX_FLAG_CMD, NULL }, @@ -100,10 +118,12 @@ static item_t mecer_qx2nut[] = { { NULL, 0, NULL, NULL, "", 0, 0, "", 0, 0, NULL, 0, NULL } }; -/* Testing table */ + +/* == Testing table == */ #ifdef TESTING static testing_t mecer_testing[] = { { "Q1\r", "(215.0 195.0 230.0 014 49.0 22.7 30.0 00000000\r" }, + { "QPI\r", "(PI98\r" }, { "F\r", "#230.0 000 024.0 50.0\r" }, { "I\r", "#NOT_A_LIVE_UPS TESTING TESTING \r" }, { "Q\r", "(ACK\r" }, @@ -119,6 +139,68 @@ static testing_t mecer_testing[] = { }; #endif /* TESTING */ + +/* == Support functions == */ + +/* This function allows the subdriver to "claim" a device: return 1 if the device is supported by this subdriver, else 0. */ +static int mecer_claim(void) +{ + + /* Apart from status (Q1), try to identify protocol (QPI, for Voltronic Power P98 units) or whether the UPS uses '(ACK\r'/'(NAK\r' replies */ + + item_t *item = find_nut_info("input.voltage", 0, 0); + + /* Don't know what happened */ + if (!item) + return 0; + + /* No reply/Unable to get value */ + if (qx_process(item, NULL)) + return 0; + + /* Unable to process value */ + if (ups_infoval_set(item) != 1) + return 0; + + /* UPS Protocol */ + item = find_nut_info("ups.firmware.aux", 0, 0); + + /* Don't know what happened */ + if (!item) { + dstate_delinfo("input.voltage"); + return 0; + } + + /* No reply/Unable to get value/Command rejected */ + if (qx_process(item, NULL)) { + + /* No reply/Command echoed back or rejected with something other than '(NAK\r' -> Not a '(ACK/(NAK' unit */ + if (!strlen(item->answer) || strcasecmp(item->answer, "(NAK\r")) { + dstate_delinfo("input.voltage"); + return 0; + } + + /* Command rejected with '(NAK\r' -> '(ACK/(NAK' unit */ + + /* Skip protocol query from now on */ + item->qxflags |= QX_FLAG_SKIP; + + } else { + + /* Unable to process value/Command echoed back or rejected with something other than '(NAK\r'/Protocol not supported */ + if (ups_infoval_set(item) != 1) { + dstate_delinfo("input.voltage"); + return 0; + } + + /* Voltronic Power P98 unit */ + + } + + return 1; + +} + /* Subdriver-specific initups */ static void mecer_initups(void) { @@ -127,10 +209,72 @@ static void mecer_initups(void) } -/* Subdriver interface */ + +/* == Preprocess functions == */ + +/* Protocol used by the UPS */ +static int voltronic_p98_protocol(item_t *item, char *value, size_t valuelen) +{ + if (strcasecmp(item->value, "PI98")) { + upslogx(LOG_ERR, "Protocol [%s] is not supported by this driver", item->value); + return -1; + } + + snprintf(value, valuelen, item->dfl, "Voltronic Power P98"); + + return 0; +} + +/* *CMD* Preprocess 'test.battery.start' instant command */ +static int mecer_process_test_battery(item_t *item, char *value, size_t valuelen) +{ + const char *protocol = dstate_getinfo("ups.firmware.aux"); + char buf[SMALLBUF] = ""; + int min, test_time; + + /* Voltronic P98 units -> Accepted values for test time: .2 -> .9 (.2=12sec ..), 01 -> 99 (minutes) -> range = [12..5940] */ + if (protocol && !strcasecmp(protocol, "Voltronic Power P98")) + min = 12; + /* Other units: 01 -> 99 (minutes) -> [60..5940] */ + else + min = 60; + + if (strlen(value) != strspn(value, "0123456789")) { + upslogx(LOG_ERR, "%s: non numerical value [%s]", item->info_type, value); + return -1; + } + + test_time = strlen(value) > 0 ? strtol(value, NULL, 10) : 600; + + if ((test_time < min) || (test_time > 5940)) { + upslogx(LOG_ERR, "%s: battery test time '%d' out of range [%d..5940] seconds", item->info_type, test_time, min); + return -1; + } + + /* test time < 1 minute */ + if (test_time < 60) { + + test_time = test_time / 6; + snprintf(buf, sizeof(buf), ".%d", test_time); + + /* test time > 1 minute */ + } else { + + test_time = test_time / 60; + snprintf(buf, sizeof(buf), "%02d", test_time); + + } + + snprintf(value, valuelen, item->command, buf); + + return 0; +} + + +/* == Subdriver interface == */ subdriver_t mecer_subdriver = { MECER_VERSION, - blazer_claim, + mecer_claim, mecer_qx2nut, mecer_initups, NULL, diff --git a/drivers/nutdrv_qx_mecer.h b/drivers/nutdrv_qx_mecer.h index 43cae1f..7ad2914 100644 --- a/drivers/nutdrv_qx_mecer.h +++ b/drivers/nutdrv_qx_mecer.h @@ -1,4 +1,4 @@ -/* nutdrv_qx_mecer.h - Subdriver for Mecer UPSes +/* nutdrv_qx_mecer.h - Subdriver for Mecer/Voltronic Power P98 UPSes * * Copyright (C) * 2013 Daniele Pezzini diff --git a/drivers/nutdrv_qx_megatec-old.c b/drivers/nutdrv_qx_megatec-old.c index 37372b2..73173de 100644 --- a/drivers/nutdrv_qx_megatec-old.c +++ b/drivers/nutdrv_qx_megatec-old.c @@ -25,7 +25,7 @@ #include "nutdrv_qx_megatec-old.h" -#define MEGATEC_OLD_VERSION "Megatec/old 0.01" +#define MEGATEC_OLD_VERSION "Megatec/old 0.02" /* qx2nut lookup table */ static item_t megatec_old_qx2nut[] = { @@ -128,7 +128,7 @@ static void megatec_old_initups(void) /* Subdriver interface */ subdriver_t megatec_old_subdriver = { MEGATEC_OLD_VERSION, - blazer_claim, + blazer_claim_light, megatec_old_qx2nut, megatec_old_initups, NULL, diff --git a/drivers/nutdrv_qx_mustek.c b/drivers/nutdrv_qx_mustek.c index ce85ccc..3bdee1a 100644 --- a/drivers/nutdrv_qx_mustek.c +++ b/drivers/nutdrv_qx_mustek.c @@ -25,7 +25,7 @@ #include "nutdrv_qx_mustek.h" -#define MUSTEK_VERSION "Mustek 0.01" +#define MUSTEK_VERSION "Mustek 0.02" /* qx2nut lookup table */ static item_t mustek_qx2nut[] = { @@ -128,7 +128,7 @@ static void mustek_initups(void) /* Subdriver interface */ subdriver_t mustek_subdriver = { MUSTEK_VERSION, - blazer_claim, + blazer_claim_light, mustek_qx2nut, mustek_initups, NULL, diff --git a/drivers/nutdrv_qx_q1.c b/drivers/nutdrv_qx_q1.c new file mode 100644 index 0000000..b201497 --- /dev/null +++ b/drivers/nutdrv_qx_q1.c @@ -0,0 +1,118 @@ +/* nutdrv_qx_q1.c - Subdriver for Q1 protocol based UPSes + * + * Copyright (C) + * 2013 Daniele Pezzini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTE: + * This subdriver implements the same protocol as the one used by the 'megatec' subdriver minus the vendor (I) and ratings (F) queries. + * In the claim function: + * - it doesn't even try to get 'vendor' informations (I) + * - it checks only status (Q1), through 'input.voltage' variable + * Therefore it should be able to work even if the UPS doesn't support vendor/ratings *and* the user doesn't use the 'novendor'/'norating' flags, as long as: + * - the UPS replies a Q1-compliant answer (i.e. not necessary filled with all of the Q1-required data, but at least of the right length and with not available data filled with some replacement character) + * - the UPS reports a valid input.voltage (used in the claim function) + * - the UPS reports valid status bits (1st, 2nd, 3rd, 6th, 7th are the mandatory ones) + * + */ + +#include "main.h" +#include "nutdrv_qx.h" +#include "nutdrv_qx_blazer-common.h" + +#include "nutdrv_qx_q1.h" + +#define Q1_VERSION "Q1 0.02" + +/* qx2nut lookup table */ +static item_t q1_qx2nut[] = { + + /* + * > [Q1\r] + * < [(226.0 195.0 226.0 014 49.0 27.5 30.0 00001000\r] + * 01234567890123456789012345678901234567890123456 + * 0 1 2 3 4 + */ + + { "input.voltage", 0, NULL, "Q1\r", "", 47, '(', "", 1, 5, "%.1f", 0, NULL }, + { "input.voltage.fault", 0, NULL, "Q1\r", "", 47, '(', "", 7, 11, "%.1f", 0, NULL }, + { "output.voltage", 0, NULL, "Q1\r", "", 47, '(', "", 13, 17, "%.1f", 0, NULL }, + { "ups.load", 0, NULL, "Q1\r", "", 47, '(', "", 19, 21, "%.0f", 0, NULL }, + { "input.frequency", 0, NULL, "Q1\r", "", 47, '(', "", 23, 26, "%.1f", 0, NULL }, + { "battery.voltage", 0, NULL, "Q1\r", "", 47, '(', "", 28, 31, "%.2f", 0, NULL }, + { "ups.temperature", 0, NULL, "Q1\r", "", 47, '(', "", 33, 36, "%.1f", 0, NULL }, + /* Status bits */ + { "ups.status", 0, NULL, "Q1\r", "", 47, '(', "", 38, 38, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Utility Fail (Immediate) */ + { "ups.status", 0, NULL, "Q1\r", "", 47, '(', "", 39, 39, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Battery Low */ + { "ups.status", 0, NULL, "Q1\r", "", 47, '(', "", 40, 40, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Bypass/Boost or Buck Active */ + { "ups.alarm", 0, NULL, "Q1\r", "", 47, '(', "", 41, 41, NULL, 0, blazer_process_status_bits }, /* UPS Failed */ + { "ups.type", 0, NULL, "Q1\r", "", 47, '(', "", 42, 42, "%s", QX_FLAG_STATIC, blazer_process_status_bits }, /* UPS Type */ + { "ups.status", 0, NULL, "Q1\r", "", 47, '(', "", 43, 43, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Test in Progress */ + { "ups.alarm", 0, NULL, "Q1\r", "", 47, '(', "", 44, 44, NULL, 0, blazer_process_status_bits }, /* Shutdown Active */ + { "ups.status", 0, NULL, "Q1\r", "", 47, '(', "", 44, 44, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Shutdown Active */ + { "ups.beeper.status", 0, NULL, "Q1\r", "", 47, '(', "", 45, 45, "%s", 0, blazer_process_status_bits }, /* Beeper status */ + + /* Instant commands */ + { "beeper.toggle", 0, NULL, "Q\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "load.off", 0, NULL, "S00R0000\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "load.on", 0, NULL, "C\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "shutdown.return", 0, NULL, "S%s\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, blazer_process_command }, + { "shutdown.stayoff", 0, NULL, "S%sR0000\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, blazer_process_command }, + { "shutdown.stop", 0, NULL, "C\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "test.battery.start", 0, NULL, "T%02d\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, blazer_process_command }, + { "test.battery.start.deep", 0, NULL, "TL\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "test.battery.start.quick", 0, NULL, "T\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + { "test.battery.stop", 0, NULL, "CT\r", "", 0, 0, "", 0, 0, NULL, QX_FLAG_CMD, NULL }, + + /* Server-side settable vars */ + { "ups.delay.start", ST_FLAG_RW, blazer_r_ondelay, NULL, "", 0, 0, "", 0, 0, DEFAULT_ONDELAY, QX_FLAG_ABSENT | QX_FLAG_SETVAR | QX_FLAG_RANGE, blazer_process_setvar }, + { "ups.delay.shutdown", ST_FLAG_RW, blazer_r_offdelay, NULL, "", 0, 0, "", 0, 0, DEFAULT_OFFDELAY, QX_FLAG_ABSENT | QX_FLAG_SETVAR | QX_FLAG_RANGE, blazer_process_setvar }, + + /* End of structure. */ + { NULL, 0, NULL, NULL, "", 0, 0, "", 0, 0, NULL, 0, NULL } +}; + +/* Testing table */ +#ifdef TESTING +static testing_t q1_testing[] = { + { "Q1\r", "(215.0 195.0 230.0 014 49.0 22.7 30.0 00000000\r" }, + { "Q\r", "" }, + { "S03\r", "" }, + { "C\r", "" }, + { "S02R0005\r", "" }, + { "S.5R0000\r", "" }, + { "T04\r", "" }, + { "TL\r", "" }, + { "T\r", "" }, + { "CT\r", "" }, + { NULL } +}; +#endif /* TESTING */ + +/* Subdriver interface */ +subdriver_t q1_subdriver = { + Q1_VERSION, + blazer_claim_light, + q1_qx2nut, + NULL, + NULL, + NULL, + "ACK", + NULL, +#ifdef TESTING + q1_testing, +#endif /* TESTING */ +}; diff --git a/drivers/nutdrv_qx_q1.h b/drivers/nutdrv_qx_q1.h new file mode 100644 index 0000000..bad2f13 --- /dev/null +++ b/drivers/nutdrv_qx_q1.h @@ -0,0 +1,39 @@ +/* nutdrv_qx_q1.h - Subdriver for Q1 protocol based UPSes + * + * Copyright (C) + * 2013 Daniele Pezzini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTE: + * This subdriver implements the same protocol as the one used by the 'megatec' subdriver minus the vendor (I) and ratings (F) queries. + * In the claim function: + * - it doesn't even try to get 'vendor' informations (I) + * - it checks only status (Q1), through 'input.voltage' variable + * Therefore it should be able to work even if the UPS doesn't support vendor/ratings *and* the user doesn't use the 'novendor'/'norating' flags, as long as: + * - the UPS replies a Q1-compliant answer (i.e. not necessary filled with all of the Q1-required data, but at least of the right length and with not available data filled with some replacement character) + * - the UPS reports a valid input.voltage (used in the claim function) + * - the UPS reports valid status bits (1st, 2nd, 3rd, 6th, 7th are the mandatory ones) + * + */ + +#ifndef NUTDRV_QX_Q1_H +#define NUTDRV_QX_Q1_H + +#include "nutdrv_qx.h" + +extern subdriver_t q1_subdriver; + +#endif /* NUTDRV_QX_Q1_H */ diff --git a/drivers/nutdrv_qx_voltronic-qs.c b/drivers/nutdrv_qx_voltronic-qs.c new file mode 100644 index 0000000..9b86999 --- /dev/null +++ b/drivers/nutdrv_qx_voltronic-qs.c @@ -0,0 +1,214 @@ +/* nutdrv_qx_voltronic-qs.c - Subdriver for Voltronic Power UPSes with QS protocol + * + * Copyright (C) + * 2013 Daniele Pezzini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "main.h" +#include "nutdrv_qx.h" +#include "nutdrv_qx_blazer-common.h" + +#include "nutdrv_qx_voltronic-qs.h" + +#define VOLTRONIC_QS_VERSION "Voltronic-QS 0.01" + +/* Support functions */ +static int voltronic_qs_claim(void); + +/* Preprocess functions */ +static int voltronic_qs_protocol(item_t *item, char *value, size_t valuelen); + + +/* == Ranges == */ + +/* Range for ups.delay.start */ +static info_rw_t voltronic_qs_r_ondelay[] = { + { "60", 0 }, + { "599940", 0 }, + { "", 0 } +}; + +/* Range for ups.delay.shutdown */ +static info_rw_t voltronic_qs_r_offdelay[] = { + { "12", 0 }, + { "540", 0 }, + { "", 0 } +}; + + +/* == qx2nut lookup table == */ +static item_t voltronic_qs_qx2nut[] = { + + /* Query UPS for protocol + * > [M\r] + * < [V\r] + * 01 + * 0 + */ + + { "ups.firmware.aux", 0, NULL, "M\r", "", 2, 0, "", 0, 0, "%s", QX_FLAG_STATIC, voltronic_qs_protocol }, + + /* Query UPS for status + * > [QS\r] + * < [(226.0 195.0 226.0 014 49.0 27.5 30.0 00001000\r] + * 01234567890123456789012345678901234567890123456 + * 0 1 2 3 4 + */ + + { "input.voltage", 0, NULL, "QS\r", "", 47, '(', "", 1, 5, "%.1f", 0, NULL }, + { "input.voltage.fault", 0, NULL, "QS\r", "", 47, '(', "", 7, 11, "%.1f", 0, NULL }, + { "output.voltage", 0, NULL, "QS\r", "", 47, '(', "", 13, 17, "%.1f", 0, NULL }, + { "ups.load", 0, NULL, "QS\r", "", 47, '(', "", 19, 21, "%.0f", 0, NULL }, + { "input.frequency", 0, NULL, "QS\r", "", 47, '(', "", 23, 26, "%.1f", 0, NULL }, + { "battery.voltage", 0, NULL, "QS\r", "", 47, '(', "", 28, 31, "%.2f", 0, NULL }, + { "ups.temperature", 0, NULL, "QS\r", "", 47, '(', "", 33, 36, "%.1f", 0, NULL }, + /* Status bits */ + { "ups.status", 0, NULL, "QS\r", "", 47, '(', "", 38, 38, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Utility Fail (Immediate) */ + { "ups.status", 0, NULL, "QS\r", "", 47, '(', "", 39, 39, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Battery Low */ + { "ups.status", 0, NULL, "QS\r", "", 47, '(', "", 40, 40, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Bypass/Boost or Buck Active */ + { "ups.alarm", 0, NULL, "QS\r", "", 47, '(', "", 41, 41, NULL, 0, blazer_process_status_bits }, /* UPS Failed */ + { "ups.type", 0, NULL, "QS\r", "", 47, '(', "", 42, 42, "%s", QX_FLAG_STATIC, blazer_process_status_bits }, /* UPS Type */ + { "ups.status", 0, NULL, "QS\r", "", 47, '(', "", 43, 43, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Test in Progress */ + { "ups.alarm", 0, NULL, "QS\r", "", 47, '(', "", 44, 44, NULL, 0, blazer_process_status_bits }, /* Shutdown Active */ + { "ups.status", 0, NULL, "QS\r", "", 47, '(', "", 44, 44, NULL, QX_FLAG_QUICK_POLL, blazer_process_status_bits }, /* Shutdown Active */ + { "ups.beeper.status", 0, NULL, "QS\r", "", 47, '(', "", 45, 45, "%s", 0, blazer_process_status_bits }, /* Beeper status */ + + /* Query UPS for ratings + * > [F\r] + * < [#220.0 000 024.0 50.0\r] + * 0123456789012345678901 + * 0 1 2 + */ + + { "input.voltage.nominal", 0, NULL, "F\r", "", 22, '#', "", 1, 5, "%.0f", QX_FLAG_STATIC, NULL }, + { "input.current.nominal", 0, NULL, "F\r", "", 22, '#', "", 7, 9, "%.1f", QX_FLAG_STATIC, NULL }, + { "battery.voltage.nominal", 0, NULL, "F\r", "", 22, '#', "", 11, 15, "%.1f", QX_FLAG_STATIC, NULL }, + { "input.frequency.nominal", 0, NULL, "F\r", "", 22, '#', "", 17, 20, "%.0f", QX_FLAG_STATIC, NULL }, + + /* Instant commands */ + { "beeper.toggle", 0, NULL, "Q\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, NULL }, + { "load.off", 0, NULL, "S00R0000\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, NULL }, + { "load.on", 0, NULL, "C\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, NULL }, + { "shutdown.return", 0, NULL, "S%s\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, blazer_process_command }, + { "shutdown.stayoff", 0, NULL, "S%sR0000\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, blazer_process_command }, + { "shutdown.stop", 0, NULL, "C\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, NULL }, + { "test.battery.start.quick", 0, NULL, "T\r", "", 0, 0, "", 1, 3, NULL, QX_FLAG_CMD, NULL }, + + /* Server-side settable vars */ + { "ups.delay.start", ST_FLAG_RW, voltronic_qs_r_ondelay, NULL, "", 0, 0, "", 0, 0, DEFAULT_ONDELAY, QX_FLAG_ABSENT | QX_FLAG_SETVAR | QX_FLAG_RANGE, blazer_process_setvar }, + { "ups.delay.shutdown", ST_FLAG_RW, voltronic_qs_r_offdelay, NULL, "", 0, 0, "", 0, 0, DEFAULT_OFFDELAY, QX_FLAG_ABSENT | QX_FLAG_SETVAR | QX_FLAG_RANGE, blazer_process_setvar }, + + /* End of structure. */ + { NULL, 0, NULL, NULL, "", 0, 0, "", 0, 0, NULL, 0, NULL } +}; + + +/* == Testing table == */ +#ifdef TESTING +static testing_t voltronic_qs_testing[] = { + { "QS\r", "(215.0 195.0 230.0 014 49.0 22.7 30.0 00000000\r" }, + { "F\r", "#230.0 000 024.0 50.0\r" }, + { "M\r", "V\r" }, + { "Q\r", "" }, + { "C\r", "" }, + { "S02R0005\r", "" }, + { "S.5R0000\r", "" }, + { "T\r", "" }, + { NULL } +}; +#endif /* TESTING */ + + +/* == Support functions == */ + +/* This function allows the subdriver to "claim" a device: return 1 if the device is supported by this subdriver, else 0. */ +static int voltronic_qs_claim(void) +{ + + /* We need at least M and QS to run this subdriver */ + + /* UPS Protocol */ + item_t *item = find_nut_info("ups.firmware.aux", 0, 0); + + /* Don't know what happened */ + if (!item) + return 0; + + /* No reply/Unable to get value */ + if (qx_process(item, NULL)) + return 0; + + /* Unable to process value/Protocol not supported */ + if (ups_infoval_set(item) != 1) + return 0; + + item = find_nut_info("input.voltage", 0, 0); + + /* Don't know what happened */ + if (!item) { + dstate_delinfo("ups.firmware.aux"); + return 0; + } + + /* No reply/Unable to get value */ + if (qx_process(item, NULL)) { + dstate_delinfo("ups.firmware.aux"); + return 0; + } + + /* Unable to process value */ + if (ups_infoval_set(item) != 1) { + dstate_delinfo("ups.firmware.aux"); + return 0; + } + + return 1; + +} + + +/* == Preprocess functions == */ + +/* Protocol used by the UPS */ +static int voltronic_qs_protocol(item_t *item, char *value, size_t valuelen) +{ + if (strcasecmp(item->value, "V")) { + upsdebugx(2, "%s: invalid protocol [%s]", __func__, item->value); + return -1; + } + + snprintf(value, valuelen, item->dfl, "PMV"); + + return 0; +} + + +/* == Subdriver interface == */ +subdriver_t voltronic_qs_subdriver = { + VOLTRONIC_QS_VERSION, + voltronic_qs_claim, + voltronic_qs_qx2nut, + NULL, + NULL, + NULL, + "ACK", + "(NAK\r", +#ifdef TESTING + voltronic_qs_testing, +#endif /* TESTING */ +}; diff --git a/drivers/nutdrv_qx_voltronic-qs.h b/drivers/nutdrv_qx_voltronic-qs.h new file mode 100644 index 0000000..ac9f39b --- /dev/null +++ b/drivers/nutdrv_qx_voltronic-qs.h @@ -0,0 +1,29 @@ +/* nutdrv_qx_voltronic-qs.h - Subdriver for Voltronic Power UPSes with QS protocol + * + * Copyright (C) + * 2013 Daniele Pezzini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef NUTDRV_QX_VOLTRONIC_QS_H +#define NUTDRV_QX_VOLTRONIC_QS_H + +#include "nutdrv_qx.h" + +extern subdriver_t voltronic_qs_subdriver; + +#endif /* NUTDRV_QX_VOLTRONIC_QS_H */ diff --git a/drivers/powercom.c b/drivers/powercom.c index 82e4898..62d8683 100644 --- a/drivers/powercom.c +++ b/drivers/powercom.c @@ -6,8 +6,10 @@ * See http://www.advice.co.il/product/inter/ups.html for its specifications. * This model is based on PowerCom (www.powercom.com) models. * -Socomec Sicon Egys 420 + * -OptiUPS VS 575C * * Copyrights: + * (C) 2013 Florian Bruhin * (C) 2002 Simon Rozman * (C) 1999 Peter Bieringer * @@ -58,6 +60,10 @@ * * Tested on: BNT-1500A * + * rev 0.14: Florian Bruhin (The Compiler) + * - Added support for OptiUPS VS 575C + * This probably also works with others, but I don't have their model numbers. + * */ #include "main.h" @@ -66,7 +72,7 @@ #include "math.h" #define DRIVER_NAME "PowerCom protocol UPS driver" -#define DRIVER_VERSION "0.13" +#define DRIVER_VERSION "0.14" /* driver description structure */ upsdrv_info_t upsdrv_info = { @@ -74,7 +80,8 @@ upsdrv_info_t upsdrv_info = { DRIVER_VERSION, "Simon Rozman \n" \ "Peter Bieringer \n" \ - "Alexey Sidorov ", + "Alexey Sidorov \n" \ + "Florian Bruhin ", DRV_STABLE, { NULL } }; @@ -199,6 +206,17 @@ static struct type types[] = { { 1.0000, 0.0000, 0.0000, 1.0000, 0.0000 }, { 2.0000, 0.0000, 2.0000, 0.0000 }, }, + { + "OPTI", + 16, + { "no_flow_control", no_flow_control }, + { { 5U, 0xFFU }, { 7U, 0U }, { 8U, 0U } }, + { { 1U, 30U }, 'y' }, + { 0.0000, 0.0000 }, + { 1.0000, 0.0000, 1.0000, 0.0000 }, + { 1.0000, 0.0000, 0.0000, 1.0000, 0.0000 }, + { 2.0000, 0.0000, 2.0000, 0.0000 }, + }, }; /* values for sending to UPS */ @@ -249,6 +267,7 @@ unsigned int voltages[]={100,110,115,120,0,0,0,200,220,230,240,0,0,0,0,0}; unsigned int BNTmodels[]={0,400,500,600,800,801,1000,1200,1500,2000,0,0,0,0,0,0}; unsigned int KINmodels[]={0,425,500,525,625,800,1000,1200,1500,1600,2200,2200,2500,3000,5000,0}; unsigned int IMPmodels[]={0,425,525,625,825,1025,1200,1500,2000,0,0,0,0,0,0,0}; +unsigned int OPTImodels[]={0,0,0,575,0,0,0,0,0,0,0,0,0,0,0,0}; /* * local used functions @@ -398,7 +417,7 @@ static float input_voltage(void) } else { tmp=1.625*raw_data[INPUT_VOLTAGE]; } - } else if ( !strcmp(types[type].name, "IMP")) { + } else if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) { tmp=raw_data[INPUT_VOLTAGE]*2.0; } else { tmp=linevoltage >= 220 ? @@ -489,7 +508,7 @@ static float output_voltage(void) tmp=sqrt(tmp)*rdatay; } } - } else if ( !strcmp(types[type].name, "IMP")) { + } else if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) { tmp=raw_data[OUTPUT_VOLTAGE]*2.0; } else { tmp= linevoltage >= 220 ? @@ -506,7 +525,7 @@ static float input_freq(void) { if ( !strcmp(types[type].name, "BNT") || !strcmp(types[type].name, "KIN")) return 4807.0/raw_data[INPUT_FREQUENCY]; - else if ( !strcmp(types[type].name, "IMP")) + else if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) return raw_data[INPUT_FREQUENCY]; return raw_data[INPUT_FREQUENCY] ? 1.0 / (types[type].freq[0] * @@ -518,7 +537,7 @@ static float output_freq(void) { if ( !strcmp(types[type].name, "BNT") || !strcmp(types[type].name, "KIN")) return 4807.0/raw_data[OUTPUT_FREQUENCY]; - else if ( !strcmp(types[type].name, "IMP")) + else if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) return raw_data[OUTPUT_FREQUENCY]; return raw_data[OUTPUT_FREQUENCY] ? 1.0 / (types[type].freq[0] * @@ -588,7 +607,7 @@ static float load_level(void) if (model<2000) return raw_data[UPS_LOAD]*1.66; if (model>=2000) return raw_data[UPS_LOAD]*110.0/load2ki[voltage]; } - } else if ( !strcmp(types[type].name, "IMP")) { + } else if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) { return raw_data[UPS_LOAD]; } return raw_data[STATUS_A] & MAINS_FAILURE ? @@ -644,7 +663,7 @@ static float batt_level(void) return 30.0+(battval-bat29)*70.0/(bat100-bat29); return 100; } - if ( !strcmp(types[type].name, "IMP")) + if ( !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) return raw_data[BATTERY_CHARGE]; return raw_data[STATUS_A] & ONLINE ? /* Are we on battery power? */ /* Yes */ @@ -885,10 +904,10 @@ void upsdrv_initups(void) types[type].flowControl.setup_flow_control(); /* Setup Model and LineVoltage */ - if (!strncmp(types[type].name, "BNT",3) || !strcmp(types[type].name, "KIN") || !strcmp(types[type].name, "IMP")){ + if (!strncmp(types[type].name, "BNT",3) || !strcmp(types[type].name, "KIN") || !strcmp(types[type].name, "IMP") || !strcmp(types[type].name, "OPTI")) { if (!ups_getinfo()) return; /* Give "BNT-other" a chance! */ - if (raw_data[MODELNAME]==0x42 || raw_data[MODELNAME]==0x4B){ + if (raw_data[MODELNAME]==0x42 || raw_data[MODELNAME]==0x4B || raw_data[MODELNAME]==0x4F){ model=BNTmodels[raw_data[MODELNUMBER]/16]; if (!strcmp(types[type].name, "BNT-other")) types[type].name="BNT-other"; @@ -897,6 +916,9 @@ void upsdrv_initups(void) else if (raw_data[MODELNAME]==0x4B){ types[type].name="KIN"; model=KINmodels[raw_data[MODELNUMBER]/16]; + } else if (raw_data[MODELNAME]==0x4F){ + types[type].name="OPTI"; + model=OPTImodels[raw_data[MODELNUMBER]/16]; } } else if (raw_data[UPSVERSION]==0xFF){ @@ -904,7 +926,11 @@ void upsdrv_initups(void) model=IMPmodels[raw_data[MODELNUMBER]/16]; } linevoltage=voltages[raw_data[MODELNUMBER]%16]; - snprintf(buf,sizeof(buf),"%s-%dAP",types[type].name,model); + if (!strcmp(types[type].name, "OPTI")) { + snprintf(buf,sizeof(buf),"%s-%d",types[type].name,model); + } else { + snprintf(buf,sizeof(buf),"%s-%dAP",types[type].name,model); + } if (!strcmp(modelname, "Unknown")) modelname=buf; upsdebugx(1,"Detected: %s , %dV",buf,linevoltage); @@ -962,7 +988,7 @@ void upsdrv_help(void) printf("\n"); printf("Specify UPS information in the ups.conf file.\n"); printf(" type: Type of UPS: 'Trust','Egys','KP625AP','IMP','KIN','BNT',\n"); - printf(" 'BNT-other' (default: 'Trust')\n"); + printf(" 'BNT-other', 'OPTI' (default: 'Trust')\n"); printf(" 'BNT-other' is a special type intended for BNT 100-120V models,\n"); printf(" but can be used to override ALL models.\n"); printf("You can additional specify these variables:\n"); @@ -1042,7 +1068,7 @@ void upsdrv_makevartable(void) // 1 2 3 4 5 6 7 8 //2345678901234567890123456789012345678901234567890123456789012345678901234567890 MAX addvar(VAR_VALUE, "type", - "Type of UPS: 'Trust','Egys','KP625AP','IMP','KIN','BNT','BNT-other'\n" + "Type of UPS: 'Trust','Egys','KP625AP','IMP','KIN','BNT','BNT-other','OPTI'\n" " (default: 'Trust')"); addvar(VAR_VALUE, "manufacturer", "Manufacturer name (default: 'PowerCom')"); diff --git a/drivers/riello_usb.c b/drivers/riello_usb.c index 799fb44..89909da 100644 --- a/drivers/riello_usb.c +++ b/drivers/riello_usb.c @@ -355,7 +355,9 @@ int riello_command(uint8_t *cmd, uint8_t *buf, uint16_t length, uint16_t buflen) case -ETIMEDOUT: /* Connection timed out */ case -EOVERFLOW: /* Value too large for defined data type */ +#ifdef EPROTO case -EPROTO: /* Protocol error */ +#endif default: break; } diff --git a/drivers/snmp-ups.c b/drivers/snmp-ups.c index 514c699..e99615d 100644 --- a/drivers/snmp-ups.c +++ b/drivers/snmp-ups.c @@ -3,7 +3,7 @@ * Based on NetSNMP API (Simple Network Management Protocol V1-2) * * Copyright (C) - * 2002 - 2012 Arnaud Quette + * 2002 - 2014 Arnaud Quette * 2002 - 2006 Dmitry Frolov * J.W. Hoogervorst * Niels Baggesen @@ -49,6 +49,7 @@ #include "cyberpower-mib.h" #include "delta_ups-mib.h" #include "ietf-mib.h" +#include "xppc-mib.h" /* Address API change */ #ifndef usmAESPrivProtocol @@ -71,6 +72,7 @@ static mib2nut_info_t *mib2nut[] = { &bestpower, &cyberpower, &delta_ups, + &xppc, /* * Prepend vendor specific MIB mappings before IETF, so that * if a device supports both IETF and vendor specific MIB, @@ -98,7 +100,7 @@ const char *mibvers; static void disable_transfer_oids(void); #define DRIVER_NAME "Generic SNMP UPS driver" -#define DRIVER_VERSION "0.70" +#define DRIVER_VERSION "0.72" /* driver description structure */ upsdrv_info_t upsdrv_info = { @@ -586,6 +588,9 @@ struct snmp_pdu *nut_snmp_get(const char *OID) struct snmp_pdu ** pdu_array; struct snmp_pdu * ret_pdu; + if (OID == NULL) + return NULL; + upsdebugx(3, "nut_snmp_get(%s)", OID); pdu_array = nut_snmp_walk(OID,1); diff --git a/drivers/upsdrvctl.c b/drivers/upsdrvctl.c index 623f753..0cdaa2c 100644 --- a/drivers/upsdrvctl.c +++ b/drivers/upsdrvctl.c @@ -45,6 +45,12 @@ static int maxsdorder = 0, testmode = 0, exec_error = 0; /* timer - keeps us from getting stuck if a driver hangs */ static int maxstartdelay = 45; + /* counter - retry that many time(s) to start the driver if it fails to */ +static int maxretry = 1; + + /* timer - delay between each restart attempt of the driver(s) */ +static int retrydelay = 5; + /* Directory where driver executables live */ static char *driverpath = NULL; @@ -65,6 +71,12 @@ void do_upsconf_args(char *upsname, char *var, char *val) driverpath = xstrdup(val); } + if (!strcmp(var, "maxretry")) + maxretry = atoi(val); + + if (!strcmp(var, "retrydelay")) + retrydelay = atoi(val); + /* ignore anything else - it's probably for main */ return; @@ -248,6 +260,7 @@ static void start_driver(const ups_t *ups) char *argv[8]; char dfn[SMALLBUF]; int ret, arg = 0; + int initial_exec_error = exec_error, drv_maxretry = maxretry; struct stat fs; upsdebugx(1, "Starting UPS: %s", ups->upsname); @@ -276,10 +289,28 @@ static void start_driver(const ups_t *ups) /* tie it off */ argv[arg++] = NULL; - debugcmdline(2, "exec: ", argv); - if (!testmode) { - forkexec(argv, ups); + while (drv_maxretry > 0) { + int cur_exec_error = exec_error; + + upsdebugx(2, "%i remaining attempts", drv_maxretry); + debugcmdline(2, "exec: ", argv); + drv_maxretry--; + + if (!testmode) { + forkexec(argv, ups); + } + + /* driver command succeeded */ + if (cur_exec_error == exec_error) { + drv_maxretry = 0; + exec_error = initial_exec_error; + } + else { + /* otherwise, retry if still needed */ + if (drv_maxretry > 0) + sleep (retrydelay); + } } } diff --git a/drivers/usb-common.h b/drivers/usb-common.h index e160e76..ad08172 100644 --- a/drivers/usb-common.h +++ b/drivers/usb-common.h @@ -25,6 +25,9 @@ #include #include +/* USB standard timeout [ms] */ +#define USB_TIMEOUT 5000 + /*! * USBDevice_t: Describe a USB device. This structure contains exactly * the 5 pieces of information by which a USB device identifies diff --git a/drivers/usbhid-ups.c b/drivers/usbhid-ups.c index fcf628d..cdfbad7 100644 --- a/drivers/usbhid-ups.c +++ b/drivers/usbhid-ups.c @@ -1269,7 +1269,9 @@ static bool_t hid_ups_walk(walkmode_t mode) case -ETIMEDOUT: /* Connection timed out */ case -EOVERFLOW: /* Value too large for defined data type */ +#ifdef EPROTO case -EPROTO: /* Protocol error */ +#endif case -EPIPE: /* Broken pipe */ default: /* Don't know what happened, try again later... */ diff --git a/drivers/xppc-mib.c b/drivers/xppc-mib.c new file mode 100644 index 0000000..4562cd4 --- /dev/null +++ b/drivers/xppc-mib.c @@ -0,0 +1,126 @@ +/* xppc-mib.c - subdriver to monitor XPPC SNMP devices with NUT + * + * Copyright (C) + * 2011 - 2012 Arnaud Quette + * 2014 Charles Lepple + * + * Note: this subdriver was initially generated as a "stub" by the + * scripts/subdriver/gen-snmp-subdriver.sh script. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "xppc-mib.h" + +#define XPPC_MIB_VERSION "0.2" + +#define XPPC_SYSOID ".1.3.6.1.4.1.935" + +/* To create a value lookup structure (as needed on the 2nd line of the example + * below), use the following kind of declaration, outside of the present snmp_info_t[]: + * static info_lkp_t onbatt_info[] = { + * { 1, "OB" }, + * { 2, "OL" }, + * { 0, "NULL" } + * }; + */ + +/* upsBaseBatteryStatus */ +static info_lkp_t xpcc_onbatt_info[] = { + { 1, "" }, /* unknown */ + { 2, "" }, /* batteryNormal */ + { 3, "LB" } /* batteryLow */ +}; + +/* +upsBaseOutputStatus OBJECT-TYPE + SYNTAX INTEGER { + unknown(1), + onLine(2), + onBattery(3), + onBoost(4), + sleeping(5), + onBypass(6), + rebooting(7), + standBy(8), + onBuck(9) } +*/ +static info_lkp_t xpcc_power_info[] = { + { 1, "" }, /* unknown */ + { 2, "OL" }, /* onLine */ + { 3, "OB" }, /* onBattery */ + { 4, "OL BOOST" }, /* onBoost */ + { 5, "OFF" }, /* sleeping */ + { 6, "BYPASS"}, /* onBypass */ + { 7, "" }, /* rebooting */ + { 8, "OFF" }, /* standBy */ + { 9, "OL TRIM"} /* onBuck */ +}; + +/* XPPC Snmp2NUT lookup table */ +static snmp_info_t xppc_mib[] = { + + /* Data format: + * { info_type, info_flags, info_len, OID, dfl, flags, oid2info, setvar }, + * + * info_type: NUT INFO_ or CMD_ element name + * info_flags: flags to set in addinfo + * info_len: length of strings if STR + * cmd value if CMD, multiplier otherwise + * OID: SNMP OID or NULL + * dfl: default value + * flags: snmp-ups internal flags (FIXME: ...) + * oid2info: lookup table between OID and NUT values + * setvar: variable to set for SU_FLAG_SETINT + * + * Example: + * { "input.voltage", 0, 0.1, ".1.3.6.1.4.1.705.1.6.2.1.2.1", "", SU_INPUT_1, NULL }, + * { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, ".1.3.6.1.4.1.705.1.7.3.0", "", SU_FLAG_OK | SU_STATUS_BATT, onbatt_info }, + * + * To create a value lookup structure (as needed on the 2nd line), use the + * following kind of declaration, outside of the present snmp_info_t[]: + * static info_lkp_t onbatt_info[] = { + * { 1, "OB" }, + * { 2, "OL" }, + * { 0, "NULL" } + * }; + */ + { "ups.mfr", ST_FLAG_STRING, SU_INFOSIZE, NULL, "Tripp Lite / Phoenixtec", + SU_FLAG_STATIC | SU_FLAG_ABSENT | SU_FLAG_OK, NULL }, + + /* upsBaseIdentModel.0 = STRING: "Intelligent" */ + { "ups.model", ST_FLAG_STRING, SU_INFOSIZE, ".1.3.6.1.4.1.935.1.1.1.1.1.1.0", "Generic Phoenixtec SNMP device", SU_FLAG_OK, NULL }, + /* upsBaseBatteryStatus.0 = INTEGER: batteryNormal(2) */ + { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, ".1.3.6.1.4.1.935.1.1.1.2.1.1.0", "", SU_STATUS_BATT | SU_TYPE_INT | SU_FLAG_OK, xpcc_onbatt_info }, + /* upsSmartBatteryCapacity.0 = INTEGER: 100 */ + { "battery.charge", 0, 1, ".1.3.6.1.4.1.935.1.1.1.2.2.1.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + /* upsSmartBatteryTemperature.0 = INTEGER: 260 */ + { "ups.temperature", 0, 0.1, ".1.3.6.1.4.1.935.1.1.1.2.2.3.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + /* upsSmartInputLineVoltage.0 = INTEGER: 1998 */ + { "input.voltage", 0, 0.1, ".1.3.6.1.4.1.935.1.1.1.3.2.1.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + /* upsBaseOutputStatus.0 = INTEGER: onLine(2) */ + { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, ".1.3.6.1.4.1.935.1.1.1.4.1.1.0", "", SU_TYPE_INT | SU_STATUS_PWR, xpcc_power_info }, + /* upsSmartOutputVoltage.0 = INTEGER: 2309 */ + { "output.voltage", 0, 0.1, ".1.3.6.1.4.1.935.1.1.1.4.2.1.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + /* upsSmartOutputFrequency.0 = INTEGER: 500 */ + { "output.frequency", 0, 0.1, ".1.3.6.1.4.1.935.1.1.1.4.2.2.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + /* upsSmartOutputLoad.0 = INTEGER: 7 */ + { "ups.load", 0, 1, ".1.3.6.1.4.1.935.1.1.1.4.2.3.0", NULL, SU_TYPE_INT | SU_FLAG_OK, NULL }, + + /* end of structure. */ + { NULL, 0, 0, NULL, NULL, 0, NULL } +}; + +mib2nut_info_t xppc = { "xppc", XPPC_MIB_VERSION, NULL, NULL, xppc_mib, XPPC_SYSOID }; diff --git a/drivers/xppc-mib.h b/drivers/xppc-mib.h new file mode 100644 index 0000000..e2a360b --- /dev/null +++ b/drivers/xppc-mib.h @@ -0,0 +1,29 @@ +/* xppc-mib.h - subdriver to monitor XPPC SNMP devices with NUT + * + * Copyright (C) + * 2011 - 2012 Arnaud Quette + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef XPPC_MIB_H +#define XPPC_MIB_H + +#include "main.h" +#include "snmp-ups.h" + +extern mib2nut_info_t xppc; + +#endif /* XPPC_MIB_H */ diff --git a/include/Makefile.in b/include/Makefile.in index cc95d61..bd75cae 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,10 +74,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -138,10 +136,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -153,8 +147,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -240,6 +232,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/include/config.h.in b/include/config.h.in index 7e8db11..f255496 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated from configure.in by autoheader. */ +/* include/config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD @@ -30,9 +30,6 @@ MSVC and with C++ compilers. */ #undef FLEXIBLE_ARRAY_MEMBER -/* addons run as user */ -#undef HAL_USER - /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT @@ -54,9 +51,6 @@ /* Define to 1 if C supports variable-length arrays. */ #undef HAVE_C_VARARRAYS -/* Define to 1 if you have the header file. */ -#undef HAVE_DBUS_DBUS_GLIB_H - /* Define to 1 if you have the declaration of `LOG_UPTO', and to 0 if you don't. */ #undef HAVE_DECL_LOG_UPTO @@ -116,12 +110,6 @@ /* Define to 1 if you have the `getpassphrase' function. */ #undef HAVE_GETPASSPHRASE -/* Define to 1 if you have the header file. */ -#undef HAVE_GLIB_H - -/* Define to 1 if you have the `g_timeout_add_seconds' function. */ -#undef HAVE_G_TIMEOUT_ADD_SECONDS - /* Define to 1 if you have the `init_snmp' function. */ #undef HAVE_INIT_SNMP @@ -134,12 +122,6 @@ /* Define if you have Boutell's libgd installed */ #undef HAVE_LIBGD -/* Define to 1 if you have the `libhal_device_new_changeset' function. */ -#undef HAVE_LIBHAL_DEVICE_NEW_CHANGESET - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBHAL_H - /* Define to enable libltdl support */ #undef HAVE_LIBLTDL @@ -391,9 +373,6 @@ /* Define to enable IPMI support using FreeIPMI */ #undef WITH_FREEIPMI -/* Define to enable HAL support */ -#undef WITH_HAL - /* Define to enable IPMI support */ #undef WITH_IPMI diff --git a/lib/Makefile.in b/lib/Makefile.in index a8296b1..0480c02 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -69,7 +69,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -79,10 +78,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -170,10 +168,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -185,8 +179,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -272,6 +264,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/m4/nut_check_libhal.m4 b/m4/nut_check_libhal.m4 deleted file mode 100644 index ec54068..0000000 --- a/m4/nut_check_libhal.m4 +++ /dev/null @@ -1,81 +0,0 @@ -dnl Check for LIBHAL compiler flags. On success, set nut_have_libhal="yes" -dnl and set LIBHAL_CFLAGS and LIBHAL_LIBS. On failure, set -dnl nut_have_libhal="no". This macro can be run multiple times, but will -dnl do the checking only once. -dnl NUT requires HAL version 0.5.8 at least - -AC_DEFUN([NUT_CHECK_LIBHAL], -[ -if test -z "${nut_have_libhal_seen}"; then - nut_have_libhal_seen=yes - - CFLAGS_ORIG="${CFLAGS}" - LIBS_ORIG="${LIBS}" - - AC_MSG_CHECKING(for libhal version via pkg-config (0.5.8 minimum required)) - HAL_VERSION="`pkg-config --silence-errors --modversion hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_VERSION}"; then - AC_MSG_RESULT(none found) - elif pkg-config --silence-errors --atleast-version=0.5.8 hal 2>/dev/null; then - AC_MSG_RESULT(${HAL_VERSION} found) - else - AC_MSG_WARN(${HAL_VERSION} is too old) - fi - - AC_MSG_CHECKING(for libhal cflags) - AC_ARG_WITH(hal-includes, - AS_HELP_STRING([@<:@--with-hal-includes=CFLAGS@:>@], [include flags for the HAL library]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-includes - see docs/configure.txt) - ;; - *) - CFLAGS="${withval}" - ;; - esac - ], [ - dnl also get cflags from glib-2.0 to workaround a bug in dbus-glib - CFLAGS="`pkg-config --silence-errors --cflags hal dbus-glib-1 2>/dev/null`" - if test "$?" != "0"; then - CFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/hal -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include" - fi - ]) - AC_MSG_RESULT([${CFLAGS}]) - - AC_MSG_CHECKING(for libhal ldflags) - AC_ARG_WITH(hal-libs, - AS_HELP_STRING([@<:@--with-hal-libs=LIBS@:>@], [linker flags for the HAL library]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-libs - see docs/configure.txt) - ;; - *) - LIBS="${withval}" - ;; - esac - ], [ - dnl also get libs from glib-2.0 to workaround a bug in dbus-glib - LIBS="`pkg-config --silence-errors --libs hal dbus-glib-1 2>/dev/null`" - if test "$?" != "0"; then - LIBS="-lhal -ldbus-1 -lpthread" - fi - ]) - AC_MSG_RESULT([${LIBS}]) - - dnl check if HAL is usable - AC_CHECK_HEADERS(libhal.h, [nut_have_libhal=yes], [nut_have_libhal=no], [AC_INCLUDES_DEFAULT]) - AC_CHECK_HEADERS(glib.h dbus/dbus-glib.h, [], [nut_have_libhal=no], [AC_INCLUDES_DEFAULT]) - AC_CHECK_FUNCS(libhal_device_new_changeset, [], [nut_have_libhal=no]) - - if test "${nut_have_libhal}" = "yes"; then - AC_CHECK_FUNCS(g_timeout_add_seconds) - LIBHAL_CFLAGS="${CFLAGS}" - LIBHAL_LIBS="${LIBS}" - fi - - CFLAGS="${CFLAGS_ORIG}" - LIBS="${LIBS_ORIG}" -fi -]) diff --git a/m4/nut_config_libhal.m4 b/m4/nut_config_libhal.m4 deleted file mode 100644 index 23f6192..0000000 --- a/m4/nut_config_libhal.m4 +++ /dev/null @@ -1,102 +0,0 @@ -dnl Check for LIBHAL configuration if support for HAL was found. -dnl This keeps compile and link time options separate from runtime -dnl configuration items. This macro can be run multiple times, but -dnl will do the checking only once. - -AC_DEFUN([NUT_CONFIG_LIBHAL], -[ -if test -z "${nut_have_config_libhal_seen}" -a "${nut_have_libhal}" = "yes"; then - nut_have_config_libhal_seen=yes - - AC_REQUIRE([NUT_CHECK_LIBHAL]) - - AC_MSG_CHECKING(for libhal user) - AC_ARG_WITH(hal-user, - AS_HELP_STRING([@<:@--with-hal-user=USER@:>@], [addons run as user]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-user - see docs/configure.txt) - ;; - *) - HAL_USER="${withval}" - ;; - esac - ], [ - dnl this will only work as of HAL 0.5.9 - HAL_USER="`pkg-config --silence-errors --variable=haluser hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_USER}"; then - HAL_USER="haldaemon" - fi - ]) - AC_MSG_RESULT(${HAL_USER}) - AC_DEFINE_UNQUOTED(HAL_USER, "${HAL_USER}", [addons run as user]) - - AC_MSG_CHECKING(for libhal device match key) - AC_ARG_WITH(hal-device-match-key, - AS_HELP_STRING([@<:@--with-hal-device-match-key=KEY@:>@], [device match key]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-device-match-key - see docs/configure.txt) - ;; - *) - HAL_DEVICE_MATCH_KEY="${withval}" - ;; - esac - ], [ - dnl the device match key changed with HAL 0.5.11 - if pkg-config --silence-errors --atleast-version=0.5.11 hal 2>/dev/null; then - HAL_DEVICE_MATCH_KEY="info.bus" - else - HAL_DEVICE_MATCH_KEY="info.subsystem" - fi - ]) - AC_MSG_RESULT(${HAL_DEVICE_MATCH_KEY}) - - AC_MSG_CHECKING(for libhal Callouts path) - AC_ARG_WITH(hal-callouts-path, - AS_HELP_STRING([@<:@--with-hal-callouts-path=PATH@:>@], [installation path for callouts]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-callouts-path - see docs/configure.txt) - ;; - *) - HAL_CALLOUTS_PATH="${withval}" - ;; - esac - ], [ - dnl Determine installation path for callouts - dnl As per HAL spec, §5 Callouts addon install path: $libdir/hal - HAL_CALLOUTS_PATH="`pkg-config --silence-errors --variable=libexecdir hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_CALLOUTS_PATH}"; then - HAL_CALLOUTS_PATH="${libdir}/hal" - fi - ]) - AC_MSG_RESULT(${HAL_CALLOUTS_PATH}) - - AC_MSG_CHECKING(for libhal Device Information path) - AC_ARG_WITH(hal-fdi-path, - AS_HELP_STRING([@<:@--with-hal-fdi-path=PATH@:>@], [installation path for device information files]), - [ - case "${withval}" in - yes|no) - AC_MSG_ERROR(invalid option --with(out)-hal-fdi-path - see docs/configure.txt) - ;; - *) - HAL_FDI_PATH="${withval}" - ;; - esac - ], [ - dnl Determine installation path for .fdi - dnl As per HAL spec, §2 Device Information Files - dnl fdi install path: $datarootdir/hal/fdi/information/20thirdparty - HAL_FDI_PATH="`pkg-config --silence-errors --variable=hal_fdidir hal 2>/dev/null`" - if test "$?" != "0" -o -z "${HAL_FDI_PATH}"; then - HAL_FDI_PATH="${datarootdir}/hal/fdi/information/20thirdparty" - fi - ]) - AC_MSG_RESULT(${HAL_FDI_PATH}) -fi -]) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index b6dde24..8e84e24 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,27 +1,28 @@ EXTRA_DIST = README \ -avahi/nut.service.in \ -HP-UX/nut-drvctl \ -HP-UX/nut-drvctl.sh \ -HP-UX/nut-upsd \ -HP-UX/nut-upsd.sh \ -HP-UX/nut-upsmon \ -HP-UX/nut-upsmon.sh \ -logrotate/nutlogd \ -misc/nut.bash_completion \ -misc/osd-notify \ -perl/Nut.pm \ -RedHat/halt.patch \ -RedHat/README \ -RedHat/ups \ -RedHat/upsd \ -RedHat/upsd.in \ -RedHat/upsmon \ -RedHat/upsmon.in \ -Solaris8/S99upsmon \ -subdriver/gen-usbhid-subdriver.sh \ -ufw/README \ -upower/95-upower-hid.rules \ -Windows/halt.c \ -Windows/Makefile + avahi/nut.service.in \ + HP-UX/nut-drvctl \ + HP-UX/nut-drvctl.sh \ + HP-UX/nut-upsd \ + HP-UX/nut-upsd.sh \ + HP-UX/nut-upsmon \ + HP-UX/nut-upsmon.sh \ + logrotate/nutlogd \ + misc/nut.bash_completion \ + misc/osd-notify \ + perl/Nut.pm \ + RedHat/halt.patch \ + RedHat/README \ + RedHat/ups \ + RedHat/upsd \ + RedHat/upsd.in \ + RedHat/upsmon \ + RedHat/upsmon.in \ + Solaris8/S99upsmon \ + subdriver/gen-usbhid-subdriver.sh \ + subdriver/gen-snmp-subdriver.sh \ + ufw/README \ + upower/95-upower-hid.rules \ + Windows/halt.c \ + Windows/Makefile -SUBDIRS = augeas hal hotplug python systemd udev Solaris +SUBDIRS = augeas devd hotplug python systemd udev Solaris diff --git a/scripts/Makefile.in b/scripts/Makefile.in index fad5e58..c260153 100644 --- a/scripts/Makefile.in +++ b/scripts/Makefile.in @@ -63,7 +63,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -73,10 +72,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -173,10 +171,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -188,8 +182,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -275,6 +267,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -317,32 +310,33 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevdir = @udevdir@ EXTRA_DIST = README \ -avahi/nut.service.in \ -HP-UX/nut-drvctl \ -HP-UX/nut-drvctl.sh \ -HP-UX/nut-upsd \ -HP-UX/nut-upsd.sh \ -HP-UX/nut-upsmon \ -HP-UX/nut-upsmon.sh \ -logrotate/nutlogd \ -misc/nut.bash_completion \ -misc/osd-notify \ -perl/Nut.pm \ -RedHat/halt.patch \ -RedHat/README \ -RedHat/ups \ -RedHat/upsd \ -RedHat/upsd.in \ -RedHat/upsmon \ -RedHat/upsmon.in \ -Solaris8/S99upsmon \ -subdriver/gen-usbhid-subdriver.sh \ -ufw/README \ -upower/95-upower-hid.rules \ -Windows/halt.c \ -Windows/Makefile + avahi/nut.service.in \ + HP-UX/nut-drvctl \ + HP-UX/nut-drvctl.sh \ + HP-UX/nut-upsd \ + HP-UX/nut-upsd.sh \ + HP-UX/nut-upsmon \ + HP-UX/nut-upsmon.sh \ + logrotate/nutlogd \ + misc/nut.bash_completion \ + misc/osd-notify \ + perl/Nut.pm \ + RedHat/halt.patch \ + RedHat/README \ + RedHat/ups \ + RedHat/upsd \ + RedHat/upsd.in \ + RedHat/upsmon \ + RedHat/upsmon.in \ + Solaris8/S99upsmon \ + subdriver/gen-usbhid-subdriver.sh \ + subdriver/gen-snmp-subdriver.sh \ + ufw/README \ + upower/95-upower-hid.rules \ + Windows/halt.c \ + Windows/Makefile -SUBDIRS = augeas hal hotplug python systemd udev Solaris +SUBDIRS = augeas devd hotplug python systemd udev Solaris all: all-recursive .SUFFIXES: diff --git a/scripts/README b/scripts/README index f4251da..f31e103 100644 --- a/scripts/README +++ b/scripts/README @@ -2,8 +2,6 @@ These directories hold various scripts: - example startup and shutdown scripts for various operating systems and distributions, - hotplug and udev integration for on the fly privileges settings (Linux only), -- Hardware Abstraction Layer script, for declaring and binding NUT addons to -specific USB devices, - UPower (previously DeviceKit-power) rules file, - Python Client module and application, - Perl client module, diff --git a/scripts/Solaris/Makefile.in b/scripts/Solaris/Makefile.in index d6f845b..e968d1f 100644 --- a/scripts/Solaris/Makefile.in +++ b/scripts/Solaris/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,10 +74,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -135,10 +133,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -150,8 +144,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -237,6 +229,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/scripts/Solaris/nut.in b/scripts/Solaris/nut.in index b18b7fd..ab7ec94 100644 --- a/scripts/Solaris/nut.in +++ b/scripts/Solaris/nut.in @@ -12,7 +12,7 @@ fi ups_stop () { pkill -n upsmon pkill -n upsd - ${NUT_DIR}/bin/upsdrvctl stop > /dev/null 2>&1 + ${NUT_DIR}/sbin/upsdrvctl stop > /dev/null 2>&1 } ups_start () { @@ -22,7 +22,7 @@ ups_start () { fi if [ ! "$MODE" = "netclient" ];then - $NUT_DIR/bin/upsdrvctl start #> /dev/null 2>&1 + $NUT_DIR/sbin/upsdrvctl start #> /dev/null 2>&1 $NUT_DIR/sbin/upsd #> /dev/null 2>&1 fi $NUT_DIR/sbin/upsmon #> /dev/null 2>&1 @@ -49,7 +49,7 @@ case $1 in $NUT_DIR/sbin/upsmon -K >/dev/null 2>&1 if [ $? = 0 ]; then echo "Shutting down the UPS ..." - #$NUT_DIR/bin/upsdrvctl shutdown + #$NUT_DIR/sbin/upsdrvctl shutdown fi ;; *) diff --git a/scripts/Solaris/postinstall.in b/scripts/Solaris/postinstall.in index 3bf6226..136e077 100644 --- a/scripts/Solaris/postinstall.in +++ b/scripts/Solaris/postinstall.in @@ -59,7 +59,7 @@ ln -s /etc/init.d/nut /etc/rc3.d/K100nut > /dev/null 2>&1 # Start nut services #echo "Starting nut services" -#$NUT_DIR/bin/upsdrvctl start #> /dev/null 2>&1 +#$NUT_DIR/sbin/upsdrvctl start #> /dev/null 2>&1 #$NUT_DIR/sbin/upsd #> /dev/null 2>&1 #$NUT_DIR/sbin/upsmon #> /dev/null 2>&1 diff --git a/scripts/Solaris/preremove.in b/scripts/Solaris/preremove.in index 7096918..dc4a1a1 100644 --- a/scripts/Solaris/preremove.in +++ b/scripts/Solaris/preremove.in @@ -4,5 +4,5 @@ NUT_DIR="@prefix@" -#$NUT_DIR/bin/upsdrvctl stop +#$NUT_DIR/sbin/upsdrvctl stop diff --git a/scripts/augeas/Makefile.in b/scripts/augeas/Makefile.in index 2f7fc23..2c1d35c 100644 --- a/scripts/augeas/Makefile.in +++ b/scripts/augeas/Makefile.in @@ -68,7 +68,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -78,10 +77,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -140,10 +138,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -155,8 +149,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -242,6 +234,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/scripts/devd/Makefile.am b/scripts/devd/Makefile.am new file mode 100644 index 0000000..e5a9bbc --- /dev/null +++ b/scripts/devd/Makefile.am @@ -0,0 +1,14 @@ + +if WITH_DEVD + devdconfdir = $(devddir) + devdconf_DATA = +if WITH_USB + devdconf_DATA += nut-usb.conf +endif +endif + +EXTRA_DIST = README + +DISTCLEANFILES = nut-usb.conf +# we should never remove this one, apart from a distclean-check +#MAINTAINERCLEANFILES = nut-usbups.rules.in diff --git a/scripts/hal/Makefile.in b/scripts/devd/Makefile.in similarity index 88% rename from scripts/hal/Makefile.in rename to scripts/devd/Makefile.in index 4b5950d..2b564ce 100644 --- a/scripts/hal/Makefile.in +++ b/scripts/devd/Makefile.in @@ -52,9 +52,10 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -subdir = scripts/hal -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/ups-nut-device.fdi.in +@WITH_DEVD_TRUE@@WITH_USB_TRUE@am__append_1 = nut-usb.conf +subdir = scripts/devd +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/nut-usb.conf.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ @@ -65,7 +66,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,15 +75,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h -CONFIG_CLEAN_FILES = ups-nut-device.fdi +CONFIG_CLEAN_FILES = nut-usb.conf CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = @@ -119,8 +118,8 @@ am__uninstall_files_from_dir = { \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } -am__installdirs = "$(DESTDIR)$(halfdidir)" -DATA = $(halfdi_DATA) +am__installdirs = "$(DESTDIR)$(devdconfdir)" +DATA = $(devdconf_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ @@ -164,10 +163,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -179,8 +174,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -266,6 +259,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -307,13 +301,10 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevdir = @udevdir@ -@WITH_HAL_TRUE@halfdidir = $(HAL_FDI_PATH) -@WITH_HAL_TRUE@halfdi_DATA = 20-ups-nut-device.fdi -EXTRA_DIST = ups-nut-device.fdi.in -DISTCLEANFILES = ups-nut-device.fdi -# we should never remove this one, apart from a distclean-check -#MAINTAINERCLEANFILES = ups-nut-device.fdi.in -CLEANFILES = 20-ups-nut-device.fdi +@WITH_DEVD_TRUE@devdconfdir = $(devddir) +@WITH_DEVD_TRUE@devdconf_DATA = $(am__append_1) +EXTRA_DIST = README +DISTCLEANFILES = nut-usb.conf all: all-am .SUFFIXES: @@ -326,9 +317,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/hal/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/devd/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu scripts/hal/Makefile + $(AUTOMAKE) --gnu scripts/devd/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -347,7 +338,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -ups-nut-device.fdi: $(top_builddir)/config.status $(srcdir)/ups-nut-device.fdi.in +nut-usb.conf: $(top_builddir)/config.status $(srcdir)/nut-usb.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: @@ -355,27 +346,27 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -install-halfdiDATA: $(halfdi_DATA) +install-devdconfDATA: $(devdconf_DATA) @$(NORMAL_INSTALL) - @list='$(halfdi_DATA)'; test -n "$(halfdidir)" || list=; \ + @list='$(devdconf_DATA)'; test -n "$(devdconfdir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(halfdidir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(halfdidir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(devdconfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(devdconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(halfdidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(halfdidir)" || exit $$?; \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devdconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(devdconfdir)" || exit $$?; \ done -uninstall-halfdiDATA: +uninstall-devdconfDATA: @$(NORMAL_UNINSTALL) - @list='$(halfdi_DATA)'; test -n "$(halfdidir)" || list=; \ + @list='$(devdconf_DATA)'; test -n "$(devdconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(halfdidir)'; $(am__uninstall_files_from_dir) + dir='$(DESTDIR)$(devdconfdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: @@ -417,7 +408,7 @@ check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: - for dir in "$(DESTDIR)$(halfdidir)"; do \ + for dir in "$(DESTDIR)$(devdconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -442,7 +433,6 @@ install-strip: mostlyclean-generic: clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -472,7 +462,7 @@ info: info-am info-am: -install-data-am: install-halfdiDATA +install-data-am: install-devdconfDATA install-dvi: install-dvi-am @@ -516,26 +506,24 @@ ps: ps-am ps-am: -uninstall-am: uninstall-halfdiDATA +uninstall-am: uninstall-devdconfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-halfdiDATA install-html \ + install-data install-data-am install-devdconfDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-halfdiDATA + uninstall uninstall-am uninstall-devdconfDATA - -# FIXME: should be able to use $< here. -20-ups-nut-device.fdi: ups-nut-device.fdi - cp ups-nut-device.fdi $@ +# we should never remove this one, apart from a distclean-check +#MAINTAINERCLEANFILES = nut-usbups.rules.in # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/scripts/devd/README b/scripts/devd/README new file mode 100644 index 0000000..58f9fda --- /dev/null +++ b/scripts/devd/README @@ -0,0 +1,11 @@ +On FreeBSD, devd has a similar role to udev on Linux. The devd.conf file +defines actions to perform when devices are plugged in. + +The tools/nut-usbinfo.pl script generates nut-usb.conf.in by processing USB +macros in all of the drivers. In this case, the defined action for each +matching UPS is to change the permissions such that the NUT drivers can access +the devices without requiring root privileges. You may need to restart devd and +re-plug in the UPS to trigger the actions. + +The format of this configuration file should work with devd on FreeBSD 9.0 and +9.1, at the very least. diff --git a/scripts/devd/nut-usb.conf.in b/scripts/devd/nut-usb.conf.in new file mode 100644 index 0000000..05b6ffa --- /dev/null +++ b/scripts/devd/nut-usb.conf.in @@ -0,0 +1,850 @@ +# This file is generated and installed by the Network UPS Tools package. +# Homepage: http://www.networkupstools.org/ + +# ATCL FOR UPS - nutdrv_atcl_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0001"; + match "product" "0x0000"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Hewlett Packard +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x0001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# T500 - bcmxcp_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f01"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# T750 - bcmxcp_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f02"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP T750 INTL - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f06"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP T1000 INTL - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f08"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP T1500 INTL - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f09"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP R/T 2200 INTL (like SMART2200RMXL2U) - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1f0a"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP R1500 G2 and G3 INTL - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe0"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP T750 G2 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe1"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe2"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# HP T1500 G3 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe3"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# R/T3000 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe5"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# R/T3000 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe6"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe7"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x03f0"; + match "product" "0x1fe8"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Eaton +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0463"; + match "product" "0x0001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0463"; + match "product" "0xffff"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Dell +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x047c"; + match "product" "0xffff"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Riello (Cypress Semiconductor Corp.) +# various models - riello_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x04b4"; + match "product" "0x5500"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Minibox +# openUPS Intelligent UPS (minimum required firmware 1.4) - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x04d8"; + match "product" "0xd004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Belkin +# F6H375-USB - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0375"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C550-AVR - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0551"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C1250-TW-RK - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0750"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C1500-TW-RK - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0751"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C900-UNV - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0900"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C100-UNV - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0910"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C120-UNV - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0912"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C800-UNV - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x0980"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# F6C1100-UNV, F6C1200-UNV - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x050d"; + match "product" "0x1100"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# APC +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x051d"; + match "product" "0x0002"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# various 5G models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x051d"; + match "product" "0x0003"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Powerware +# various models - bcmxcp_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0592"; + match "product" "0x0002"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PW 9140 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0592"; + match "product" "0x0004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Agiler UPS - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x05b8"; + match "product" "0x0000"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Belkin F6C1200-UNV - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0665"; + match "product" "0x5161"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Phoenixtec Power Co., Ltd +# Online Yunto YQ450 - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0002"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Mustek Powermust - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0003"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Phoenixtec Innova 3/1 T - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Phoenixtec Innova RT - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0005"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Phoenixtec Innova T - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0201"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Online Zinto A - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0x0601"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# various models - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x06da"; + match "product" "0xffff"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# iDowell +# iDowell - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x075d"; + match "product" "0x0300"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Cyber Power Systems +# 900AVR/BC900D, CP1200AVR/BC1200D - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0764"; + match "product" "0x0005"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Dynex DX-800U? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0764"; + match "product" "0x0501"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# OR2200LCDRM2U, OR700LCDRM1U, PR6000LCDRTXL5U - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0764"; + match "product" "0x0601"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Sweex 1000VA - richcomm_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0925"; + match "product" "0x1234"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# TrippLite +# e.g. OMNIVS1000, SMART550USB, ... - tripplite_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x0001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite AVR550U - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x1003"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite AVR750U - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x1007"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite ECO550UPS - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x1008"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite ECO550UPS - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x1009"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite ECO550UPS - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x1010"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite OMNI1000LCD - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2005"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite OMNI900LCD - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2007"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2008"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite Smart1000LCD - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2009"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2010"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2011"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2012"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2013"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x2014"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3008"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3009"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3010"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3011"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite smart2200RMXL2U - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3012"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3013"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3014"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3015"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite Smart1500LCD (newer unit) - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x3016"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite SmartOnline SU1500RTXL2UA (older unit?) - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite SmartOnline SU6000RT4U? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4002"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite SmartOnline SU1500RTXL2ua - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4003"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. TrippLite SmartOnline SU1000XLA - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4005"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4006"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4007"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# e.g. ? - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x09ae"; + match "product" "0x4008"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# PowerCOM +# PowerCOM Vanguard and BNT-xxxAP - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x0004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PowerCOM IMP - IMPERIAL Series - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x00a2"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PowerCOM SKP - Smart KING Pro (all Smart series) - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x00a3"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PowerCOM WOW - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x00a4"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PowerCOM VGD - Vanguard - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x00a5"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# PowerCOM BNT - Black Knight Pro - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0d9f"; + match "product" "0x00a6"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Unitek Alpha 1200Sx - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x0f03"; + match "product" "0x0001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; + +# Liebert +# Liebert PowerSure PSA UPS - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x10af"; + match "product" "0x0001"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Liebert PowerSure PSI 1440 - usbhid-ups +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x10af"; + match "product" "0x0004"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# GE EP series - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0x14f0"; + match "product" "0x00c9"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; +# Ablerex 625L USB - blazer_usb +notify 100 { + match "system" "USB"; + match "subsystem" "DEVICE"; + match "type" "ATTACH"; + match "vendor" "0xffff"; + match "product" "0x0000"; + action "chgrp @RUN_AS_GROUP@ /dev/$device-name*; chmod g+rw /dev/$device-name*"; +}; diff --git a/scripts/hal/Makefile.am b/scripts/hal/Makefile.am deleted file mode 100644 index f639b22..0000000 --- a/scripts/hal/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ - -if WITH_HAL - halfdidir = $(HAL_FDI_PATH) - halfdi_DATA = 20-ups-nut-device.fdi -endif - -# FIXME: should be able to use $< here. -20-ups-nut-device.fdi: ups-nut-device.fdi - cp ups-nut-device.fdi $@ - -EXTRA_DIST = ups-nut-device.fdi.in - -DISTCLEANFILES = ups-nut-device.fdi -# we should never remove this one, apart from a distclean-check -#MAINTAINERCLEANFILES = ups-nut-device.fdi.in -CLEANFILES = 20-ups-nut-device.fdi diff --git a/scripts/hal/ups-nut-device.fdi.in b/scripts/hal/ups-nut-device.fdi.in deleted file mode 100644 index 235a636..0000000 --- a/scripts/hal/ups-nut-device.fdi.in +++ /dev/null @@ -1,707 +0,0 @@ - - - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-bcmxcp_usb - ups - - - - battery - battery - hald-addon-bcmxcp_usb - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-riello_usb - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-bcmxcp_usb - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-blazer_usb - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - battery - battery - hald-addon-richcomm_usb - ups - - - - - - - - battery - battery - hald-addon-tripplite_usb - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - - - - battery - battery - hald-addon-usbhid-ups - ups - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - - battery - battery - hald-addon-blazer_usb - ups - - - - - diff --git a/scripts/hotplug/Makefile.in b/scripts/hotplug/Makefile.in index 3102c3c..4d6b47e 100644 --- a/scripts/hotplug/Makefile.in +++ b/scripts/hotplug/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -77,10 +76,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -169,10 +167,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -184,8 +178,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -271,6 +263,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/scripts/hotplug/libhid.usermap b/scripts/hotplug/libhid.usermap index 493ce31..08f25c5 100644 --- a/scripts/hotplug/libhid.usermap +++ b/scripts/hotplug/libhid.usermap @@ -4,7 +4,7 @@ # libhidups 0x0003 0xVVVV 0xPPPP 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 # # usb module match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info -# Krauler UP-M500VA +# ATCL FOR UPS libhidups 0x0003 0x0001 0x0000 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 # Hewlett Packard @@ -208,6 +208,8 @@ libhidups 0x0003 0x0f03 0x0001 0x0000 0x0000 0x00 # Liebert # Liebert PowerSure PSA UPS libhidups 0x0003 0x10af 0x0001 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 +# Liebert PowerSure PSI 1440 +libhidups 0x0003 0x10af 0x0004 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 # GE EP series libhidups 0x0003 0x14f0 0x00c9 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000 # Ablerex 625L USB diff --git a/scripts/python/Makefile.in b/scripts/python/Makefile.in index a3fd0df..d04e8aa 100644 --- a/scripts/python/Makefile.in +++ b/scripts/python/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,10 +74,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -135,10 +133,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -150,8 +144,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -237,6 +229,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/scripts/subdriver/gen-snmp-subdriver.sh b/scripts/subdriver/gen-snmp-subdriver.sh new file mode 100755 index 0000000..b9aa44f --- /dev/null +++ b/scripts/subdriver/gen-snmp-subdriver.sh @@ -0,0 +1,348 @@ +#!/bin/bash +# +# an auxiliary script to produce a "stub" snmp-ups subdriver from +# SNMP data from a real agent or from dump files +# +# Version: 0.4 +# +# See also: docs/snmp-subdrivers.txt +# +# Copyright (C) +# 2011 - 2012 Arnaud Quette +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# TODO: +# - extend to SNMP v3 (auth.) + +usage() { + echo "Usage: $0 [options] [file]" + echo "Options:" + echo " -h, --help -- show this message and quit" + echo " -n name -- subdriver name (use natural capitalization)" + echo " -M DIRLIST -- colon separated list of directories to also search for MIBs" + echo " -k -- keep temporary files (for debugging)" + echo "" + echo "mode 1: get SNMP data from a real agent" + echo " -H host_address -- SNMP host IP address or name" + echo " -c community -- SNMP v1 community name (default: public)" + echo "" + echo "mode 2: get data from files (snmpwalk dumps of 'sysOID' subtree)" + echo " -s XXXX -- SNMP OID entry point (sysOID). Ex: '.1.3.6.1.4.1.705.1'" + echo " file1 file2 -- read from files instead of an host (using Net SNMP)" + echo " file1: numeric SNMP walk (snmpwalk -On ... )" + echo " file2: string SNMP walk (snmpwalk -Os ... )" + # FIXME: EXAMPLES +} + +# variables +DRIVER="" +KEEP="" +HOSTNAME="" +MIBS_DIRLIST="+." +COMMUNITY="public" +SYSOID="" +MODE=0 + +# constants +NAME=gen-snmp-subdriver +TMPDIR="${TEMPDIR:-/tmp}" +DEBUG=`mktemp "$TMPDIR/$NAME-DEBUG.XXXXXX"` +DFL_NUMWALKFILE=`mktemp "$TMPDIR/$NAME-NUMWALK.XXXXXX"` +DFL_STRWALKFILE=`mktemp "$TMPDIR/$NAME-STRWALK.XXXXXX"` +TMP_NUMWALKFILE=`mktemp "$TMPDIR/$NAME-TMP-NUMWALK.XXXXXX"` +TMP_STRWALKFILE=`mktemp "$TMPDIR/$NAME-TMP-STRWALK.XXXXXX"` + +get_snmp_data() { + # 1) get the sysOID (points the mfr specif MIB) + SYSOID=`snmpget -v1 -c $COMMUNITY $HOSTNAME .1.3.6.1.2.1.1.2.0 41` + + # 2) get the content of the mfr specif MIB + snmpwalk -On -v1 -c $COMMUNITY $HOSTNAME $SYSOID 2>/dev/null 1> $DFL_NUMWALKFILE + snmpwalk -Os -v1 -M $MIBS_DIRLIST -c $COMMUNITY $HOSTNAME $SYSOID 2>/dev/null 1> $DFL_STRWALKFILE +} + +# process command line options +while [ $# -gt 0 ]; do + if [ $# -gt 1 -a "$1" = "-n" ]; then + DRIVER="$2" + shift 2 + elif [ $# -gt 1 -a "$1" = "-M" ]; then + MIBS_DIRLIST="$MIBS_DIRLIST:$2" + shift 2 + elif [ "$1" = "-k" ]; then + KEEP=yes + shift + elif [ $# -gt 1 -a "$1" = "-H" ]; then + HOSTNAME="$2" + shift 2 + elif [ $# -gt 1 -a "$1" = "-c" ]; then + COMMUNITY="$2" + shift 2 + elif [ $# -gt 1 -a "$1" = "-s" ]; then + SYSOID="$2" + shift 2 + elif echo "$1" | grep -qv '^-'; then + if [ $# -gt 1 ]; then + NUMWALKFILE="$1" + shift + STRWALKFILE="$1" + shift + else + usage + exit 1 + fi + elif [ "$1" = "--help" -o "$1" = "-h" ]; then + usage + exit 0 + else + echo "Illegal option $1. Try --help for more info." >&2 + exit 1 + fi +done + +# check that the needed parameters are provided, depending on the mode +if [ -z "$NUMWALKFILE" ]; then + # mode 1: directly get SNMP data from a real agent + MODE=1 + NUMWALKFILE=$DFL_NUMWALKFILE + STRWALKFILE=$DFL_STRWALKFILE + + # check if Net SNMP is available + if [ -z "`which snmpget`" -o -z "`which snmpwalk`" ]; then + echo "Net SNMP not found! snmpget and snmpwalk commands are required." >&2 + exit 1 + fi + # hostname is also mandatory + while [ -z "$HOSTNAME" ]; do + echo " + Please enter the SNMP host IP address or name." + read -p "SNMP host IP name or address: " HOSTNAME < /dev/tty + if echo $HOSTNAME | egrep -q '[^a-zA-Z0-9]'; then + echo "Please use only letters and digits" + HOSTNAME="" + fi + done + # get data from the agent + get_snmp_data +else + # mode 2: get data from files + MODE=2 + + # get sysOID value from command line, if needed + while [ -z "$SYSOID" ]; do + echo " +Please enter the value of sysOID, as displayed by snmp-ups. For example '.1.3.6.1.4.1.2254.2.4'. +You can get it using: snmpget -v1 -c XXX .1.3.6.1.2.1.1.2.0" + read -p "Value of sysOID: " SYSOID < /dev/tty + if echo $SYSOID | egrep -q '[^0-9.]'; then + echo "Please use only the numeric form, with dots and digits" + SYSOID="" + fi + done + # check for actual files existence + if [ ! -f "$NUMWALKFILE" -o ! -f "$STRWALKFILE" ]; then + echo "SNMP walk dump files are missing on disk. Try --help for more info." >&2 + exit 1 + fi +fi + +# delete temporary files: this is called just before exiting. +cleanup () { + rm -f "$DEBUG $DFL_NUMWALKFILE $TMP_NUMWALKFILE $DFL_STRWALKFILE $TMP_STRWALKFILE" +} +if [ -z "$KEEP" ]; then + trap cleanup EXIT +fi + +# prompt use for name of driver +while [ -z "$DRIVER" ]; do + echo " +Please enter a name for this driver. Use only letters and numbers. Use +natural (upper- and lowercase) capitalization, e.g., 'Belkin', 'APC'." + read -p "Name of subdriver: " DRIVER < /dev/tty + if echo $DRIVER | egrep -q '[^a-zA-Z0-9]'; then + echo "Please use only letters and digits" + DRIVER="" + fi +done + +# remove blank and "End of MIB" lines +egrep -e "^[[:space:]]?$" -e "End of MIB" -v ${NUMWALKFILE} > ${TMP_NUMWALKFILE} +egrep -e "^[[:space:]]?$" -e "End of MIB" -v ${STRWALKFILE} > ${TMP_STRWALKFILE} +NUMWALKFILE=${TMP_NUMWALKFILE} +STRWALKFILE=${TMP_STRWALKFILE} + +# FIXME: sanity checks (! -z contents -a same `wc -l`) +NUM_OID_COUNT="`cat $NUMWALKFILE | wc -l`" +STR_OID_COUNT="`cat $STRWALKFILE | wc -l`" + +echo "COUNT = $NUM_OID_COUNT / $NUM_OID_COUNT" + +# create file names +LDRIVER=`echo $DRIVER | tr A-Z a-z` +UDRIVER=`echo $DRIVER | tr a-z A-Z` +CFILE="$LDRIVER-mib.c" +HFILE="$LDRIVER-mib.h" + +# generate header file +echo "Creating $HFILE" +cat > "$HFILE" < + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef ${UDRIVER}_MIB_H +#define ${UDRIVER}_MIB_H + +#include "main.h" +#include "snmp-ups.h" + +extern mib2nut_info_t ${LDRIVER}; + +#endif /* ${UDRIVER}_MIB_H */ +EOF + +# generate source file +# create header +echo "Creating $CFILE" +cat > "$CFILE" < + * + * Note: this subdriver was initially generated as a "stub" by the + * gen-snmp-subdriver script. It must be customized! + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "${HFILE}" + +#define ${UDRIVER}_MIB_VERSION "0.1" + +#define ${UDRIVER}_SYSOID "${SYSOID}" + +/* To create a value lookup structure (as needed on the 2nd line of the example + * below), use the following kind of declaration, outside of the present snmp_info_t[]: + * static info_lkp_t onbatt_info[] = { + * { 1, "OB" }, + * { 2, "OL" }, + * { 0, "NULL" } + * }; + */ + +/* ${UDRIVER} Snmp2NUT lookup table */ +static snmp_info_t ${LDRIVER}_mib[] = { + + /* Data format: + * { info_type, info_flags, info_len, OID, dfl, flags, oid2info, setvar }, + * + * info_type: NUT INFO_ or CMD_ element name + * info_flags: flags to set in addinfo + * info_len: length of strings if STR + * cmd value if CMD, multiplier otherwise + * OID: SNMP OID or NULL + * dfl: default value + * flags: snmp-ups internal flags (FIXME: ...) + * oid2info: lookup table between OID and NUT values + * setvar: variable to set for SU_FLAG_SETINT + * + * Example: + * { "input.voltage", 0, 0.1, ".1.3.6.1.4.1.705.1.6.2.1.2.1", "", SU_INPUT_1, NULL }, + * { "ups.status", ST_FLAG_STRING, SU_INFOSIZE, ".1.3.6.1.4.1.705.1.7.3.0", "", SU_FLAG_OK | SU_STATUS_BATT, onbatt_info }, + * + * To create a value lookup structure (as needed on the 2nd line), use the + * following kind of declaration, outside of the present snmp_info_t[]: + * static info_lkp_t onbatt_info[] = { + * { 1, "OB" }, + * { 2, "OL" }, + * { 0, "NULL" } + * }; + */ +EOF + + +# extract OID string paths, one by one +LINENB="0" +while IFS= read -r line; do + LINENB="`expr $LINENB + 1`" + FULL_STR_OID="$line" + STR_OID="`echo $line | cut -d'.' -f1`" + echo $line | grep STRING > /dev/null + if [ $? -eq 0 ]; then + ST_FLAG_TYPE="ST_FLAG_STRING" + SU_INFOSIZE="SU_INFOSIZE" + else + ST_FLAG_TYPE="0" + SU_INFOSIZE="1" + fi + # get the matching numeric OID + NUM_OID="`sed -n ${LINENB}p ${NUMWALKFILE} | cut -d' ' -f1`" + printf "\t/* ${FULL_STR_OID} */\n\t{ \"unmapped.${STR_OID}\", ${ST_FLAG_TYPE}, ${SU_INFOSIZE}, \"${NUM_OID}\", NULL, SU_FLAG_OK, NULL },\n" +done < ${STRWALKFILE} >> ${CFILE} + +# append footer +cat >> "$CFILE" < "$CFILE" < * 2005 - 2006 Peter Selinger * 2008 - 2009 Arjen de Korte + * 2013 Charles Lepple * * Note: this subdriver was initially generated as a "stub" by the * gen-usbhid-subdriver script. It must be customized. @@ -263,7 +264,7 @@ static const char *${LDRIVER}_format_serial(HIDDevice_t *hd) { * the device is supported by this subdriver, else 0. */ static int ${LDRIVER}_claim(HIDDevice_t *hd) { - int status = is_usb_device_supported(${LDRIVER}_usb_device_table, hd->VendorID, hd->ProductID); + int status = is_usb_device_supported(${LDRIVER}_usb_device_table, hd); switch (status) { @@ -299,8 +300,8 @@ cat </dev/null 2>&1 && @driverexecdir@/upsdrvctl shutdown +@SBINDIR@/upsmon -K >/dev/null 2>&1 && @SBINDIR@/upsdrvctl shutdown diff --git a/scripts/udev/Makefile.in b/scripts/udev/Makefile.in index 6e6aa5c..c222218 100644 --- a/scripts/udev/Makefile.in +++ b/scripts/udev/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -77,10 +76,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -166,10 +164,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -181,8 +175,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -268,6 +260,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/scripts/udev/nut-usbups.rules.in b/scripts/udev/nut-usbups.rules.in index d7285c8..d8961dd 100644 --- a/scripts/udev/nut-usbups.rules.in +++ b/scripts/udev/nut-usbups.rules.in @@ -6,7 +6,7 @@ SUBSYSTEM=="usb", GOTO="nut-usbups_rules_real" SUBSYSTEM!="usb", GOTO="nut-usbups_rules_end" LABEL="nut-usbups_rules_real" -# Krauler UP-M500VA - blazer_usb +# ATCL FOR UPS - nutdrv_atcl_usb ATTR{idVendor}=="0001", ATTR{idProduct}=="0000", MODE="664", GROUP="@RUN_AS_GROUP@" # Hewlett Packard @@ -210,6 +210,8 @@ ATTR{idVendor}=="0f03", ATTR{idProduct}=="0001", MODE="664", GROUP="@RUN_AS_GROU # Liebert # Liebert PowerSure PSA UPS - usbhid-ups ATTR{idVendor}=="10af", ATTR{idProduct}=="0001", MODE="664", GROUP="@RUN_AS_GROUP@" +# Liebert PowerSure PSI 1440 - usbhid-ups +ATTR{idVendor}=="10af", ATTR{idProduct}=="0004", MODE="664", GROUP="@RUN_AS_GROUP@" # GE EP series - blazer_usb ATTR{idVendor}=="14f0", ATTR{idProduct}=="00c9", MODE="664", GROUP="@RUN_AS_GROUP@" # Ablerex 625L USB - blazer_usb diff --git a/scripts/upower/95-upower-hid.rules b/scripts/upower/95-upower-hid.rules index 8af6415..31ffec2 100644 --- a/scripts/upower/95-upower-hid.rules +++ b/scripts/upower/95-upower-hid.rules @@ -123,5 +123,6 @@ ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a6", ENV{UPOWER_BATTERY_TYPE}="ups # Liebert ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups" +ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups" LABEL="up_hid_end" diff --git a/server/Makefile.in b/server/Makefile.in index 6ef6823..b6c8d7d 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -72,7 +72,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -82,10 +81,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -177,10 +175,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -192,8 +186,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -279,6 +271,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/server/netlist.c b/server/netlist.c index 91f7831..c226dc3 100644 --- a/server/netlist.c +++ b/server/netlist.c @@ -220,7 +220,7 @@ static void list_range(nut_ctype_t *client, const char *upsname, const char *var return; } - sendback(client, "END LIST ENUM %s %s\n", upsname, var); + sendback(client, "END LIST RANGE %s %s\n", upsname, var); } static void list_ups(nut_ctype_t *client) diff --git a/tests/Makefile.in b/tests/Makefile.in index 153fc11..1e9772c 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -67,7 +67,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -77,10 +76,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -164,10 +162,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -179,8 +173,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -266,6 +258,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/tools/Makefile.am b/tools/Makefile.am index bfcadf7..0e6501e 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -16,7 +16,7 @@ # sub-directory SUBDIRS = . nut-scanner -EXTRA_DIST = nut-usbinfo.pl nut-hclinfo.py nut-recorder.sh gitlog2changelog.py nut-snmpinfo.py +EXTRA_DIST = nut-usbinfo.pl nut-recorder.sh gitlog2changelog.py nut-snmpinfo.py all: nut-scanner-deps @@ -45,22 +45,9 @@ nut-scanner-deps: echo "----------------------------------------------------------------------"; \ fi -website: - @if python -c "import json,simplejson,lxml"; then \ - echo "Regenerating the HTML and JSON formated HCL tables."; \ - $(top_srcdir)/tools/nut-hclinfo.py; \ - else \ - echo "----------------------------------------------------------------------"; \ - echo "Warning: either Python, or a required module (json, simplejson, lxml) "; \ - echo "is not available."; \ - echo "Skipping the HTML and JSON formated HCL tables regeneration."; \ - echo "----------------------------------------------------------------------"; \ - fi - # call the USB info script upon "make dist", and if Perl is present # call the SNMP info script upon "make dist", and if Python is present # and call both for building nut-scanner -# also generate HCL data files dist-hook: @if python -c 1; then \ echo "Regenerating the SNMP helper files."; \ @@ -82,15 +69,4 @@ dist-hook: echo "----------------------------------------------------------------------"; \ fi - @if python -c "import json,simplejson,lxml"; then \ - echo "Regenerating the HTML and JSON formated HCL tables."; \ - $(distdir)/nut-hclinfo.py; \ - else \ - echo "----------------------------------------------------------------------"; \ - echo "Warning: either Python, or a required module (json, simplejson, lxml) "; \ - echo "is not available."; \ - echo "Skipping the HTML and JSON formated HCL tables regeneration."; \ - echo "----------------------------------------------------------------------"; \ - fi - .PHONY: nut-scanner-deps nut-scanner-snmp-deps nut-scanner-usb-deps diff --git a/tools/Makefile.in b/tools/Makefile.in index 0535d38..dcbf07d 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -65,7 +65,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -75,10 +74,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -175,10 +173,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -190,8 +184,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -277,6 +269,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ @@ -334,7 +327,7 @@ udevdir = @udevdir@ # to have nutscan-{usb,snmp}.h built before going into the nut-scanner # sub-directory SUBDIRS = . nut-scanner -EXTRA_DIST = nut-usbinfo.pl nut-hclinfo.py nut-recorder.sh gitlog2changelog.py nut-snmpinfo.py +EXTRA_DIST = nut-usbinfo.pl nut-recorder.sh gitlog2changelog.py nut-snmpinfo.py all: all-recursive .SUFFIXES: @@ -714,22 +707,9 @@ nut-scanner-deps: echo "----------------------------------------------------------------------"; \ fi -website: - @if python -c "import json,simplejson,lxml"; then \ - echo "Regenerating the HTML and JSON formated HCL tables."; \ - $(top_srcdir)/tools/nut-hclinfo.py; \ - else \ - echo "----------------------------------------------------------------------"; \ - echo "Warning: either Python, or a required module (json, simplejson, lxml) "; \ - echo "is not available."; \ - echo "Skipping the HTML and JSON formated HCL tables regeneration."; \ - echo "----------------------------------------------------------------------"; \ - fi - # call the USB info script upon "make dist", and if Perl is present # call the SNMP info script upon "make dist", and if Python is present # and call both for building nut-scanner -# also generate HCL data files dist-hook: @if python -c 1; then \ echo "Regenerating the SNMP helper files."; \ @@ -751,17 +731,6 @@ dist-hook: echo "----------------------------------------------------------------------"; \ fi - @if python -c "import json,simplejson,lxml"; then \ - echo "Regenerating the HTML and JSON formated HCL tables."; \ - $(distdir)/nut-hclinfo.py; \ - else \ - echo "----------------------------------------------------------------------"; \ - echo "Warning: either Python, or a required module (json, simplejson, lxml) "; \ - echo "is not available."; \ - echo "Skipping the HTML and JSON formated HCL tables regeneration."; \ - echo "----------------------------------------------------------------------"; \ - fi - .PHONY: nut-scanner-deps nut-scanner-snmp-deps nut-scanner-usb-deps # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/tools/nut-hclinfo.py b/tools/nut-hclinfo.py deleted file mode 100755 index 35b368e..0000000 --- a/tools/nut-hclinfo.py +++ /dev/null @@ -1,277 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (c) 2009 - Arnaud Quette -# Copyright (c) 2010 - Sébastien Volle -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -# This script convert the driver.list into HTML and JSON formated tables -# These tables are then used by the AsciiDoc generated website and -# documentation - -try: - import json -except ImportError: - import simplejson as json # Required for Python < 2.6 - -import re -import sys -import os, errno - -# HCL file location and name -rawHCL="../data/driver.list"; - -# Website output -webJsonHCL = "../docs/website/scripts/ups_data.js"; -webStaticHCL = "../docs/ups-html.txt"; - -# from http://wiki.python.org/moin/EscapingHtml - -html_escape_table = { - "&": "&", - '"': """, - "'": "'", - ">": ">", - "<": "<", - } - -def html_escape(text): - """Produce entities within text.""" - return "".join(html_escape_table.get(c,c) for c in text) - -# # # - -class WrongFieldNumberException(Exception): - pass - -def buildData(deviceDataFile): - """ - Read and parse data file under provided path. - Return a bi-dimensional list representing parsed data. - """ - - deviceData = [] - numFields = 6 # Manufacturer, type, support level, model comment, driver - - try: - file = open(deviceDataFile, "r") - except IOError: - print "Cannot open", deviceDataFile - exit(1) - - for line in file: - # Ignore empty lines or comments - if re.match(r"^$|^\s*#", line): - continue - - # Strip all trailing whitespace chars - line = re.sub(r"\s+$", "", line) - - # Replace all tabs by commas - line = re.sub(r"\t", ",", line) - - # Remove trailing comma - line = re.sub(r",$", "", line) - - # Split fields and append result to device data list - # We suppose there are no double-quotes in fields - row = re.findall(r'"([^"]*)",?', line) - - if len(row) != numFields: - print "Warning: Unexpected number of fields in line: %s" % row - print "\tLine will be skipped." - else: - deviceData.append(re.findall(r'"([^"]*)",?', line)) - - return deviceData - -def buildHTMLTable(deviceData): - """ - Convert provided device data into an HTML table. - Return string representation of the HTML table. - - Identical cells are merged vertically with rowspan attribute. - The driver column is color-coded on support level. - - A support level column is also provided. It should be hidden in a graphic - browser but should be visible from a console based browser (w3m). - """ - - from lxml import etree, html - from lxml.builder import E - - if not type(deviceData).__name__ == "list" or len(deviceData) == 0: - raise Exception("Incorrect data was provided") - - # HTML table columns definition - columns = [ - { - "name": "manufacturer", "id": "manufacturer-col", - "text": "Manufacturer", "fields": ["manufacturer"] - }, - { - "name": "model", "id": "model-col", - "text": "Model", "fields": ["model", "comment"] - }, - { - "name": "driver", "id": "driver-col", - "text": "Driver", "fields": ["driver"] - }, - { - "name": "support-level", "id": "support-level-col", - "text": "Support Level", "fields": ["support-level"] - }, - ] - # Device data fields definition - dataFields = [ - "manufacturer", "device-type", "support-level", - "model", "comment", "driver" - ] - - # FIXME: CSS classes should be defined in script global settings - supportLevelClasses = { - "0": "", "1": "red", "2": "orange", - "3": "yellow", "4": "blue", "5": "green" - } - hiddenClass = "hidden" - - # Build table header - table = E.table(id="ups_list", border="1") - header = E.tr() - - for column in columns: - td = E.td(column.get("text"), id=column.get("id")) - if column["id"] == "support-level-col": - td.set("class", hiddenClass) - header.append(td) - - table.append(E.thead(header)) - - # Build table body - tbody = E.tbody(id="ups_list_body") - - cellHistory = [] - rowHistory = deviceData[0][0] - rows = [] - classes = ("even", "odd") - currentClass = 0 - manufIndex = dataFields.index("manufacturer") - - # Build table rows - for device in deviceData: - - # Devices are expected to have a specified number of fields - if len(device) < len(dataFields): - print "Unexpected number of fields in device: %s" % device - print "Device will not be included in result set." - continue - - # Alternate CSS class if current manufacturer is different from the last - if device[manufIndex] != rowHistory : - currentClass = (currentClass + 1) % 2 - rowHistory = device[manufIndex] - - cells = [] - - colIndex = 0 - for column in columns: - cellContent = [] - for field in column["fields"]: - fieldIndex = dataFields.index(field) - fieldContent = device[fieldIndex] - cellContent.append(html_escape(fieldContent)) - cellContent = "
".join(cellContent) - - try: - cH = cellHistory[colIndex] - except: - cH = False - - if not column["name"] == "driver" and cH and cH.get("text") == cellContent: - cH["rowspan"] = cH.get("rowspan", 1) + 1 - else: - cell = { "text": cellContent, "rowspan": 1 } - if column["name"] == "driver": - cell["class"] = supportLevelClasses[device[dataFields.index("support-level")]] - else: - cell["class"] = classes[currentClass] - if column["name"] == "support-level": - cell["class"] = hiddenClass - - cells.append(cell) - try: - cellHistory[colIndex] = cell - except: - cellHistory.append(cell) - - colIndex += 1 - - rows.append(cells) - - for row in rows: - r = E.tr() - for cell in row: - attr = "" - innerHTML = "" - for key, value in cell.iteritems(): - val = unicode(str(value), "utf-8") - if key != "text": - attr += " %s='%s'" % (key, val) - else: - innerHTML = val - - r.append(html.fromstring("%s" % (attr, innerHTML))) - - tbody.append(r) - - table.append(tbody) - - return etree.tostring(table, pretty_print=True) - -# main program -deviceData = buildData(rawHCL) - -# Dump device data as JSON -jsonData = "var UPSData = %s" % json.dumps(deviceData, encoding="utf-8") - -# First, check if target directory exists (which is not the case for 'dist') -dir = os.path.dirname(webJsonHCL) -try: - os.makedirs(dir) -except OSError: - pass - -try: - file = open(webJsonHCL, "w") - file.write(jsonData) - file.close() - print "JSON HCL written" -except IOError: - print "Unable to write JSON device data to %s" % webJsonHCL - exit(1) - -# Create HTML table from device data -table = buildHTMLTable(deviceData) -try: - file = open(webStaticHCL, "w") - file.write("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n") - file.write(table) - file.write("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n") - print "HTML HCL written" -except IOError: - print "Unable to write HTML device table to %s" % webStaticHCL - exit(1) - diff --git a/tools/nut-scanner/Makefile.in b/tools/nut-scanner/Makefile.in index 6352714..dedf63c 100644 --- a/tools/nut-scanner/Makefile.in +++ b/tools/nut-scanner/Makefile.in @@ -77,7 +77,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libavahi.m4 \ $(top_srcdir)/m4/nut_check_libfreeipmi.m4 \ $(top_srcdir)/m4/nut_check_libgd.m4 \ - $(top_srcdir)/m4/nut_check_libhal.m4 \ $(top_srcdir)/m4/nut_check_libltdl.m4 \ $(top_srcdir)/m4/nut_check_libneon.m4 \ $(top_srcdir)/m4/nut_check_libnetsnmp.m4 \ @@ -87,10 +86,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/m4/nut_check_libusb.m4 \ $(top_srcdir)/m4/nut_check_libwrap.m4 \ $(top_srcdir)/m4/nut_check_os.m4 \ - $(top_srcdir)/m4/nut_config_libhal.m4 \ $(top_srcdir)/m4/nut_report_feature.m4 \ $(top_srcdir)/m4/nut_type_socklen_t.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d @@ -221,10 +219,6 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ -HAL_CALLOUTS_PATH = @HAL_CALLOUTS_PATH@ -HAL_DEVICE_MATCH_KEY = @HAL_DEVICE_MATCH_KEY@ -HAL_FDI_PATH = @HAL_FDI_PATH@ -HAL_USER = @HAL_USER@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -236,8 +230,6 @@ LIBAVAHI_CFLAGS = @LIBAVAHI_CFLAGS@ LIBAVAHI_LIBS = @LIBAVAHI_LIBS@ LIBGD_CFLAGS = @LIBGD_CFLAGS@ LIBGD_LDFLAGS = @LIBGD_LDFLAGS@ -LIBHAL_CFLAGS = @LIBHAL_CFLAGS@ -LIBHAL_LIBS = @LIBHAL_LIBS@ LIBIPMI_CFLAGS = @LIBIPMI_CFLAGS@ LIBIPMI_LIBS = @LIBIPMI_LIBS@ LIBLTDL_CFLAGS = @LIBLTDL_CFLAGS@ @@ -323,6 +315,7 @@ builddir = @builddir@ cgiexecdir = @cgiexecdir@ datadir = @datadir@ datarootdir = @datarootdir@ +devddir = @devddir@ docdir = @docdir@ driverexecdir = @driverexecdir@ dvidir = @dvidir@ diff --git a/tools/nut-scanner/nutscan-snmp.h b/tools/nut-scanner/nutscan-snmp.h index 886916a..c66aa96 100644 --- a/tools/nut-scanner/nutscan-snmp.h +++ b/tools/nut-scanner/nutscan-snmp.h @@ -39,6 +39,7 @@ static snmp_device_id_t snmp_device_table[] = { { ".1.3.6.1.4.1.20677.1" , "pulizzi_switched2", ".1.3.6.1.4.1.20677.2"}, { ".1.3.6.1.4.1.2947.1.1.2.0" , "bestpower", NULL}, { ".1.3.6.1.4.1.3808.1.1.1.1.1.1.0" , "cyberpower", ".1.3.6.1.4.1.3808"}, + { "" , "xppc", ".1.3.6.1.4.1.935"}, { "" , "delta_ups", ".1.3.6.1.4.1.2254.2.4"}, { ".1.3.6.1.4.1.705.1.1.1.0" , "mge", ".1.3.6.1.4.1.705.1"}, { ".1.3.6.1.4.1.232.165.3.1.1.0" , "cpqpower", ".1.3.6.1.4.1.232.165.3"}, diff --git a/tools/nut-scanner/nutscan-usb.h b/tools/nut-scanner/nutscan-usb.h index d8085d8..c31466f 100644 --- a/tools/nut-scanner/nutscan-usb.h +++ b/tools/nut-scanner/nutscan-usb.h @@ -31,7 +31,7 @@ typedef struct { /* USB IDs device table */ static usb_device_id_t usb_device_table[] = { - { 0x0001, 0x0000, "blazer_usb" }, + { 0x0001, 0x0000, "nutdrv_atcl_usb" }, { 0x03f0, 0x0001, "usbhid-ups" }, { 0x03f0, 0x1f01, "bcmxcp_usb" }, { 0x03f0, 0x1f02, "bcmxcp_usb" }, @@ -119,6 +119,7 @@ static usb_device_id_t usb_device_table[] = { { 0x0d9f, 0x00a6, "usbhid-ups" }, { 0x0f03, 0x0001, "blazer_usb" }, { 0x10af, 0x0001, "usbhid-ups" }, + { 0x10af, 0x0004, "usbhid-ups" }, { 0x14f0, 0x00c9, "blazer_usb" }, { 0xffff, 0x0000, "blazer_usb" }, /* Terminating entry */ diff --git a/tools/nut-usbinfo.pl b/tools/nut-usbinfo.pl index 5e3592e..989cef2 100755 --- a/tools/nut-usbinfo.pl +++ b/tools/nut-usbinfo.pl @@ -1,8 +1,8 @@ #!/usr/bin/env perl -# Current Version : 1.2 -# Copyright (C) 2008 - 2012 -# Arnaud Quette -# dloic (loic.dardant AT gmail DOT com) +# Current Version : 1.3 +# Copyright (C) 2008 - 2012 dloic (loic.dardant AT gmail DOT com) +# Copyright (C) 2008 - 2014 Arnaud Quette +# Copyright (C) 2013 - 2014 Charles Lepple # # Based on the usbdevice.pl script, made for the Ubuntu Media Center # for the final use of the LIRC project. @@ -31,17 +31,18 @@ use strict; # path to scan for USB_DEVICE pattern my $scanPath="../drivers"; -# HAL output file -my $outputHAL="../scripts/hal/ups-nut-device.fdi.in"; - # Hotplug output file my $outputHotplug="../scripts/hotplug/libhid.usermap"; # udev output file my $outputUdev="../scripts/udev/nut-usbups.rules.in"; +# BSD devd output file +my $output_devd="../scripts/devd/nut-usb.conf.in"; + # UPower output file my $outputUPower="../scripts/upower/95-upower-hid.rules"; + # tmp output, to allow generating the ENV{UPOWER_VENDOR} header list my $tmpOutputUPower; # mfr header flag @@ -81,13 +82,6 @@ find(\&find_usbdevs,$scanPath); ################# SUB METHOD ################# sub gen_usb_files { - # HAL file header - open my $outHAL, ">$outputHAL" || die "error $outputHAL : $!"; - print $outHAL ' '."\n"; - print $outHAL ''."\n"; - print $outHAL ' '."\n"; - print $outHAL ' '."\n"; - # Hotplug file header open my $outHotplug, ">$outputHotplug" || die "error $outputHotplug : $!"; print $outHotplug '# This file is generated and installed by the Network UPS Tools package.'."\n"; @@ -109,6 +103,10 @@ sub gen_usb_files print $outUdev 'SUBSYSTEM!="usb", GOTO="nut-usbups_rules_end"'."\n\n"; print $outUdev 'LABEL="nut-usbups_rules_real"'."\n"; + open my $out_devd, ">$output_devd" || die "error $output_devd : $!"; + print $out_devd '# This file is generated and installed by the Network UPS Tools package.'."\n"; + print $out_devd "# Homepage: http://www.networkupstools.org/\n\n"; + # UPower file header open my $outputUPower, ">$outputUPower" || die "error $outputUPower : $!"; print $outputUPower '##############################################################################################################'."\n"; @@ -131,12 +129,6 @@ sub gen_usb_files # generate the file in alphabetical order (first for VendorID, then for ProductID) foreach my $vendorId (sort { lc $a cmp lc $b } keys %vendorName) { - # HAL vendor header - if ($vendorName{$vendorId}) { - print $outHAL "\n \n"; - } - print $outHAL " \n"; - # Hotplug vendor header if ($vendorName{$vendorId}) { print $outHotplug "\n# ".$vendorName{$vendorId}."\n"; @@ -147,20 +139,17 @@ sub gen_usb_files print $outUdev "\n# ".$vendorName{$vendorId}."\n"; } + # devd vendor header + if ($vendorName{$vendorId}) { + print $out_devd "\n# ".$vendorName{$vendorId}."\n"; + } + + # UPower vendor header flag $upowerMfrHeaderDone = 0; foreach my $productId (sort { lc $a cmp lc $b } keys %{$vendor{$vendorId}}) { - # HAL device entry - print $outHAL " \n"; - print $outHAL " \n"; - print $outHAL ' battery'."\n"; - print $outHAL ' battery'."\n"; - print $outHAL " hald-addon-".$vendor{$vendorId}{$productId}{"driver"}."\n"; - print $outHAL ' ups'."\n"; - print $outHAL ' '."\n"; - # Hotplug device entry print $outHotplug "# ".$vendor{$vendorId}{$productId}{"comment"}."\n"; print $outHotplug "libhidups 0x0003 ".$vendorId." ".$productId." 0x0000 0x0000 0x00"; @@ -172,6 +161,17 @@ sub gen_usb_files print $outUdev "\", ATTR{idProduct}==\"".removeHexPrefix($productId)."\","; print $outUdev ' MODE="664", GROUP="@RUN_AS_GROUP@"'."\n"; + # devd device entry + print $out_devd "# ".$vendor{$vendorId}{$productId}{"comment"}.' - '.$vendor{$vendorId}{$productId}{"driver"}."\n"; + print $out_devd "notify 100 {\n\tmatch \"system\"\t\t\"USB\";\n"; + print $out_devd "\tmatch \"subsystem\"\t\"DEVICE\";\n"; + print $out_devd "\tmatch \"type\"\t\t\"ATTACH\";\n"; + print $out_devd "\tmatch \"vendor\"\t\t\"$vendorId\";\n"; + # + print $out_devd "\tmatch \"product\"\t\t\"$productId\";\n"; + print $out_devd "\taction \"chgrp \@RUN_AS_GROUP\@ /dev/\$device-name*; chmod g+rw /dev/\$device-name*\";\n"; + print $out_devd "};\n"; + # UPower device entry (only for USB/HID devices!) if ($vendor{$vendorId}{$productId}{"driver"} eq "usbhid-ups") { @@ -192,14 +192,7 @@ sub gen_usb_files # Device scanner entry print $outputDevScanner "\t{ ".$vendorId.', '.$productId.", \"".$vendor{$vendorId}{$productId}{"driver"}."\" },\n"; } - # HAL vendor footer - print $outHAL " \n"; } - # HAL footer - print $outHAL " \n"; - print $outHAL " \n"; - print $outHAL "\n"; - # Udev footer print $outUdev "\n".'LABEL="nut-usbups_rules_end"'."\n"; @@ -297,6 +290,9 @@ sub find_usbdevs elsif ($nameFile eq "richcomm_usb.c") { $driver="richcomm_usb"; } + elsif ($nameFile eq "nutdrv_atcl_usb.c") { + $driver="nutdrv_atcl_usb"; + } elsif ($nameFile eq "riello_usb.c") { $driver="riello_usb"; }