]> git.webhop.me Git - lcd4linux.git/commitdiff
patch for picoLCDGraphics that adds keypad/gpi/gpo capabilities from Nicu Pavel
authormichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sat, 28 Feb 2009 06:09:05 +0000 (06:09 +0000)
committermichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sat, 28 Feb 2009 06:09:05 +0000 (06:09 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@985 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

drv_picoLCDGraphic.c

index ec54c4a1b728ffa885893a0c3b03eaee966a8ea0..05773377cb3c16c06082f2ca75795b0c4207424f 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (C) 2005 Michael Reinelt <michael@reinelt.co.at>
  * Copyright (C) 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
  *
- * Copyright (C) 2008 Nicu Pavel, Mini-Box.com <npavel@mini-box.com>
+ * Copyright (C) 2009 Nicu Pavel, Mini-Box.com <npavel@mini-box.com>
  *
  * This file is part of LCD4Linux.
  *
@@ -98,7 +98,8 @@ static char *Buffer;
 static char *BufPtr;
 
 static usb_dev_handle *lcd;
-
+//extern int usb_debug;
+int usb_debug;
 
 
 /****************************************/
@@ -119,7 +120,7 @@ static int drv_pLG_open(void)
 
     info("%s: scanning for picoLCD 256x64...", Name);
 
-    usb_set_debug(0);
+    usb_debug = 0;
 
     usb_init();
     usb_find_busses();
@@ -169,6 +170,11 @@ static int drv_pLG_open(void)
     return -1;
 }
 
+static int drv_pLG_read(unsigned char *data, int size)
+{
+    return usb_interrupt_read(lcd, USB_ENDPOINT_IN + 1, (char *) data, size, 1000);
+}
+
 
 static void drv_pLG_send(unsigned char *data, int size)
 {
@@ -388,6 +394,22 @@ static int drv_pLG_backlight(int backlight)
     return backlight;
 }
 
+#define _USBLCD_MAX_DATA_LEN          24
+#define IN_REPORT_KEY_STATE           0x11
+static int drv_pLG_gpi( __attribute__ ((unused))
+                      int num)
+{
+    int ret;
+    unsigned char read_packet[_USBLCD_MAX_DATA_LEN];
+    ret = drv_pLG_read(read_packet, _USBLCD_MAX_DATA_LEN);
+    if ((ret > 0) && (read_packet[0] == IN_REPORT_KEY_STATE)) {
+       debug("picoLCD: pressed key= 0x%02x\n", read_packet[1]);
+       return read_packet[1];
+    }
+    return 0;
+}
+
+
 static int drv_pLG_gpo(int num, int val)
 {
     unsigned char cmd[2] = { 0x81 };   /* set GPO */
@@ -409,7 +431,7 @@ static int drv_pLG_gpo(int num, int val)
        gpo &= ~(1 << num);
 
     cmd[1] = gpo;
-    //drv_pLG_send(cmd, 2);
+    drv_pLG_send(cmd, 2);
 
     return val;
 }
@@ -549,9 +571,12 @@ int drv_pLG_init(const char *section, const int quiet)
     XRES = 6;                  /* pixel width of one char  */
     YRES = 8;                  /* pixel height of one char  */
     GPOS = 8;
-
+    GPIS = 1;
     /* real worker functions */
     drv_generic_graphic_real_blit = drv_pLG_blit;
+    drv_generic_gpio_real_set = drv_pLG_gpo;
+    drv_generic_gpio_real_get = drv_pLG_gpi;
+
 
     /* start display */
     if ((ret = drv_pLG_start(section, quiet)) != 0)