| | |
| | | |
| | | #include "hal.h" |
| | | |
| | | int hal_init(void) |
| | | /* 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; |
| | | |
| | | 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(); |
| | | |
| | | init_led(); |
| | | init_relay(); |
| | | if( hwconf->leds ) |
| | | init_led(hwconf->red_pin, hwconf->green_pin, hwconf->blue_pin); |
| | | |
| | | #if 0 |
| | | if( sht2x_init() < 0 ) |
| | | 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 ); |
| | | } |
| | | } |
| | | |
| | | |