From 6266c2fb61ca14e4c4ff64851d0323fd480c757a Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 24 Dec 2008 09:40:58 +0000 Subject: w1retap plugin by Jonathan Hudson git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@909 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- Makefile.am | 1 + Makefile.in | 2 + config.h.in | 3 + configure | 12 +++ plugin.c | 8 ++ plugin_w1retap.c | 264 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins.m4 | 8 ++ 7 files changed, 298 insertions(+) create mode 100644 plugin_w1retap.c 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 diff --git a/configure b/configure index 19c7a73..b8b0fb2 100755 --- a/configure +++ b/configure @@ -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 ;; @@ -10935,6 +10939,14 @@ cat >>confdefs.h <<\_ACEOF #define PLUGIN_UPTIME 1 _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" diff --git a/plugin.c b/plugin.c index 256b2fd..b25b299 100644 --- a/plugin.c +++ b/plugin.c @@ -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 + * Copyright (C) 2006 The LCD4Linux Team + * + * 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 , but is applicable + * to any similarly formatted file. + */ + +/* + * exported functions: + * + * int plugin_init_file (void) + * adds various functions + * + */ + + +#include "config.h" + +#include +#include +#include +#include + +#include "debug.h" +#include "plugin.h" + +#ifdef WITH_DMALLOC +#include +#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' + +*/ diff --git a/plugins.m4 b/plugins.m4 index 9184c1b..417c894 100644 --- a/plugins.m4 +++ b/plugins.m4 @@ -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]) -- cgit v1.2.3