Механизм обновления автоматический: каждые 30 секунд (по дефолту) проверяется наличие .bin файла. Если в каталоге /mnt/nand_disk_ext/lacte появляется файл с расширением .bin, приложение пробует прошить плату.
При старте приложения, до запуска основной логики, сервис пытается найти прошивку и прошить плату. Только после этого стартует основная логика.
Условия запуска прошивки
- Проверяется контрольная сумма CRC в конце файла — по алгоритму, используемому средой IAR (специальный способ вычисления, применяемый в сборке).
- Если CRC сошлась — файл прошивается, по завершении файл удаляется из /tmp.
- Если CRC не сошлась — прошивка не выполняется, файл удаляется.
- Если плата находилась в App то сервис посылает команду перезагрузки (0x127) а плата отправляет ответ (Разрешено или нет. Подробнее описано в протоколе). В случае запрета перезагрузки, попытка повторится через 30 секунд.
- Если плата не находится в App(не отвечает на запросы) то перепрошивка начинатеся сразу
Фиксация события
- Если прошивка удалась, в БД фиксируется событие:
storage.AddStat("update_complete", "True");
- Если прошивка не удалась, по неизвестной ошибке в БД фиксируется:
storage.AddStat("update_complete", "False");
но файл в таком случае не удаляется. Прошивка повторится через 30 секунд. Если по прошествию 5 попыток прошивка не удастся, то сервис будет ждать коннекта с app платы , и только потом повторит прошивку
Итог
- Виртуальный режим (--virtual) пока не выполняет прошивку.
- Для реального устройства следует указывать --dev или положиться на автообнаружение по VID:PID 067b:23a3.
- При успешной/неуспешной прошивке событие фиксируется в таблице статистики:
storage.AddStat("update_complete", "True"); // при успехе
storage.AddStat("update_complete", "False"); // при ошибке
- Также ведётся лог: «File removed after flashing: <path>» или «Error while flashing file: <path>».