src.nth.io/

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2021-05-31 14:02:42 -0500
committerLuke Hoersten <[email protected]>2021-05-31 14:02:42 -0500
commitfbe49903b04df9aa16cd1bc5bd795c113cddeaaa (patch)
tree24dab5e66ada2558f436da32cc3fb524f31de090
parentea05037258993adc5707333696255da0bf9e40ad (diff)
Added better bell debugging.
-rw-r--r--main/include/bell.h16
-rw-r--r--main/include/lock.h16
-rw-r--r--main/src/bell.c90
-rw-r--r--main/src/led.c10
4 files changed, 67 insertions, 65 deletions
diff --git a/main/include/bell.h b/main/include/bell.h
index 41f133a..6666cef 100644
--- a/main/include/bell.h
+++ b/main/include/bell.h
@@ -1,17 +1,3 @@
-#include <freertos/FreeRTOS.h>
-#include <freertos/timers.h>
#include <hap.h>
-bool is_bell_ringing(int val);
-
-void intercom_bell_read(void *p);
-
-void IRAM_ATTR intercom_bell_isr(void *arg);
-
-void intercom_bell_timer_cb(TimerHandle_t timer);
-
-void intercom_bell_isr_gpio_init();
-
-void intercom_bell_adc_gpio_init();
-
-hap_serv_t *intercom_bell_init();
+hap_serv_t *intercom_bell_init(); \ No newline at end of file
diff --git a/main/include/lock.h b/main/include/lock.h
index aca9b67..2ac6117 100644
--- a/main/include/lock.h
+++ b/main/include/lock.h
@@ -1,17 +1,3 @@
-#include <freertos/FreeRTOS.h>
-#include <freertos/timers.h>
#include <hap.h>
-void intercom_lock_unsecure();
-
-void intercom_lock_secure();
-
-void intercom_lock_timeout();
-
-int intercom_lock_write_cb(hap_write_data_t write_data[], int count, void *serv_priv, void *write_priv);
-
-void intercom_lock_timer_cb(TimerHandle_t timer);
-
-void intercom_lock_gpio_init();
-
-hap_serv_t *intercom_lock_init();
+hap_serv_t *intercom_lock_init(); \ No newline at end of file
diff --git a/main/src/bell.c b/main/src/bell.c
index 730d031..8c0cf4b 100644
--- a/main/src/bell.c
+++ b/main/src/bell.c
@@ -25,14 +25,44 @@ volatile bool is_intercom_bell_blocked;
static TimerHandle_t intercom_bell_timer; // ignore new bells until timer triggered
static hap_char_t *intercom_bell_current_state;
-bool is_bell_ringing(int val)
+void bell_hap_ring()
{
- ESP_LOGI(TAG, "Intercom bell rang with value %d", val);
- return 2340 < val && val < 2360;
+ ESP_LOGI(TAG, "Intercom bell HAP RING");
+ hap_char_update_val(intercom_bell_current_state, &HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS);
}
+
+void bell_block()
+{
+ is_intercom_bell_blocked = true;
+ ESP_LOGI(TAG, "Intercom bell updated [blocked: %s]", is_intercom_bell_blocked ? "true" : "false");
+ xTimerReset(intercom_bell_timer, pdFALSE);
+}
+
+void bell_unblock()
+{
+ is_intercom_bell_blocked = false;
+ ESP_LOGI(TAG, "Intercom bell updated [blocked: %s]", is_intercom_bell_blocked ? "true" : "false");
+}
+
+bool is_bell_blocked()
+{
+ ESP_LOGI(TAG, "Intercom bell triggered [blocked: %s]", is_intercom_bell_blocked ? "true" : "false");
+ return is_intercom_bell_blocked;
+}
+
int read_adc()
{
- return adc1_get_raw(ADC1_GPIO33_CHANNEL);
+ int val = adc1_get_raw(ADC1_GPIO33_CHANNEL);
+ ESP_LOGI(TAG, "Intercom bell read [val: %d]", val);
+ return val;
+}
+
+bool is_bell_ringing()
+{
+ int val = read_adc();
+ bool is_ringing = 2340 < val && val < 2360;
+ ESP_LOGI(TAG, "Intercom bell rang [val: %d; is_ringing: %s]", val, is_ringing ? "true" : "false");
+ return is_ringing;
}
int read_adc_avg()
@@ -48,37 +78,43 @@ int read_adc_avg()
void intercom_bell_read(void *p)
{
- ESP_LOGI(TAG, "Intercom bell task started");
for (;;)
{
- ESP_LOGI(TAG, "Intercom bell task waiting");
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
- ESP_LOGI(TAG, "Intercom bell task triggered");
- if (is_bell_ringing(read_adc()))
+ if (!is_bell_blocked() && is_bell_ringing())
{
- ESP_LOGI(TAG, "Intercom bell HAP ring");
- hap_char_update_val(intercom_bell_current_state, &HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS);
- is_intercom_bell_blocked = true;
- xTimerReset(intercom_bell_timer, pdFALSE);
+ bell_hap_ring();
+ bell_block();
}
}
}
void IRAM_ATTR intercom_bell_isr(void *arg)
{
- if (!is_intercom_bell_blocked)
- {
- BaseType_t xHigherPriorityTaskWoken = pdFALSE;
- configASSERT(intercom_bell_read_task != NULL);
- vTaskNotifyGiveFromISR(intercom_bell_read_task, &xHigherPriorityTaskWoken);
- portYIELD_FROM_ISR();
- }
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+ configASSERT(intercom_bell_read_task != NULL);
+ vTaskNotifyGiveFromISR(intercom_bell_read_task, &xHigherPriorityTaskWoken);
+ portYIELD_FROM_ISR();
}
void intercom_bell_timer_cb(TimerHandle_t timer)
{
- ESP_LOGI(TAG, "Intercom bell timer fired");
+ bell_unblock();
+}
+
+void intercom_bell_blocker_init()
+{
is_intercom_bell_blocked = false;
+ intercom_bell_timer = xTimerCreate("intercom_bell_timer", pdMS_TO_TICKS(CONFIG_HOMEKIT_INTERCOM_LOCK_TIMEOUT),
+ pdFALSE, 0, intercom_bell_timer_cb);
+}
+
+hap_serv_t *intercom_bell_service_init()
+{
+ hap_serv_t *intercom_bell_service = hap_serv_doorbell_create(0);
+ hap_serv_add_char(intercom_bell_service, hap_char_name_create("Intercom Bell"));
+ intercom_bell_current_state = hap_serv_get_char_by_uuid(intercom_bell_service, HAP_CHAR_UUID_PROGRAMMABLE_SWITCH_EVENT);
+ return intercom_bell_service;
}
void intercom_bell_isr_gpio_init()
@@ -114,17 +150,11 @@ void intercom_bell_adc_gpio_init()
hap_serv_t *intercom_bell_init()
{
- xTaskCreate(intercom_bell_read, INTERCOM_BELL_TASK_NAME, INTERCOM_BELL_TASK_STACKSIZE, NULL, INTERCOM_BELL_TASK_PRIORITY, &intercom_bell_read_task);
-
- is_intercom_bell_blocked = false;
- intercom_bell_timer = xTimerCreate("intercom_bell_timer", pdMS_TO_TICKS(CONFIG_HOMEKIT_INTERCOM_LOCK_TIMEOUT), pdFALSE, 0, intercom_bell_timer_cb);
-
- hap_serv_t *intercom_bell_service = hap_serv_doorbell_create(0);
- hap_serv_add_char(intercom_bell_service, hap_char_name_create("Intercom Bell"));
- intercom_bell_current_state = hap_serv_get_char_by_uuid(intercom_bell_service, HAP_CHAR_UUID_PROGRAMMABLE_SWITCH_EVENT);
+ xTaskCreate(intercom_bell_read, INTERCOM_BELL_TASK_NAME, INTERCOM_BELL_TASK_STACKSIZE, NULL,
+ INTERCOM_BELL_TASK_PRIORITY, &intercom_bell_read_task);
+ intercom_bell_blocker_init();
intercom_bell_isr_gpio_init();
intercom_bell_adc_gpio_init();
-
- return intercom_bell_service;
+ return intercom_bell_service_init();
}
diff --git a/main/src/led.c b/main/src/led.c
index 63513f6..0dc0e8d 100644
--- a/main/src/led.c
+++ b/main/src/led.c
@@ -9,19 +9,19 @@
#define LED_ON 1
#define LED_OFF 0
+#define LED_DELAY 500
+#define LED_NUM_BLINK 3
int intercom_led_identify(hap_acc_t *ha)
{
ESP_LOGI(TAG, "Accessory identified");
-
- for (int i = 0; i < 3; i++)
+ for (int i = 0; i < LED_NUM_BLINK; i++)
{
gpio_set_level(GPIO_NUM_13, LED_ON);
- vTaskDelay(pdMS_TO_TICKS(500));
+ vTaskDelay(pdMS_TO_TICKS(LED_DELAY));
gpio_set_level(GPIO_NUM_13, LED_OFF);
- vTaskDelay(pdMS_TO_TICKS(500));
+ vTaskDelay(pdMS_TO_TICKS(LED_DELAY));
}
-
return HAP_SUCCESS;
}