Files
Smart-granary-code/components/human_door/human_door.c

40 lines
1.1 KiB
C

#include "human_door.h"
#include "driver/gpio.h"
#include "esp_check.h"
static const char *TAG = "human_door";
static bool s_inited = false;
esp_err_t human_door_init(void)
{
if (s_inited) {
return ESP_OK;
}
gpio_config_t io_cfg = {
.pin_bit_mask = (1ULL << HUMAN_SENSOR_GPIO) | (1ULL << DOOR_SWITCH_GPIO),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE,
};
ESP_RETURN_ON_ERROR(gpio_config(&io_cfg), TAG, "gpio config failed");
s_inited = true;
return ESP_OK;
}
esp_err_t human_door_read(human_door_state_t *out_state)
{
ESP_RETURN_ON_FALSE(out_state != NULL, ESP_ERR_INVALID_ARG, TAG, "out_state is null");
ESP_RETURN_ON_FALSE(s_inited, ESP_ERR_INVALID_STATE, TAG, "not initialized");
int human_level = gpio_get_level((gpio_num_t)HUMAN_SENSOR_GPIO);
int door_level = gpio_get_level((gpio_num_t)DOOR_SWITCH_GPIO);
out_state->human_present = (human_level != 0);
out_state->door_closed = (door_level == 0);
return ESP_OK;
}