Package: lcdproc
Version: 0.4.5-1
Severity: wishlist
Tags: patch
Hello,
I will be attaching a patch from http://venky.ws/projects/imon/ that
supports the IMON devices. These are found, for instance, in
Silverstone HTPC cases.
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'stable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.16.11
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Versions of packages lcdproc depends on:
ii debconf 1.5.0 Debian configuration management sy
ii libc6 2.3.6-7 GNU C Library: Shared libraries
ii libncurses5 5.5-1.1 Shared libraries for terminal hand
ii libsvga1 1:1.4.3-22 console SVGA display libraries
lcdproc recommends no packages.
-- no debconf information
diff -N -r -d -u lcdproc-0.4.5.orig/LCDd.conf lcdproc-0.4.5-imon/LCDd.conf
--- lcdproc-0.4.5.orig/LCDd.conf 2004-03-14 09:50:22.000000000 -0600
+++ lcdproc-0.4.5-imon/LCDd.conf 2005-01-23 18:48:31.000000000 -0600
@@ -40,7 +40,7 @@
[server]
# Server section with all kinds of settings for the LCDd server
-Driver=none
+Driver=imon
#Driver=curses
#Driver=HD44780
#Driver=lcdm001
@@ -78,7 +78,7 @@
# yes : always,
# no : when there are no other screens active.
-Foreground=yes
+Foreground=no
# The server will stay in the foreground if set to true.
# Otherwise the server will fork to background and report
# to syslog
@@ -537,7 +537,11 @@
# display size [20x4]
size=20x4
+[imon]
+# Ahanix/Soundgraph IMON driver
+Size=16x2
+Device=/dev/lcd0
[Wirz-sli]
diff -N -r -d -u lcdproc-0.4.5.orig/acconfig.h lcdproc-0.4.5-imon/acconfig.h
--- lcdproc-0.4.5.orig/acconfig.h 2004-03-14 09:50:22.000000000 -0600
+++ lcdproc-0.4.5-imon/acconfig.h 2005-01-23 18:48:31.000000000 -0600
@@ -74,6 +74,8 @@
#undef T6963_DRV
+#undef IMON_DRV
+
/* Define the package name */
#undef PACKAGE
diff -N -r -d -u lcdproc-0.4.5.orig/acinclude.m4 lcdproc-0.4.5-imon/acinclude.m4
--- lcdproc-0.4.5.orig/acinclude.m4 2004-03-14 09:50:22.000000000 -0600
+++ lcdproc-0.4.5-imon/acinclude.m4 2005-01-23 18:48:31.000000000 -0600
@@ -8,13 +8,13 @@
[ mtxorb,cfontz,cwlnx,curses,text,lb216,]
[ hd44780,joy,irman,lircin,bayrad,glk,]
[ stv5730,sed1330,sed1520,svgalib,lcdm001,]
- [ t6963,wirz-sli,sgx120]
+ [ t6963,wirz-sli,sgx120,imon]
[ \"all\" compiles all drivers],
drivers="$enableval",
-
drivers=[lcdm001,mtxorb,cfontz,cwlnx,curses,text,lb216,bayrad,glk,sgx120])
+
drivers=[lcdm001,mtxorb,cfontz,cwlnx,curses,text,lb216,bayrad,glk,sgx120,imon])
if test "$drivers" = "all"; then
-
drivers=[mtxorb,cfontz,cwlnx,curses,text,lb216,hd44780,joy,irman,lircin,bayrad,glk,stv5730,sed1330,sed1520,svgalib,lcdm001,t6963,wirz-sli,sgx120]
+
drivers=[mtxorb,cfontz,cwlnx,curses,text,lb216,hd44780,joy,irman,lircin,bayrad,glk,stv5730,sed1330,sed1520,svgalib,lcdm001,t6963,wirz-sli,sgx120,imon]
fi
drivers=`echo $drivers | sed 's/,/ /g'`
@@ -121,6 +121,11 @@
AC_DEFINE(TEXT_DRV)
actdrivers=["$actdrivers text"]
;;
+ imon)
+ DRIVERS="$DRIVERS imon.o"
+ AC_DEFINE(IMON_DRV)
+ actdrivers=["$actdrivers imon"]
+ ;;
lb216)
DRIVERS="$DRIVERS lb216.o"
AC_DEFINE(LB216_DRV)
diff -N -r -d -u lcdproc-0.4.5.orig/server/drivers/Makefile.am
lcdproc-0.4.5-imon/server/drivers/Makefile.am
--- lcdproc-0.4.5.orig/server/drivers/Makefile.am 2004-03-14
09:50:25.000000000 -0600
+++ lcdproc-0.4.5-imon/server/drivers/Makefile.am 2005-01-23
18:48:31.000000000 -0600
@@ -1,6 +1,7 @@
noinst_LIBRARIES = libLCDdrivers.a
libLCDdrivers_a_SOURCES = lcd.c lcd.h lcd_lib.c lcd_lib.h
EXTRA_libLCDdrivers_a_SOURCES = MtxOrb.c MtxOrb.h text.c text.h \
+ imon.c imon.h \
lcdm001.c lcdm001.h \
curses_drv.c curses_drv.h drv_base.h \
hd44780.c hd44780.h lb216.c lb216.h \
diff -N -r -d -u lcdproc-0.4.5.orig/server/drivers/imon.c
lcdproc-0.4.5-imon/server/drivers/imon.c
--- lcdproc-0.4.5.orig/server/drivers/imon.c 1969-12-31 18:00:00.000000000
-0600
+++ lcdproc-0.4.5-imon/server/drivers/imon.c 2005-01-23 18:48:31.000000000
-0600
@@ -0,0 +1,224 @@
+/**
+ * Driver for Ahanix/Soundgraph IMON IR/VFD Module
+ *
+ * (C) 2004, Venky Raju <[EMAIL PROTECTED]>
+ *
+ * This source code is being released under the GPL.
+ * Please see the file COPYING in this package for details.
+ *
+ * Inspired by:
+ * TextMode driver (LCDproc authors?)
+ * Sasem driver (Oliver Stabel)
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/errno.h>
+#include <syslog.h>
+
+#include "lcd.h"
+#include "imon.h"
+#include "drv_base.h"
+#include "shared/report.h"
+#include "configfile.h"
+
+#define PAD '#'
+#define DEFAULT_DEVICE "/dev/usb/lcd"
+#define DEFAULT_SIZE "16x2"
+
+/**
+ * Function prototypes
+ */
+static void imon_close ();
+static void imon_clear ();
+static void imon_flush ();
+static void imon_string (int x, int y, char string[]);
+static void imon_chr (int x, int y, char c);
+/* static int imon_contrast (int contrast); */
+/* static void imon_backlight (int on); */
+/* static void imon_init_vbar (); */
+/* static void imon_init_hbar (); */
+/* static void imon_init_num (); */
+static void imon_vbar (int x, int len);
+static void imon_hbar (int x, int y, int len);
+/* static void imon_num (int x, int num); */
+/* static void imon_set_char (int n, char *dat); */
+/* static void imon_flush_box (int lft, int top, int rgt, int bot); */
+static void imon_draw_frame (char *dat);
+
+lcd_logical_driver *imon;
+static int imon_fd;
+
+
+/* The two value below are fake, we don't support custom char. */
+#define VFD_DEFAULT_CELL_WIDTH 5
+#define VFD_DEFAULT_CELL_HEIGHT 8
+
+int imon_init (lcd_logical_driver * driver, char *args)
+{
+ char buf[256];
+ int width=0, height=0;
+
+ imon = driver;
+
+ /* TODO?: replace DriverName with driver->name when that field exists.*/
+ #define DriverName "imon"
+
+ /* Get settings from config file*/
+
+ /* Get device */
+ strncpy (buf, config_get_string (DriverName, "device", 0,
DEFAULT_DEVICE), sizeof (buf));
+ buf [sizeof(buf)-1] = 0;
+ report (RPT_INFO, "imon: using device %s", buf);
+
+ /* Open device for writing */
+ if ((imon_fd = open (buf, O_WRONLY)) < 0) {
+
+ report (RPT_ERR, "imon: error opening %s (%s)", buf, strerror
(errno));
+ return -1;
+ }
+
+ /* Get size settings*/
+ strncpy (buf, config_get_string (DriverName , "Size" , 0 ,
DEFAULT_SIZE), sizeof(buf));
+ buf[sizeof(buf)-1] = 0;
+ if (sscanf(buf , "%dx%d", &width, &height ) != 2 || (width <= 0) ||
(height <= 0)) {
+ report (RPT_WARNING, "imon: cannot read size: %s. Using default
value %s.\n",
+ buf, DEFAULT_SIZE);
+ sscanf (DEFAULT_SIZE , "%dx%d", &width, &height );
+ }
+
+ imon->wid = width;
+ imon->hgt = height;
+
+ /* Make sure the frame buffer is there... */
+ if (!imon->framebuf)
+ imon->framebuf = (unsigned char *) malloc (imon->wid *
imon->hgt);
+ memset (imon->framebuf, ' ', imon->wid * imon->hgt);
+
+ imon->cellwid = VFD_DEFAULT_CELL_WIDTH;
+ imon->cellhgt = VFD_DEFAULT_CELL_HEIGHT;
+
+ /* Set the functions the driver supports */
+ imon->clear = imon_clear;
+ imon->string = imon_string;
+ imon->chr = imon_chr;
+ imon->vbar = imon_vbar;
+ imon->hbar = imon_hbar;
+ /* imon->init_vbar = NULL; */
+ /* imon->init_hbar = NULL; */
+ /* imon->num = imon_num; */
+ /* imon->init_num = NULL; */
+ imon->init = imon_init;
+ imon->close = imon_close;
+ imon->flush = imon_flush;
+ /* imon->flush_box = NULL; */
+ /* imon->contrast = NULL; */
+ /* imon->backlight = NULL; */
+ /* imon->set_char = NULL; */
+ /* imon->icon = NULL; */
+ imon->draw_frame = imon_draw_frame;
+ /* imon->getkey = NULL; */
+
+ return !0;
+}
+
+static void imon_close ()
+{
+ if (imon->framebuf != NULL)
+ free (imon->framebuf);
+
+ imon->framebuf = NULL;
+ close (imon_fd);
+}
+
+/**
+ * Clears the VFD screen
+ */
+static void imon_clear ()
+{
+ memset (imon->framebuf, ' ', imon->wid * imon->hgt);
+}
+
+/**
+ * Flushes all output to the VFD...
+ */
+static void imon_flush ()
+{
+ imon_draw_frame (imon->framebuf);
+}
+
+/**
+ * Prints a string on the VFD display, at position (x,y).
+ * The upper-left is (1,1) and the lower right is (16, 2).
+ */
+static void imon_string (int x, int y, char string[])
+{
+ int i;
+
+ for (i = 0; string[i]; i++)
+ imon_chr (x+i, y, string [i]);
+}
+
+
+/**
+ * Prints a character on the VFD display, at position (x,y).
+ * The upper-left is (1,1) and the lower right is (16,2).
+ */
+static void imon_chr (int x, int y, char ch)
+{
+ y--; x--;
+
+ switch (ch) {
+
+ case 0:
+ case -1:
+ ch = PAD;
+ break;
+ default:
+ ;
+ }
+
+ imon->framebuf[(y * imon->wid) + x] = ch;
+}
+
+/**
+ * Draws a vertical bar; erases entire column onscreen.
+ */
+static void imon_vbar (int x, int len)
+{
+ int y;
+ for (y = imon->hgt; y > 0 && len > 0; y--) {
+
+ imon_chr (x, y, '|');
+ len -= imon->cellhgt;
+ }
+
+}
+
+/**
+ * Draws a horizontal bar to the right.
+ */
+static void imon_hbar (int x, int y, int len)
+{
+ for (; x <= imon->wid && len > 0; x++) {
+
+ imon_chr (x, y, '-');
+ len -= imon->cellwid;
+ }
+
+}
+
+static void imon_flush_box (int lft, int top, int rgt, int bot)
+{
+ imon_flush ();
+}
+
+static void imon_draw_frame (char *dat)
+{
+ write (imon_fd, dat, 32);
+}
+
diff -N -r -d -u lcdproc-0.4.5.orig/server/drivers/imon.h
lcdproc-0.4.5-imon/server/drivers/imon.h
--- lcdproc-0.4.5.orig/server/drivers/imon.h 1969-12-31 18:00:00.000000000
-0600
+++ lcdproc-0.4.5-imon/server/drivers/imon.h 2005-01-23 18:48:31.000000000
-0600
@@ -0,0 +1,21 @@
+/**
+ * Driver for Ahanix/Soundgraph IMON IR/VFD Module
+ *
+ * (C) 2004, Venky Raju <[EMAIL PROTECTED]>
+ *
+ * This source code is being released under the GPL.
+ * Please see the file COPYING in this package for details.
+ *
+ * Inspired by:
+ * TextMode driver (LCDproc authors?)
+ * Sasem driver (Oliver Stabel)
+ */
+
+#ifndef IMON_H
+#define IMON_H
+
+extern lcd_logical_driver *imon;
+
+int imon_init (struct lcd_logical_driver *driver, char *args);
+
+#endif
diff -N -r -d -u lcdproc-0.4.5.orig/server/drivers/lcd.c
lcdproc-0.4.5-imon/server/drivers/lcd.c
--- lcdproc-0.4.5.orig/server/drivers/lcd.c 2004-03-14 09:50:25.000000000
-0600
+++ lcdproc-0.4.5-imon/server/drivers/lcd.c 2005-01-23 18:48:31.000000000
-0600
@@ -87,6 +87,10 @@
#include "text.h"
#endif
+#ifdef IMON_DRV
+#include "imon.h"
+#endif
+
#ifdef DEBUG_DRV
#include "debug.h"
#endif
@@ -200,6 +204,9 @@
#ifdef TEXT_DRV
{"text", text_init,},
#endif
+#ifdef IMON_DRV
+ {"imon", imon_init,},
+#endif
#ifdef DEBUG_DRV
{"debug", debug_init,},
#endif