#### <font color = "MediumSeaGreen">Карта памяти stm32</font>
**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кБт)**
```c
// Адреса структур настроек

#define SYS_SECTOR         		        0x08008000
#define SYS_CRC_ADDRESS                 0x0800BF9C
```

---
#### <font color = "MediumSeaGreen">Карта памяти Artery</font>
0x0800 0000 - 0x0801 FFFF (128кБт) - **IAP**
0x0802 0000 - 0x0802 07FF (2кБт) - **Основные настройки (SETTINGS)**
0x0802 0800 - 0x0802 0FFF (2кБт) - **Системные настройки (SETTINGS_SYS)**
0x0802 1000 - 0x080X XXXX (кБт) - **FW**
**Итого: 772 кБт - занято**
```c
// Адреса структур настроек

#define SYS_SECTOR         		        0x08020800
#define SYS_CRC_ADDRESS                 0x08020FFC
#define SETTINGS_SECTOR                 0x08020000
```
---
## <font color = "MediumSeaGreen">Периферия Artery и STM32</font>
##### <font color = "#0x0b3b06">TIM Таймеры artery</font>
TIM7 - используется для периодических измерений ADC
TIM13 - используется в IAP для внешнего watchdog
TIM6 - используется для подсчета uptime и ежесуточного watchdog
##### <font color = "#0x0b3b06">TIM Таймеры stm32</font>
- TIM4 - uptime и софтверный watchdog для некоторых тасков
- TIM5 - статистика FreeRTOS
- TIM13 - сброс внешнего watchdog. В текущем релизе не используется. Сброс происходит в отдельном таске.
- TIM14 - дергает ADC
 
---
## <font color = "MediumSeaGreen">Сборка web-интерфейса (fsdata.c)</font>
- Для сборки должен быть установлен node.js (v16.x.x +), nmp, perl.
- В корневом каталоге web-интерфейса (metrolog_modem_web_ui) выполнить:
```bash
npm install
```
Cборку web'a для основного FW:
```bash
npm run build:wui
```
Сборку web'a для IAP, указав версию IAP для отображения в web-интерфейсе:
```bash
npm run build:upload -- --iap=1.01
```
- Собрать fsdata.c для FW (из корня проекта):
```perl
perl tools\makefsdata.pl fw\modules\http_server\ metrolog_modem_web_ui\dist\wui\
```
- Собрать fsdata.c для IAP (из корня проекта):
```perl
perl tools\makefsdata.pl iap\modules\ethernet\ metrolog_modem_web_ui\dist\upload\
```
---
## <font color = "MediumSeaGreen">MQTT</font>
* Для тестов можно запустить mosquitto-брокер в WSL или Linux:
```bash
$ sudo /etc/init.d/mosquitto start
```
* Подписка на все топики:
```bash
$ sudo mosquitto_sub -t '#' -v
```
##### <font color = "#1D8571">Логика работы</font>
* После подключения к брокеру контроллер подписывается на топик "/metrolog_server/serial number/command". В этот топик могут приходить следующие команды:
```json
{ "cmd": "UPDATE" } - контроллер отправляет данные в топик /metrolog/[Серийный номер]/sensors
{ "cmd": "INFO" } - прислать все значения /metrolog/[Серийный номер]/info
{ "cmd": "SETTINGS" } - прислать все значения /metrolog/[Серийный номер]/settings
```
* Отправка сообщений происходит в функции:
```c
void mqtt_publish_topic(void)
```

Топики:
/metrolog/serial number/
/metrolog/serial number/status
/metrolog_server/serial number/command - топик основных команд модема

---
#### <font color = "MediumSeaGreen">Backup регистры</font>
<font color=0x0b3b06><b>STM32:</b></font>
RTC_BKP_DR1 - loadMode (нужно ли обновляться или нет)
RTC_BKP_DR2 - bootTry
RTC_BKP_DR3 - факт обновления FW (пока не используется)
RTC_BKP_DR19 - флаг синхронизации RTC

<font color=0x0b3b06><b>Artery:</b></font>
BPR_DATA1 - loadMode (нужно ли обновляться или нет)
BPR_DATA2 - bootTry
BPR_DATA3 - loadType
BPR_DATA4 - флаг синхронизации RTC
BPR_DATA5 - трафик gsm_tx_sim_1
BPR_DATA6 - трафик gsm_tx_sim_1
BPR_DATA7 - трафик gsm_rx_sim_1
BPR_DATA8 - трафик gsm_rx_sim_1
BPR_DATA9 - трафик gsm_tx_sim_2
BPR_DATA10 - трафик gsm_tx_sim_2
BPR_DATA12 - трафик gsm_rx_sim_2
BPR_DATA12 - трафик gsm_rx_sim_2
BPR_DATA13 - трафик ethernet_tx
BPR_DATA14 - трафик ethernet_tx
BPR_DATA15 - трафик ethernet_rx
BPR_DATA16 - трафик ethernet_rx
BPR_DATA17 - флаг обновления ПО. Выставляется в загрузчике 

---
#### <font color = "MediumSeaGreen">События в журнале</font>
- логин - OK
- сохранение раздела настроек - OK
- сохраниние раздела "информация"  - OK
- обновление FW (через FW и через IAP) - OK
- попытка обновления FW  - OK
- обновления FW (timeout) - OK
- изменение версии FW - OK
- изменение версии IAP - 
- ошибка обновления FW (CRC) - OK
- изменение состояния входа 1 - OK
- изменение состояния входа 2 - OK
- изменение состояния 220В - OK
---
#### <font color = "MediumSeaGreen">Кнопки</font>
Кнопка <font color=yellow ><b>Установка - SET:</b></font> 
- Простое нажатие на статусе T0OK - гасит LED "Состояние" и начинает отправку UDP анонсов.
- Удерживание 15 секунд в основном ПО - перезагрузка устройства

Кнопка <font color=yellow ><b>Режим - MODE:</b></font> 
- Нажатие и удержание 30 секунд - установка дефолтных настроек ethernet, сохранение и перезагрузка.
- Нажатие и удержание 60 секунд - установка штатного пароля web-интерфейса.
- Если кнопка зажата при перезагрузке, то контроллер переходит в Bootloader.
---
#### <font color = "MediumSeaGreen">Изменения в AT и STM32</font>
- [x] Навести порядок в репо stm32
- [x] Перенести суточный watchdog на аппаратный таймер stm32.
- [x] Вывод логотипа на странице логина stm32
- [x] Разобраться с зарядником в main.c.
- [x] Новые параметры GSM в web-интерфейс.
- [x] Новые параметры GSM в mqtt.
- [x] Изменить настройки по умолчанию stm32.
- [x] Вывод серийника на странице модема. stm32.
- [x] Проверить обновление
- [x] Единая логика MQTT stm32 и artery
- [x] Фикс сохранения настроек в stm32
---
#### <font color = "MediumSeaGreen">TODO</font>
- Параметры трафика. Заменить JSON API.
- Установка пароля
- Параметры канала ethernet
- Определение версии IAP