aboutsummaryrefslogtreecommitdiffstats
path: root/drv_generic_serial.h
blob: 9bd03f9bc6ad3cc759c70f51c3ba527535adb67a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* $Id$
 * $URL$
 *
 * generic driver helper for serial and usbserial displays
 *
 * Copyright (C) 1999, 2000 Michael Reinelt <michael@reinelt.co.at>
 * Copyright (C) 2004 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.
 *
 */


#ifndef _DRV_GENERIC_SERIAL_H_
#define _DRV_GENERIC_SERIAL_H_

int drv_generic_serial_open(const char *section, const char *driver, const unsigned int flags);
int drv_generic_serial_poll(char *string, const int len);
int drv_generic_serial_read(char *string, const int len);
void drv_generic_serial_write(const char *string, const int len);
int drv_generic_serial_close(void);

#endif
go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/* $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'

*/