From d0a9532e1425c6052ac7221c45433a48bf43ba50 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Sat, 09 Jan 2021 16:17:56 +0800 Subject: [PATCH] update led and infrared source code --- modules/c/infrared.c | 77 +++++++++++++++++++++++++++++++++++++- 1 files changed, 75 insertions(+), 2 deletions(-) diff --git a/modules/c/infrared.c b/modules/c/infrared.c index 6475fc3..25cd18a 100644 --- a/modules/c/infrared.c +++ b/modules/c/infrared.c @@ -5,6 +5,13 @@ * 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(mid) ---- 32 ---- 12 ---- 26 + * 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 +20,13 @@ #include <stdio.h> #include <unistd.h> + + +#ifdef CONFIG_USE_WIRINGPI + #include <wiringPi.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 INFRARED_PIN 26 int main (int argc, char **argv) { @@ -33,3 +43,66 @@ return 0; } +#else + +#include <gpiod.h> + +#define INFRARED_PIN 12 + +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 ) + { + printf("gpiod request rising edge event failure\n"); + rv = 3; + goto cleanup; + } + + while(1) + { + /* This function will block, must call it to setup */ + 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 */ + 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