From 4deb51ffc4dd4588183aed82bd7877909ba2130e Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Wed, 31 Jul 2019 11:19:22 +0800
Subject: [PATCH] update mqtt configure file, support breakin detect support

---
 mqttd/hal/hal.c |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 102 insertions(+), 8 deletions(-)

diff --git a/mqttd/hal/hal.c b/mqttd/hal/hal.c
index 5ed9248..4840944 100644
--- a/mqttd/hal/hal.c
+++ b/mqttd/hal/hal.c
@@ -13,19 +13,113 @@
 
 #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("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 && hwconf->ifrd_handler )
+        init_infrared(hwconf->infrared_pin, INT_EDGE_RISING, hwconf->ifrd_handler);
+
+    if( hwconf->sht2x && sht2x_init() < 0 )
     {
         log_err("Initialise SHT20 failure\n");
-        return -2;
+        return -1;
     } 
-#endif
     
     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;
+    //pinMode(relay_pin, OUTPUT);
+}
+
+void init_infrared(int pin, int irq_type, void (*handler)(void))
+{
+    pinMode(pin, INPUT);
+
+    delay(100);
+
+    wiringPiISR(pin, irq_type, handler);
+}
+
+void turn_relay(int cmd)
+{
+    if( OFF == cmd )
+    {
+        digitalWrite ( relay_pin, LOW );
+    }
+    else
+    {
+        digitalWrite ( relay_pin, HIGH );
+    }
+}
+
+

--
Gitblit v1.9.1