From 8913f64d481a3da19d7e03b619605dc67eaf0591 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 21 Apr 2021 22:22:08 +0800 Subject: [PATCH] update infrared test.c --- modules/c/infrared.c | 87 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 84 insertions(+), 3 deletions(-) diff --git a/modules/c/infrared.c b/modules/c/infrared.c index 3ebbb99..868638d 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,10 +21,17 @@ #include <stdio.h> #include <unistd.h> +#include <errno.h> +#include <string.h> + +//#define CONFIG_USE_WIRINGPI + +#ifdef CONFIG_USE_WIRINGPI + #include <wiringPi.h> -/*Monitor RPi I/O Pin connected to PIN#38, and wPi pin number is 28 */ -#define INFRARED_PIN 28 +#define INFRARED_PIN 4 +//#define INFRARED_PIN 5 int main (int argc, char **argv) { @@ -29,7 +44,73 @@ sleep(1); } - return 0; } +#else + +#include <gpiod.h> + +#define INFRARED_PIN 23 +//#define INFRARED_PIN 24 + +int main (int argc, char **argv) +{ + struct gpiod_chip* chip; + struct gpiod_line* line; + int rv = 0; + struct gpiod_line_event event; + + 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, INFRARED_PIN); + if( !line ) + { + printf("gpiod get line[%d] failure\n", INFRARED_PIN); + rv = 2; + goto cleanup; + } + + + //if( gpiod_line_request_rising_edge_events(line, "infrared") < 0 ) + if( gpiod_line_request_falling_edge_events(line, "infrared") < 0 ) + { + printf("gpiod request rising edge event failure: %s\n", strerror(errno)); + rv = 3; + goto cleanup; + } + + while(1) + { + /* This function will block, must call it to setup */ + printf("Start gpiod_line_event_wait...\n"); + if( gpiod_line_event_wait(line, NULL) < 0 ) + { + printf("gpiod line wait event failure!\n"); + } + + /* This function will block, must read to clear the event */ + printf("Start gpiod_line_event_read...\n"); + if (gpiod_line_event_read(line, &event) < 0) + { + printf("gpiod line wait event failure!\n"); + } + + if (event.event_type == GPIOD_LINE_EVENT_RISING_EDGE) + { + printf("Infrared monitor: Someone is closing!\n"); + } + } + +cleanup: + gpiod_chip_close(chip); + return rv; +} + + +#endif -- Gitblit v1.9.1