From 70a4d7ab79f7579155a888be54e6d1ab55c780f9 Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Sun, 21 Mar 2021 16:51:36 -0500 Subject: Making progress on the doorbell. --- main/src/bell.c | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) (limited to 'main/src') diff --git a/main/src/bell.c b/main/src/bell.c index cfe05a7..753b16e 100644 --- a/main/src/bell.c +++ b/main/src/bell.c @@ -10,8 +10,6 @@ #include #include -#define ESP_INTR_FLAG_DEFAULT 0 - static hap_val_t HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS = {.u = 0}; volatile bool is_intercom_bell_blocked; @@ -20,27 +18,33 @@ static hap_char_t *intercom_bell_current_state; bool is_bell_ringing(int val) { - return 1.2 < val && val < 2.5; + return 2340 < val && val < 2360; } -void IRAM_ATTR intercom_bell_isr(void *arg) +void intercom_bell_read() { - if (is_intercom_bell_blocked) - { - ESP_LOGI(TAG, "Intercom bell ring BLOCKED"); - return; - } - int val = adc1_get_raw(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL); + ESP_LOGI(TAG, "Intercom bell ring value in range [%d]", val); + if (is_bell_ringing(val)) - { - ESP_LOGI(TAG, "Intercom bell ring value in range [%d]", val); intercom_bell_ring(); - } - else +} + +/* static void intercom_bell_task(void *p) +{ + while (true) { - ESP_LOGI(TAG, "Intercom bell ring value out of range [%d]", val); + intercom_bell_read(); + vTaskDelay(100); } +} */ + +void IRAM_ATTR intercom_bell_isr(void *arg) +{ + if (is_intercom_bell_blocked) + ESP_LOGI(TAG, "Intercom bell ring BLOCKED"); + else + intercom_bell_read(); } void intercom_bell_ring() @@ -48,7 +52,7 @@ void intercom_bell_ring() ESP_LOGI(TAG, "Intercom bell ring"); hap_char_update_val(intercom_bell_current_state, &HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS); is_intercom_bell_blocked = true; - xTimerReset(intercom_bell_timer, 10); + xTimerResetFromISR(intercom_bell_timer, 10); } void intercom_bell_timer_cb(TimerHandle_t timer) @@ -68,20 +72,22 @@ hap_serv_t *intercom_bell_init(uint32_t key_gpio_pin) gpio_config_t io_conf; - io_conf.intr_type = GPIO_INTR_NEGEDGE; /* Interrupt for rising edge */ - io_conf.pin_bit_mask = 1ULL << key_gpio_pin; /* Bit mask of the pins */ - io_conf.mode = GPIO_MODE_INPUT; /* Set as input mode */ - io_conf.pull_up_en = GPIO_PULLUP_DISABLE; /* Disable internal pull-up */ - io_conf.pull_down_en = GPIO_PULLDOWN_ENABLE; /* Enable internal pull-down */ + io_conf.intr_type = GPIO_INTR_NEGEDGE; /* Interrupt for rising edge */ + io_conf.pin_bit_mask = 1ULL << key_gpio_pin; /* Bit mask of the pins */ + io_conf.mode = GPIO_MODE_INPUT; /* Set as input mode */ + io_conf.pull_up_en = GPIO_PULLUP_DISABLE; /* Disable internal pull-up */ + io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE; /* Enable internal pull-down */ gpio_config(&io_conf); /* Set the GPIO configuration */ - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); /* Install gpio isr service */ + gpio_install_isr_service(ESP_INTR_FLAG_EDGE | ESP_INTR_FLAG_LOWMED); /* Install gpio isr service */ gpio_isr_handler_add(key_gpio_pin, intercom_bell_isr, (void *)key_gpio_pin); /* Hook isr handler for specified gpio pin */ // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#_CPPv425adc1_config_channel_atten14adc1_channel_t11adc_atten_t adc1_config_width(ADC_WIDTH_BIT_12); - adc1_config_channel_atten(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL, ADC_ATTEN_DB_6); + adc1_config_channel_atten(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL, ADC_ATTEN_DB_11); + + //xTaskCreate(intercom_bell_task, INTERCOM_TASK_NAME, INTERCOM_TASK_STACKSIZE, NULL, INTERCOM_TASK_PRIORITY, NULL); return intercom_bell_service; } -- cgit v1.2.3