From 47579e3790b1ee5a1ad2ce35ea6028cd9ddf6ea0 Mon Sep 17 00:00:00 2001
From: GuoWenxue <“guowenxue@gmail.com”>
Date: Fri, 29 Apr 2022 09:23:27 +0800
Subject: [PATCH] update client_main.c to use packet_segmented_pack

---
 modules/c/infrared.c |   96 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 90 insertions(+), 6 deletions(-)

diff --git a/modules/c/infrared.c b/modules/c/infrared.c
index 6475fc3..c6f13fe 100644
--- a/modules/c/infrared.c
+++ b/modules/c/infrared.c
@@ -5,6 +5,14 @@
  *       Filename:  infrared.c
  *    Description:  This file 
  *                 
+ *     pi@raspberrypi:~ $ gpio readall     #show BCM and wPi pinmap  
+ *
+ *             PIN          #PIN        BCM           wPi 
+ *           VCC(left) ----  2   ----   5v     ----   5v
+ *         I/O(indoor) ----  16  ----   23     ----   4
+ *        I/O(hallway) ----  18  ----   24     ----   5
+ *          GND(right) ----  34  ----   0v     ----   0v
+ *
  *        Version:  1.0.0(30/01/19)
  *         Author:  Guo Wenxue <guowenxue@gmail.com>
  *      ChangeLog:  1, Release initial version on "30/01/19 03:37:16"
@@ -13,23 +21,99 @@
 
 #include <stdio.h>
 #include <unistd.h>
-#include <wiringPi.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
 
-/* I/O Pin connected to PIN#16, BCM code pin number is 23 and wPi pin number is 4 */
-#define INFRARED_PIN           4
+//#define CONFIG_USE_WIRINGPI
+
+#ifdef CONFIG_USE_WIRINGPI
+
+#include <wiringPi.h>
 
 int main (int argc, char **argv)
 {
+    int           wPiPin;
+
+    if( argc != 2 )
+    {
+        printf("%s [wPi PinNum]\n", argv[0]);
+        printf("Exampe indoor : %s 4\n", argv[0]);
+        printf("Exampe hallway: %s 5\n", argv[0]);
+        return 0;
+    }
+
+    wPiPin = atoi(argv[1]);
+    printf("Start infrared detect on wPi Pin[#%d]\n", wPiPin);
+
     wiringPiSetup();
-    pinMode(INFRARED_PIN, INPUT);
+    pinMode(wPiPin, INPUT);
 
     while(1)
     {
-        printf("Infrared monitor: %s\n", digitalRead(INFRARED_PIN)? "Someone is closing!":"No one nearby!");
+        printf("Infrared monitor: %s\n", digitalRead(wPiPin)? "Someone is closing!":"No one nearby!");
         sleep(1);
     }
-
 
     return 0;
 }
 
+#else
+
+#include <gpiod.h>
+
+int main (int argc, char **argv)
+{
+    struct gpiod_chip*       chip;
+    struct gpiod_line*       line;
+    int                      rv = 0;
+    struct gpiod_line_event  event;
+    int                      bcmPin;
+
+    if( argc != 2 )
+    {
+        printf("%s [BCM PinNum]\n", argv[0]);
+        printf("Exampe indoor : %s 23\n", argv[0]);
+        printf("Exampe hallway: %s 24\n", argv[0]);
+        return 0;
+    }
+
+    bcmPin = atoi(argv[1]);
+    printf("Start infrared detect on BCM Pin[#%d]\n", bcmPin);
+
+    chip = gpiod_chip_open_by_name("gpiochip0");
+    if( !chip )
+    {
+        printf("gpiod open chip failure, maybe you need running as root\n");
+        return 1;
+    }
+
+    line = gpiod_chip_get_line(chip, bcmPin);
+    if( !line )
+    {
+        printf("gpiod get line[%d] failure\n", bcmPin);
+        rv = 2;
+        goto cleanup;
+    }
+
+    if( gpiod_line_request_input(line, "infrared") < 0 )
+    {
+        printf("gpiod request input [#%d] failure: %s\n", bcmPin, strerror(errno) );
+        rv = 3;
+        goto cleanup;
+    }
+
+    while(1)
+    {
+        /* This function will block, must call it to setup */
+        printf("Infrared monitor: %s\n", gpiod_line_get_value(line) ? "Someone is closing!":"No one nearby!");
+        sleep(1);
+    }
+
+cleanup:
+    gpiod_chip_close(chip);
+    return rv;
+}
+
+
+#endif

--
Gitblit v1.9.1