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