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

Reply via email to