#include "at32f403a_407.h"
#include "output.h"
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>


out_t outputs[OUTPUT_NUMBER] = {
    {GPIOC, GPIO_PINS_12, 0},
    {GPIOD, GPIO_PINS_2,  0},
    {GPIOE, GPIO_PINS_6,  0},
    {GPIOC, GPIO_PINS_1,  0},
    {GPIOC, GPIO_PINS_11, 0},
    {GPIOD, GPIO_PINS_3,  0},
    {GPIOE, GPIO_PINS_5,  0},
    {GPIOC, GPIO_PINS_2,  0}
};


simple_gpio_t load_sens[OUTPUT_NUMBER] = {
    {GPIOD, GPIO_PINS_0},
    {GPIOD, GPIO_PINS_1},
    {GPIOC, GPIO_PINS_13},
    {GPIOC, GPIO_PINS_0},
    {GPIOC, GPIO_PINS_10},
    {GPIOD, GPIO_PINS_4},
    {GPIOE, GPIO_PINS_4},
    {GPIOC, GPIO_PINS_3}
};



//
void out_init(out_t *out)
{
    gpio_init_type gpio_init_struct;

    // Выход
    if (out->mode == 0)
    {
        gpio_default_para_init(&gpio_init_struct);
        
        gpio_init_struct.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
        gpio_init_struct.gpio_pull           = GPIO_PULL_NONE;  
        gpio_init_struct.gpio_mode           = GPIO_MODE_OUTPUT;  
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_pins           = out->pin;
        gpio_init(out->port, &gpio_init_struct); 
    }
}

//
void load_sens_init(simple_gpio_t *sens)
{
    gpio_init_type gpio_init_struct;
    
    gpio_default_para_init(&gpio_init_struct);
        
    gpio_init_struct.gpio_pull           = GPIO_PULL_NONE;  
    gpio_init_struct.gpio_mode           = GPIO_MODE_INPUT;  
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_pins           = sens->pin;
    gpio_init(sens->port, &gpio_init_struct); 
}

//
void out_test(void)
{
    for (int i = 0; i < OUTPUT_NUMBER; i++)
    {
        outputs[i].port->odt ^= outputs[i].pin;
        
        printf("LOAD_1: %u LOAD_2: %u LOAD_3: %u LOAD_4: %u LOAD_5: %u LOAD_6: %u LOAD_7: %u LOAD_8: %u\r\n", 
           gpio_input_data_bit_read(load_sens[0].port, load_sens[0].pin),
           gpio_input_data_bit_read(load_sens[1].port, load_sens[1].pin),
           gpio_input_data_bit_read(load_sens[2].port, load_sens[2].pin),
           gpio_input_data_bit_read(load_sens[3].port, load_sens[3].pin),
           gpio_input_data_bit_read(load_sens[4].port, load_sens[4].pin),
           gpio_input_data_bit_read(load_sens[5].port, load_sens[5].pin),
           gpio_input_data_bit_read(load_sens[6].port, load_sens[6].pin), 
           gpio_input_data_bit_read(load_sens[7].port, load_sens[7].pin));
        
        vTaskDelay(500);
    }  
}

