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/led.c | 68 +++++++++++++++++++++++++++++++++- 1 files changed, 66 insertions(+), 2 deletions(-) diff --git a/modules/c/led.c b/modules/c/led.c index 959edd8..2bf3df8 100644 --- a/modules/c/led.c +++ b/modules/c/led.c @@ -28,11 +28,9 @@ #include <time.h> #include <errno.h> -#include <wiringPi.h> #include "led.h" #define msleep(x) usleep( 1000*(x) ) - #define DELAY 500 int main(int argc, char *argv[]) @@ -60,6 +58,9 @@ return 0; } +#ifdef CONFIG_USE_WIRINGPI +#include <wiringPi.h> + void init_led(void) { int i; @@ -86,4 +87,67 @@ return 0; } +#else /* use libgpiod library */ +#include <gpiod.h> + +#if 1 /* Use libgpiod lowlevel API */ + +struct gpiod_chip* chip; + +void init_led(void) +{ + chip = gpiod_chip_open_by_name("gpiochip0"); + if( !chip ) + { + printf("gpiod open chip failure, maybe you need running as root\n"); + exit(1); + } +} + +int turn_led(int which, int cmd) +{ + int rv = 0; + struct gpiod_line* line; + + line = gpiod_chip_get_line(chip, led_gpio[which]); + if( !line ) + { + rv = -2; + } + + gpiod_line_request_output(line, "led", 0); + + if( OFF == cmd ) + { + gpiod_line_set_value(line, 0); + } + else + { + gpiod_line_set_value(line, 1); + } +} + + +#else /* use libgpiod ctxless high level API */ +void init_led(void) +{ + +} + +void gpiod_ctxless_cb(void *data) +{ + sleep(1); +} + +int turn_led(int which, int cmd) +{ + if( OFF == cmd ) + gpiod_ctxless_set_value("gpiochip0", led_gpio[which], 0, false, "led", gpiod_ctxless_cb, NULL); + else + gpiod_ctxless_set_value("gpiochip0", led_gpio[which], 1, false, "led", gpiod_ctxless_cb, NULL); +} +#endif + + +#endif -- Gitblit v1.9.1