/** 
**************************************************************************
* @file mylibs_config.h
* @brief Конфигурации для библиотек MyLibs
**************************************************************************
* @defgroup MYLIBS_CONFIG   Configs
* @ingroup  MYLIBS_ALL
* @brief    Конфигурации для библиотек MyLibs
* @{
*************************************************************************/
#ifndef __MYLIBS_CONFIG_H_
#define __MYLIBS_CONFIG_H_

#include "stm32f4xx_hal.h"

// user includes

/** 
  * @addtogroup TRACE_CONFIG   Trace configs
  * @ingroup    MYLIBS_CONFIG
  * @brief      Конфигурация трекеров и трассировки
  * @{
  */

#define TRACKERS_ENABLE           ///< Включить трекеры
#define SERIAL_TRACE_ENABLE       ///< Включить serial трассировку
#define RTT_TRACE_ENABLE          ///< Включить serial трассировку через RTT
#define SWO_TRACE_ENABLE          ///< Включить serial трассировку через SWO
/**
  * @brief Уровень log serial трассировки @ref log_printf
  *  - LOG_LEVEL == 0 - логирование отключено (макрос пустой)
  *  - LOG_LEVEL == 1 - выводится время и TAG
  *  - LOG_LEVEL >= 2 - выводится время, TAG, имя файла и номер строки
  */
#define LOG_LEVEL 1

#define RTT_FLASH_BUFFER_SIZE   1024                    ///< Размер буфера RTT в Flash
#define RTT_FLASH_SECTOR        FLASH_SECTOR_11         ///< Сектор FLASH куда положится RTT буфер
#define RTT_FLASH_SECTOR_START  0x080E0000              ///< Начало сектора RTT_FLASH_SECTOR
#define RTT_FLASH_SECTOR_END    0x080FFFFF              ///< Конец сектора RTT_FLASH_SECTOR


#define HARDFAULT_SERIAL_TRACE  ///< Включить обработку и serial трассировку Hardfault
#define HF_RTT_TAG_BASE         0xDEAD0000              ///< базовый тег для HardFault
#define HF_RTT_TAIL_SIZE        RTT_FLASH_BUFFER_SIZE   ///< Размер буфера RTT, который сохранится при Hardfault
#define HF_STACK_DUMP_WORDS     32                      ///< Сколько слов стека будет проанализировано во время Hardfault
#define HF_FLASH_ADDR           ((uint32_t)0x080FF000)  ///< Адрес FLASH куда положится RTT буфер
#define HF_RAM_END              0x20030000              ///< Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)

#define GPIO_TRACE_ENABLE         ///< Включить GPIO трассировку

/** TRACE_CONFIG
  * @}
  */


/** 
  * @addtogroup GEN_CONFIG   Genetic configs
  * @ingroup    MYLIBS_CONFIG
  * @brief      Конфигурация генетического алгоритма обучения
  * @{
  */

#define GEN_OPTIMIZATION_ENABLE       ///< Включить оптимизацию параметров
#define GEN_MAX_PARAMS       20       ///< Максимальное количество параметров
#define GEN_MAX_CANDIDATES   100      ///< Максимальное количество кандидатов для обучения

/** GEN_CONFIG
  * @}
  */


/** 
  * @addtogroup GEN_CONFIG   Genetic configs
  * @ingroup    MYLIBS_CONFIG
  * @brief      Конфигурация генетического алгоритма обучения
  * @{
  */


#define BENCH_TIME_ENABLE             ///< Включить бенч времени
#define BENCH_TIME_MAX_CHANNELS 16    ///< Максимальное количество каналов измерения

/** GEN_CONFIG
  * @}
  */



/** 
  * @addtogroup LIBS_CONFIG   Libraries configs
  * @ingroup    MYLIBS_CONFIG
  * @brief      Подключение различных модулей библиотеки
  * @{
  */

#define local_time()      uwTick      ///< Локальное время

#define INCLUDE_GEN_OPTIMIZER      ///< Подключить библиотеку для оптимизации параметров
#define INCLUDE_BIT_ACCESS_LIB        ///< Подключить библиотеку с typedef с битовыми полями
#define INCLUDE_TRACKERS_LIB          ///< Подключить библиотеку с трекерами
#define INCLUDE_TRACE_LIB             ///< Подключить библиотеку с трейсами
#define INCLUDE_GENERAL_PERIPH_LIBS   ///< Подключить библиотеку с периферией
#define FREERTOS_DELAY                ///< Использовать FreeRTOS задержку, вместо HAL

/** LIBS_CONFIG
  * @}
  */

/** MYLIBS_CONFIG
  * @}
  */
#endif //__MYLIBS_CONFIG_H_