|  | @@ -0,0 +1,152 @@
 | 
											
												
													
														|  | 
 |  | +##### DEBUG UART
 | 
											
												
													
														|  | 
 |  | +    USART1 (PB6 - Tx, PB7 - Rx)
 | 
											
												
													
														|  | 
 |  | +Отладочный порт пересекается с рабочим портом модема. В боевой прошивке нужно отключать вывод DEBUG. Ключ при сборке "DEBUG".
 | 
											
												
													
														|  | 
 |  | +##### UART Port_1 RS485 #2
 | 
											
												
													
														|  | 
 |  | +    USART3 (PD8 - Tx, PD9 - Rx)    
 | 
											
												
													
														|  | 
 |  | +##### Карта памяти
 | 
											
												
													
														|  | 
 |  | +    Sector 0: 0x0800 0000 - 0x0800 3FFF (16кБт)
 | 
											
												
													
														|  | 
 |  | +    Sector 1: 0x0800 4000 - 0x0800 7FFF (16кБт) - Основные настройки (SETTINGS)
 | 
											
												
													
														|  | 
 |  | +    Sector 2: 0x0800 8000 - 0x0800 BFFF (16кБт) - Системные настройки (SETTINGS_SYS)
 | 
											
												
													
														|  | 
 |  | +    Sector 3: 0x0800 C000 - 0x0800 FFFF (16кБт)
 | 
											
												
													
														|  | 
 |  | +    Sector 4: 0x0801 8000 - 0x0801 FFFF (64кБт)
 | 
											
												
													
														|  | 
 |  | +    Sector 5: 0x0802 0000 - 0x0803 FFFF (128кБт)
 | 
											
												
													
														|  | 
 |  | +    Sector 6: 0x0804 0000 - 0x0805 FFFF (128кБт)
 | 
											
												
													
														|  | 
 |  | +    ............................................
 | 
											
												
													
														|  | 
 |  | +    Sector 11: 0x080E 0000 - 0x080F FFFF (128кБт)
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +#### Настройки
 | 
											
												
													
														|  | 
 |  | +##### Логика установки/загрузки настроек
 | 
											
												
													
														|  | 
 |  | +- После рестарта контроллера стартует бутлоадер. До проверки флагов обновления бутлоадер проверяет CRC общей структуры настроек. Если контрольная сумма не совпадает, то происходит установка дефолтных значений общей структуры настроек.
 | 
											
												
													
														|  | 
 |  | +- После старта основной программы (далее FW) загружаются системные настройки. Предварительно проверяется CRC и контрольное слово. Если CRC или слово не совпадают, то прошиваются дефолтные значения системных настроек.
 | 
											
												
													
														|  | 
 |  | +- Далее загружается основная структура настроек. Проверяется CRC и контрольное слово и если нужно прошиваются дефолтные значения.
 | 
											
												
													
														|  | 
 |  | +##### Общие настройки (FW + IAP)
 | 
											
												
													
														|  | 
 |  | +```sh
 | 
											
												
													
														|  | 
 |  | +// Установить параметры сетевого подключения по умолчанию
 | 
											
												
													
														|  | 
 |  | +void SETTINGS_SetWebParamsDef(void)
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +    strcpy(sSettings.sWebParams.ip, "192.168.0.254");
 | 
											
												
													
														|  | 
 |  | +    strcpy(sSettings.sWebParams.gate, "192.168.0.1");
 | 
											
												
													
														|  | 
 |  | +    strcpy(sSettings.sWebParams.mask, "255.255.255.0");
 | 
											
												
													
														|  | 
 |  | +    strcpy(sSettings.sWebParams.dns1, "8.8.8.8");
 | 
											
												
													
														|  | 
 |  | +    strcpy(sSettings.sWebParams.dns2, "8.8.4.4");
 | 
											
												
													
														|  | 
 |  | +    sSettings.sWebParams.dhcpEnable = 0;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +void SETTINGS_SetInfoDef(void)
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.productionData, "00.00.00 00:00");
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.mac, DEVICE_MAC); // "EC-4C-4D-00-90-01"
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.serialNumber, DEVICE_SERIAL); // "7030000"
 | 
											
												
													
														|  | 
 |  | +  sSettings.sInfo.id = 0;
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.location, "");
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.owner, "");
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.comments, "");
 | 
											
												
													
														|  | 
 |  | +  strcpy(sSettings.sInfo.incharge, "");
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +void SETTINGS_SetGSMDef(void)
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +    for(uint8_t i = 0; i < NUM_GSM; i++)
 | 
											
												
													
														|  | 
 |  | +    {
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].Enabled = true;
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].prior = 0;
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].type_profile = MEGAFON;
 | 
											
												
													
														|  | 
 |  | +        strcpy(sSettings.sGSM[i].ip_test, "8.8.8.8");
 | 
											
												
													
														|  | 
 |  | +        strcpy(sSettings.sGSM[i].APNaddr, "internet");
 | 
											
												
													
														|  | 
 |  | +        strcpy(sSettings.sGSM[i].APNlogin, "");
 | 
											
												
													
														|  | 
 |  | +        strcpy(sSettings.sGSM[i].APNpass, "");
 | 
											
												
													
														|  | 
 |  | +        strcpy(sSettings.sGSM[i].msisdn, "");
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].timeout = 30;
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].period_test = 100;
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].num_bad_connect = 3;
 | 
											
												
													
														|  | 
 |  | +        sSettings.sGSM[i].modem_mode = AUTOMATIC;
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    sSettings.sGSM[0].prior = 3;
 | 
											
												
													
														|  | 
 |  | +    sSettings.sGSM[1].prior = 2;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +```
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +##### Системные настройки (только FW)
 | 
											
												
													
														|  | 
 |  | +```sh
 | 
											
												
													
														|  | 
 |  | +typedef struct
 | 
											
												
													
														|  | 
 |  | +{
 | 
											
												
													
														|  | 
 |  | +  char  mac[MAC_LEN];     // MAC адрес
 | 
											
												
													
														|  | 
 |  | +  char  serial[SER_LEN];  // Серийный номер
 | 
											
												
													
														|  | 
 |  | +  char  customer[CUST_LEN]; // Производитель
 | 
											
												
													
														|  | 
 |  | +  char  proddate[PROD_LEN]; // Дата производства
 | 
											
												
													
														|  | 
 |  | +  char  testState[16];      // Статус тестирования
 | 
											
												
													
														|  | 
 |  | +  uint32_t controlword;     // Контрольное слово
 | 
											
												
													
														|  | 
 |  | +  uint32_t crc;             // CRC
 | 
											
												
													
														|  | 
 |  | +} SYS_t;
 | 
											
												
													
														|  | 
 |  | +```
 | 
											
												
													
														|  | 
 |  | +##### Основная структура настроек состоит из следующих структур:
 | 
											
												
													
														|  | 
 |  | +```
 | 
											
												
													
														|  | 
 |  | +  FLAGS_t       sFlags;
 | 
											
												
													
														|  | 
 |  | +  ETHERNET_t    sEthernet;      //настройка подключения Ethernet 
 | 
											
												
													
														|  | 
 |  | +  SERVER_t      sServer;
 | 
											
												
													
														|  | 
 |  | +  PROXY_t       sProxy;
 | 
											
												
													
														|  | 
 |  | +  AUTH_t        sAuth[MAX_WEB_USERS];
 | 
											
												
													
														|  | 
 |  | +  PORTGW_t      sPortGw[NUM_PORTGW];        // Настройки прозрачного порта
 | 
											
												
													
														|  | 
 |  | +  SNTP_t        sSNTP;   
 | 
											
												
													
														|  | 
 |  | +  PSD_t         sPSD;   
 | 
											
												
													
														|  | 
 |  | +  uint16_t      settVer;       // Версия структуры настроек 
 | 
											
												
													
														|  | 
 |  | +  uint32_t      controlWorld;  // Слово для контроля целостности структуры настроек
 | 
											
												
													
														|  | 
 |  | +  uint32_t      sCRC;
 | 
											
												
													
														|  | 
 |  | +``` 
 | 
											
												
													
														|  | 
 |  | +##### Загрузка
 | 
											
												
													
														|  | 
 |  | +###### До старта загрузочной задачи
 | 
											
												
													
														|  | 
 |  | +- Сохранение флагов причин перезагрузки (флаги пока не используются)
 | 
											
												
													
														|  | 
 |  | +- Инициализация GPIO
 | 
											
												
													
														|  | 
 |  | +- USB switch для работы RNDIS
 | 
											
												
													
														|  | 
 |  | +- Инициализация USART
 | 
											
												
													
														|  | 
 |  | +- Запуск Watchdog
 | 
											
												
													
														|  | 
 |  | +- Инициализация jSON hooks
 | 
											
												
													
														|  | 
 |  | +###### Действия в загрузочной задаче
 | 
											
												
													
														|  | 
 |  | +- Звуковой сигнал buzzer
 | 
											
												
													
														|  | 
 |  | +- Генератор случайных чисел
 | 
											
												
													
														|  | 
 |  | +- Таймер для расчета производительности FreeRTOS
 | 
											
												
													
														|  | 
 |  | +- Запуск таймера Uptime
 | 
											
												
													
														|  | 
 |  | +- Инициализация SPI2, мьютекса для SPI2
 | 
											
												
													
														|  | 
 |  | +- Погасить все LED на сдвиговым регистре (LED уровня GSM сигнала)
 | 
											
												
													
														|  | 
 |  | +- Установка мультиплексора в режим отключения ПСД
 | 
											
												
													
														|  | 
 |  | +- Инициализация кнопок и запуск таска
 | 
											
												
													
														|  | 
 |  | +- Анализ нажатия кнопки "MODE". Если кнопка нажата, то переход в Bootloader.
 | 
											
												
													
														|  | 
 |  | +- Загрузка настроек
 | 
											
												
													
														|  | 
 |  | +- Переинициализация всех USART
 | 
											
												
													
														|  | 
 |  | +- Монтирование файловой системы
 | 
											
												
													
														|  | 
 |  | +- Запуск измерений ADC и Power Manager
 | 
											
												
													
														|  | 
 |  | +- Запуск задачи управления LED
 | 
											
												
													
														|  | 
 |  | +- Запуск задачи отправки UDP анонсов
 | 
											
												
													
														|  | 
 |  | +- Запуск задачи Connection Manager
 | 
											
												
													
														|  | 
 |  | +- Запуск задач прозрачных портов
 | 
											
												
													
														|  | 
 |  | +- Запуск Задачи PSD (параллельная диспетчеризация)
 | 
											
												
													
														|  | 
 |  | +- Запуск RTC
 | 
											
												
													
														|  | 
 |  | +- Запуск MQTT
 | 
											
												
													
														|  | 
 |  | +- Запуск Монитора
 | 
											
												
													
														|  | 
 |  | +- Сброс BootTry
 | 
											
												
													
														|  | 
 |  | +##### Индикация
 | 
											
												
													
														|  | 
 |  | +  - Мигает красным диодом "Сервер" до установки сетевых параметорв на эапе тестирования кроме "T2_OK".
 | 
											
												
													
														|  | 
 |  | +##### MODEM UART
 | 
											
												
													
														|  | 
 |  | +    USART2 (PD5 - Tx, PD6 - Rx)
 | 
											
												
													
														|  | 
 |  | +##### Таймеры
 | 
											
												
													
														|  | 
 |  | + - TIM4 - на 1Гц для счетчика uptime 
 | 
											
												
													
														|  | 
 |  | + - TIM5 - на 10кГц для загрузки FreeRTOS
 | 
											
												
													
														|  | 
 |  | + - TIM13 - сброс внешнего Watchdog таймера
 | 
											
												
													
														|  | 
 |  | + - TIM14 - триггер для АЦП
 | 
											
												
													
														|  | 
 |  | +##### Конфигурация проекта
 | 
											
												
													
														|  | 
 |  | + - #define SOFTWARE_WATCHDOG (common_config.h) - сброс watchdog в отдельном таске
 | 
											
												
													
														|  | 
 |  | + - MQTT_CLIENT - MQTT клиент
 | 
											
												
													
														|  | 
 |  | +##### Кнопки. Логика работы
 | 
											
												
													
														|  | 
 |  | + - Кнопка SET "Установка"
 | 
											
												
													
														|  | 
 |  | +    Простое нажатие на статусе T0OK - гасит LED "Состояние" и начинает отправку UDP анонсов.
 | 
											
												
													
														|  | 
 |  | +    Нажатие 15 секунд - перезагрузка
 | 
											
												
													
														|  | 
 |  | + - Кнопка MODE "Режим"
 | 
											
												
													
														|  | 
 |  | +    Нажатие 30 секунд - установка дефолтных настроек ethernet, сохранение и перезагрузка.
 | 
											
												
													
														|  | 
 |  | +    При перезагрузке и при зажатой кнопке MODE контроллер переходит в резим Bootloader.
 | 
											
												
													
														|  | 
 |  | +##### TODO
 | 
											
												
													
														|  | 
 |  | + - Макросы в settings_api.c
 | 
											
												
													
														|  | 
 |  | + - Вернуть дефолтные настройки (settings_api.c)
 | 
											
												
													
														|  | 
 |  | +####
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 |