diff options
| author | Luke Hoersten <[email protected]> | 2021-03-27 07:18:10 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2021-03-27 07:18:10 -0500 |
| commit | cdadb059ccc5577de4bb65660938914a3a245a60 (patch) | |
| tree | 90872a6a85fdfb2f33763d8156f5a4313f61f2c8 /main | |
| parent | 70a4d7ab79f7579155a888be54e6d1ab55c780f9 (diff) | |
Simplified doorbell ISR
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/bell.c | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/main/src/bell.c b/main/src/bell.c index 753b16e..985ca4e 100644 --- a/main/src/bell.c +++ b/main/src/bell.c @@ -21,38 +21,21 @@ bool is_bell_ringing(int val) return 2340 < val && val < 2360; } -void intercom_bell_read() -{ - 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)) - intercom_bell_ring(); -} - -/* static void intercom_bell_task(void *p) -{ - while (true) - { - 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(); -} + return; -void intercom_bell_ring() -{ - ESP_LOGI(TAG, "Intercom bell ring"); + // TODO: Can ADC1 be read from ISR? + int val = adc1_get_raw(CONFIG_HOMEKIT_INTERCOM_BELL_ADC1_CHANNEL); + + if (!is_bell_ringing(val)) + return; + + // TODO: Can hap function be called from an ISR? hap_char_update_val(intercom_bell_current_state, &HAP_PROGRAMMABLE_SWITCH_EVENT_SINGLE_PRESS); is_intercom_bell_blocked = true; - xTimerResetFromISR(intercom_bell_timer, 10); + xTimerResetFromISR(intercom_bell_timer, pdFALSE); } void intercom_bell_timer_cb(TimerHandle_t timer) @@ -72,7 +55,7 @@ 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.intr_type = GPIO_INTR_ANYEDGE; /* 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 */ @@ -84,10 +67,8 @@ hap_serv_t *intercom_bell_init(uint32_t key_gpio_pin) 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_width(ADC_WIDTH_BIT_12); /* The value read is 12 bits wide (range 0-4095). */ 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; } |
