/*
 * UVEOS_GOST_Settings.h
 *
 *  Created on: Apr 12, 2021
 *      Author: zemon
 */

#ifndef INC_UVEOS_GOST_SETTINGS_H_
#define INC_UVEOS_GOST_SETTINGS_H_

#include "stdint.h"
#include "stdbool.h"
#include "BaseTypes.h"
#include <UveosGostSettingsTypes.h>

typedef struct {
    bool MANUAL_SET_MODEM_POWER;
    uint16_t MODEM_POWER_FOR_LTE_MODE;
    uint16_t MODEM_POWER_FOR_WCDMA_MODE;
    uint16_t MODEM_POWER_FOR_GSM_MODE;
    uint16_t CODEC_VOLUE_LEVEL;

    bool ECALL_TEST_MODE;  //совершать все вызовы на тестовый номер
    uint8_t FULL_POWER_OFF_TIME;
    bool BIP_POWER_MODE;
    uint16_t BIP_RED_LED_POWER_MODE;
    uint16_t TEST_BUTTON_TIME;
    tString32 AMPL_CONF;
    bool ECALL_DEBUG_MODE;
} tUveosNotGostSettings;

typedef struct {

    //Radio settings
    uint16_t RADIO_MUTE_DELAY;                   //*(МС) Задержка между установкой сигнала  «радио mute» и началом проигрывания звука
    uint16_t RADIO_UNMUTE_DELAY;                 //*(МС) Задержка между снятием сигнала «радио mute» и окончанием проигрывания звукае

    //настройки сробатывания
    uint8_t CRASH_SIGNAL_INTERNAL;              //* Только транспортные средства категорий М1 и N1 — для определения события аварии используется встроенный измеритель ускорения
    uint8_t CRASH_SIGNAL_EXTERNAL;              //* Только транспортные средства категорий М1 и N1 — для определения факта ДТП используется внешний датчик в транспортном средстве
    float ASI15_TRESHOLD;                       //* Только транспортные средства категорий М1 и N1 — порог срабатывания датчика автоматической идентификации события ДТП
    uint16_t SOS_BUTTON_TIME;                   //* (МС)  Время нажатия на кнопку «Экстренный вызов» для активации режима «Экстренный вызов»
    uint8_t ECALL_NO_AUTOMATIC_TRIGGERING;      //Параметр используется для отмены функции автоматической инициации экстренного вызова

    //Параметры дозвона
    tString16 ECALL_TEST_NUMBER;                //номер для тестового вызова
    uint16_t CCFT;                              //(МИН) Длительность счетчика автоматического прекращения звонка (60 м)
    uint16_t ECALL_DIAL_DURATION;               //(МИН) Общая продолжительность дозвона при инициации экстренного вызова
    uint64_t MSD_MAX_TRANSMISSION_TIME;         //(CEK) Максимальная длительность передачи MSD (20 с)
    uint8_t ECALL_MANUAL_CAN_CANCEL;            //TRUE — экстренный вызов, инициированный вручную, может быть прекращен со стороны пользователя

    //Ожидание
    uint64_t CALL_AUTO_ANSWER_TIME;              //(МИН)Промежуток времени после завершения экстренного вызова, в течение которого УСВ автоматически отвечает на входящие звонки

    //Веремя регестрации в сети
    uint64_t NAD_DEREGISTRATION_TIME;           //(МИН) Время, после которого коммуникационный модуль GSM и UMTS прекращает регистрацию в сети
    uint64_t POST_TEST_REGISTRATION_TIME;       //Промежуток времени, в течение которого УСВ остается зарегистрированной в сети после передачи результатов тестирования оператору системы

    //Оптравка экстренных ситуаций из памяти
    tString16 ECALL_SMS_FALLBACK_NUMBER;        //Номер, по которому УСВ посылает SMS с МНД при ошибке передачи МНД посредством in-band модема и по запросу от оператора системы. Определяется оператором национальной системы реагирования на аварии
    uint64_t INT_MEM_TRANSMIT_INTERVAL;         //интервал времени между повторными попытками отправки мнд из памяти
    uint16_t INT_MEM_TRANSMIT_ATTEMPTS;         //количество попыток отпкравки мнд из памяти

    //Попытки дозвона
    uint16_t ECALL_AUTO_DIAL_ATTEMPTS;          //Только транспортные средства категорий М1 и N1 — число попыток дозвона при автоматически инициированном экстренном вызове. Не может быть установлено в «0»
    uint16_t ECALL_MANUAL_DIAL_ATTEMPTS;        //Число попыток дозвона при экстренном вызове, инициированном вручную. Значение не может устанавливаться в «0»


    //Testing settings - тестирование и гараж
    // Если УСВ была зарегистрирована в сети посредством нажатия на кнопку «Дополнительные функции»,
    // то последующая регистрация УСВ в сети при нажатии на кнопку «Дополнительные функции» возможна
    // не ранее чем через данный промежуток времени. Если значение установлено в «0»,
    // то ограничений на последующую регистрацию УСВ в сети не накладывается
    uint16_t TEST_REGISTRATION_PERIOD;
    uint16_t TEST_MODE_END_DISTANCE;             //(Метры)Дистанция, на которой режим тестирования выключается автоматически
    uint16_t GARAGE_MODE_END_DISTANCE;           //*(Метры) Дистанция, на которой режим «Автосервис» выключается автоматически


    //Emergence acceleration profile - полностью используеться в коплектации доп оборудования
    uint16_t IGNITION_OFF_FOLLOW_UP_TIME1;      //* Промежуток времени, в течение которого осуществляется запись профиля ускорения при ДТП при выключенном зажигании
    uint16_t IGNITION_OFF_FOLLOW_UP_TIME2;      //* Промежуток времени, в течение которого осуществляется определение события аварии при выключенном зажигании
    uint16_t CRASH_RECORD_TIME;                 //* Время записи информации о профиле ускорения при ДТП
    uint16_t CRASH_RECORD_RESOLUTION;           //* Дискретность записи профиля ускорения при ДТП
    uint16_t CRASH_PRE_RECORD_TIME;             //* Время записи информации о профиле ускорения до того, как событие ДТП наступило
    uint16_t CRASH_PRE_RECORD_RESOLUTION;       //* Продолжительность одного отсчета при записи профиля ускорения до того, как событие ДТП наступило


    //Other settings - параметры навигацонного приемника - используються при инициализации приемника, а так же записываются в него после их изменения (все без участия УВЕОС,платформозависомо)
    uint16_t GNSS_POWER_OFF_TIME;               //* Промежуток времени, через который отключается питание приемника ГНСС после выключения зажигания
    uint16_t GNSS_DATA_RATE;                    //Темп выдачи данных приемником ГНСС
    uint16_t GNSS_MIN_ELEVATION;                //* Минимальное значение угла возвышения (угла отсечки) навигационных космических аппаратов


    //Vehicle parameters - Параметры транспортного средства, записываються в МНД
    tString32 VIN; //18

    uint16_t VEHICLE_TYPE;                      //Категория транспортного средства
    uint8_t VEHICLE_PROPULSION_STORAGE_TYPE;    //Тип энергоносителя
    uint8_t VEHICLE_PASSENGERS_NUMBER;          //Количество пасажиров


    //неиспользуються, у нас пины определены заранее
    uint16_t GARAGE_MODE_PIN;                   //*номер пина на котором поднимаеться сигнал в случае прехода в режим гараж
    uint16_t ECALL_MODE_PIN;                    //*номер пина на котором поднимаеться сигнал в случае прехода в режим ecall

    tUveosNotGostSettings notGost;

} tUveosGostSettings;

void vUveosGostSettingsInitDefaults(tUveosGostSettings *gostSettings);

#endif /* INC_UVEOS_GOST_SETTINGS_H_ */
