src.nth.io/

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2021-03-27 07:18:10 -0500
committerLuke Hoersten <[email protected]>2021-03-27 07:18:10 -0500
commitcdadb059ccc5577de4bb65660938914a3a245a60 (patch)
tree90872a6a85fdfb2f33763d8156f5a4313f61f2c8
parent70a4d7ab79f7579155a888be54e6d1ab55c780f9 (diff)
Simplified doorbell ISR
-rw-r--r--main/src/bell.c41
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;
}