]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2006-04-09 14:17:49 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 9 Apr 2006 14:17:50 +0000 (14:17 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 9 Apr 2006 14:17:50 +0000 (14:17 +0000)
autoconf/library fixes, image and graphic display inversion

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

configure
drivers.m4
drv_LCD2USB.c
drv_LUIse.c
drv_generic_graphic.c
lcd4linux.conf.sample
widget_image.c
widget_image.h

index fd44593deee8cc308e24dc3a89a3687e2c1741b4..d4cf0e1a2d1977505ba3676f592d9ff80ae88503 100755 (executable)
--- a/configure
+++ b/configure
@@ -6315,7 +6315,6 @@ echo "${ECHO_T}done" >&6
 TEXT="no"
 GRAPHIC="no"
 GPIO="no"
-IMAGE="no"
 
 # generiv I/O drivers
 PARPORT="no"
@@ -6323,6 +6322,8 @@ SERIAL="no"
 I2C="no"
 KEYPAD="no"
 
+# generic libraries
+LIBUSB="no"
 
 if test "$BECKMANNEGLE" = "yes"; then
    TEXT="yes"
@@ -6340,7 +6341,7 @@ if test "$BWCT" = "yes"; then
    if test "$has_usb" = "true"; then
       TEXT="yes"
       DRIVERS="$DRIVERS drv_BWCT.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_BWCT 1
@@ -6397,8 +6398,8 @@ fi
 if test "$G15" = "yes"; then
    if test "$has_usb" = "true"; then
       GRAPHIC="yes"
+      LIBUSB="yes"
       DRIVERS="$DRIVERS drv_G15.o"
-      DRVLIBS="$DRVLIBS -lusb"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_G15 1
@@ -6428,7 +6429,7 @@ if test "$LCD2USB" = "yes"; then
       TEXT="yes"
       SERIAL="yes"
       DRIVERS="$DRIVERS drv_LCD2USB.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_LCD2USB 1
@@ -6553,8 +6554,6 @@ fi
 if test "$PNG" = "yes"; then
    if test "$has_gd" = "true"; then
       GRAPHIC="yes"
-      IMAGE="yes"
-      DRVLIBS="$DRVLIBS -lgd"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_PNG 1
@@ -6568,7 +6567,6 @@ fi
 
 if test "$PPM" = "yes"; then
    GRAPHIC="yes"
-   IMAGE="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_PPM 1
@@ -6576,10 +6574,6 @@ _ACEOF
 
 fi
 
-if test "$IMAGE" = "yes"; then
-   DRIVERS="$DRIVERS drv_Image.o"
-fi
-
 if test "$ROUTERBOARD" = "yes"; then
    TEXT="yes"
    GPIO="yes"
@@ -6619,6 +6613,9 @@ cat >>confdefs.h <<\_ACEOF
 #define WITH_SERDISPLIB 1
 _ACEOF
 
+      if test "$has_usb" = "true"; then
+         LIBUSB="yes"
+      fi
    else
       { echo "$as_me:$LINENO: WARNING: serdisp.h not found: serdisplib driver disabled" >&5
 echo "$as_me: WARNING: serdisp.h not found: serdisplib driver disabled" >&2;}
@@ -6651,7 +6648,7 @@ if test "$Trefon" = "yes"; then
    if test "$has_usb" = "true"; then
       TEXT="yes"
       DRIVERS="$DRIVERS drv_Trefon.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_TREFON 1
@@ -6668,7 +6665,7 @@ if test "$USBLCD" = "yes"; then
    SERIAL="yes"
    DRIVERS="$DRIVERS drv_USBLCD.o"
    if test "$has_usb" = "true"; then
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
    fi
 
 cat >>confdefs.h <<\_ACEOF
@@ -6721,6 +6718,10 @@ fi
 # generic graphic driver
 if test "$GRAPHIC" = "yes"; then
    DRIVERS="$DRIVERS drv_generic_graphic.o"
+   if test "$has_gd" = "true"; then
+      DRIVERS="$DRIVERS drv_Image.o"
+      DRVLIBS="$DRVLIBS -lgd"
+   fi
 fi
 
 # generic GPIO driver
@@ -6753,6 +6754,11 @@ if test "$KEYPAD" = "yes"; then
    DRIVERS="$DRIVERS drv_generic_keypad.o"
 fi
 
+# libusb
+if test "$LIBUSB" = "yes"; then
+   DRVLIBS="$DRVLIBS -lusb"
+fi
+
 
 
 
index 5888051d6e0a686304bc233412f3a90a8b9c9ce7..068716046c5c3ffec5dffe337b3d95f8d6d3ba8e 100644 (file)
@@ -180,7 +180,6 @@ AC_MSG_RESULT([done])
 TEXT="no"
 GRAPHIC="no"
 GPIO="no"
-IMAGE="no"
 
 # generiv I/O drivers
 PARPORT="no"
@@ -188,6 +187,8 @@ SERIAL="no"
 I2C="no"
 KEYPAD="no"
 
+# generic libraries
+LIBUSB="no"
 
 if test "$BECKMANNEGLE" = "yes"; then
    TEXT="yes"
@@ -201,7 +202,7 @@ if test "$BWCT" = "yes"; then
    if test "$has_usb" = "true"; then
       TEXT="yes"
       DRIVERS="$DRIVERS drv_BWCT.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
       AC_DEFINE(WITH_BWCT,1,[BWCT driver])
    else
       AC_MSG_WARN(usb.h not found: BWCT driver disabled)
@@ -240,8 +241,8 @@ fi
 if test "$G15" = "yes"; then
    if test "$has_usb" = "true"; then
       GRAPHIC="yes"
+      LIBUSB="yes"
       DRIVERS="$DRIVERS drv_G15.o"
-      DRVLIBS="$DRVLIBS -lusb"
       AC_DEFINE(WITH_G15,1,[G-15 driver])
    else
       AC_MSG_WARN(usb.h not found: G15 driver disabled)
@@ -262,7 +263,7 @@ if test "$LCD2USB" = "yes"; then
       TEXT="yes"
       SERIAL="yes"
       DRIVERS="$DRIVERS drv_LCD2USB.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
       AC_DEFINE(WITH_LCD2USB,1,[LCD2USB driver])
    else
       AC_MSG_WARN(usb.h not found: LCD2USB driver disabled)
@@ -344,8 +345,6 @@ fi
 if test "$PNG" = "yes"; then
    if test "$has_gd" = "true"; then
       GRAPHIC="yes"
-      IMAGE="yes"
-      DRVLIBS="$DRVLIBS -lgd"
       AC_DEFINE(WITH_PNG,1,[ driver])
    else
       AC_MSG_WARN(gd.h not found: PNG driver disabled)
@@ -354,14 +353,9 @@ fi
 
 if test "$PPM" = "yes"; then
    GRAPHIC="yes"
-   IMAGE="yes"
    AC_DEFINE(WITH_PPM,1,[ driver])
 fi
 
-if test "$IMAGE" = "yes"; then
-   DRIVERS="$DRIVERS drv_Image.o"
-fi
-
 if test "$ROUTERBOARD" = "yes"; then
    TEXT="yes"
    GPIO="yes"
@@ -389,6 +383,9 @@ if test "$SERDISPLIB" = "yes"; then
       DRIVERS="$DRIVERS drv_serdisplib.o"
       DRVLIBS="$DRVLIBS -L/usr/local/lib -lserdisp"
       AC_DEFINE(WITH_SERDISPLIB,1,[serdisplib driver])
+      if test "$has_usb" = "true"; then
+         LIBUSB="yes"
+      fi
    else
       AC_MSG_WARN(serdisp.h not found: serdisplib driver disabled)
    fi
@@ -412,7 +409,7 @@ if test "$Trefon" = "yes"; then
    if test "$has_usb" = "true"; then
       TEXT="yes"
       DRIVERS="$DRIVERS drv_Trefon.o"
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
       AC_DEFINE(WITH_TREFON,1,[TREFON driver])
    else
       AC_MSG_WARN(usb.h not found: Trefon driver disabled)
@@ -424,7 +421,7 @@ if test "$USBLCD" = "yes"; then
    SERIAL="yes"
    DRIVERS="$DRIVERS drv_USBLCD.o"
    if test "$has_usb" = "true"; then
-      DRVLIBS="$DRVLIBS -lusb"
+      LIBUSB="yes"
    fi
    AC_DEFINE(WITH_USBLCD,1,[USBLCD driver])
 fi
@@ -462,6 +459,10 @@ fi
 # generic graphic driver
 if test "$GRAPHIC" = "yes"; then
    DRIVERS="$DRIVERS drv_generic_graphic.o"
+   if test "$has_gd" = "true"; then
+      DRIVERS="$DRIVERS drv_Image.o"
+      DRVLIBS="$DRVLIBS -lgd"
+   fi  
 fi
 
 # generic GPIO driver
@@ -490,5 +491,10 @@ if test "$KEYPAD" = "yes"; then
    DRIVERS="$DRIVERS drv_generic_keypad.o"
 fi
 
+# libusb
+if test "$LIBUSB" = "yes"; then
+   DRVLIBS="$DRVLIBS -lusb"
+fi
+
 AC_SUBST(DRIVERS)
 AC_SUBST(DRVLIBS)
index 98ec9a60a640ae831a0fa6b24909c29e2b0513fa..fd48c2e723acacad28fc8316249d7d15342d352b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_LCD2USB.c,v 1.9 2006/03/18 14:54:36 harbaum Exp $
+/* $Id: drv_LCD2USB.c,v 1.10 2006/04/09 14:17:50 reinelt Exp $
  *
  * driver for USB2LCD display interface
  * see http://www.harbaum.org/till/lcd2usb for schematics
@@ -24,6 +24,9 @@
  *
  * 
  * $Log: drv_LCD2USB.c,v $
+ * Revision 1.10  2006/04/09 14:17:50  reinelt
+ * autoconf/library fixes, image and graphic display inversion
+ *
  * Revision 1.9  2006/03/18 14:54:36  harbaum
  * Improved USB error recovery
  *
@@ -199,19 +202,18 @@ static int drv_L2U_send(int request, int value, int index)
 
        // try to close and reopen connection
        if (drv_L2U_open(bus_id, device_id) < 0) {
-         error("%s: could not re-detect LCD2USB USB LCD", Name);
-         got_signal = -1;
-         return -1;
+           error("%s: could not re-detect LCD2USB USB LCD", Name);
+           got_signal = -1;
+           return -1;
        }
-
        // and try to re-send command
        if (usb_control_msg(lcd, USB_TYPE_VENDOR, request, value, index, NULL, 0, 1000) < 0) {
-         error("%s: retried USB request failed, aborting!", Name);
-         got_signal = -1;
-         return -1;
+           error("%s: retried USB request failed, aborting!", Name);
+           got_signal = -1;
+           return -1;
        }
 
-        info("%s: Device successfully reconnected.", Name);
+       info("%s: Device successfully reconnected.", Name);
     }
 
     return 0;
@@ -611,7 +613,7 @@ int drv_L2U_init(const char *section, const int quiet)
     int asc255bug;
     int ret;
 
-    info("%s: %s", Name, "$Revision: 1.9 $");
+    info("%s: %s", Name, "$Revision: 1.10 $");
 
     /* display preferences */
     XRES = 5;                  /* pixel width of one char  */
index af88006f74d6c7ce0ef6735beb9947eeadf25f2a..e25e93389b953677193fdff7ec954e9b96c74c6f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_LUIse.c,v 1.5 2006/03/10 18:06:52 tooly-bln Exp $
+/* $Id: drv_LUIse.c,v 1.6 2006/04/09 14:17:50 reinelt Exp $
  *
  * LUIse lcd4linux driver
  *
@@ -23,6 +23,9 @@
  *
  *
  * $Log: drv_LUIse.c,v $
+ * Revision 1.6  2006/04/09 14:17:50  reinelt
+ * autoconf/library fixes, image and graphic display inversion
+ *
  * Revision 1.5  2006/03/10 18:06:52  tooly-bln
  * replace drv_generic_graphic_FB with drv_generic_graphic_black
  *
@@ -98,11 +101,11 @@ static void drv_LUIse_blit(const int row, const int col, const int height, const
 
     for (r = row; r < row + height; r++) {
        for (c = col; c < col + width; c++) {
-          if (drv_generic_graphic_black(r,c)) {
+           if (drv_generic_graphic_black(r, c)) {
                LUI_SetPixel(devNum, 0, c, r, 1);
            } else {
                LUI_SetPixel(devNum, 0, c, r, 0);
-           } 
+           }
        }
     }
 }
@@ -286,7 +289,7 @@ int drv_LUIse_init(const char *section, const int quiet)
 {
     int ret;
 
-    info("%s: %s", Name, "$Revision: 1.5 $");
+    info("%s: %s", Name, "$Revision: 1.6 $");
 
     /* real worker functions */
     drv_generic_graphic_real_blit = drv_LUIse_blit;
index e56401fd61a53ef11d85164de3b8d1c5ac61f7ef..be41cee00ff9bdcf49fd36b1d5cd30e690f9563e 100644 (file)
@@ -23,6 +23,9 @@
  *
  *
  * $Log: drv_generic_graphic.c,v $
+ * Revision 1.26  2006/04/09 14:17:50  reinelt
+ * autoconf/library fixes, image and graphic display inversion
+ *
  * Revision 1.25  2006/02/27 07:53:52  reinelt
  * some more graphic issues fixed
  *
@@ -184,11 +187,16 @@ RGBA NO_COL = { R: 0x00, G: 0x00, B: 0x00, A:0x00 };
 static char *Section = NULL;
 static char *Driver = NULL;
 
-static int LROWS = 0;          /* layout size  (pixels!) */
-static int LCOLS = 0;          /* layout size  (pixels!) */
+/* layout size  (pixels!) */
+static int LROWS = 0;
+static int LCOLS = 0;
 
+/* framebuffer */
 static RGBA *drv_generic_graphic_FB[LAYERS] = { NULL, };
 
+/* inverted colors */
+static int INVERTED = 0;
+
 /* must be implemented by the real driver */
 void (*drv_generic_graphic_real_blit) () = NULL;
 
@@ -261,6 +269,12 @@ static RGBA drv_generic_graphic_blend(const int row, const int col)
            ret.B = (p.B * p.A + ret.B * (255 - p.A)) / 255;
        }
     }
