]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2005-04-24 04:33:46 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 24 Apr 2005 04:33:46 +0000 (04:33 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 24 Apr 2005 04:33:46 +0000 (04:33 +0000)
driver for TREFON USB LCD's added

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@531 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

Makefile.am
Makefile.in
config.h.in
configure
drivers.m4
drv.c
drv_Trefon.c [new file with mode: 0644]
drv_USBLCD.c
lcd4linux.conf.sample

index 477e4aca4355ae80dd32008c58faa084cfc0a422..3014f5619508a962753264a47e21f715ba1a8054 100644 (file)
@@ -75,6 +75,7 @@ drv_NULL.c                  \
 drv_RouterBoard.c           \
 drv_SimpleLCD.c             \
 drv_T6963.c                 \
+drv_Trefon.c                \
 drv_USBLCD.c                \
 drv_X11.c                   \
                             \
index 9259628f2c14976aab9e6b674bb1d85187bda73b..4c5d4ae9d434f04bf70d67eff06dda305d6a3995 100644 (file)
@@ -100,7 +100,7 @@ lcd4linux_SOURCES =  lcd4linux.c                 cfg.c         cfg.h         deb
 
 #liblcd4linux_la_SOURCES =
 
-EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       drv_generic_i2c.c           drv_generic_i2c.h           drv_BeckmannEgle.c          drv_BWCT.c                  drv_Crystalfontz.c          drv_Curses.c                drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_LCDLinux.c              drv_LCDTerm.c               drv_M50530.c                drv_MatrixOrbital.c         drv_MilfordInstruments.c    drv_NULL.c                  drv_RouterBoard.c           drv_SimpleLCD.c             drv_T6963.c                 drv_USBLCD.c                drv_X11.c                                               font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_diskstats.c          plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_statfs.c             plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.c
+EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       drv_generic_i2c.c           drv_generic_i2c.h           drv_BeckmannEgle.c          drv_BWCT.c                  drv_Crystalfontz.c          drv_Curses.c                drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_LCDLinux.c              drv_LCDTerm.c               drv_M50530.c                drv_MatrixOrbital.c         drv_MilfordInstruments.c    drv_NULL.c                  drv_RouterBoard.c           drv_SimpleLCD.c             drv_T6963.c                 drv_Trefon.c                drv_USBLCD.c                drv_X11.c                                               font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_diskstats.c          plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_statfs.c             plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.c
 
 
 EXTRA_DIST =  lcd4linux.conf.sample       lcd4kde.conf                lcd4linux.kdelnk            lcd4linux.xpm               lcd4linux.lsm               curses.m4                   AUTHORS                     CREDITS                     FAQ                         NEWS                        TODO                        README                      README.Drivers              README.Plugins              README.KDE                  plugin_sample.c
@@ -144,7 +144,7 @@ DEP_FILES =  .deps/cfg.P .deps/debug.P .deps/drv.P .deps/drv_BWCT.P \
 .deps/drv_LCDLinux.P .deps/drv_LCDTerm.P .deps/drv_M50530.P \
 .deps/drv_MatrixOrbital.P .deps/drv_MilfordInstruments.P \
 .deps/drv_NULL.P .deps/drv_RouterBoard.P .deps/drv_SimpleLCD.P \
-.deps/drv_T6963.P .deps/drv_USBLCD.P .deps/drv_X11.P \
+.deps/drv_T6963.P .deps/drv_Trefon.P .deps/drv_USBLCD.P .deps/drv_X11.P \
 .deps/drv_generic_graphic.P .deps/drv_generic_i2c.P \
 .deps/drv_generic_parport.P .deps/drv_generic_serial.P \
 .deps/drv_generic_text.P .deps/evaluator.P .deps/hash.P .deps/layout.P \
index 3fcaba18035ed74687ed3c82a20363cda168fb12..4dc4309fc94fe528f7abe6650bd5c39bce9cbfd8 100644 (file)
 /* T6963 driver */
 #undef WITH_T6963
 
+/* TREFON driver */
+#undef WITH_TREFON
+
 /* USBLCD driver */
 #undef WITH_USBLCD
 
index 88adb7419fb71cba99ec4949695d3c408a603a71..392c77f0dc22143c8fd5f735ec18bf81eba00815 100755 (executable)
--- a/configure
+++ b/configure
@@ -870,7 +870,7 @@ Optional Packages:
                           BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux,
                           HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,
                           MilfordInstruments, NULL, PNG, PPM, RouterBoard,
-                          SimpleLCD, T6963, USBLCD, X11
+                          SimpleLCD, T6963, Trefon, USBLCD, X11
   --with-plugins=<list>   choose which plugins to compile.
                           type --with-plugins=list for a list
                           of avaible plugins
@@ -5569,6 +5569,7 @@ for driver in $drivers; do
          PPM="yes"
         ROUTERBOARD="yes"
          T6963="yes"
+         Trefon="yes"
          USBLCD="yes"
          X11="yes"
          SIMPLELCD="yes"
@@ -5624,6 +5625,9 @@ for driver in $drivers; do
       T6963)
          T6963=$val
          ;;
