/**
 * @author Alexandre Sales Vasconcelos (alexandre.vasconcelos@ifpb.edu.br)
 * @brief Simulation with the 7-segment display based on example in figure 15.2 of the book "Programação de Sistemas Embarcados - Desenvolvendo Software para Microcontroladores em Linguagem C" by Rodrigo de Almeida.
 * @version 0.1
 * @date 2022-07-21
 * 
 * @copyright Copyright (c) 2022
 * 
 */

#include <stdio.h>    

//freeRTOS includes 
   
#include "freertos/FreeRTOS.h" 
#include "freertos/task.h" 
      
//ESP32 includes 

#include "driver/gpio.h" 
        
//pin mapping        
#define LED_a   (1ULL<<0)    //GPIO0     
#define LED_b   (1ULL<<1)    //GPIO1   
#define LED_c   (1ULL<<2)    //GPI02
#define LED_d   (1ULL<<3)    //GPIO3
#define LED_e   (1ULL<<4)    //GPIO4
#define LED_f   (1ULL<<5)    //GPIO5
#define LED_g   (1ULL<<6)    //GPIO6
#define LED_dp  (1ULL<<7)    //GPIO7

//hex -> 7-seg
#define DIGIT_0 (LED_a | LED_b | LED_c | LED_d | LED_e | LED_f)
#define DIGIT_1 (LED_b | LED_c)
#define DIGIT_2 (LED_a | LED_b | LED_d | LED_g | LED_e | LED_d )
#define DIGIT_3 (LED_a | LED_b | LED_c | LED_d | LED_g)
#define DIGIT_4 (LED_b | LED_c | LED_f | LED_g)
#define DIGIT_5 (LED_a | LED_c | LED_d | LED_f | LED_g)
#define DIGIT_6 (LED_a | LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_7 (LED_a | LED_b | LED_c)
#define DIGIT_8 (LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_9 (LED_a | LED_b | LED_c | LED_d | LED_f | LED_g)
#define DIGIT_A (LED_a | LED_b | LED_c | LED_e | LED_f | LED_g)
#define DIGIT_b (LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_C (LED_a | LED_d | LED_e | LED_f)
#define DIGIT_d (LED_b | LED_c | LED_d | LED_e | LED_g)
#define DIGIT_E (LED_a | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_F (LED_a | LED_e | LED_f | LED_g)

//main task       
void app_main(void)        
{      
    // Enables GPIOx as output.
    REG_WRITE(GPIO_ENABLE_REG, LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g | LED_dp);
    // Set all outputs to high.
    REG_WRITE(GPIO_OUT_W1TS_REG, LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g | LED_dp);

    static const unsigned long long vetor_led[] = {DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, 
        DIGIT_7, DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_b, DIGIT_C, DIGIT_d, DIGIT_E, DIGIT_F};

    while(true) 
    {
      for (int i = 0; i <= 15; i++) {
        REG_WRITE(GPIO_OUT_W1TC_REG, vetor_led[i]);
          vTaskDelay(1000 / portTICK_PERIOD_MS);     //delay 1 secon 
        REG_WRITE(GPIO_OUT_W1TS_REG, 0x00ff); 
      }
    } 
    
}
franzininho:0
franzininho:1
franzininho:2
franzininho:3
franzininho:4
franzininho:5
franzininho:6
franzininho:7
franzininho:8
franzininho:9
franzininho:10
franzininho:11
franzininho:12
franzininho:13
franzininho:14
franzininho:15
franzininho:16
franzininho:17
franzininho:18
franzininho:21
franzininho:26
franzininho:33
franzininho:34
franzininho:35
franzininho:36
franzininho:37
franzininho:38
franzininho:39
franzininho:40
franzininho:41
franzininho:42
franzininho:43
franzininho:44
franzininho:45
franzininho:46
franzininho:3V3.1
franzininho:GND.1
franzininho:3V3.2
franzininho:GND.7
franzininho:SDA
franzininho:SCL
franzininho:5V.1
franzininho:GND.3
franzininho:GND.2
franzininho:5V.2
franzininho:GND.4
franzininho:GND.5
franzininho:GND.6
franzininho:5V.3
franzininho:21.2
sevseg1:COM.1
sevseg1:COM.2
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2