From 917354ea70f7c159643f193f1e4e315d92692830 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Tue, 20 Apr 2021 23:12:07 +0800
Subject: [PATCH] update 3rdparty library version and configure parser test ok

---
 iotd/conf/conf.c     |   81 +++++++++++++++++++++++++++++++++++++---
 iotd/3rdlib/build.sh |    8 ++--
 iotd/hal/gpio.h      |    2 
 iotd/conf/conf.h     |    4 +
 4 files changed, 82 insertions(+), 13 deletions(-)

diff --git a/iotd/3rdlib/build.sh b/iotd/3rdlib/build.sh
index 86da6c2..b5129c7 100755
--- a/iotd/3rdlib/build.sh
+++ b/iotd/3rdlib/build.sh
@@ -56,7 +56,7 @@
 function compile_libgpiod()
 {
 	PREFIX_PATH=${INST_PATH}
-	SRC_NAME=libgpiod-1.6.2
+	SRC_NAME=libgpiod-1.6.3
 	PACK_SUFIX=tar.gz
 	IMG_NAME=libgpiod.so
 
@@ -121,7 +121,7 @@
 function compile_mosquitto()
 {
 	PREFIX_PATH=${INST_PATH}
-	SRC_NAME=mosquitto-2.0.5
+	SRC_NAME=mosquitto-2.0.10
 	PACK_SUFIX=tar.gz
 	IMG_NAME=libmosquitto.so
 
@@ -160,9 +160,9 @@
 
 if [[ $# == 1 ]] && [[ $1 == clean ]] ; then
     rm -rf install
-    rm -rf libgpiod-1.6.2
+    rm -rf libgpiod-1.6.3
     rm -rf cJSON-1.7.14
-    rm -rf mosquitto-2.0.5
+    rm -rf mosquitto-2.0.10
     exit 0;
 fi
 
diff --git a/iotd/conf/conf.c b/iotd/conf/conf.c
index 42a2b30..de7ee2e 100644
--- a/iotd/conf/conf.c
+++ b/iotd/conf/conf.c
@@ -20,10 +20,15 @@
     _TYPE_OUTPUT,
 };
 
+/* conf format:  "{light_indoor:6:0},{light_livroomL:13:0},{light_livroomR:19:0},{light_hallway:26:0}"  */
 int parser_gpio_info(int type, gpio_t *gpio, char *conf)
 {
+    char              *ptr;
     char              *pstart;
     char              *pend;
+    char               buf[64];
+    int                cnt = 0;
+    int                rv = 0;
 
     if( !gpio || !conf || strlen(conf)<3 )
     {
@@ -31,14 +36,74 @@
         return -1;
     }
 
-    printf("conf: %s\n", conf);
-    
-    pstart = strchr(conf, '{');
-    pend = strchr(conf, '}');
+    pstart = strchr(conf, '{'); 
+    if( !pstart )
+        return 0;
+
+    pend = strchr(pstart, '}'); 
+
+    while( pstart && pend )
+    {
+        memset(buf, 0, sizeof(buf));
+
+        strncpy(buf, pstart+1, pend-pstart-1);
+
+        /* parser and get the GPIO name, BCM pin number, active power level */
+
+        {
+            /* check GPIO configure name too long or not */
+            ptr = strchr(buf, ':');
+            if( !ptr )
+            {
+                log_err("Found invalid GPIO configure: %s\n", buf);
+                goto NEXT_LOOP;
+            }
+
+            if( ptr-buf > sizeof(gpio->input[cnt].name) )
+            {
+                log_err("Found GPIO name too long\n", buf);
+                goto NEXT_LOOP;
+            }
+
+            /* use sscanf() to parser GPIO configured values */
+            if(_TYPE_INPUT == type ) 
+            {
+                rv = sscanf(buf, "%[^:]:%d:%d", gpio->input[cnt].name, &gpio->input[cnt].pin, &gpio->input[cnt].active_level);
+                if( 3 == rv) 
+                {
+                    log_nrml("parser GPIO input[%s] BCM[%d] active[%d]\n", gpio->input[cnt].name, gpio->input[cnt].pin, gpio->input[cnt].active_level);
+                    cnt++;
+                    gpio->incnt = cnt;
+                }
+                else
+                {
+                    log_err("Found invalid GPIO configure: %s\n", buf);
+                }
+            }
+            else
+            {
+                rv = sscanf(buf, "%[^:]:%d:%d", gpio->output[cnt].name, &gpio->output[cnt].pin, &gpio->output[cnt].active_level);
+                if( 3 == rv) 
+                {
+                    log_nrml("parser GPIO output[%s] BCM[%d] active[%d]\n", gpio->output[cnt].name, gpio->output[cnt].pin, gpio->output[cnt].active_level);
+                    cnt++;
+                    gpio->outcnt = cnt;
+                }
+                else
+                {
+                    log_err("Found invalid GPIO configure: %s\n", buf);
+                }
+            }
+        }
+
+NEXT_LOOP:
+        pstart = strchr(pend, '{');
+        if( pstart ) 
+            pend = strchr(pstart, '}');
+    }
 
 
-
-
+    return gpio->outcnt;
 }
 
 int parser_conf(const char *conf_file, iotd_ctx_t *ctx, int debug)
@@ -158,7 +223,7 @@
         log_nrml("parser SHT2x sensor enabled\n");
     }
 
-    hal_ctx->ds18b20_enable = iniparser_getint(ini, "hardware:sht2x", 0);
+    hal_ctx->ds18b20_enable = iniparser_getint(ini, "hardware:ds18b20", 0);
     if( hal_ctx->ds18b20_enable )
     {
         log_nrml("parser DS18B20 sensor enabled\n");
@@ -208,6 +273,7 @@
 
     mqtt_ctx->subQos = iniparser_getint(ini, "subsciber:subQos", 0);
     log_nrml("Parser subscriber topic \"%s\" with Qos[%d]\n", mqtt_ctx->subTopic, mqtt_ctx->subQos);
+    mqtt_ctx->sub_enable = 1;
 
     /*+------------------------------------------------------+
      *|             parser publisher settings                |
@@ -222,6 +288,7 @@
 
     mqtt_ctx->pubQos = iniparser_getint(ini, "publisher:pubQos", 0);
     log_nrml("Parser publisher topic \"%s\" with Qos[%d]\n", mqtt_ctx->pubTopic, mqtt_ctx->pubQos);
+    mqtt_ctx->pub_enable = 1;
 
 
     return 0;
diff --git a/iotd/conf/conf.h b/iotd/conf/conf.h
index 00427fd..b905f39 100644
--- a/iotd/conf/conf.h
+++ b/iotd/conf/conf.h
@@ -43,13 +43,15 @@
     int           keepalive;  /* MQTT broker send PING message to subsciber/publisher keepalive timeout<seconds> */
 
     /* Subscriber settings */
+    int           sub_enable;    /* Subscriber enable or not  */
     char          subTopic[256]; /* Subscriber topic */
     int           subQos;        /* Subscriber Qos  */
 
     /* Publisher settings */
+    int           pub_enable;    /* Publisher enable or not  */
     char          pubTopic[256]; /* Publisher topic */
     int           pubQos;        /* Publisher Qos   */
-    int           interval;      /* publish interval */
+    int           interval;      /* Publish interval */
 } mqtt_ctx_t;
 
 
diff --git a/iotd/hal/gpio.h b/iotd/hal/gpio.h
index eddba34..d1a2a23 100644
--- a/iotd/hal/gpio.h
+++ b/iotd/hal/gpio.h
@@ -25,7 +25,7 @@
 typedef struct gpio_info_s
 {
     char                 name[32];      /*  GPIO connected module name */
-    int                  pins;          /*  GPIO BCM pin number */
+    int                  pin;          /*  GPIO BCM pin number */
     int                  active_level;  /*  active power level */
     struct gpiod_line   *lines;         /*  gpiod lines */
 } gpio_info_t;

--
Gitblit v1.9.1