From 732d1963ed83abf4e5f1b06ec451a6943421d716 Mon Sep 17 00:00:00 2001 From: Guo Wenxue <guowenxue@gmail.com> Date: Thu, 22 Sep 2022 00:36:11 +0800 Subject: [PATCH] update ds18b20.c to snprintf --- mqttd/hal/hal.c | 134 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 125 insertions(+), 9 deletions(-) diff --git a/mqttd/hal/hal.c b/mqttd/hal/hal.c index 5ed9248..527d6f9 100644 --- a/mqttd/hal/hal.c +++ b/mqttd/hal/hal.c @@ -13,19 +13,135 @@ #include "hal.h" -int hal_init(void) -{ - init_led(); - relay_init(); + /* LED_R LED_G LED_B */ +static int led_pin[LED_MAX] = { 0,0,0 }; +static int relay_pin = 0; +static int beep_pin = 0; +static int infrared_pin = 0; -#if 0 - if( sht2x_init() < 0 ) +void init_relay(int pin); +void init_led(int redpin, int greenpin, int bluepin); +void init_beep(int pin); + +int hal_init(hwconf_t *hwconf) +{ + if( !hwconf->enable ) { - log_err("Initialise SHT20 failure\n"); - return -2; + log_err("All hardware modules are disabled, skip initialise HAL.\n"); + return 0; + } + + wiringPiSetup(); + + if( hwconf->leds ) + init_led(hwconf->red_pin, hwconf->green_pin, hwconf->blue_pin); + + if( hwconf->relay_pin ) + init_relay(hwconf->relay_pin); + + if( hwconf->beep_pin ) + init_beep(hwconf->beep_pin); + + if( hwconf->infrared_pin ) + init_infrared(hwconf->infrared_pin); + + if( hwconf->sht2x && sht2x_init() < 0 ) + { + log_err("Initialise SHT20 T&H sensor failure\n"); + return -1; } -#endif + if( hwconf->lux && tsl2561_init() < 0 ) + { + log_err("Initialise TSL2561 Lux sensor failure\n"); + return -1; + } + return 0; } +void init_led(int redpin, int greenpin, int bluepin) +{ + int i; + + led_pin[LED_R]=redpin; + led_pin[LED_G]=greenpin; + led_pin[LED_B]=bluepin; + + for(i=0; i<LED_MAX; i++) + { + if(led_pin[i]) + pinMode(led_pin[i], OUTPUT ); + } +} + +int turn_led(int which, int cmd) +{ + if( which<0 || which>=LED_MAX ) + return -1; + + if( OFF == cmd ) + { + if(led_pin[which]) + digitalWrite (led_pin[which], LOW); + } + else + { + if(led_pin[which]) + digitalWrite (led_pin[which], HIGH); + } + + return 0; +} + + +void init_relay(int pin) +{ + relay_pin = pin; + pinMode(relay_pin, OUTPUT); +} + +void init_beep(int pin) +{ + beep_pin = pin; + + /* TBD */ + //pinMode(relay_pin, OUTPUT); +} + +void turn_beep(int times) +{ + /* TBD */ +} + +/* wiringPi IRQ handler use a thread and can not pass argument, so we don't use interrupt */ +void init_infrared(int pin) +{ + infrared_pin = pin; + pinMode(pin, INPUT); +} + +/* jitter_time: cancel jitter interval time + * Return value: 1(HIGH): Sombody detected 0(LOW): Nobody detected */ +int infrared_detect(int jitter_time) +{ + if( digitalRead(infrared_pin) ) + { + msleep(jitter_time); + } + return digitalRead(infrared_pin); +} + +void turn_relay(int cmd) +{ + if( OFF == cmd ) + { + digitalWrite ( relay_pin, LOW ); + } + else + { + digitalWrite ( relay_pin, HIGH ); + } +} + + -- Gitblit v1.9.1