src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/bell.c52
1 files changed, 29 insertions, 23 deletions
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 <intercom.h>
#include <bell.h>
-#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;
}