/*********************************************************************************
|
* Copyright: (C) 2019 LingYun IoT System Studio
|
* All rights reserved.
|
*
|
* Filename: hal.c
|
* Description: This file is HAL(Hardware Abstract Layer) initial functions
|
*
|
* Version: 1.0.0(2019年06月24日)
|
* Author: Guo Wenxue <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "2019年06月24日 23时46分47秒"
|
*
|
********************************************************************************/
|
|
#include "hal.h"
|
|
/* LED_R LED_G LED_B */
|
static int led_pin[LED_MAX] = { 0,0,0 };
|
static int relay_pin = 0;
|
|
void init_relay(int pin);
|
void init_led(int redpin, int greenpin, int bluepin);
|
|
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->redled, hwconf->greenled, hwconf->blueled);
|
|
if(hwconf->relay)
|
init_relay(hwconf->relay);
|
|
if( hwconf->sht2x && sht2x_init() < 0 )
|
{
|
log_err("Initialise SHT20 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 turn_relay(int cmd)
|
{
|
if( OFF == cmd )
|
{
|
digitalWrite ( relay_pin, LOW );
|
}
|
else
|
{
|
digitalWrite ( relay_pin, HIGH );
|
}
|
}
|