diff options
-rw-r--r-- | packages/lcdproc/lcdproc.inc | 66 | ||||
-rw-r--r-- | packages/lcdproc/lcdproc.xml | 20 | ||||
-rw-r--r-- | packages/lcdproc/lcdproc_client.php | 54 | ||||
-rw-r--r-- | packages/lcdproc/lcdproc_screens.xml | 56 |
4 files changed, 159 insertions, 37 deletions
diff --git a/packages/lcdproc/lcdproc.inc b/packages/lcdproc/lcdproc.inc index d6c3d530..adf3f931 100644 --- a/packages/lcdproc/lcdproc.inc +++ b/packages/lcdproc/lcdproc.inc @@ -32,7 +32,7 @@ /* LCDproc */ define('LCDPROC_RCFILE', '/usr/local/etc/rc.d/lcdproc.sh'); - define('LCDPROC_CLIENT', '/tmp/lcdprocc.sh'); + define('LCDPROC_CLIENT', '/tmp/lcdclient.sh'); define('LCDPROC_CONFIG','/usr/local/etc/LCDd.conf'); define('LCDPROC_HOST','localhost'); define('LCDPROC_PORT','13666'); @@ -61,6 +61,17 @@ 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 before_form_lcdproc($pkg) { global $config; @@ -69,6 +80,14 @@ config_unlock(); } + function before_form_lcdproc_screens($pkg) { + global $config; + + config_lock(); + + config_unlock(); + } + function validate_form_lcdproc($post, $input_errors) { if($post['comport']) { switch($post['comport']) { @@ -90,14 +109,22 @@ } } } + function validate_form_lcdproc_screens($post, $input_errors) { + // No validation required ?! + } + function sync_package_lcdproc_screens() { + sync_package_lcdproc(); + } function sync_package_lcdproc() { + global $g; global $config; global $input_errors; config_lock(); $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")) { @@ -124,11 +151,11 @@ $config_text .= "ReportToSyslog=yes\n"; $config_text .= "WaitTime=5\n"; $config_text .= "User=nobody\n"; - $config_text .= "ServerScreen=0\n"; + $config_text .= "ServerScreen=no\n"; $config_text .= "Foreground=no\n"; $config_text .= "DriverPath=/usr/local/lib/lcdproc/\n"; $config_text .= "GoodBye=\"Thanks for using\"\n"; - $config_text .= "GoodBye=\" {$g['product']} \"\n"; + $config_text .= "GoodBye=\" {$g['product_name']} \"\n"; /* FIXME: Specific to the pyramid project */ $config_text .= "ToggleRotateKey=Enter\n"; $config_text .= "PrevScreenKey=Left\n"; @@ -217,13 +244,35 @@ } /* generate rc file start and stop */ + $options = ""; + foreach($lcdproc_screens_config as $name => $screen) { + if($screen == "on") { + switch($name) { + case "scr_cpu": + $options .= "P "; + break; + case "scr_time": + $options .= "O "; + break; + case "scr_load": + $options .= "L "; + break; + case "scr_uptime": + $options .= "U "; + break; + } + } + } $client_script = <<<EOD #!/bin/sh +# script starts a lcd client and always keeps it active. counter=1 -while [ "$counter" -ne 0 ] +while [ "\$counter" -ne 0 ] do - /usr/local/bin/php -f /usr/local/pkg/lcdproc_client.php + # start the lcd client, lcdproc client for now until PHP client is finished + /usr/local/bin/lcdproc -f O P L U + #/usr/local/bin/php -f /usr/local/pkg/lcdproc_client.php sleep 10 done @@ -234,11 +283,11 @@ EOD; if [ `pgrep LCDd | wc -l` != 0 ]; then /usr/bin/killall LCDd - /usr/bin/killall lcdprocc.sh + /usr/bin/killall lcdclient.sh while [ `pgrep LCDd | wc -l` != 0 ]; do sleep 1 done - while [ `pgrep lcdprocc.sh | wc -l` != 0 ]; do + while [ `pgrep lcdclient.sh | wc -l` != 0 ]; do sleep 1 done fi @@ -246,10 +295,11 @@ fi EOD; $start = $stop ."\n"; $start .= "\t/usr/local/sbin/LCDd -c ". LCDPROC_CONFIG ."\n"; + $start .= "\t". LCDPROC_CLIENT ." &\n"; /* write out the configuration */ conf_mount_rw(); - lcdproc_write_config(LCDPROC_CLIENT, $client_script); + lcdproc_write_script(LCDPROC_CLIENT, $client_script); lcdproc_write_config(LCDPROC_CONFIG, $config_text); write_rcfile(array( 'file' => 'lcdproc.sh', diff --git a/packages/lcdproc/lcdproc.xml b/packages/lcdproc/lcdproc.xml index 34dc7fa4..e87ad03d 100644 --- a/packages/lcdproc/lcdproc.xml +++ b/packages/lcdproc/lcdproc.xml @@ -2,9 +2,20 @@ <packagegui> <title>Services: LCDproc</title> <name>lcdproc</name> - <version>0.5.2_1-p2</version> + <version>0.5.2_1-p3</version> <savetext>Save</savetext> <include_file>/usr/local/pkg/lcdproc.inc</include_file> + <tabs> + <tab> + <text>Server</text> + <url>/pkg_edit.php?xml=lcdproc.xml&id=0</url> + <active/> + </tab> + <tab> + <text>Screens</text> + <url>/pkg_edit.php?xml=lcdproc_screens.xml&id=0</url> + </tab> + </tabs> <menu> <name>LCDproc</name> <tooltiptext>Set LCDproc settings such as display driver and com port</tooltiptext> @@ -26,13 +37,6 @@ <rcfile>lcdproc.sh</rcfile> <executable>lcdproc</executable> </service> - <tabs> - <tab> - <text>LCDproc Settings</text> - <url>/pkg_edit.php?xml=lcdproc.xml&id=0</url> - <active/> - </tab> - </tabs> <fields> <field> <fielddescr>Enable LCDproc</fielddescr> diff --git a/packages/lcdproc/lcdproc_client.php b/packages/lcdproc/lcdproc_client.php index ea9d8c97..a07b62ce 100644 --- a/packages/lcdproc/lcdproc_client.php +++ b/packages/lcdproc/lcdproc_client.php @@ -27,8 +27,8 @@ POSSIBILITY OF SUCH DAMAGE. */ - require_once("config.inc"); - require_once("functions.inc"); + // require_once("config.inc"); + // require_once("functions.inc"); require_once("/usr/local/pkg/lcdproc.inc"); /* Define functions */ @@ -39,34 +39,46 @@ } foreach($lcd_cmds as $lcd_cmd) { $cmd_output = ""; - fwrite($lcd, $lcd_cmd); - $cmd_output .= fgets($lcd, 128); - lcdproc_notice("LCDd output for cmd $lcd_cmd is: $cmd_output"); - sleep(1); + if(! fwrite($lcd, "$lcd_cmd\n")) { + lcdproc_warn("Connection to LCDd process lost $errstr ($errno)"); + die(); + } + $cmd_output = fgets($lcd, 4096); + if(preg_match("/^huh?/", $cmd_output)) { + lcdproc_notice("LCDd output: \"$cmd_output\". Executed \"$lcd_cmd\""); + } + // sleep(1); } } function loop_status($lcd) { + global $g; + global $config; /* keep a counter to see how many times we can loop */ - $i = 0; - while(1) { - $time = time(); + $i = 1; + while($i) { + $time = date ("l dS of F Y h:i:s A"); $lcd_cmds = array(); - $lcd_cmds[] = "client_set -name \"Parenttest\"\n"; - $lcd_cmds[] = "screen_add status\n"; - $lcd_cmds[] = "screen_set status -heartbeat off\n"; - $lcd_cmds[] = "widget_add status title title\n"; - $lcd_cmds[] = "widget_add status date scroller\n"; - $lcd_cmds[] = "widget_set status title $i\n"; - $lcd_cmds[] = "widget_set status date left right h 1 $time\n"; + $lcd_cmds[] = "widget_set welcome_scr title_wdgt \"$i test \""; + // $lcd_cmds[] = "widget_set welcome_scr text_wdgt 1 1 \"$time test\""; + $lcd_cmds[] = "widget_set welcome_scr text_wdgt 1 2 20 2 h 4 \"$i $time test\""; + // $lcd_cmds[] = "output on 1 \""; send_lcd_commands($lcd, $lcd_cmds); + sleep(10); $i++; } } - function send_hello($lcd) { + function build_interface($lcd) { $lcd_cmds = array(); - $lcd_cmds[] = "hello\n"; + $lcd_cmds[] = "hello"; + $lcd_cmds[] = "client_set name pfSense"; + $lcd_cmds[] = "screen_add welcome_scr"; + $lcd_cmds[] = "screen_set welcome_scr heartbeat off"; + // $lcd_cmds[] = "screen_set welcome_scr duration 32"; + $lcd_cmds[] = "screen_set welcome_scr name welcome"; + $lcd_cmds[] = "widget_add welcome_scr title_wdgt title"; + $lcd_cmds[] = "widget_add welcome_scr text_wdgt scroller"; send_lcd_commands($lcd, $lcd_cmds); } @@ -75,10 +87,10 @@ if (!$lcd) { lcdproc_warn("Failed to connect to LCDd process $errstr ($errno)"); } else { - send_hello($lcd); + build_interface($lcd); loop_status($lcd); /* loop exited? Close fd and wait for the script to kick in again */ - sleep(1); + // sleep(1); + fclose($lcd); } - fclose($lcd); ?> diff --git a/packages/lcdproc/lcdproc_screens.xml b/packages/lcdproc/lcdproc_screens.xml new file mode 100644 index 00000000..9c44852d --- /dev/null +++ b/packages/lcdproc/lcdproc_screens.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="utf-8" ?> +<packagegui> + <title>Services: LCDproc: Screens</title> + <name>lcdproc_screens</name> + <version>0.5.2_1-p3</version> + <savetext>Save</savetext> + <include_file>/usr/local/pkg/lcdproc.inc</include_file> + <tabs> + <tab> + <text>Server</text> + <url>/pkg_edit.php?xml=lcdproc.xml&id=0</url> + </tab> + <tab> + <text>Screens</text> + <url>/pkg_edit.php?xml=lcdproc_screens.xml&id=0</url> + <active/> + </tab> + </tabs> + <menu> + <name>LCDproc</name> + <tooltiptext>Set LCDproc settings such as display driver and com port</tooltiptext> + <section>Services</section> + <url>/pkg_edit.php?xml=lcdproc.xml&id=0</url> + </menu> + <fields> + <field> + <fielddescr>Enable CPU</fielddescr> + <fieldname>scr_cpu</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Enable Load</fielddescr> + <fieldname>scr_load</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Enable Time</fielddescr> + <fieldname>scr_time</fieldname> + <type>checkbox</type> + </field> + <field> + <fielddescr>Enable Uptime</fielddescr> + <fieldname>scr_uptime</fieldname> + <type>checkbox</type> + </field> + </fields> + <custom_php_command_before_form> + before_form_lcdproc_screens(&$pkg); + </custom_php_command_before_form> + <custom_php_validation_command> + validate_form_lcdproc_screens($_POST, &$input_errors); + </custom_php_validation_command> + <custom_php_resync_config_command> + sync_package_lcdproc_screens(); + </custom_php_resync_config_command> +</packagegui> |