|  | @@ -17,6 +17,7 @@
 | 
	
		
			
				|  |  |  #include "esp_log.h"
 | 
	
		
			
				|  |  |  #include "driver/gpio.h"
 | 
	
		
			
				|  |  |  #include "led.h"
 | 
	
		
			
				|  |  | +#include "accessors.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define MAX_LED	8
 | 
	
		
			
				|  |  |  #define BLOCKTIME	10	// up to portMAX_DELAY
 | 
	
	
		
			
				|  | @@ -33,10 +34,15 @@ static struct led_s {
 | 
	
		
			
				|  |  |  	TimerHandle_t timer;
 | 
	
		
			
				|  |  |  } leds[MAX_LED];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void led_svc_init(void) {
 | 
	
		
			
				|  |  | -	ESP_LOGI(TAG, "Initializing led");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +static struct {
 | 
	
		
			
				|  |  | +	int gpio;
 | 
	
		
			
				|  |  | +	int state;
 | 
	
		
			
				|  |  | +} green = { CONFIG_LED_GREEN_GPIO, CONFIG_LED_GREEN_GPIO_LEVEL},
 | 
	
		
			
				|  |  | +  red = { CONFIG_LED_RED_GPIO, CONFIG_LED_RED_GPIO_LEVEL };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  static void vCallbackFunction( TimerHandle_t xTimer ) {
 | 
	
		
			
				|  |  |  	struct led_s *led = (struct led_s*) pvTimerGetTimerID (xTimer);
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -53,6 +59,9 @@ static void vCallbackFunction( TimerHandle_t xTimer ) {
 | 
	
		
			
				|  |  |  	xTimerChangePeriod(xTimer, (led->on ? led->ontime : led->offtime) / portTICK_RATE_MS, BLOCKTIME);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  bool led_blink_core(int idx, int ontime, int offtime, bool pushed) {
 | 
	
		
			
				|  |  |  	if (!leds[idx].gpio || leds[idx].gpio<0 ) return false;
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -99,6 +108,9 @@ bool led_blink_core(int idx, int ontime, int offtime, bool pushed) {
 | 
	
		
			
				|  |  |  	return true;
 | 
	
		
			
				|  |  |  } 
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  bool led_unpush(int idx) {
 | 
	
		
			
				|  |  |  	if (!leds[idx].gpio || leds[idx].gpio<0) return false;
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -108,6 +120,9 @@ bool led_unpush(int idx) {
 | 
	
		
			
				|  |  |  	return true;
 | 
	
		
			
				|  |  |  }	
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  bool led_config(int idx, gpio_num_t gpio, int onstate) {
 | 
	
		
			
				|  |  |  	if(gpio<0){
 | 
	
		
			
				|  |  |  		ESP_LOGW(TAG,"LED GPIO not configured");
 | 
	
	
		
			
				|  | @@ -127,6 +142,9 @@ bool led_config(int idx, gpio_num_t gpio, int onstate) {
 | 
	
		
			
				|  |  |  	return true;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  bool led_unconfig(int idx) {
 | 
	
		
			
				|  |  |  	if (idx >= MAX_LED) return false;	
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -135,3 +153,28 @@ bool led_unconfig(int idx) {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	return true;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +void set_led_gpio(int gpio, char *value) {
 | 
	
		
			
				|  |  | +	char *p;
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	if (strcasestr(value, "green")) {
 | 
	
		
			
				|  |  | +		green.gpio = gpio;
 | 
	
		
			
				|  |  | +		if ((p = strchr(value, ':')) != NULL) green.state = atoi(p + 1);
 | 
	
		
			
				|  |  | +	} else 	if (strcasestr(value, "red")) {
 | 
	
		
			
				|  |  | +		red.state = gpio;
 | 
	
		
			
				|  |  | +		if ((p = strchr(value, ':')) != NULL) red.state = atoi(p + 1);
 | 
	
		
			
				|  |  | +	}	
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void led_svc_init(void) {
 | 
	
		
			
				|  |  | +#ifndef LED_LOCKED
 | 
	
		
			
				|  |  | +	parse_set_GPIO(set_led_gpio);
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +	ESP_LOGI(TAG,"Configuring LEDs green:%d (active:%d), red:%d (active:%d)", green.gpio, green.state, red.gpio, red.state);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	led_config(LED_GREEN, green.gpio, green.state);
 | 
	
		
			
				|  |  | +	led_config(LED_RED, red.gpio, red.state);
 | 
	
		
			
				|  |  | +}
 |