|  | @@ -17,16 +17,25 @@
 | 
	
		
			
				|  |  |  #include "monitor.h"
 | 
	
		
			
				|  |  |  #include "driver/gpio.h"
 | 
	
		
			
				|  |  |  #include "buttons.h"
 | 
	
		
			
				|  |  | +#include "led.h"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#ifdef CONFIG_SQUEEZEAMP
 | 
	
		
			
				|  |  | +#define JACK_GPIO		34
 | 
	
		
			
				|  |  | +#define SPKFAULT_GPIO	2
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#define JACK_GPIO	34
 | 
	
		
			
				|  |  |  #define MONITOR_TIMER	(10*1000)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static const char TAG[] = "monitor";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static TimerHandle_t monitor_timer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void (*jack_handler_svc)(bool inserted);
 | 
	
		
			
				|  |  |  bool jack_inserted_svc(void);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void (*spkfault_handler_svc)(bool inserted);
 | 
	
		
			
				|  |  | +bool spkfault_svc(void);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /****************************************************************************************
 | 
	
		
			
				|  |  |   * 
 | 
	
		
			
				|  |  |   */
 | 
	
	
		
			
				|  | @@ -57,6 +66,28 @@ bool jack_inserted_svc (void) {
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static void spkfault_handler_default(void *id, button_event_e event, button_press_e mode, bool long_press) {
 | 
	
		
			
				|  |  | +	ESP_LOGD(TAG, "Speaker status %s", event == BUTTON_PRESSED ? "faulty" : "normal");
 | 
	
		
			
				|  |  | +	if (event == BUTTON_PRESSED) led_on(LED_RED);
 | 
	
		
			
				|  |  | +	else led_off(LED_RED);
 | 
	
		
			
				|  |  | +	if (spkfault_handler_svc) (*spkfault_handler_svc)(event == BUTTON_PRESSED);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/****************************************************************************************
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +bool spkfault_svc (void) {
 | 
	
		
			
				|  |  | +#ifdef SPKFAULT_GPIO
 | 
	
		
			
				|  |  | +	return !gpio_get_level(SPKFAULT_GPIO);
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +	return false;
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#include "driver/rtc_io.h" 
 | 
	
		
			
				|  |  |  /****************************************************************************************
 | 
	
		
			
				|  |  |   * 
 | 
	
		
			
				|  |  |   */
 | 
	
	
		
			
				|  | @@ -71,6 +102,15 @@ void monitor_svc_init(void) {
 | 
	
		
			
				|  |  |  	button_create(NULL, JACK_GPIO, BUTTON_LOW, false, 250, jack_handler_default, 0, -1);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#ifdef SPKFAULT_GPIO
 | 
	
		
			
				|  |  | +	gpio_pad_select_gpio(SPKFAULT_GPIO);
 | 
	
		
			
				|  |  | +	ESP_LOGI(TAG, "DIR %d", gpio_set_direction(SPKFAULT_GPIO, GPIO_MODE_INPUT));
 | 
	
		
			
				|  |  | +	ESP_LOGI(TAG, "PULLUP %d", gpio_set_pull_mode(SPKFAULT_GPIO, GPIO_PULLUP_ONLY));
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	// re-use button management for speaker fault handler, it's a GPIO after all
 | 
	
		
			
				|  |  | +	button_create(NULL, SPKFAULT_GPIO, BUTTON_LOW, true, 0, spkfault_handler_default, 0, -1);
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	monitor_timer = xTimerCreate("monitor", MONITOR_TIMER / portTICK_RATE_MS, pdTRUE, NULL, monitor_callback);
 | 
	
		
			
				|  |  |  	xTimerStart(monitor_timer, portMAX_DELAY);
 | 
	
		
			
				|  |  |  }
 |