diff options
author | michael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2008-12-24 09:40:58 +0000 |
---|---|---|
committer | michael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2008-12-24 09:40:58 +0000 |
commit | 6266c2fb61ca14e4c4ff64851d0323fd480c757a (patch) | |
tree | 827323614976108f8e4573f67cef11b0b494fd2d | |
parent | 16d014e412692d4479c6e091c11335a07f193e76 (diff) | |
download | lcd4linux-6266c2fb61ca14e4c4ff64851d0323fd480c757a.tar.gz |
w1retap plugin by Jonathan Hudson
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@909 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | Makefile.in | 2 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 12 | ||||
-rw-r--r-- | plugin.c | 8 | ||||
-rw-r--r-- | plugin_w1retap.c | 264 | ||||
-rw-r--r-- | plugins.m4 | 8 |
7 files changed, 298 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 2c32ce3..9a40810 100644 --- a/Makefile.am +++ b/Makefile.am @@ -141,6 +141,7 @@ plugin_seti.c \ plugin_statfs.c \ plugin_uname.c \ plugin_uptime.c \ +plugin_w1retap.c \ plugin_wireless.c \ plugin_xmms.c diff --git a/Makefile.in b/Makefile.in index 658cae0..26d0aee 100644 --- a/Makefile.in +++ b/Makefile.in @@ -340,6 +340,7 @@ plugin_seti.c \ plugin_statfs.c \ plugin_uname.c \ plugin_uptime.c \ +plugin_w1retap.c \ plugin_wireless.c \ plugin_xmms.c @@ -537,6 +538,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_uname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_uptime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_w1retap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_wireless.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin_xmms.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/property.Po@am__quote@ diff --git a/config.h.in b/config.h.in index 67a52a3..a8e7c57 100644 --- a/config.h.in +++ b/config.h.in @@ -365,6 +365,9 @@ /* uptime plugin */ #undef PLUGIN_UPTIME +/* w1retap plugin */ +#undef PLUGIN_W1RETAP + /* wireless plugin */ #undef PLUGIN_WIRELESS @@ -8585,6 +8585,7 @@ echo "$as_me: error: run ./configure --with-plugins=..." >&2;} PLUGIN_STATFS="yes" PLUGIN_UNAME="yes" PLUGIN_UPTIME="yes" + PLUGIN_W1RETAP="yes" PLUGIN_WIRELESS="yes" PLUGIN_XMMS="yes" ;; @@ -8678,6 +8679,9 @@ echo "$as_me: error: run ./configure --with-plugins=..." >&2;} uptime) PLUGIN_UPTIME=$val ;; + w1retap) + PLUGIN_W1RETAP=$val + ;; wireless) PLUGIN_WIRELESS=$val ;; @@ -10936,6 +10940,14 @@ cat >>confdefs.h <<\_ACEOF _ACEOF fi +if test "$PLUGIN_W1RETAP" = "yes"; then + PLUGINS="$PLUGINS plugin_w1retap.o" + +cat >>confdefs.h <<\_ACEOF +#define PLUGIN_W1RETAP 1 +_ACEOF + +fi if test "$PLUGIN_WIRELESS" = "yes"; then PLUGINS="$PLUGINS plugin_wireless.o" @@ -116,6 +116,8 @@ int plugin_init_uname(void); void plugin_exit_uname(void); int plugin_init_uptime(void); void plugin_exit_uptime(void); +int plugin_init_w1retap(void); +void plugin_exit_w1retap(void); int plugin_init_wireless(void); void plugin_exit_wireless(void); int plugin_init_xmms(void); @@ -221,6 +223,9 @@ int plugin_init(void) #ifdef PLUGIN_UPTIME plugin_init_uptime(); #endif +#ifdef PLUGIN_W1RETAP + plugin_init_w1retap(); +#endif #ifdef PLUGIN_WIRELESS plugin_init_wireless(); #endif @@ -321,6 +326,9 @@ void plugin_exit(void) #ifdef PLUGIN_UPTIME plugin_exit_uptime(); #endif +#ifdef PLUGIN_W1RETAP + plugin_exit_w1retap(); +#endif #ifdef PLUGIN_WIRELESS plugin_exit_wireless(); #endif diff --git a/plugin_w1retap.c b/plugin_w1retap.c new file mode 100644 index 0000000..10fc05e --- /dev/null +++ b/plugin_w1retap.c @@ -0,0 +1,264 @@ +/* $Id: plugin_w1retap.c + * + * plugin to perform simple file operations for w1retap + * + * Copyright (C) 2007 Jonathan Hudson <jh+w1retap@daria.co.uk> + * Copyright (C) 2006 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * This file is part of LCD4Linux. + * + * LCD4Linux 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, or (at your option) + * any later version. + * + * LCD4Linux 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/* + * This module returns a specific value associated with a key from a + * file containing one or more lines formatted as KEY=VALUE. + * + * It is intended for use with the w1retap weather station logging + * software <http://www.daria.co.uk/wx/tech.html>, but is applicable + * to any similarly formatted file. + */ + +/* + * exported functions: + * + * int plugin_init_file (void) + * adds various functions + * + */ + + +#include "config.h" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> + +#include "debug.h" +#include "plugin.h" + +#ifdef WITH_DMALLOC +#include <dmalloc.h> +#endif + +/* function 'my_readkey' */ +/* takes two arguments, file name and key */ +/* returns value associated with key, trimmed to suitable dec places */ + +static void my_readkey(RESULT * result, RESULT * arg1, RESULT * arg2) +{ + char value[80], val2[80]; + FILE *fp; + char *reqkey, *pval; + size_t size; + + *value = 0; + pval = value; + + reqkey = R2S(arg2); + fp = fopen(R2S(arg1), "r"); + + if (!fp) { + error("w1retap couldn't open file '%s'", R2S(arg1)); + value[0] = '\0'; + } else { + size = strlen(reqkey); + while (!feof(fp) && pval == value) { + fgets(val2, sizeof(val2), fp); + if (*(val2 + size) == '=') { + if (strncmp(val2, reqkey, size) == 0) { + char *p; + p = index(val2, ' '); + if (p == NULL) { + p = index(val2, '\n'); + } + + if (p) { + *p = 0; + pval = val2 + size + 1; + { + double d; + char *ep; + d = strtod(pval, &ep); + if (ep != pval && (*ep == 0 || isspace(*ep))) { + if (d > 500) + sprintf(val2, "%.0f", d); + else + sprintf(val2, "%.1f", d); + pval = val2; + } + } + } + } + } + } + fclose(fp); + } + + /* store result */ + SetResult(&result, R_STRING, pval); +} + + +/* plugin initialization */ +/* MUST NOT be declared 'static'! */ +int plugin_init_w1retap(void) +{ + + /* register all our cool functions */ + /* the second parameter is the number of arguments */ + /* -1 stands for variable argument list */ + AddFunction("w1retap::readkey", 2, my_readkey); + + return 0; +} + +void plugin_exit_w1retap(void) +{ + /* free any allocated memory */ + /* close filedescriptors */ +} + + +/* + +#Sample configuration for w1retap +#================================ + +Display Weather { + Driver 'Pertelian' + Port '/dev/ttyUSB0' + Size '20x4' + Backlight 1 + Icons 0 +} + +Display XWindow { + Driver 'X11' + Size '120x32' + Font '6x8' + Pixel '4+1' + Gap '-1x-1' + Border 20 + Foreground '000000ff' + Background '00000033' + Basecolor '70c000' + Buttons 6 + Brightness 133 +} + +Widget LCDTimer { + class 'Timer' + active 1 + update 10000 + expression h=strftime('%H', time()); x=file::readline('/tmp/.lcd',1)+0; b=(h > 5 | h < 23) + x ; LCD::backlight(b) +} + + +Widget Temp { + class 'Text' + expression w1retap::readkey(file, 'OTMP0') + prefix 'Extr ' + width 10 + align 'L' + update tick +} + +Widget GHouse { + class 'Text' + expression w1retap::readkey(file, 'GHT') + prefix 'GHT ' + width 10 + align 'L' + update tick +} + +Widget House { + class 'Text' + expression w1retap::readkey(file, 'OTMP1') + prefix 'Intr ' + width 10 + align 'L' + update tick +} +Widget Garage { + class 'Text' + expression w1retap::readkey(file, 'OTMP2') + prefix 'Gge ' + width 10 + align 'L' + update tick +} +Widget Soil { + class 'Text' + expression w1retap::readkey(file, 'STMP1') + prefix 'Soil ' + width 10 + align 'L' + update tick +} +Widget Press { + class 'Text' + expression w1retap::readkey(file, 'OPRS') + prefix 'Pres ' + width 10 + align 'L' + update tick +} + +Widget Rain { + class 'Text' + expression w1retap::readkey(file1, 'RAIN') + prefix 'Rain ' + width 20 + align 'L' + update tick +} + +Layout Default { + Timer1 'LCDTimer' + Row1 { + Col1 'Temp' + Col11 'GHouse' + } + + Row2 { + Col1 'House' + Col11 'Garage' + } + + Row3 { + Col1 'Soil' + Col11 'Press' + } + + Row4 { + Col1 'Rain' + } +} + +Variables { + tick 120000 + file '/tmp/.w1retap.dat' + file1 '/tmp/.w1rain.txt' +} + +Layout 'Default' + +Display 'Weather' + +*/ @@ -83,6 +83,7 @@ for plugin in $plugins; do PLUGIN_STATFS="yes" PLUGIN_UNAME="yes" PLUGIN_UPTIME="yes" + PLUGIN_W1RETAP="yes" PLUGIN_WIRELESS="yes" PLUGIN_XMMS="yes" ;; @@ -176,6 +177,9 @@ for plugin in $plugins; do uptime) PLUGIN_UPTIME=$val ;; + w1retap) + PLUGIN_W1RETAP=$val + ;; wireless) PLUGIN_WIRELESS=$val ;; @@ -369,6 +373,10 @@ if test "$PLUGIN_UPTIME" = "yes"; then PLUGINS="$PLUGINS plugin_uptime.o" AC_DEFINE(PLUGIN_UPTIME,1,[uptime plugin]) fi +if test "$PLUGIN_W1RETAP" = "yes"; then + PLUGINS="$PLUGINS plugin_w1retap.o" + AC_DEFINE(PLUGIN_W1RETAP,1,[w1retap plugin]) +fi if test "$PLUGIN_WIRELESS" = "yes"; then PLUGINS="$PLUGINS plugin_wireless.o" AC_DEFINE(PLUGIN_WIRELESS,1,[wireless plugin]) |