#include <string.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/event_groups.h>
#include <freertos/queue.h>
#include <esp_log.h>
#include <esp_sleep.h>
#include <driver/gpio.h>

#include "pirSensor.h"
#include "send.h"
#include "sensor.h"

#define PIR_SENSOR_PIN   GPIO_NUM_0
#define PIR_SENSOR_MASK  (1 << PIR_SENSOR_PIN)
#define WAKEUP_PIN      GPIO_NUM_0
#define WAKEUP_MASK     (1 << WAKEUP_PIN)

#define PIR_SENSOR_CHANGE_BIT BIT0
const char *TAG = "PIR_SENSOR";

static uint8_t pirSensorLevel_u8;



static void IRAM_ATTR pirSensorIsrHandler(void* arg)
{
    //pirSensorLevel_u8 = gpio_get_level(PIR_SENSOR_PIN);
    //ESP_LOGI(TAG, "triggered Level: %d", pirSensorLevel_u8);
    ESP_LOGI(TAG, "prSensorIsrHandler");
}

uint8_t getPirSensorLevel(void)
{
    return pirSensorLevel_u8;
}

void initPirSensor(void)
{
    ESP_LOGI(TAG, "initialsing Sensor");

    /* configure sensor */
    gpio_config_t sensorConfig;
    sensorConfig.mode = GPIO_MODE_INPUT;
    sensorConfig.intr_type = GPIO_INTR_ANYEDGE;
    sensorConfig.pull_up_en = GPIO_PULLUP_DISABLE;
    sensorConfig.pull_down_en = GPIO_PULLDOWN_ENABLE;
    sensorConfig.pin_bit_mask = PIR_SENSOR_MASK;
    ESP_ERROR_CHECK(gpio_config(&sensorConfig));
    ESP_LOGI(TAG, "Pir-Sensor configured");

    /* get initial sensorlevel */
    pirSensorLevel_u8 = gpio_get_level(PIR_SENSOR_PIN);

    /* configure interrupt and add handler */
    ESP_ERROR_CHECK(gpio_install_isr_service(0));
    ESP_ERROR_CHECK(gpio_isr_handler_add(PIR_SENSOR_PIN, pirSensorIsrHandler, NULL));
    ESP_LOGI(TAG, "ISR handler Pir-Sensor configured");
}