#include "at32f403a_407.h" 
#include "settings_api.h"
#include "settings_ai.h"
#include "analog_input.h"

#if defined (MAI_12)

//
void settings_ai_set_all_default(void)
{
    // Аналоговые входы
    settings_ai_def(&settings);
    
    // Питание внешних датчиков
    settings_ext_sens_power_def(&settings);
}

//
void settings_ai_def(settings_t *settings)
{
    // Все входы выключены
    settings->ai_state_bits = 0;
    
    // Режим измерения напряжения
    settings->ai_mode_bits = 0;
    
    // режим измерения напряжения (0 - 0-10В)
    settings->ai_voltage_mode_bits = 0;
    
    // режим измерения тока (0 - 4-20 mA)
    settings->ai_current_mode_bits = 0;
    
    // Основные 12 каналов
    for (int i = 0; i < AI_COMMON_NUMBER; i++) 
    {  
        settings->ai[i].state = 0;  // вход выключен
        settings->ai[i].mode = 0;   // режим измерения напряжения (ток или напряжение)
        settings->ai[i].voltage_mode = 0;   // диапазон измерения напряжения (0 - 0-10В)
        settings->ai[i].current_mode = 0;   // диапазон измерения тока (0 - 4-20 mA)
        settings->ai[i].gain_factor = 1;    // коэф-т усиления внешнего ADC
        settings->ai[i].k_factor = 1.0;
        settings->ai[i].b_factor = 0.0;
    }
    
    settings->ai[0].name = AN_INP_1;
    settings->ai[1].name = AN_INP_2;
    settings->ai[2].name = AN_INP_3;
    settings->ai[3].name = AN_INP_4;
    settings->ai[4].name = AN_INP_5;
    settings->ai[5].name = AN_INP_6;
    settings->ai[6].name = AN_INP_7;
    settings->ai[7].name = AN_INP_8;
    settings->ai[8].name = AN_INP_9;
    settings->ai[9].name = AN_INP_10;
    settings->ai[10].name = AN_INP_11;
    settings->ai[11].name = AN_INP_12;

    // Дополнительные 2 канала. Измерения происходят всегда.
    for (int i = 0; i < AI_ADD_NUMBER; i++) 
    {  
        settings->ai_add[i].state = 1;  // вход включен
        settings->ai_add[i].mode = 0;   // режим измерения напряжения
        settings->ai_add[i].gain_factor = 1; // коэф-т усиления внешнего ADC
        settings->ai_add[i].k_factor = 1.0;
        settings->ai_add[i].b_factor = 0.0;
    }
    
    settings->ai_add[0].name = V_ISO_CL;
    settings->ai_add[1].name = V_ISO;
    settings->ai_add[2].name = CRNT_LIM_U_BFR_R;
    settings->ai_add[3].name = CRNT_LIM_U_ABFR_R;
    
    // Уставки
    
    // Уставки по всем каналам включены
    settings->preset_state_bits = 4095;
    
    // Параметры уставок
    for (int i = 0; i < AI_COMMON_NUMBER; i++)
    {
        settings->preset[i].state = 1;      // включена
        settings->preset[i].type = 0;       // тип уставки - фиксированное значение
        settings->preset[i].hyst = 5.0;     //
        settings->preset[i].min = 0;        // TODO пока условно
        settings->preset[i].max = 30000;    // TODO пока условно
    }
    
    
    // Время ведения архива по каждому каналу (сек.)
    for (uint8_t i = 0; i < ARCH_AI_CH_NUMBER; i++) {
        settings->period_archive[i] = 3600;
    }
    
    
}

//
void settings_ext_sens_power_def(settings_t *settings)
{
    settings->ext_sens_power = 0;
}

#endif