From eeb821fa6846e84c9fe3e80d58f41b7a5a418e70 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 21 Apr 2021 22:27:56 +0800 Subject: [PATCH] update hal.x --- iotd/hal/gpio.c | 47 +++++++++++++++++++++++++++-------------------- iotd/main.c | 4 +--- iotd/hal/gpio.h | 3 +-- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/iotd/hal/gpio.c b/iotd/hal/gpio.c index a5532a5..80c699d 100644 --- a/iotd/hal/gpio.c +++ b/iotd/hal/gpio.c @@ -24,9 +24,7 @@ int i; gpio_info_t *gpioinfo; - s_gpio = gpio; - if( !gpio ) { @@ -40,7 +38,6 @@ log_warn("WARNNING: No GPIO pins configured\n"); return 0; } - /* gpiod open chip */ s_chip = gpiod_chip_open_by_name(RPI_GPIONAME); @@ -150,30 +147,40 @@ } -#if 0 /* Return value: 1(HIGH): Sombody detected 0(LOW): Nobody detected */ int infrared_detect(void) { + int i; + int rv; struct gpiod_line_event event; - /* This function will block, must call it to setup */ - if( gpiod_line_event_wait(s_infrared_lines, NULL) < 0 ) + for(i=0; i<s_gpio->incnt; i++) { - //log_err("infrared gpiod line wait event failure!\n"); - return 0; - } + if( strstr(s_gpio->input[i].name, "infrared")) + { + log_dbg("Start detect '%s' on pin[#%d]\n", s_gpio->input[i].name, s_gpio->input[i].pin); - /* This function will block, must read to clear the event */ - if (gpiod_line_event_read(s_infrared_lines, &event) < 0) - { - log_err("gpiod line event read failure!\n"); - return 0; - } + /* This function will block, must call it to setup */ + rv = gpiod_line_event_wait(s_gpio->input[i].line, NULL) ; + if( rv< 0 ) + { + log_err("infrared gpiod line wait event failure!\n"); + return 0; + } + log_err("infrared gpiod line wait event rv=%d!\n", rv); - if (event.event_type == GPIOD_LINE_EVENT_RISING_EDGE) - return 1; - else - return 0; + /* This function will block, must read to clear the event */ + if (gpiod_line_event_read(s_gpio->input[i].line, &event) < 0) + { + log_err("gpiod line event read failure!\n"); + return 0; + } + + if (event.event_type == GPIOD_LINE_EVENT_RISING_EDGE) + return 1; + else + return 0; + } + } } -#endif diff --git a/iotd/hal/gpio.h b/iotd/hal/gpio.h index 455960f..6a45e11 100644 --- a/iotd/hal/gpio.h +++ b/iotd/hal/gpio.h @@ -41,9 +41,8 @@ extern int gpio_init(gpio_t *gpio); extern void gpio_term(void); - /* turn which light on/off */ -void gpio_out(char *name, char *cmd); +extern void gpio_out(char *name, char *cmd); /* Return value: 0(LOW): Nobody detected, !0: Which infrared detect incoming */ extern int infrared_detect(void); diff --git a/iotd/main.c b/iotd/main.c index cbc0d85..54619b8 100644 --- a/iotd/main.c +++ b/iotd/main.c @@ -194,14 +194,12 @@ } } -#if 0 log_nrml("start infrared monitor detect...\n"); if( infrared_detect() ) { log_nrml("Someone incoming detected by infrared\n"); - log_nrml("Lux[%.3f] < Treshold[%.3f], auto light on now..\n", lux, hal_ctx->lux_threshold); } -#endif + sleep(1); } } -- Gitblit v1.9.1