+      Trefon)
+         Trefon=$val
+         ;;
       USBLCD)
          USBLCD=$val
          ;;
@@ -5852,6 +5856,22 @@ _ACEOF
 
 fi
 
+if test "$Trefon" = "yes"; then
+   if test "$has_usb" = "true"; then
+      TEXT="yes"
+      DRIVERS="$DRIVERS drv_Trefon.o"
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_TREFON 1
+_ACEOF
+
+      DRVLIBS="$DRVLIBS -lusb"
+   else
+      { echo "$as_me:$LINENO: WARNING: usb.h not found: Trefon driver disabled" >&5
+echo "$as_me: WARNING: usb.h not found: Trefon driver disabled" >&2;}
+   fi
+fi
+
 if test "$USBLCD" = "yes"; then
    TEXT="yes"
    SERIAL="yes"
index 708cb4f300737ef05edfc51ff5a1dfbb7ab209c2..5b44db6eb4010cbe52a6d80f6d9b93359f9673d4 100644 (file)
@@ -31,7 +31,7 @@ AC_ARG_WITH(
   [                        BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux,]
   [                        HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,]
   [                        MilfordInstruments, NULL, PNG, PPM, RouterBoard,]
-  [                        SimpleLCD, T6963, USBLCD, X11],
+  [                        SimpleLCD, T6963, Trefon, USBLCD, X11],
   drivers=$withval, 
   drivers=all
 )
@@ -68,6 +68,7 @@ for driver in $drivers; do
          PPM="yes"
         ROUTERBOARD="yes"
          T6963="yes"
+         Trefon="yes"
          USBLCD="yes"
          X11="yes"
          SIMPLELCD="yes"
@@ -123,6 +124,9 @@ for driver in $drivers; do
       T6963)
          T6963=$val
          ;;
+      Trefon)
+         Trefon=$val
+         ;;
       USBLCD)
          USBLCD=$val
          ;;
@@ -277,6 +281,17 @@ if test "$T6963" = "yes"; then
    AC_DEFINE(WITH_T6963,1,[T6963 driver])
 fi
 
+if test "$Trefon" = "yes"; then
+   if test "$has_usb" = "true"; then
+      TEXT="yes"
+      DRIVERS="$DRIVERS drv_Trefon.o"
+      AC_DEFINE(WITH_TREFON,1,[TREFON driver])
+      DRVLIBS="$DRVLIBS -lusb"
+   else
+      AC_MSG_WARN(usb.h not found: Trefon driver disabled)
+   fi
+fi
+
 if test "$USBLCD" = "yes"; then
    TEXT="yes"
    SERIAL="yes"
