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 3ebbb99..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> -/*Monitor RPi I/O Pin connected to PIN#38, and wPi pin number is 28 */ -#define INFRARED_PIN 28 +//#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