From 308076bdf95c35cb5863b73c50492d72eeba09e7 Mon Sep 17 00:00:00 2001 From: Treer Date: Sat, 13 Aug 2016 17:53:09 +1000 Subject: [PATCH] initial port of LCDproc pfsense package This is built from the LCDproc-dev package as it's had more work and functionality added than LCDproc. LCDproc-dev was created to add early support for LCDProc 0.5.4 without affecting LCDproc, and since this port will be using LCDProc 0.5.7+, there's no need to keep maintaining two packages. --- sysutils/pfSense-pkg-LCDproc/Makefile | 63 ++ .../files/etc/inc/priv/lcdproc.priv.inc | 40 + .../files/pkg-deinstall.in | 3 + .../pfSense-pkg-LCDproc/files/pkg-install.in | 7 + .../files/usr/local/pkg/lcdproc.inc | 554 +++++++++++ .../files/usr/local/pkg/lcdproc.xml | 717 ++++++++++++++ .../files/usr/local/pkg/lcdproc_client.php | 935 ++++++++++++++++++ .../files/usr/local/pkg/lcdproc_screens.xml | 154 +++ .../local/share/pfSense-pkg-LCDproc/info.xml | 9 + sysutils/pfSense-pkg-LCDproc/pkg-descr | 1 + sysutils/pfSense-pkg-LCDproc/pkg-plist | 7 + 11 files changed, 2490 insertions(+) create mode 100644 sysutils/pfSense-pkg-LCDproc/Makefile create mode 100644 sysutils/pfSense-pkg-LCDproc/files/etc/inc/priv/lcdproc.priv.inc create mode 100644 sysutils/pfSense-pkg-LCDproc/files/pkg-deinstall.in create mode 100644 sysutils/pfSense-pkg-LCDproc/files/pkg-install.in create mode 100644 sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.inc create mode 100644 sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.xml create mode 100644 sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_client.php create mode 100644 sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_screens.xml create mode 100644 sysutils/pfSense-pkg-LCDproc/files/usr/local/share/pfSense-pkg-LCDproc/info.xml create mode 100644 sysutils/pfSense-pkg-LCDproc/pkg-descr create mode 100644 sysutils/pfSense-pkg-LCDproc/pkg-plist diff --git a/sysutils/pfSense-pkg-LCDproc/Makefile b/sysutils/pfSense-pkg-LCDproc/Makefile new file mode 100644 index 000000000000..e4925739e44d --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/Makefile @@ -0,0 +1,63 @@ +# $FreeBSD$ + +PORTNAME= pfSense-pkg-LCDproc +PORTVERSION= 0.9.15 +CATEGORIES= sysutils +MASTER_SITES= # empty +DISTFILES= # empty +EXTRACT_ONLY= # empty + +MAINTAINER= treer.git@gmail.com +COMMENT= LCDproc package for pfSense + +# If your build machine fails with "License not correctly defined", try replacing bsd.licenses.db.mk as follows: +# cd /usr/ports/Templates/Licenses +# curl -o ESF https://raw.githubusercontent.com/pfsense/FreeBSD-ports/devel/Templates/Licenses/ESF +# cd /usr/ports/Mk +# curl -o bsd.licenses.db.mk https://raw.githubusercontent.com/pfsense/FreeBSD-ports/devel/Mk/bsd.licenses.db.mk +LICENSE= ESF + +NO_BUILD= yes +NO_MTREE= yes + +SUB_FILES= pkg-install pkg-deinstall +SUB_LIST= PORTNAME=${PORTNAME} + +# Until the sysutils/lcdproc port is included in the pfSense-core repository catalogue +# you may have to install it manually using the following commands: +# 32bit: +# pkg install print/freetype2 +# (or pkg add http://pkg.freebsd.org/freebsd:10:x86:32/release_3/All/freetype2-2.6.2.txz) +# pkg add http://pkg.freebsd.org/freebsd:10:x86:32/release_3/All/lcdproc-0.5.7_2.txz +# 64bit: +# pkg install print/freetype2 +# (or pkg add http://pkg.freebsd.org/freebsd:10:x86:64/release_3/All/freetype2-2.6.2.txz) +# pkg add http://pkg.freebsd.org/freebsd:10:x86:64/release_3/All/lcdproc-0.5.7_2.txz +RUN_DEPENDS= ${LOCALBASE}/sbin/LCDd:sysutils/lcdproc + +# the sysutils/lcdproc port already has this dependency +#LIB_DEPENDS= libfreetype.so:print/freetype2 + +do-extract: + ${MKDIR} ${WRKSRC} + +do-install: + ${MKDIR} ${STAGEDIR}${PREFIX}/pkg + ${MKDIR} ${STAGEDIR}/etc/inc/priv + ${MKDIR} ${STAGEDIR}${DATADIR} + ${INSTALL_DATA} -m 0644 ${FILESDIR}${PREFIX}/pkg/lcdproc.xml \ + ${STAGEDIR}${PREFIX}/pkg + ${INSTALL_DATA} -m 0644 ${FILESDIR}${PREFIX}/pkg/lcdproc_screens.xml \ + ${STAGEDIR}${PREFIX}/pkg + ${INSTALL_DATA} -m 0644 ${FILESDIR}${PREFIX}/pkg/lcdproc_client.php \ + ${STAGEDIR}${PREFIX}/pkg + ${INSTALL_DATA} ${FILESDIR}${PREFIX}/pkg/lcdproc.inc \ + ${STAGEDIR}${PREFIX}/pkg + ${INSTALL_DATA} ${FILESDIR}/etc/inc/priv/lcdproc.priv.inc \ + ${STAGEDIR}/etc/inc/priv + ${INSTALL_DATA} ${FILESDIR}${DATADIR}/info.xml \ + ${STAGEDIR}${DATADIR} + @${REINPLACE_CMD} -i '' -e "s|%%PKGVERSION%%|${PKGVERSION}|" \ + ${STAGEDIR}${DATADIR}/info.xml + +.include diff --git a/sysutils/pfSense-pkg-LCDproc/files/etc/inc/priv/lcdproc.priv.inc b/sysutils/pfSense-pkg-LCDproc/files/etc/inc/priv/lcdproc.priv.inc new file mode 100644 index 000000000000..6b2c061fe85b --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/etc/inc/priv/lcdproc.priv.inc @@ -0,0 +1,40 @@ + diff --git a/sysutils/pfSense-pkg-LCDproc/files/pkg-deinstall.in b/sysutils/pfSense-pkg-LCDproc/files/pkg-deinstall.in new file mode 100644 index 000000000000..83d1c3dcab9e --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/pkg-deinstall.in @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/local/bin/php -f /etc/rc.packages %%PORTNAME%% ${2} diff --git a/sysutils/pfSense-pkg-LCDproc/files/pkg-install.in b/sysutils/pfSense-pkg-LCDproc/files/pkg-install.in new file mode 100644 index 000000000000..25b18865994c --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/pkg-install.in @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ "${2}" != "POST-INSTALL" ]; then + exit 0 +fi + +/usr/local/bin/php -f /etc/rc.packages %%PORTNAME%% ${2} diff --git a/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.inc b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.inc new file mode 100644 index 000000000000..2282d4e366cc --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.inc @@ -0,0 +1,554 @@ + + Copyright (C) 2009 Scott Ullrich + Copyright (C) 2012 Michele Di Maria + Copyright (C) 2015 ESF, LLC + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +require_once("config.inc"); +require_once("functions.inc"); +require_once("service-utils.inc"); + +/* LCDproc */ +define('LCDPROC_RCFILE', '/usr/local/etc/rc.d/lcdproc.sh'); +$pfs_version = substr(trim(file_get_contents("/etc/version")), 0, 3); +if ($pfs_version == "2.1" || $pfs_version == "2.2") { + define('LCDPROC_CONFIG', '/usr/pbi/lcdproc-' . php_uname('m') . '/local/etc/LCDd.conf'); +} else { + define('LCDPROC_CONFIG', '/usr/local/etc/LCDd.conf'); +} +define('LCDPROC_HOST', '127.0.0.1'); +define('LCDPROC_PORT', '13666'); +define('LCDPROC_SERVICE_NAME', 'lcdproc'); + +/* Functions */ +function lcdproc_notice($msg) { + syslog(LOG_NOTICE, "lcdproc: {$msg}"); +} + +function lcdproc_warn($msg) { + syslog(LOG_WARNING, "lcdproc: {$msg}"); +} + +function lcdproc_write_config($file, $text) { + $handle = fopen($file, 'w'); + if (!$handle) { + lcdproc_warn("Could not open {$file} for writing."); + exit; + } + fwrite($handle, $text); + fclose($handle); +} + +function lcdproc_write_script($file, $text) { + $handle = fopen($file, 'wx'); + if (!$handle) { + lcdproc_warn("Could not open {$file} for writing."); + exit; + } + fwrite($handle, $text); + fclose($handle); + chmod($file, 0755); +} + +function validate_form_lcdproc($post, &$input_errors) { + if ($post['comport']) { + switch($post['comport']) { + case "none": + case "com1": + case "com2": + case "com1a": + case "com2a": + case "ucom1": + case "ucom2": + case "lpt1": + case "ugen0.2": + case "ugen1.2": + case "ugen1.3"; + case "ugen2.2": + continue; + break; + default: + $input_errors[] = "The chosen COM port is not valid"; + break; + } + } + if ($post['size']) { + switch($post['size']) { + case "12x1": + case "12x2": + case "12x4": + case "16x1": + case "16x2": + case "16x4": + case "20x1": + case "20x2": + case "20x4": + case "40x2": + continue; + break; + default: + $input_errors[] = "The chosen display size is not valid"; + break; + } + } + if ($post['port_speed']) { + switch($post['port_speed']) { + case "0": + case "1200": + case "2400": + case "9600": + case "19200": + case "57600": + case "115200": + continue; + break; + default: + $input_errors[] = "The chosen port speed is not valid"; + break; + } + } +} + +function sync_package_lcdproc_screens() { + sync_package_lcdproc(); +} + +function sync_package_lcdproc() { + global $g, $config, $input_errors; + + # Detect boot process + if (function_exists("platform_booting")) { + if (platform_booting()) { + return; + } + } elseif ($g['booting']) { + return; + } + + # Continue sync package + lcdproc_notice("Sync: Begin package sync"); + $lcdproc_config = $config['installedpackages']['lcdproc']['config'][0]; + $lcdproc_screens_config = $config['installedpackages']['lcdprocscreens']['config'][0]; + + /* Since config is written before this file invoked, we don't need to read post data */ + if ($lcdproc_config['enable'] && ($lcdproc_config['comport'] != "none")) { + switch ($lcdproc_config['comport']) { + case "com1": + $realport = "/dev/cua0"; + break; + case "com2": + $realport = "/dev/cua1"; + break; + case "com1a": + $realport = "/dev/cuau0"; + break; + case "com2a": + $realport = "/dev/cuau1"; + break; + case "ucom1": + $realport = "/dev/cuaU0"; + break; + case "ucom2": + $realport = "/dev/cuaU1"; + break; + case "lpt1": + $realport = "/dev/lpt0"; + break; + case "ugen0.2": + $realport = "/dev/ugen0.2"; + break; + case "ugen1.2": + $realport = "/dev/ugen1.2"; + break; + case "ugen1.3": + $realport = "/dev/ugen1.3"; + break; + case "ugen2.2": + $realport = "/dev/ugen2.2"; + break; + default: + lcdproc_warn("The selected COM port is not valid!"); + return; + } + + $config_text = "[server]\n"; + $config_text .= "DriverPath=/usr/local/lib/lcdproc/\n"; + $config_text .= "Driver={$lcdproc_config[driver]}\n"; + $config_text .= "Bind=127.0.0.1\n"; + $config_text .= "Port=13666\n"; + $config_text .= "ReportLevel=3\n"; + $config_text .= "ReportToSyslog=yes\n"; + $config_text .= "User=nobody\n"; + $config_text .= "Foreground=no\n"; + $config_text .= "ServerScreen=no\n"; + $config_text .= "GoodBye=\"Thanks for using\"\n"; + $config_text .= "GoodBye=\" {$g['product_name']} \"\n"; + $config_text .= "WaitTime={$lcdproc_config[refresh_frequency]}\n"; + if ($lcdproc_config[backlight] != "" && $lcdproc_config[backlight] != "default") { + /* Backlight setting */ + $config_text .= "Backlight={$lcdproc_config[backlight]}\n"; + } + if ($lcdproc_config[driver] == "sdeclcd") { + /* Sdeclcd Keys settings */ + $config_text .= "PrevScreenKey=Down\n"; + $config_text .= "NextScreenKey=Up\n"; + /* Sdeclcd Menu settings */ + $config_text .= "[menu]\n"; + $config_text .= "MenuKey=Left\n"; + $config_text .= "EnterKey=Right\n"; + $config_text .= "UpKey=Up\n"; + $config_text .= "DownKey=Down\n"; + } else { + /* Generic Keys settings */ + $config_text .= "ToggleRotateKey=Enter\n"; + $config_text .= "PrevScreenKey=Left\n"; + $config_text .= "NextScreenKey=Right\n"; + $config_text .= "ScrollUpKey=Up\n"; + $config_text .= "ScrollDownKey=Down\n"; + /* Generic Menu settings */ + $config_text .= "[menu]\n"; + $config_text .= "MenuKey=Escape\n"; + $config_text .= "EnterKey=Enter\n"; + $config_text .= "UpKey=Up\n"; + $config_text .= "DownKey=Down\n"; + } + + /* lcdproc default driver definitions */ + switch($lcdproc_config[driver]) { + case "bayrad": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + break; + case "CFontz": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= set_lcd_value("contrast", 1000, 350); + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 50); + $config_text .= "NewFirmware=no\n"; + $config_text .= "Reboot=no\n"; + break; + case "CFontz633": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= set_lcd_value("contrast", 1000, 350); + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 50); + $config_text .= "NewFirmware=yes\n"; + $config_text .= "Reboot=yes\n"; + break; + case "CFontzPacket": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Model=635\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= set_lcd_value("contrast", 1000, 350); + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 50); + $config_text .= "NewFirmware=yes\n"; + $config_text .= "Reboot=yes\n"; + break; + case "curses": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Foreground=blue\n"; + $config_text .= "Background=cyan\n"; + $config_text .= "Backlight=red\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "TopLeftX=7\n"; + $config_text .= "TopLeftY=7\n"; + $config_text .= "UseACS=no\n"; + break; + case "CwLnx": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Model=12232\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "Reboot=no\n"; + break; + case "ea65": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "OffBrightness=0\n"; + $config_text .= set_lcd_value("brightness", 1000, 500); + break; + case "EyeboxOne": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Backlight=yes\n"; + break; + case "glk": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= set_lcd_value("contrast", 1000, 350); + break; + case "hd44780": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "driverpath=/usr/local/lib/lcdproc/\n"; + $config_text .= "ConnectionType={$lcdproc_config['connection_type']}\n"; + if ($lcdproc_config['comport'] != "none") { + $config_text .= "Device={$realport}\n"; + $config_text .= "Port=0x378\n"; + $config_text .= "Speed=0\n"; + $config_text .= "Keypad=yes\n"; + $config_text .= set_lcd_value("contrast", 1000, 850); + $config_text .= set_lcd_value("brightness", 1000, 800); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + $config_text .= "Backlight=yes\n"; + $config_text .= "OutputPort=no\n"; + $config_text .= "Charmap=hd44780_default\n"; + $config_text .= "DelayMult=1\n"; + $config_text .= "DelayBus=true\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + } + if ($lcdproc_config[connection_type] == "winamp") { + $config_text .= "KeyDirect_1=Enter\n"; + $config_text .= "KeyDirect_2=Up\n"; + $config_text .= "KeyDirect_3=Down\n"; + $config_text .= "KeyDirect_4=Escape\n"; + } + break; + case "icp_a106": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + break; + case "IOWarrior": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + break; + case "lb216": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= set_lcd_value("brightness", 255, 255); + $config_text .= "Reboot=no\n"; + break; + case "lcdm001": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + break; + case "lcterm": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + break; + case "MD8800": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + break; + case "ms6931": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Reboot=no\n"; + break; + case "mtc_s16209x": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= set_lcd_value("brightness", 255, 255); + $config_text .= "Reboot=no\n"; + break; + case "MtxOrb": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "Type=lcd\n"; + $config_text .= "hasAdjustableBacklight=yes\n"; + $config_text .= "Reboot=no\n"; + $config_text .= set_lcd_value("contrast", 1000, 480); + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + break; + case "nexcom": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "driverpath =/usr/local/lib/lcdproc/\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + break; + case "NoritakeVFD": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + $config_text .= "Parity=0\n"; + $config_text .= "Reboot=no\n"; + break; + case "picolcd": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "driverpath=/usr/local/lib/lcdproc/\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "KeyTimeout=500\n"; + $config_text .= set_lcd_value("contrast", 1000, 1000); + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + $config_text .= "Blacklight_Timer=60\n"; + $config_text .= "Keylights=on\n"; + $config_text .= "Key0Light=on\n"; + $config_text .= "Key1Light=off\n"; + $config_text .= "Key2Light=off\n"; + $config_text .= "Key3Light=off\n"; + $config_text .= "Key4Light=off\n"; + $config_text .= "Key5Light=off\n"; + break; + case "pyramid": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + break; + case "sdeclcd": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + break; + case "sed1330": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + break; + case "sed1520": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + break; + case "serialPOS": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "Type=AEDEX\n"; + break; + case "serialVFD": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "use_parallel=no\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "Type=0\n"; // Just the first + $config_text .= set_lcd_value("brightness", 1000, 1000); + $config_text .= set_lcd_value("offbrightness", 1000, 0); + $config_text .= "ISO_8859_1=yes\n"; + break; + case "shuttleVFD": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + break; + case "SureElec": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "driverpath =/usr/local/lib/lcdproc/\n"; + $config_text .= "Device={$realport}\n"; + $config_text .= "Size={$lcdproc_config['size']}\n"; + $config_text .= "Edition=2\n"; + $config_text .= set_lcd_value("contrast", 1000, 200); + $config_text .= set_lcd_value("brightness", 1000, 480); + break; + case "sli": + $config_text .= "[{$lcdproc_config['driver']}]\n"; + $config_text .= "Device={$realport}\n"; + break; + default: + lcdproc_warn("The chosen lcdproc driver is not a valid choice"); + unset($lcdproc_config[driver]); + } + + /* Port speed */ + if ($lcdproc_config[port_speed] <> '' && $lcdproc_config[port_speed] <> '0') { + $port_speed = $lcdproc_config[port_speed]; + $config_text .= "Speed={$port_speed}\n"; + } + + /* Generate rc file start and stop */ + $stop = << 'lcdproc.sh', + 'start' => $start, + 'stop' => $stop + )); + conf_mount_ro(); + /* Or restart lcdproc if settings were changed*/ + if (is_service_running(LCDPROC_SERVICE_NAME)) { + lcdproc_notice("Sync: Restarting the service"); + restart_service(LCDPROC_SERVICE_NAME); + } + } + + if ((!$lcdproc_config['driver']) || (!$lcdproc_config['comport'])) { + /* No parameters - user does not want lcdproc running */ + /* Let's stop the service and remove the rc file */ + if (file_exists(LCDPROC_RCFILE)) { + if (!$lcdproc_config['enable']) { + lcdproc_notice('Stopping service: lcdproc disabled'); + } else { + lcdproc_notice('Stopping service: no COM port selected'); + } + stop_service(LCDPROC_SERVICE_NAME); + conf_mount_rw(); + unlink(LCDPROC_RCFILE); + unlink(LCDPROC_CONFIG); + conf_mount_ro(); + } + } + lcdproc_notice("Sync: End package sync"); +} + +function set_lcd_value($fieldname, $max, $default_value) { + global $config; + $lcdproc_config = $config['installedpackages']['lcdproc']['config'][0]; + $value = $lcdproc_config[$fieldname]; + $returnvalue = ""; + if ($value != '' && $value != '-1') { + $realvalue = (int)($max * $value / 100); + } else { + $realvalue = $default_value; + } + switch ($fieldname) { + case "brightness": + $returnvalue = "Brightness={$realvalue}\n"; + break; + case "offbrightness": + $returnvalue = "OffBrightness={$realvalue}\n"; + break; + case "contrast": + $returnvalue = "Contrast={$realvalue}\n"; + break; + } + return $returnvalue; +} + +?> diff --git a/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.xml b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.xml new file mode 100644 index 000000000000..cab0ae8cbc33 --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc.xml @@ -0,0 +1,717 @@ + + + + + + + Copyright (C) 2009 Scott Ullrich + Copyright (C) 2011 Michele Di Maria + Copyright (C) 2015 ESF, LLC + All rights reserved. +*/ +/* ====================================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* ====================================================================================== */ + ]]> + + Services: LCDproc + lcdproc + 0.9.15 + /usr/local/pkg/lcdproc.inc + + + Server + /pkg_edit.php?xml=lcdproc.xml + + + + Screens + /pkg_edit.php?xml=lcdproc_screens.xml + + + + LCDproc + Set LCDproc settings such as display driver and COM port. +
Services
+ /pkg_edit.php?xml=lcdproc.xml +
+ + lcdproc + lcdproc.sh + LCDd + LCD Driver + + + + Enable LCDproc + enable + checkbox + + + comport + COM Port + Set the COM port LCDproc should use. + select + + + + + + + + + + + + + + + ucom1 + + + size + Display Size + Set the display size lcdproc should use. + select + + + + + + + + + + + + 16x2 + + + driver + Driver + Set the LCD driver LCDproc should use. + select + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pyramid + + + connection_type + Connection Type + Set connection type for the HD44780 driver + select + + + + + + + + + + + + + + + + + + + + + lcd2usb + + + refresh_frequency + Refresh frequency + Set the refresh frequency of the information on the LCD Panel + select + + + + + + + + 5 + + + port_speed + Port speed + + + Caution: not all the driver or panels support all the speeds, leave "default" if unsure. + ]]> + + select + + + + + + + + + + 0 + + + brightness + Brightness + + + This option is not supported by all the LCD panels, leave "default" if unsure. + ]]> + + select + + + + + + + + + + + + + + + -1 + + + offbrightness + Off brightness + + + This option is not supported by all the LCD panels, leave "default" if unsure. + ]]> + + select + + + + + + + + + + + + + + + -1 + + + contrast + Contrast + + + This option is not supported by all the LCD panels, leave "default" if unsure. + ]]> + + select + + + + + + + + + + + + + + + -1 + + + backlight + Backlight + + + This option is not supported by all the LCD panels, leave "default" if unsure. + ]]> + + select + + + + + + default + + + outputleds + Enable Output LEDs + + + Each LED can be off or show two colors: RED (alarm) or GREEN (everything ok) and shows:
+ LED1: NICs status (green: ok, red: at least one nic down)
+ LED2: CARP status (green: master, red: backup, off: CARP not implemented)
+ LED3: CPU status (green < 50%, red > 50%)
+ LED4: Gateway status (green: ok, red: at least one gateway not responding, off: no gateway configured). + ]]> +
+ checkbox + default +
+
+ + validate_form_lcdproc($_POST, $input_errors); + + + sync_package_lcdproc(); + +
diff --git a/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_client.php b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_client.php new file mode 100644 index 000000000000..6635bf7f365a --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_client.php @@ -0,0 +1,935 @@ + + Copyright (C) 2009 Scott Ullrich + Copyright (C) 2011 Michele Di Maria + Copyright (C) 2015 ESF, LLC + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +require_once("config.inc"); +require_once("functions.inc"); +require_once("interfaces.inc"); +require_once("/usr/local/pkg/lcdproc.inc"); + +function get_pfstate() { + global $config; + $matches = ""; + if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) { + $maxstates = "/{$config['system']['maximumstates']}"; + } else { + $maxstates = "/". pfsense_default_state_size(); + } + $curentries = shell_exec('/sbin/pfctl -si | /usr/bin/grep current'); + if (preg_match("/([0-9]+)/", $curentries, $matches)) { + $curentries = $matches[1]; + } + return $curentries . $maxstates; +} + +function disk_usage() { + $dfout = ""; + exec("/bin/df -h | /usr/bin/grep -w '/' | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d '%' -f 1", $dfout); + $diskusage = trim($dfout[0]); + + return $diskusage; +} + +function mem_usage() { + $memory = ""; + exec("/sbin/sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_inactive_count " . + "vm.stats.vm.v_cache_count vm.stats.vm.v_free_count", $memory); + + $totalMem = $memory[0]; + $availMem = $memory[1] + $memory[2] + $memory[3]; + $usedMem = $totalMem - $availMem; + $memUsage = round(($usedMem * 100) / $totalMem, 0); + + return $memUsage; +} + +/* Calculates non-idle CPU time and returns as a percentage */ +function cpu_usage() { + $duration = 250000; + $diff = array('user', 'nice', 'sys', 'intr', 'idle'); + $cpuTicks = array_combine($diff, explode(" ", shell_exec('/sbin/sysctl -n kern.cp_time'))); + usleep($duration); + $cpuTicks2 = array_combine($diff, explode(" ", shell_exec('/sbin/sysctl -n kern.cp_time'))); + + $totalStart = array_sum($cpuTicks); + $totalEnd = array_sum($cpuTicks2); + + // Something wrapped ?!?! + if ($totalEnd <= $totalStart) { + return 0; + } + + // Calculate total cycles used + $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']); + + // Calculate the percentage used + $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart))); + + return $cpuUsage; +} + +function get_uptime_stats() { + exec("/usr/bin/uptime", $output, $ret); + $temp = explode(",", $output[0]); + if (stristr($output[0], "day")) { + $status = "$temp[0] $temp[1]"; + } else { + $status = "$temp[0] "; + } + $status = trim(str_replace(" ", " ", $status)); + $status = substr($status, strpos($status, "up ") + 3); + + return($status); +} + +function get_loadavg_stats() { + exec("/usr/bin/uptime", $output, $ret); + if (stristr($output[0], "day")) { + $temp = explode(" ", $output[0]); + $status = "$temp[11] $temp[12] $temp[13]"; + } else { + $temp = explode(" ", $output[0]); + $status = "$temp[10] $temp[11] $temp[12]"; + } + return($status); +} + +function get_mbuf_stats() { + exec("/usr/bin/netstat -mb | /usr/bin/grep \"mbufs in use\" | /usr/bin/awk '{ print $1 }' | /usr/bin/cut -d\"/\" -f1", $mbufs_inuse); + exec("/usr/bin/netstat -mb | /usr/bin/grep \"mbufs in use\" | /usr/bin/awk '{ print $1 }' | /usr/bin/cut -d\"/\" -f3", $mbufs_total); + $status = "$mbufs_inuse[0] \/ $mbufs_total[0]"; + return($status); +} + +function get_version() { + global $g; + $version = @file_get_contents("/etc/version"); + $version = trim($version); + return("{$g['product_name']} {$version}"); +} + +function get_cpufrequency() { + $cpufreqs = ""; + exec("/sbin/sysctl -n dev.cpu.0.freq_levels", $cpufreqs); + $cpufreqs = explode(" ", trim($cpufreqs[0])); + $maxfreq = explode("/", $cpufreqs[0]); + $maxfreq = $maxfreq[0]; + $curfreq = ""; + exec("/sbin/sysctl -n dev.cpu.0.freq", $curfreq); + $curfreq = trim($curfreq[0]); + $status = "$curfreq\/$maxfreq Mhz"; + return($status); +} + +function get_cpufrequency_perc() { + $cpufreqs = ""; + exec("/sbin/sysctl -n dev.cpu.0.freq_levels", $cpufreqs); + $cpufreqs = explode(" ", trim($cpufreqs[0])); + $maxfreq = explode("/", $cpufreqs[0]); + $maxfreq = $maxfreq[0]; + $curfreq = ""; + exec("/sbin/sysctl -n dev.cpu.0.freq", $curfreq); + $curfreq = trim($curfreq[0]); + $status = $curfreq/$maxfreq * 100; + return($status); +} + +function get_interfaces_stats() { + global $g; + global $config; + $ifstatus = array(); + $i = 0; + $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); + for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { + $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; + } + foreach ($ifdescrs as $ifdescr => $ifname) { + $ifinfo = get_interface_info($ifdescr); + if ($ifinfo['status'] == "up") { + $online = "Up"; + } else { + $online = "Down"; + } + if (!empty($ifinfo['ipaddr'])) { + $ip = htmlspecialchars($ifinfo['ipaddr']); + } else { + $ip = "-"; + } + $ifstatus[] = htmlspecialchars($ifname) ." [$online]"; + } + $status = " ". implode(", ", $ifstatus); + return($status); +} + +function get_slbd_stats() { + global $g; + global $config; + + if (!is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); + } + $a_pool = &$config['load_balancer']['lbpool']; + + $slbd_logfile = "{$g['varlog_path']}/slbd.log"; + + $nentries = $config['syslog']['nentries']; + if (!$nentries) { + $nentries = 50; + } + + $now = time(); + $year = date("Y"); + $pstatus = ""; + $i = 0; + foreach ($a_pool as $vipent) { + $pstatus[] = "{$vipent['name']}"; + if ($vipent['type'] == "gateway") { + $poolfile = "{$g['tmp_path']}/{$vipent['name']}.pool"; + if (file_exists("$poolfile")) { + $poolstatus = file_get_contents("$poolfile"); + } else { + continue; + } + foreach ((array) $vipent['servers'] as $server) { + $lastchange = ""; + $svr = explode("|", $server); + $monitorip = $svr[1]; + if (stristr($poolstatus, $monitorip)) { + $online = "Up"; + } else { + $online = "Down"; + } + $pstatus[] = strtoupper($svr[0]) ." [{$online}]"; + } + } else { + $pstatus[] = "{$vipent['monitor']}"; + } + } + if (count($a_pool) == 0) { + $pstatus[] = "Disabled"; + } + $status = implode(", ", $pstatus); + return($status); +} + +function get_carp_stats() { + global $g; + global $config; + + if (is_array($config['virtualip']['vip'])) { + $carpint = 0; + $initcount = 0; + $mastercount = 0; + $backupcount = 0; + foreach ($config['virtualip']['vip'] as $carp) { + if ($carp['mode'] != "carp") { + continue; + } + $ipaddress = $carp['subnet']; + $password = $carp['password']; + $netmask = $carp['subnet_bits']; + $vhid = $carp['vhid']; + $advskew = $carp['advskew']; + $carp_int = find_carp_interface($ipaddress); + $status = get_carp_interface_status($carp_int); + switch ($status) { + case "MASTER": + $mastercount++; + break; + case "BACKUP": + $backupcount++; + break; + case "INIT": + $initcount++; + break; + } + } + $status = "M/B/I {$mastercount}/{$backupcount}/{$initcount}"; + } else { + $status = "CARP Disabled"; + } + return($status); +} + +function get_ipsec_tunnel_sad() { + /* query SAD */ + if (file_exists("/usr/local/sbin/setkey")) { + $fd = @popen("/usr/local/sbin/setkey -D", "r"); + } else { + $fd = @popen("/sbin/setkey -D", "r"); + } + $sad = array(); + if ($fd) { + while (!feof($fd)) { + $line = chop(fgets($fd)); + if (!$line) { + continue; + } + if ($line == "No SAD entries.") { + break; + } + if ($line[0] != "\t") { + if (is_array($cursa)) { + $sad[] = $cursa; + $cursa = array(); + } + list($cursa['src'],$cursa['dst']) = explode(" ", $line); + $i = 0; + } else { + $linea = explode(" ", trim($line)); + if ($i == 1) { + $cursa['proto'] = $linea[0]; + $cursa['spi'] = substr($linea[2], strpos($linea[2], "x")+1, -1); + } else if ($i == 2) { + $cursa['ealgo'] = $linea[1]; + } else if ($i == 3) { + $cursa['aalgo'] = $linea[1]; + } + } + $i++; + } + if (is_array($cursa) && count($cursa)) { + $sad[] = $cursa; + } + pclose($fd); + } + return($sad); +} + +function get_ipsec_tunnel_src($tunnel) { + global $g, $config, $sad; + $if = "WAN"; + if ($tunnel['interface']) { + $if = $tunnel['interface']; + $realinterface = convert_friendly_interface_to_real_interface_name($if); + $interfaceip = find_interface_ip($realinterface); + } + return $interfaceip; +} + +function output_ipsec_tunnel_status($tunnel) { + global $g, $config, $sad; + $if = "WAN"; + $interfaceip = get_ipsec_tunnel_src($tunnel); + $foundsrc = false; + $founddst = false; + + if (!is_array($sad)) { + /* we have no sad array, bail */ + return(false); + } + foreach ($sad as $sa) { + if ($sa['src'] == $interfaceip) { + $foundsrc = true; + } + if ($sa['dst'] == $tunnel['remote-gateway']) { + $founddst = true; + } + } + if ($foundsrc && $founddst) { + /* tunnel is up */ + $iconfn = "pass"; + return(true); + } else { + /* tunnel is down */ + $iconfn = "reject"; + return(false); + } +} + +function get_ipsec_stats() { + global $g, $config, $sad; + $sad = array(); + $sad = get_ipsec_tunnel_sad(); + + $activecounter = 0; + $inactivecounter = 0; + + if ($config['ipsec']['tunnel']) { + foreach ($config['ipsec']['tunnel'] as $tunnel) { + $ipsecstatus = false; + + $tun_disabled = "false"; + $foundsrc = false; + $founddst = false; + + if (isset($tunnel['disabled'])) { + $tun_disabled = "true"; + continue; + } + + if (output_ipsec_tunnel_status($tunnel)) { + /* tunnel is up */ + $iconfn = "true"; + $activecounter++; + } else { + /* tunnel is down */ + $iconfn = "false"; + $inactivecounter++; + } + } + } + + if (is_array($config['ipsec']['tunnel'])) { + $status = "Up/Down $activecounter/$inactivecounter"; + } else { + $status = "IPSEC Disabled"; + } + return($status); +} + +function send_lcd_commands($lcd, $lcd_cmds) { + if (!is_array($lcd_cmds) || (empty($lcd_cmds))) { + lcdproc_warn("Failed to interpret lcd commands"); + return; + } + while (($cmd_output = fgets($lcd, 8000)) !== false) { + if (preg_match("/^huh?/", $cmd_output)) { + lcdproc_notice("LCDd output: \"$cmd_output\". Executed \"$lcd_cmd\""); + } + } + foreach ($lcd_cmds as $lcd_cmd) { + if (! fwrite($lcd, "$lcd_cmd\n")) { + lcdproc_warn("Connection to LCDd process lost $errstr ($errno)"); + $lcdproc_connect_errors++; + return false; + } + } + return true; +} + +function get_lcdpanel_width() { + global $config; + $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; + if (is_null($lcdproc_size_config['size'])) { + return "16"; + } else { + $dimensions = explode("x", $lcdproc_size_config['size']); + return $dimensions[0]; + } +} + +function get_lcdpanel_height() { + global $config; + $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; + if (is_null($lcdproc_size_config['size'])) { + return "2"; + } else { + $dimensions = explode("x", $lcdproc_size_config['size']); + return $dimensions[1]; + } +} + +function get_lcdpanel_refresh_frequency() { + global $config; + $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; + $value = $lcdproc_size_config['refresh_frequency']; + if (is_null($value)) { + return "5"; + } else { + return $value; + } +} + +function outputled_enabled_CFontz633() { + global $config; + $lcdproc_config = $config['installedpackages']['lcdproc']['config'][0]; + $value = $lcdproc_config['outputleds']; + if (is_null($value)) { + return false; + } else { + if ($value && $lcdproc_config['driver'] == "CFontz633") { + return true; + } else if ($value && $lcdproc_config['driver'] == "CFontzPacket") { + return true; + } else { + return false; + } + } +} + +function outputled_carp() { + /* Returns the status of CARP for the box. + Assumes ALL CARP status are the same for all the intefaces. + -1 = CARP Disabled + 0 = CARP on Backup + 1 = CARP on Master */ + global $g; + global $config; + + if (is_array($config['virtualip']['vip'])) { + $carpint = 0; + foreach ($config['virtualip']['vip'] as $carp) { + if ($carp['mode'] != "carp") { + continue; + } + $carp_int = find_carp_interface($carp['subnet']); + $status = get_carp_interface_status($carp_int); + switch($status) { + case "MASTER": + return 1; + break; + case "BACKUP": + return 0; + break; + } + } + } else { + return -1; + } +} + +function outputled_gateway() { + /* Returns the status of the gateways. + -1 = No gateway defined + 0 = At least 1 gateway down or with issues + 1 = All gateway up */ + global $g; + global $config; + $a_gateways = return_gateways_array(); + $gateways_status = array(); + $gateways_status = return_gateways_status(true); + foreach ($a_gateways as $gname => $gateway) { + if ($gateways_status[$gname]['status'] != "none") { + return 0; + } + } + return 1; +} + +function get_traffic_stats(&$in_data, &$out_data){ + global $config; + global $traffic_last_ugmt, $traffic_last_ifin, $traffic_last_ifout; + $lcdproc_screen_config = $config['installedpackages']['lcdprocscreens']['config'][0]; + /* read the configured interface */ + $ifnum = $lcdproc_screen_config['scr_traffic_interface']; + /* get the real interface name (code from ifstats.php)*/ + $realif = get_real_interface($ifnum); + if (!$realif) { + $realif = $ifnum; + } + // Need for IPSec case interface. + /* get the interface stats (code from ifstats.php)*/ + $ifinfo = pfSense_get_interface_stats($realif); + /* get the current time (code from ifstats.php)*/ + $temp = gettimeofday(); + $timing = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0; + /* calculate the traffic stats */ + $deltatime = $timing - $traffic_last_ugmt; + $in_data = "IN: " . formatSpeedBits(((double)$ifinfo['inbytes']-$traffic_last_ifin)/$deltatime); + $out_data = "OUT: " . formatSpeedBits(((double)$ifinfo['outbytes']-$traffic_last_ifout)/$deltatime); + $traffic_last_ugmt = $timing; + $traffic_last_ifin = (double)$ifinfo['inbytes']; + $traffic_last_ifout = (double)$ifinfo['outbytes']; +} + +function formatSpeedBits($speed) { + /* format speed in bits/sec, input: bytes/sec + Code from: graph.php ported to PHP */ + if ($speed < 125000) { + return sprintf("%5.1f Kbps", $speed / 125); + } + if ($speed < 125000000) { + return sprintf("%5.1f Mbps", $speed / 125000); + } + return sprintf("%5.1f Gbps", $speed / 125000000); +} + +function add_summary_declaration(&$lcd_cmds, $name) { + $lcdpanel_height = get_lcdpanel_height(); + $lcdpanel_width = get_lcdpanel_width(); + if ($lcdpanel_height >= "4") { + $lcd_cmds[] = "widget_add $name title_summary string"; + $lcd_cmds[] = "widget_add $name text_summary string"; + if ($lcdpanel_width > "16") { + $lcd_cmds[] = "widget_set $name title_summary 1 3 \"CPU MEM STATES FREQ\""; + } else { + $lcd_cmds[] = "widget_set $name title_summary 1 3 \"CPU MEM STATES\""; + } + } +} + +function add_summary_values(&$lcd_cmds, $name, $lcd_summary_data) { + if ($lcd_summary_data != "") { + $lcd_cmds[] = "widget_set $name text_summary 1 4 \"{$lcd_summary_data}\""; + } +} + +function build_interface($lcd) { + global $g; + global $config; + $lcdproc_screens_config = $config['installedpackages']['lcdprocscreens']['config'][0]; + $refresh_frequency = get_lcdpanel_refresh_frequency() * 8; + + $lcd_cmds = array(); + $lcd_cmds[] = "hello"; + $lcd_cmds[] = "client_set name pfSense"; + + /* process screens to display */ + if (is_array($lcdproc_screens_config)) { + foreach ($lcdproc_screens_config as $name => $screen) { + if ($screen == "on") { + switch($name) { + case "scr_version": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"Welcome to\""; + break; + case "scr_time": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Time\""; + break; + case "scr_uptime": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Uptime\""; + break; + case "scr_hostname": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Name\""; + break; + case "scr_system": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Stats\""; + break; + case "scr_disk": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Disk Use\""; + break; + case "scr_load": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Load Averages\""; + break; + case "scr_states": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Traffic States\""; + break; + case "scr_carp": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ CARP State\""; + break; + case "scr_ipsec": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ IPsec Tunnels\""; + break; + case "scr_slbd": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Load Balancer\""; + break; + case "scr_interfaces": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Interfaces\""; + break; + case "scr_mbuf": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ MBuf Usage\""; + break; + case "scr_cpufrequency": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt scroller"; + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ CPU Frequency\""; + break; + case "scr_traffic": + $lcd_cmds[] = "screen_add $name"; + $lcd_cmds[] = "screen_set $name heartbeat off"; + $lcd_cmds[] = "screen_set $name name $name"; + $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; + $lcd_cmds[] = "widget_add $name title_wdgt string"; + $lcd_cmds[] = "widget_add $name text_wdgt string"; + break; + } + add_summary_declaration($lcd_cmds, $name); + } + } + } + send_lcd_commands($lcd, $lcd_cmds); +} + +function loop_status($lcd) { + global $g; + global $config; + global $lcdproc_connect_errors; + $lcdproc_screens_config = $config['installedpackages']['lcdprocscreens']['config'][0]; + $lcdpanel_width = get_lcdpanel_width(); + $lcdpanel_height = get_lcdpanel_height(); + if (empty($g['product_name'])) { + $g['product_name'] = "pfSense"; + } + + $refresh_frequency = get_lcdpanel_refresh_frequency(); + /* keep a counter to see how many times we can loop */ + $i = 1; + while ($i) { + /* prepare the summary data */ + if ($lcdpanel_height >= "4") { + $summary_states = explode("/", get_pfstate()); + $lcd_summary_data = sprintf("%02d%% %02d%% %6d", cpu_usage(), mem_usage(), $summary_states[0]); + if ($lcdpanel_width > "16") { + $lcd_summary_data = $lcd_summary_data . sprintf(" %3d%%", get_cpufrequency_perc()); + } + } else { + $lcd_summary_data = ""; + } + + $lcd_cmds = array(); + + /* initializes the widget counter */ + $widget_counter = 0; + + /* controls the output leds */ + if (outputled_enabled_CFontz633()) { + $led_output_value = 0; + /* LED 1: Interface status */ + if (substr_count(get_interfaces_stats(), "Down") > 0 ) { + $led_output_value = $led_output_value + pow(2, 4); + } else { + $led_output_value = $led_output_value + pow(2, 0); + } + /* LED 2: CARP status */ + switch (outputled_carp()) { + /* CARP disabled */ + case -1: + break; + /* CARP on Backup */ + case 0: + $led_output_value = $led_output_value + pow(2, 1); + break; + /* CARP on Master */ + case 1: + $led_output_value = $led_output_value + pow(2, 5); + } + /* LED 3: CPU Usage */ + if (cpu_usage() > 50) { + $led_output_value = $led_output_value + pow(2, 6); + } else { + $led_output_value = $led_output_value + pow(2, 2); + } + /* LED 4: Gateway status */ + switch (outputled_gateway()) { + /* Gateways not configured */ + case -1: + break; + /* Gateway down or with issues */ + case 0: + $led_output_value = $led_output_value + pow(2, 7); + break; + /* All Gateways up */ + case 1: + $led_output_value = $led_output_value + pow(2, 3); + } + /* Sends the command to the panel */ + $lcd_cmds[] = "output {$led_output_value}"; + } + + /* process screens to display */ + foreach ((array) $lcdproc_screens_config as $name => $screen) { + if ($screen != "on") { + continue; + } + switch($name) { + case "scr_version": + $version = get_version(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$version}\""; + break; + case "scr_time": + $time = date("n/j/Y H:i"); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$time}\""; + break; + case "scr_uptime": + $uptime = get_uptime_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$uptime}\""; + break; + case "scr_hostname": + exec("/bin/hostname", $output, $ret); + $hostname = $output[0]; + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$hostname}\""; + break; + case "scr_system": + $processor = cpu_usage(); + $memory = mem_usage(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"CPU {$processor}%, Mem {$memory}%\""; + break; + case "scr_disk": + $disk = disk_usage(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"Disk {$disk}%\""; + break; + case "scr_load": + $loadavg = get_loadavg_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$loadavg}\""; + break; + case "scr_states": + $states = get_pfstate(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"Cur/Max {$states}\""; + break; + case "scr_carp": + $carp = get_carp_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$carp}\""; + break; + case "scr_ipsec": + $ipsec = get_ipsec_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$ipsec}\""; + break; + case "scr_slbd": + $slbd = get_slbd_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$slbd}\""; + break; + case "scr_interfaces": + $interfaces = get_interfaces_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$interfaces}\""; + break; + case "scr_mbuf": + $mbufstats = get_mbuf_stats(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$mbufstats}\""; + break; + case "scr_cpufrequency": + $cpufreq = get_cpufrequency(); + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$cpufreq}\""; + break; + case "scr_traffic": + get_traffic_stats($in_data, $out_data); + $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"{$in_data}\""; + $lcd_cmds[] = "widget_set $name text_wdgt 1 2 \"{$out_data}\""; + break; + } + if ($name != "scr_traffic_interface") { + $widget_counter++; + add_summary_values($lcd_cmds, $name, $lcd_summary_data); + } + } + if (send_lcd_commands($lcd, $lcd_cmds)) { + $lcdproc_connect_errors = 0; // Reset the error counter + } else { + //an error occurred + return; + } + if (($refresh_frequency * $widget_counter) > 5) { + sleep(5); + } else { + sleep($refresh_frequency * $widget_counter); + } + $i++; + } +} + +/* Initialize the wan traffic counters */ +$traffic_last_ugmt = 0; +$traffic_last_ifin = 0; +$traffic_last_ifout = 0; +/* Initialize the global error counter */ +$lcdproc_connect_errors = 0; +$lcdproc_max_connect_errors = 3; +/* Connect to the LCDd port and interface with the LCD */ +while ($lcdproc_connect_errors <= $lcdproc_max_connect_errors) { + lcdproc_warn("Start client procedure. Error counter: ($lcdproc_connect_errors)"); + sleep(1); + $lcd = fsockopen(LCDPROC_HOST, LCDPROC_PORT, $errno, $errstr, 10); + stream_set_timeout($lcd, 0 , 25000); // Sets the socket timeout as 25ms + if (!$lcd) { + lcdproc_warn("Failed to connect to LCDd process $errstr ($errno)"); + $lcdproc_connect_errors++; + } else { + /* Allow the script to run forever (0) */ + set_time_limit(0); + build_interface($lcd); + loop_status($lcd); + fclose($lcd); + } +} +if ($lcdproc_connect_errors >= $lcdproc_max_connect_errors) { + lcdproc_warn("Too many errors, the client ends."); +} +?> diff --git a/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_screens.xml b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_screens.xml new file mode 100644 index 000000000000..ca2b0f872b9c --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/usr/local/pkg/lcdproc_screens.xml @@ -0,0 +1,154 @@ + + + + + + + Copyright (C) 2009 Scott Ullrich + Copyright (C) 2011 Michele Di Maria + Copyright (C) 2015 ESF, LLC + All rights reserved. +*/ +/* ====================================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* ====================================================================================== */ + ]]> + + Services: LCDproc: Screens + lcdprocscreens + 0.9.15 + Save + /usr/local/pkg/lcdproc.inc + + + Server + /pkg_edit.php?xml=lcdproc.xml + + + Screens + /pkg_edit.php?xml=lcdproc_screens.xml + + + + + LCDproc + Set LCDproc settings such as display driver and COM port. +
Services
+ /pkg_edit.php?xml=lcdproc.xml +
+ + + Enable Version + scr_version + checkbox + + + Enable Time + scr_time + checkbox + + + Enable Uptime + scr_uptime + checkbox + + + Enable Hostname + scr_hostname + checkbox + + + Enable System + scr_system + checkbox + + + Enable Disk + scr_disk + checkbox + + + Enable Load + scr_load + checkbox + + + Enable States + scr_states + checkbox + + + Enable Carp + scr_carp + checkbox + + + Enable IPsec + scr_ipsec + checkbox + + + Enable Load Balancer + scr_slbd + checkbox + + + Enable Interfaces + scr_interfaces + checkbox + + + Enable Mbuf + scr_mbuf + checkbox + + + Enable CPU Frequency + scr_cpufrequency + checkbox + + + Enable Interface Traffic + scr_traffic + checkbox + + + > interface selected + scr_traffic_interface + interfaces_selection + If Interface Traffic is enabled, here you specify which interface to monitor + + + + sync_package_lcdproc_screens(); + +
diff --git a/sysutils/pfSense-pkg-LCDproc/files/usr/local/share/pfSense-pkg-LCDproc/info.xml b/sysutils/pfSense-pkg-LCDproc/files/usr/local/share/pfSense-pkg-LCDproc/info.xml new file mode 100644 index 000000000000..e042ec5cfd76 --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/files/usr/local/share/pfSense-pkg-LCDproc/info.xml @@ -0,0 +1,9 @@ + + + + LCDproc + + %%PKGVERSION%% + lcdproc.xml + + diff --git a/sysutils/pfSense-pkg-LCDproc/pkg-descr b/sysutils/pfSense-pkg-LCDproc/pkg-descr new file mode 100644 index 000000000000..e32f9dd1e735 --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/pkg-descr @@ -0,0 +1 @@ +LCD display driver. diff --git a/sysutils/pfSense-pkg-LCDproc/pkg-plist b/sysutils/pfSense-pkg-LCDproc/pkg-plist new file mode 100644 index 000000000000..4ea59d2f89fa --- /dev/null +++ b/sysutils/pfSense-pkg-LCDproc/pkg-plist @@ -0,0 +1,7 @@ +pkg/lcdproc.xml +pkg/lcdproc_screens.xml +pkg/lcdproc.inc +pkg/lcdproc_client.php +/etc/inc/priv/lcdproc.priv.inc +%%DATADIR%%/info.xml +@dir /etc/inc/priv