From 4de24b43bfc373f46f0510703cde7562fb8cb703 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Tue, 18 Nov 2025 16:11:32 +0800
Subject: [PATCH] update iniparser to remove warnning

---
 project/4.mqttd/modules/relay.c |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/project/4.mqttd/modules/relay.c b/project/4.mqttd/modules/relay.c
new file mode 100644
index 0000000..97e494c
--- /dev/null
+++ b/project/4.mqttd/modules/relay.c
@@ -0,0 +1,157 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2021 LingYun IoT System Studio
+ *                  All rights reserved.
+ *
+ *       Filename:  relay.c
+ *    Description:  This file is used to control Relay
+ *
+ *
+ * Pin connection:
+ *                 Relay Module           Raspberry Pi Board
+ *                  VCC       <----->      5V
+ *                   I        <----->      #Pin16(BCM GPIO23)
+ *                  GND       <----->      GND
+ *
+ * System install:
+ *                  sudo apt install -y libgpiod-dev gpiod
+ *
+ *
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <signal.h>
+#include <getopt.h>
+#include <libgen.h>
+
+#include <gpiod.h>
+#include "logger.h"
+#include "relay.h"
+
+#define DELAY     500
+
+static relay_info_t    relay_info[RELAY_CNT] =
+{
+    {"relay1",  23, 1, NULL },
+};
+
+int init_relay(relay_ctx_t *ctx)
+{
+    int            i, rv;
+    relay_info_t  *relay;
+
+    if( !ctx )
+    {
+        log_error("Invalid input arguments\n");
+        return -1;
+    }
+
+	ctx->relay = relay_info;
+	ctx->count = RELAY_CNT;
+
+    ctx->chip = gpiod_chip_open_by_name("gpiochip0");
+    if( !ctx->chip )
+    {
+        log_error("open gpiochip failure, maybe you need running as root\n");
+        return -2;
+    }
+
+
+    for(i=0; i<ctx->count; i++)
+    {
+        relay = &ctx->relay[i];
+
+        relay->line = gpiod_chip_get_line(ctx->chip, relay->gpio);
+        if( !relay->line )
+        {
+            log_error("open gpioline for %s[%d] failed\n", relay->name, relay->gpio);
+            rv = -3;
+            goto failed;
+        }
+
+        rv  = gpiod_line_request_output(relay->line, relay->name, !relay->active);
+        if( rv )
+        {
+            log_error("request gpio output for %5s[%d] failed\n", relay->name, relay->gpio);
+            rv = -4;
+            goto failed;
+        }
+
+        log_debug("request %s[%d] for gpio output okay\n", relay->name, relay->gpio);
+    }
+
+    return 0;
+
+failed:
+    term_relay(ctx);
+    return rv;
+}
+
+int term_relay(relay_ctx_t *ctx)
+{
+    int            i;
+    relay_info_t  *relay;
+
+    if( !ctx )
+    {
+        log_error("Invalid input arguments\n");
+        return -1;
+    }
+
+    if( !ctx->chip )
+        return 0;
+
+    for(i=0; i<ctx->count; i++)
+    {
+        relay = &ctx->relay[i];
+
+        if( relay->line )
+            gpiod_line_release(relay->line);
+    }
+
+    gpiod_chip_close(ctx->chip);
+    return 0;
+}
+
+
+int turn_relay(int which, int cmd)
+{
+    int             rv = 0;
+    relay_info_t   *relay;
+    relay_ctx_t     ctx;
+
+    if( which<0 || which>=RELAY_CNT )
+    {
+        log_error("Invalid input arguments\n");
+        return -1;
+    }
+
+	if( (rv=init_relay(&ctx)) < 0 )
+	{
+		log_error("Initial relay failure, rv=%d\n", rv);
+		return -2;
+	}
+
+    relay = &ctx.relay[which];
+    log_info("turn Led %s %s\n", relay->name, cmd?"on":"off");
+
+    if( OFF == cmd )
+    {
+        gpiod_line_set_value(relay->line, !relay->active);
+    }
+    else
+    {
+        gpiod_line_set_value(relay->line, relay->active);
+    }
+
+	term_relay(&ctx);
+
+    return 0;
+}
+

--
Gitblit v1.9.1