diff --git a/drv.c b/drv.c
index dcb85a8db5e5616398b8890787eee24686eb1517..ba32b101d364146afdf9ededf637c9d41ae9d621 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -1,4 +1,4 @@
-/* $Id: drv.c,v 1.28 2005/02/24 07:06:48 reinelt Exp $
+/* $Id: drv.c,v 1.29 2005/04/24 04:33:46 reinelt Exp $
  *
  * new framework for display drivers
  *
@@ -23,6 +23,9 @@
  *
  *
  * $Log: drv.c,v $
+ * Revision 1.29  2005/04/24 04:33:46  reinelt
+ * driver for TREFON USB LCD's added
+ *
  * Revision 1.28  2005/02/24 07:06:48  reinelt
  * SimpleLCD driver added
  *
@@ -201,6 +204,7 @@ extern DRIVER drv_NULL;
 extern DRIVER drv_RouterBoard;
 extern DRIVER drv_SimpleLCD;
 extern DRIVER drv_T6963;
+extern DRIVER drv_Trefon;
 extern DRIVER drv_USBLCD;
 extern DRIVER drv_X11;
 
@@ -259,6 +263,9 @@ DRIVER *Driver[] = {
 #ifdef WITH_T6963
   &drv_T6963,
 #endif
+#ifdef WITH_TREFON
+  &drv_Trefon,
+#endif
 #ifdef WITH_USBLCD
   &drv_USBLCD,
 #endif
diff --git a/drv_Trefon.c b/drv_Trefon.c
new file mode 100644 (file)
index 0000000..f303509
--- /dev/null
@@ -0,0 +1,378 @@
+/* $Id: drv_Trefon.c,v 1.1 2005/04/24 04:33:46 reinelt Exp $
+ *
+ * driver for TREFON USB LCD displays
+ *
+ * Copyright (C) 2005 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 2005 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.
+ *
+ *
+ * $Log: drv_Trefon.c,v $
+ * Revision 1.1  2005/04/24 04:33:46  reinelt
+ * driver for TREFON USB LCD's added
+ *
+ */
+
+/* 
+ *
+ * exported fuctions:
+ *
+ * struct DRIVER drv_Trefon
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+
+#include <usb.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "qprintf.h"
+#include "plugin.h"
+#include "widget.h"
+#include "widget_text.h"
+#include "widget_icon.h"
+#include "widget_bar.h"
+#include "drv.h"
+#include "drv_generic_text.h"
+
+
+#define LCD_USB_VENDOR 0xfff0
+#define LCD_USB_DEVICE 0xfffe
+
+#define PKT_START 0x02
+#define PKT_DATA  0x02
+#define PKT_CTRL  0x06
+#define PKT_END   0xff
+
+static char Name[]="TREFON";
+
+static usb_dev_handle *lcd;
+static int interface;
+
+extern int usb_debug;
+extern int got_signal;
+
+
+/****************************************/
+/***  hardware dependant functions    ***/
+/****************************************/
+
+static int drv_TF_open (void)
+{
+  struct usb_bus *busses, *bus;
+  struct usb_device *dev;
+  
+  lcd = NULL;
+
+  info ("%s: scanning USB for TREFON LCD...", Name);
+
+  usb_debug = 0;
+  
+  usb_init();
+  usb_find_busses();
+  usb_find_devices();
+  busses = usb_get_busses();
+
+  for (bus = busses; bus; bus = bus->next) {
+    for (dev = bus->devices; dev; dev = dev->next) {
+      if ((dev->descriptor.idVendor == LCD_USB_VENDOR) &&
+         (dev->descriptor.idProduct == LCD_USB_DEVICE)) {
+       info ("%s: found TREFON USB LCD on bus %s device %s", Name, bus->dirname, dev->filename);
+       lcd = usb_open(dev);
+       if (usb_set_configuration(lcd, 1) < 0) {
+         error ("%s: usb_set_configuration() failed!", Name);
+         return -1;
+       }
+       interface = 0;
+       if (usb_claim_interface(lcd, interface) < 0) {
+         error ("%s: usb_claim_interface() failed!", Name);
+         return -1;
+       }
+       return 0;
+      }
+    }
+  }
+  return -1;
+}
+
+
+static int drv_TF_close (void) 
+{
+  usb_release_interface(lcd, interface);
+  usb_close(lcd);
+
+  return 0;
+}
+
+
+static void drv_TF_send (char *data, int size)
+{
+  char buffer[64];
+
+  /* the controller always wants a 64-byte packet */
+  memset (buffer, 0, 64);
+  memcpy (buffer, data, size);
+
+  // Endpoint hardcoded to 2
+  usb_bulk_write(lcd, 2, buffer, 64, 2000);
+}
+
+
+static void drv_TF_command (const unsigned char cmd)
+{
+  char buffer[4] = { PKT_START, PKT_CTRL, 0, PKT_END };
+  buffer[2] = cmd;
+  drv_TF_send(buffer, 4);
+}
+
+
+static void drv_TF_clear (void)
+{
+  drv_TF_command (0x01);
+}
+
+
+static void drv_TF_write (const int row, const int col, const char *data, const int len)
+{
+  char buffer[64];
+  char *p;
+  int pos;
+  
+  /* 16x4 Displays use a slightly different layout */
+  if (DCOLS==16 && DROWS==4) {
+    pos = (row%2)*64+(row/2)*16+col;
+  } else {  
+    pos = (row%2)*64+(row/2)*20+col;
+  }
+  
+  /* I'd like to combine the GOTO and the data into one packet, 
+   * unfortunately the Trefon doesn't like it :-(
+   */
+  
+  drv_TF_command (0x80|pos);
+  
+  p = buffer;
+  *p++ = PKT_START;
+  *p++ = PKT_DATA;
+  *p++ = (char) len;
+  for (pos = 0; pos < len; pos++) {
+    *p++ = *data++;
+  }
+  *p++ = PKT_END;
+
+  drv_TF_send(buffer, len+3);
+}
+
+static void drv_TF_defchar (const int ascii, const unsigned char *matrix)
+{
+
+  char buffer[14] = "\002\006x\002x01234567\377";
+  char *p;
+  int i;
+  
+  p = buffer;
+  *p++ = PKT_START;
+  *p++ = PKT_CTRL;
+  *p++ = 0x40|8*ascii;
+  *p++ = PKT_DATA;
+  *p++ = 8; /* data length */
+  for (i = 0; i < 8; i++) {
+    *p++ = *matrix++ & 0x1f;
+  }
+  *p++ = PKT_END;
+
+  drv_TF_send(buffer, 14);
+}
+
+
+static int drv_TF_start (const char *section, const int quiet)
+{
+  int rows=-1, cols=-1;
+  char *s;
+
+  s=cfg_get(section, "Size", NULL);
+  if (s==NULL || *s=='\0') {
+    error ("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
+    return -1;
+  }
+  if (sscanf(s,"%dx%d",&cols,&rows)!=2 || rows<1 || cols<1) {
+    error ("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
+    free (s);
+    return -1;
+  }
+  
+  DROWS = rows;
+  DCOLS = cols;
+  
+  if (drv_TF_open() < 0) {
+    error ("%s: could not find a TREFON USB LCD", Name);
+    return -1;
+  }
+
+  drv_TF_clear();        /* clear display */
+  
+  if (!quiet) {
+    char buffer[40];
+    qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+    if (drv_generic_text_greet (buffer, "www.trefon.de")) {
+      sleep (3);
+      drv_TF_clear();
+    }
+  }
+    
+  return 0;
+}
+
+
+/****************************************/
+/***            plugins               ***/
+/****************************************/
+
+/* none */
+
+
+/****************************************/
+/***        widget callbacks          ***/
+/****************************************/
+
+
+/* using drv_generic_text_draw(W) */
+/* using drv_generic_text_icon_draw(W) */
+/* using drv_generic_text_bar_draw(W) */
+
+
+/****************************************/
+/***        exported functions        ***/
+/****************************************/
+
+
+/* list models */
+int drv_TF_list (void)
+{
+  printf ("generic");
+  return 0;
+}
+
+
+/* initialize driver & display */
+int drv_TF_init (const char *section, const int quiet)
+{
+  WIDGET_CLASS wc;
+  int asc255bug;
+  int ret;  
+  
+  /* display preferences */
+  XRES  = 5;      /* pixel width of one char  */
+  YRES  = 8;      /* pixel height of one char  */
+  CHARS = 8;      /* number of user-defineable characters */
+  CHAR0 = 1;      /* ASCII of first user-defineable char */
+  GOTO_COST = 64; /* number of bytes a goto command requires */
+  
+  /* real worker functions */
+  drv_generic_text_real_write   = drv_TF_write;
+  drv_generic_text_real_defchar = drv_TF_defchar;
+
+
+  /* start display */
+  if ((ret=drv_TF_start (section, quiet))!=0)
+    return ret;
+  
+  /* initialize generic text driver */
+  if ((ret=drv_generic_text_init(section, Name))!=0)
+    return ret;
+
+  /* initialize generic icon driver */
+  if ((ret=drv_generic_text_icon_init())!=0)
+    return ret;
+  
+  /* initialize generic bar driver */
+  if ((ret=drv_generic_text_bar_init(0))!=0)
+    return ret;
+  
+  /* add fixed chars to the bar driver */
+  /* most displays have a full block on ascii 255, but some have kind of  */
+  /* an 'inverted P'. If you specify 'asc255bug 1 in the config, this */
+  /* char will not be used, but rendered by the bar driver */
+  cfg_number(section, "asc255bug", 0, 0, 1, &asc255bug);
+  drv_generic_text_bar_add_segment (  0,  0,255, 32); /* ASCII  32 = blank */
+  if (!asc255bug) 
+    drv_generic_text_bar_add_segment (255,255,255,255); /* ASCII 255 = block */
+  
+  /* register text widget */
+  wc=Widget_Text;
+  wc.draw=drv_generic_text_draw;
+  widget_register(&wc);
+  
+  /* register icon widget */
+  wc=Widget_Icon;
+  wc.draw=drv_generic_text_icon_draw;
+  widget_register(&wc);
+  
+  /* register bar widget */
+  wc=Widget_Bar;
+  wc.draw=drv_generic_text_bar_draw;
+  widget_register(&wc);
+  
+  /* register plugins */
+  /* none */
+
+  return 0;
+}
+
+
+/* close driver & display */
+int drv_TF_quit (const int quiet)
+{
+
+  info("%s: shutting down.", Name);
+  
+  drv_generic_text_quit();
+  
+  /* clear display */
+  drv_TF_clear();
+  
+  /* say goodbye... */
+  if (!quiet) {
+    drv_generic_text_greet ("goodbye!", NULL);
+  }
+  
+  debug ("closing USB connection");
+  drv_TF_close();
+  
+  return (0);
+}
+
+
+DRIVER drv_Trefon = {
+  name: Name,
+  list: drv_TF_list,
+  init: drv_TF_init,
+  quit: drv_TF_quit, 
+};
+
index a1e8ebaaf153ee8a9ce4c3e4e4b71e9865fb3355..aa5b92728bdf645e595d5cb4d22ef2702b15581e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_USBLCD.c,v 1.21 2005/04/02 05:28:58 reinelt Exp $
+/* $Id: drv_USBLCD.c,v 1.22 2005/04/24 04:33:46 reinelt Exp $
  *
  * new style driver for USBLCD displays
  *
@@ -26,6 +26,9 @@
  *
  *
  * $Log: drv_USBLCD.c,v $
+ * Revision 1.22  2005/04/24 04:33:46  reinelt
+ * driver for TREFON USB LCD's added
+ *
  * Revision 1.21  2005/04/02 05:28:58  reinelt
  * fixed gcc4 warnings about signed/unsigned mismatches
  *
@@ -246,7 +249,7 @@ static int drv_UL_close (void)
 #endif
 
 
-static void drv_UL_send ()
+static void drv_UL_send (void)
 {
 
 #if 0
index e248b93bd4b82b9d7a1b8b3d7f24dda41a4514e7..d1c10a0331aa73c22f587d109cea0fb9334c8a71 100644 (file)
@@ -1,3 +1,9 @@
+Display Trefon {
+    Driver 'TREFON'
+    Size '16x2'
+}
+
+
 Display LCD-Linux {
     Driver 'LCD-Linux'
 }
@@ -744,13 +750,14 @@ Layout testMySQL {
 #Display 'LCDTerm'
 #Display 'CT20x4'
 #Display 'T6963-240x64'
-Display 'XWindow'
+#Display 'XWindow'
 #Display 'USBLCD'
 #Display 'BWCT'
 #Display 'Image'
+Display 'Trefon'
 
-Layout  'Default'
-#Layout 'L16x2'
+#Layout  'Default'
+Layout 'L16x2'
 #Layout 'L20x2'
 #Layout 'Test'