+    if (INVERTED) {
+       ret.R = 255 - ret.R;
+       ret.G = 255 - ret.G;
+       ret.B = 255 - ret.B;
+    }
+
     return ret;
 }
 
@@ -649,6 +663,9 @@ int drv_generic_graphic_init(const char *section, const char *driver)
     if (color)
        free(color);
 
+    /* inverted display? */
+    cfg_number(section, "inverted", 0, 0, 1, &INVERTED);
+
     /* register text widget */
     wc = Widget_Text;
     wc.draw = drv_generic_graphic_draw;
@@ -705,11 +722,7 @@ unsigned char drv_generic_graphic_gray(const int row, const int col)
 
 unsigned char drv_generic_graphic_black(const int row, const int col)
 {
-    RGBA p = drv_generic_graphic_blend(row, col);
-    if (p.R > 127 || p.G > 127 || p.B > 127) {
-       return 0;
-    }
-    return 1;
+    return drv_generic_graphic_gray(row, col) < 127;
 }
 
 
index 14cd95d310acca39ad78e047b1e7547a671a4b99..78538f89278fd58c4357df4b3c86108d307d7654 100644 (file)
@@ -337,6 +337,7 @@ Display LPH7508 {
     Port   '/dev/parports/0'
     Font   '6x8'
     Contrast 15
+    Inverted 0
 }
 
 Display LPH7508-serdisplib {
@@ -347,9 +348,10 @@ Display LPH7508-serdisplib {
 
 Display ctinclud {
    Driver  'serdisplib'
-   Port    'USB:0x07c0/0x1501'
+   Port    'USB:7c0/1501'
    Model   'CTINCLUD'
    Options ''
+   Inverted 0
 }
 
 Display XWindow {
@@ -834,9 +836,10 @@ Widget GPO_Test255 {
 
 Widget ImageTest {
     class 'Image'
-    file 'Michi.png'
+    file 'tux.png'
     update 1000
     visible 1
+    inverted 0
 }
 
 Layout Default {
@@ -897,13 +900,6 @@ Layout TestLayer {
 }
 
 Layout TestImage {
-    Row4 {
-       Col1  'OS'
-    }
-    Row2 {
-       Col1  'CPU'
-       Col10 'RAM'
-    }
     Layer 2 {
        X1.Y1 'ImageTest'
     }
@@ -1038,7 +1034,7 @@ Layout testMySQL {
 #Display 'M50530-24x8'
 #Display 'LCDTerm'
 #Display 'SimpleLCD'
-Display 'BA63'
+#Display 'BA63'
 #Display 'CT20x4'
 #Display 'T6963-240x64'
 #Display 'XWindow'
@@ -1048,12 +1044,12 @@ Display 'BA63'
 #Display 'Trefon'
 #Display 'LCD2USB'
 #Display 'LPH7508-serdisplib'
-#Display 'LPH7508'
+Display 'LPH7508'
 #Display 'ctinclud'
 
-Layout 'Default'
+#Layout 'Default'
 #Layout 'TestLayer'
-#Layout 'TestImage'
+Layout 'TestImage'
 #Layout 'L8x2'
 #Layout 'L16x1'
 #Layout 'L16x2'
index e0dc3fde462c30bc1f6851d3ef9661be457801b5..9ce0ebd95ece8d48620bcaa74290e7bbd25d91dc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: widget_image.c,v 1.5 2006/02/25 13:36:33 geronet Exp $
+/* $Id: widget_image.c,v 1.6 2006/04/09 14:17:50 reinelt Exp $
  *
  * image widget handling
  *
@@ -21,6 +21,9 @@
  *
  *
  * $Log: widget_image.c,v $
+ * Revision 1.6  2006/04/09 14:17:50  reinelt
+ * autoconf/library fixes, image and graphic display inversion
+ *
  * Revision 1.5  2006/02/25 13:36:33  geronet
  * updated indent.sh, applied coding style
  *
@@ -141,17 +144,24 @@ static void widget_image_render(const char *Name, WIDGET_IMAGE * Image)
     }
 
     /* finally really render it */
-    for (x = 0; x < gdImage->sx; x++) {
-       for (y = 0; y < gdImage->sy; y++) {
-           int p = gdImageGetTrueColorPixel(gdImage, x, y);
-           int a = gdTrueColorGetAlpha(p);
-           int i = y * Image->width + x;
-           Image->bitmap[i].R = gdTrueColorGetRed(p);
-           Image->bitmap[i].G = gdTrueColorGetGreen(p);
-           Image->bitmap[i].B = gdTrueColorGetBlue(p);
-           /* GD's alpha is 0 (opaque) to 127 (tranparanet) */
-           /* our alpha is 0 (transparent) to 255 (opaque) */
-           Image->bitmap[i].A = (a == 127) ? 0 : 255 - 2 * a;
+    if (Image->visible) {
+       for (x = 0; x < gdImage->sx; x++) {
+           for (y = 0; y < gdImage->sy; y++) {
+               int p = gdImageGetTrueColorPixel(gdImage, x, y);
+               int a = gdTrueColorGetAlpha(p);
+               int i = y * Image->width + x;
+               Image->bitmap[i].R = gdTrueColorGetRed(p);
+               Image->bitmap[i].G = gdTrueColorGetGreen(p);
+               Image->bitmap[i].B = gdTrueColorGetBlue(p);
+               /* GD's alpha is 0 (opaque) to 127 (tranparanet) */
+               /* our alpha is 0 (transparent) to 255 (opaque) */
+               Image->bitmap[i].A = (a == 127) ? 0 : 255 - 2 * a;
+               if (Image->inverted) {
+                   Image->bitmap[i].R = 255 - Image->bitmap[i].R; 
+                   Image->bitmap[i].G = 255 - Image->bitmap[i].G; 
+                   Image->bitmap[i].B = 255 - Image->bitmap[i].B; 
+               }
+           }
        }
     }
 }
@@ -191,10 +201,18 @@ static void widget_image_update(void *Self)
        if (Image->visible_tree != NULL) {
            Eval(Image->visible_tree, &result);
            Image->visible = R2N(&result);
-           if (Image->visible < 0)
-               Image->visible = 0;
+           Image->visible = Image->visible > 0;
+           DelResult(&result);
+       }
+
+       Image->inverted = 0;
+       if (Image->inverted_tree != NULL) {
+           Eval(Image->inverted_tree, &result);
+           Image->inverted = R2N(&result);
+           Image->inverted = Image->inverted > 0;
            DelResult(&result);
        }
+
 #ifdef WITH_GD
        /* render image into bitmap */
        widget_image_render(W->name, Image);
@@ -240,6 +258,7 @@ int widget_image_init(WIDGET * Self)
        Image->file_expr = cfg_get_raw(section, "file", NULL);
        Image->update_expr = cfg_get_raw(section, "update", NULL);
        Image->visible_expr = cfg_get_raw(section, "visible", NULL);
+       Image->inverted_expr = cfg_get_raw(section, "inverted", NULL);
 
        /* sanity checks */
        if (Image->file_expr == NULL || *Image->file_expr == '\0') {
@@ -254,6 +273,7 @@ int widget_image_init(WIDGET * Self)
        Compile(Image->file_expr, &Image->file_tree);
        Compile(Image->update_expr, &Image->update_tree);
        Compile(Image->visible_expr, &Image->visible_tree);
+       Compile(Image->inverted_expr, &Image->inverted_tree);
 
        free(section);
        Self->data = Image;
@@ -286,6 +306,7 @@ int widget_image_quit(WIDGET * Self)
                DelTree(Image->file_tree);
                DelTree(Image->update_tree);
                DelTree(Image->visible_tree);
+               DelTree(Image->inverted_tree);
                free(Self->data);
                Self->data = NULL;
            }
index 06927dceda70ba0cefe0776572f2ded2b7ccc963..96c25ebcc2ccaf48569aabdd853e3311806757fe 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: widget_image.h,v 1.3 2006/02/25 13:36:33 geronet Exp $
+/* $Id: widget_image.h,v 1.4 2006/04/09 14:17:50 reinelt Exp $
  *
  * image widget handling
  *
@@ -23,6 +23,9 @@
  *
  *
  * $Log: widget_image.h,v $
+ * Revision 1.4  2006/04/09 14:17:50  reinelt
+ * autoconf/library fixes, image and graphic display inversion
+ *
  * Revision 1.3  2006/02/25 13:36:33  geronet
  * updated indent.sh, applied coding style
  *
@@ -51,7 +54,10 @@ typedef struct WIDGET_IMAGE {
     int update;                        /* update interval (msec) */
     char *visible_expr;                /* expression for visibility */
     void *visible_tree;                /* pre-compiled expression for visibility */
-    int visible;               /* icon visible? */
+    int visible;               /* image visible? */
+    char *inverted_expr;       /* expression for inversion */
+    void *inverted_tree;       /* pre-compiled expression for inversion */
+    int inverted;              /* image inverted? */
 } WIDGET_IMAGE;
 
 extern WIDGET_CLASS Widget_Image;