#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
#include "driver/gpio.h"

#define LED_BUILTIN 18

int timeInterval = 500;
int idTimer = 1;
uint8_t ledLevel = 0;
TimerHandle_t xTimer; 

esp_err_t init_gpio(void);
esp_err_t init_timer(void);
esp_err_t blink_led(void);

void vTimerLedCallback(TimerHandle_t pxTimer){
  blink_led();
  printf("led estate is: %d \n ", ledLevel);
}

esp_err_t blink_led(void){
  ledLevel = !ledLevel;
  gpio_set_level(LED_BUILTIN, ledLevel);
  return ESP_OK;
}

esp_err_t init_gpio(void){
  gpio_reset_pin(LED_BUILTIN);
  gpio_set_direction(LED_BUILTIN, GPIO_MODE_OUTPUT);
  return ESP_OK;
}

esp_err_t init_timer(){
  xTimer = xTimerCreate("timer led", 
                        pdMS_TO_TICKS(timeInterval),
                        pdTRUE,
                        (void*) idTimer,
                        vTimerLedCallback);
  
  if(xTimer == NULL){
    printf("No se pudo crear el timer!");
  }
  else{
    if(xTimerStart(xTimer, 0) != pdPASS){
      printf("No se pudo iniciar el timer!");
    }
  }
  
  return ESP_OK;
}

void app_main() {
  init_gpio();
  init_timer();
  printf("Hello, Wokwi!\n");

  while (true) {
    vTaskDelay(1000 / portTICK_PERIOD_MS);
  }
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
r1:1
r1:2
led1:A
led1:C