]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2004-05-31 21:05:13 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Mon, 31 May 2004 21:05:13 +0000 (21:05 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Mon, 31 May 2004 21:05:13 +0000 (21:05 +0000)
fixed lots of bugs in the Cwlinux driver
do not emit EAGAIN error on the first retry
made plugin_i2c_sensors a bit less 'chatty'
moved init and exit functions to the bottom of plugin_pop3

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

drv_Cwlinux.c
drv_generic_serial.c
lcd4linux.conf.sample
plugin_i2c_sensors.c
plugin_pop3.c

index dac2f614ff0287bd5f46a18f543ce0f78462f807..67fc0530a93c3084e1822e15531740e2a8a06091 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_Cwlinux.c,v 1.9 2004/05/31 16:39:06 reinelt Exp $
+/* $Id: drv_Cwlinux.c,v 1.10 2004/05/31 21:05:13 reinelt Exp $
  *
  * new style driver for Cwlinux display modules
  *
  *
  *
  * $Log: drv_Cwlinux.c,v $
+ * Revision 1.10  2004/05/31 21:05:13  reinelt
+ *
+ * fixed lots of bugs in the Cwlinux driver
+ * do not emit EAGAIN error on the first retry
+ * made plugin_i2c_sensors a bit less 'chatty'
+ * moved init and exit functions to the bottom of plugin_pop3
+ *
  * Revision 1.9  2004/05/31 16:39:06  reinelt
  *
  * added NULL display driver (for debugging/profiling purposes)
@@ -141,7 +148,7 @@ static void drv_CW1602_defchar (int ascii, unsigned char *buffer)
   int i;
   char cmd[12]="\376Nn12345678\375";
 
-  cmd[2]=(char)(ascii+1);
+  cmd[2]=(char)ascii;
 
   for (i=0; i<8; i++) {
     cmd[3+i] = buffer[i] & 0x1f;
@@ -156,7 +163,7 @@ static void drv_CW12232_defchar (int ascii, unsigned char *buffer)
   int i, j;
   char cmd[10]="\376Nn123456\375";
   
-  cmd[2]=(char)(ascii+1);
+  cmd[2]=(char)ascii;
   
   // The CW12232 uses a vertical bitmap layout,
   // so we have to 'rotate' the bitmap.
@@ -227,7 +234,7 @@ static int drv_CW_start (char *section)
   }
   
   // open serial port
-  if (drv_generic_serial_open(section, Name, 0)<0) return -1;
+  if (drv_generic_serial_open(section, Name, 0) < 0) return -1;
 
   // this does not work as I'd expect it...
 #if 0
@@ -337,10 +344,14 @@ int drv_CW_init (char *section)
   // display preferences
   XRES  = 6;      // pixel width of one char 
   YRES  = 8;      // pixel height of one char 
-  CHARS = 8;      // number of user-defineable characters
-  CHAR0 = 128;    // ASCII of first user-defineable char
+  CHARS = 16;     // number of user-defineable characters
+  CHAR0 = 1;      // ASCII of first user-defineable char
   GOTO_COST = 3;  // number of bytes a goto command requires
 
+  // start display
+  if ((ret=drv_CW_start (section))!=0)
+    return ret;
+  
   // real worker functions
   drv_generic_text_real_write = drv_CW_write;
 
@@ -353,10 +364,6 @@ int drv_CW_init (char *section)
       break;
   }
   
-  // start display
-  if ((ret=drv_CW_start (section))!=0)
-    return ret;
-  
   // initialize generic text driver
   if ((ret=drv_generic_text_init(section, Name))!=0)
     return ret;
index c60c18fc6d1ced426c74c8a07f88133fc7254341..1c52c77976882eca698e99244ea4f9e0f7d76f4b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_generic_serial.c,v 1.9 2004/05/28 13:51:42 reinelt Exp $
+/* $Id: drv_generic_serial.c,v 1.10 2004/05/31 21:05:13 reinelt Exp $
  *
  * generic driver helper for serial and usbserial displays
  *
  *
  *
  * $Log: drv_generic_serial.c,v $
+ * Revision 1.10  2004/05/31 21:05:13  reinelt
+ *
+ * fixed lots of bugs in the Cwlinux driver
+ * do not emit EAGAIN error on the first retry
+ * made plugin_i2c_sensors a bit less 'chatty'
+ * moved init and exit functions to the bottom of plugin_pop3
+ *
  * Revision 1.9  2004/05/28 13:51:42  reinelt
  *
  * ported driver for Beckmann+Egle Mini-Terminals
@@ -301,6 +308,7 @@ int drv_generic_serial_open (char *section, char *driver, unsigned int flags)
 
   cfmakeraw(&portset);
   portset.c_cflag |= flags;
+  cfsetispeed(&portset, Speed);
   cfsetospeed(&portset, Speed);
   if (tcsetattr(fd, TCSANOW, &portset)==-1) {
     error ("%s: tcsetattr(%s) failed: %s", Driver, Port, strerror(errno));
@@ -316,9 +324,9 @@ int drv_generic_serial_open (char *section, char *driver, unsigned int flags)
 int drv_generic_serial_poll (unsigned char *string, int len)
 {
   int ret;
-  if (Device==-1) return -1;
+  if (Device == -1) return -1;
   ret=read (Device, string, len);
-  if (ret<0 && errno!=EAGAIN) {
+  if (ret < 0 && errno != EAGAIN) {
     error("%s: read(%s) failed: %s", Driver, Port, strerror(errno));
   }
   return ret;
@@ -329,14 +337,14 @@ int drv_generic_serial_read (unsigned char *string, int len)
 {
   int run, ret;
   
-  for (run=0; run<10; run++) {
-    ret=drv_generic_serial_poll(string, len);
-    if (ret>=0 || errno!=EAGAIN) break;
+  for (run = 0; run < 10; run ++) {
+    ret = drv_generic_serial_poll(string, len);
+    if (ret >= 0 || errno != EAGAIN) break;
     info ("%s: read(%s): EAGAIN", Driver, Port);
     usleep(1000);
   }
   
-  if (ret>0 && ret!=len) {
+  if (ret > 0 && ret != len) {
     error ("%s: partial read(%s): len=%d ret=%d", Driver, Port, len, ret);
   }
   
@@ -348,17 +356,17 @@ void drv_generic_serial_write (unsigned char *string, int len)
 {
   int run, ret;
   
-  if (Device==-1) return;
-  for (run=0; run<10; run++) {
-    ret=write (Device, string, len);
-    if (ret>=0 || errno!=EAGAIN) break;
-    info ("%s: write(%s): EAGAIN", Driver, Port);
+  if (Device == -1) return;
+  for (run = 0; run < 10; run++) {
+    ret = write (Device, string, len);
+    if (ret >= 0 || errno != EAGAIN) break;
+    if (run > 0) info ("%s: write(%s): EAGAIN #%d", Driver, Port, run);
     usleep(1000);
   }
   
-  if (ret<0) {
+  if (ret < 0) {
     error ("%s: write(%s) failed: %s", Driver, Port, strerror(errno));
-  } else if (ret!=len) {
+  } else if (ret != len) {
     error ("%s: partial write(%s): len=%d ret=%d", Driver, Port, len, ret);
   }
   
index b61807d23c2e288a1d9183a9a6b3091dd079a63a..5e92190b2dc40bf7872b2f4a4fa287ad0e3e0c77 100644 (file)
@@ -16,6 +16,16 @@ Display MI240 {
 }
 
 
+Display CW12232 {
+    Driver 'Cwlinux'
+    Model 'CW12232'
+    Port '/dev/usb/tts/0'
+    Speed 19200
+    Brightness 2
+    Icons 1
+}
+
+
 Display CF631 {
     Driver 'Crystalfontz'
     Model '631'
@@ -513,6 +523,7 @@ Layout testMySQL {
 
 #Display 'LK204'
 #Display 'MI240'
+#Display 'CW12232'
 #Display 'HD44780-20x4'
 #Display 'M50530-24x8'
 #Display 'CF631'
index 70e03dcba66910002e97f8dd65f48450f3f500cb..01bef64aa1c93c3d72b0d4cce1d3529d836a1069 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: plugin_i2c_sensors.c,v 1.14 2004/05/09 05:41:42 reinelt Exp $
+/* $Id: plugin_i2c_sensors.c,v 1.15 2004/05/31 21:05:13 reinelt Exp $
  *
  * I2C sensors plugin
  *
  *
  *
  * $Log: plugin_i2c_sensors.c,v $
+ * Revision 1.15  2004/05/31 21:05:13  reinelt
+ *
+ * fixed lots of bugs in the Cwlinux driver
+ * do not emit EAGAIN error on the first retry
+ * made plugin_i2c_sensors a bit less 'chatty'
+ * moved init and exit functions to the bottom of plugin_pop3
+ *
  * Revision 1.14  2004/05/09 05:41:42  reinelt
  *
  * i2c fix for kernel 2.6.5 (temp_input1 vs. temp1_input) from Xavier
 #include <string.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <dirent.h>
 
@@ -163,14 +171,14 @@ static int parse_i2c_sensors_sysfs(char *key)
 
   stream=fopen(file, "r");
   if (stream==NULL) {
-    error ("fopen(%s) failed",file);
+    error ("i2c_sensors: fopen(%s) failed: %s", file, strerror(errno));
     return -1;
   }
   fgets (buffer, sizeof(buffer), stream);
   fclose (stream);
   
   if (!buffer) {
-    error ("%s empty ?!",file);          
+    error ("i2c_sensors: %s empty ?!", file);    
     return -1;
   }
 
@@ -215,7 +223,7 @@ static int parse_i2c_sensors_procfs(char *key)
   char final_key[32];
   char *number = &key[strlen(key)-1];
   int tokens_index;
-  //debug("%s  ->  %s", key, number);
+  // debug("%s  ->  %s", key, number);
   strcpy(file, path);
 
   if (!strncmp(key, "temp_", 5)) {
@@ -240,27 +248,27 @@ static int parse_i2c_sensors_procfs(char *key)
 
   stream=fopen(file, "r");
   if (stream==NULL) {
-    error ("fopen(%s) failed",file);
+    error ("i2c_sensors: fopen(%s) failed: %s", file, strerror(errno));
     return -1;
   }
   fgets (buffer, sizeof(buffer), stream);
   fclose (stream);
   
   if (!buffer) {
-    error ("%s empty ?!",file);          
+    error ("i2c_sensors: %s empty ?!",file);     
     return -1;
   }
 
   running=strdupa(buffer);
   while(1) {
     value = strsep (&running, delim);
-    debug("%s pos %i -> %s", file, pos , value);
+    // debug("%s pos %i -> %s", file, pos , value);
     if (!value || !strcmp(value, "")) {
-      debug("%s pos %i -> BREAK", file, pos);
+      // debug("%s pos %i -> BREAK", file, pos);
       break;
     } else {
       sprintf (final_key, "%s%s", procfs_tokens[tokens_index][pos], number);
-      debug ("%s -> %s", final_key, value);
+      // debug ("%s -> %s", final_key, value);
       hash_set (&I2Csensors, final_key, value);
       pos++;
     }
@@ -312,11 +320,6 @@ void my_i2c_sensors_path(char *method)
   
   fd1 = opendir(base);
   if (!fd1) {
-    if (!strcmp(method, "sysfs")) {
-      error("[i2c_sensors] Impossible to open %s! Is /sys mounted?", base);
-    } else if (!strcmp(method, "procfs")) {
-      error("[i2c_sensors] Impossible to open %s! Is i2c_proc loaded ?", base);
-    }
     return;
   }
   
@@ -336,7 +339,8 @@ void my_i2c_sensors_path(char *method)
     fd2 = opendir(dname);
     done = 0;
     while((file = readdir(fd2))) {
-      if (!strcmp(file->d_name, "temp_input1") || !strcmp(file->d_name, "temp1_input") || !strcmp(file->d_name, "temp1")) { // FIXME : do all sensors have a temp_input1 ?
+      // FIXME : do all sensors have a temp_input1 ?
+      if (!strcmp(file->d_name, "temp_input1") || !strcmp(file->d_name, "temp1_input") || !strcmp(file->d_name, "temp1")) {
        path = realloc(path, strlen(dname)+1);
        strcpy(path, dname);                      
        done=1;
@@ -352,47 +356,42 @@ void my_i2c_sensors_path(char *method)
 
 int plugin_init_i2c_sensors (void)
 {
-  char *path_cfg=cfg_get(NULL, "i2c_sensors-path", "");
+  char *path_cfg = cfg_get(NULL, "i2c_sensors-path", "");
 
-  if (strncmp(path_cfg, "/", 1)) {
-    //debug("No path to i2c sensors found in the conf, calling my_i2c_sensors_path()");
+  if (path_cfg == NULL || *path_cfg == '\0') {
+    // debug("No path to i2c sensors found in the conf, calling my_i2c_sensors_path()");
     my_i2c_sensors_path("sysfs");
     if (!path)
       my_i2c_sensors_path("procfs");
-
+    
     if (!path) {
-      error("[i2c_sensors] No i2c sensors found via the i2c interface !");
-      error("[i2c_sensors] Try to specify the path to the sensors !");
+      error("i2c_sensors: unable to autodetect i2c sensors!");
     } else {
-      debug("Your i2c sensors are probably in %s", path);
-      debug("if i2c_sensors doesn't work, try to specify the path in your conf");
+      debug("using i2c sensors at %s (autodetected)", path);
     }
-       
   } else {
     if (path_cfg[strlen(path_cfg)-1] != '/') {
       // the headless user forgot the trailing slash :/
-      debug("adding a trailing slash at the end of the path");
+      error("i2c_sensors: please add a trailing slash to %s from %s", path_cfg, cfg_source());
       path_cfg = realloc(path_cfg, strlen(path_cfg)+2);
       strcat(path_cfg, "/");
     }
-    debug("Path to i2c sensors from the conf : %s", path_cfg);
-    debug("if i2c_sensors doesn't work, double check this value !");
+    debug("using i2c sensors at %s (from %s)", path, cfg_source());
     path = realloc(path, strlen(path_cfg)+1);
     strcpy(path, path_cfg);
-    
   }
-  free(path_cfg);
-
+  if (path_cfg) free(path_cfg);
+  
   // we activate the function only if there's a possibly path found
   if (path!=NULL) {
     if (strncmp(path, "/sys", 4)==0) {
-      parse_i2c_sensors=parse_i2c_sensors_sysfs;
+      parse_i2c_sensors = parse_i2c_sensors_sysfs;
       AddFunction ("i2c_sensors", 1, my_i2c_sensors);
     } else if (strncmp(path, "/proc", 5)==0) {
-      parse_i2c_sensors=parse_i2c_sensors_procfs;      
+      parse_i2c_sensors = parse_i2c_sensors_procfs;      
       AddFunction ("i2c_sensors", 1, my_i2c_sensors);
     } else {
-      error("[i2c_sensors] unknown path %s, should start with /sys or /proc");
+      error("i2c_sensors: unknown path %s, should start with /sys or /proc");
     }
   }
   
@@ -401,5 +400,5 @@ int plugin_init_i2c_sensors (void)
 
 void plugin_exit_i2c_sensors(void) 
 {
-       hash_destroy(&I2Csensors);
+  hash_destroy(&I2Csensors);
 }
index e93ae910474c3283a4b410159dc63200cf27d9f9..166db8f1a0af1bf9a44b8b6aedc5f4fd16655cd0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: plugin_pop3.c,v 1.3 2004/05/20 07:14:46 reinelt Exp $
+/* $Id: plugin_pop3.c,v 1.4 2004/05/31 21:05:13 reinelt Exp $
  *
  * Plugin to check POP3 mail accounts
  *
  *
  *
  * $Log: plugin_pop3.c,v $
+ * Revision 1.4  2004/05/31 21:05:13  reinelt
+ *
+ * fixed lots of bugs in the Cwlinux driver
+ * do not emit EAGAIN error on the first retry
+ * made plugin_i2c_sensors a bit less 'chatty'
+ * moved init and exit functions to the bottom of plugin_pop3
+ *
  * Revision 1.3  2004/05/20 07:14:46  reinelt
  * made all local functions static
  *
@@ -173,24 +180,6 @@ static int getConfig (void)
        return(n);
 }
 
-int plugin_init_pop3(void)
-{
-       
-       int n = getConfig();
-       // by now, head should point to a list of all our accounts
-       if (head)
-       {
-               info("[POP3] %d POP3 accounts have been succesfully defined",n);
-               AddFunction ("POP3check",  1, my_POP3check);
-       }
-       return 0;
-}
-
-void plugin_exit_pop3(void) 
-{
-       check_destroy(&head);
-}
-
 // ************************ LIST  ***********************************
 static struct check *check_node_alloc(void)
 {
@@ -341,3 +330,23 @@ static int tcp_connect(struct check *hi)
 
        return(sockfd);
 }
+
+
+int plugin_init_pop3(void)
+{
+       
+       int n = getConfig();
+       // by now, head should point to a list of all our accounts
+       if (head)
+       {
+               info("[POP3] %d POP3 accounts have been succesfully defined",n);
+               AddFunction ("POP3check",  1, my_POP3check);
+       }
+       return 0;
+}
+
+void plugin_exit_pop3(void) 
+{
+       check_destroy(&head);
+}
+