Описание функциональных характеристик

Встроенное программное обеспечение видеоларингоскопа «СЕНСАР»

Версия ПО: 1.15 Дата: 23.02.2026

1. Общие сведения

Встроенное программное обеспечение видеоларингоскопа «СЕНСАР» является управляющим программным обеспечением видеоларингоскопа, предназначенного для визуализации дыхательных путей и голосовых связок во время эндотрахеальной интубации, а также для осмотра и обследования верхних дыхательных путей, в том числе при проведении отдельных ЛОР-процедур. Программное обеспечение обеспечивает захват изображения с эндоскопической камеры в режиме реального времени, отображение видеопотока на встроенном дисплее, фотосъёмку и видеозапись, просмотр медиатеки, передачу видеопотока по сети, а также управление системными параметрами устройства.

Целевое аппаратное обеспечение: встраиваемая платформа на базе системы-на-кристалле Rockchip RV1126 с процессорным ядром ARM Cortex-A7 (4 ядра). Программное обеспечение разработано на языке C++11 с применением фреймворка Qt версии 5.9.4 и декларативного языка разметки интерфейса QML.

Версия программного обеспечения: 1.15.

Область применения: медицинские учреждения, скорая медицинская помощь, анестезиология и реаниматология.

Идентификационные наименования компонентов:

  • Исполняемый файл: sensar
  • Файл проекта Qt: src/sensar.pro
  • Точка входа: src/main.cpp
  • QML точка входа: qrc:/qml/main.qml

2. Архитектура системы

2.1. Общая структура

Программное обеспечение построено по модульной архитектуре. Ядро системы реализовано на языке C++11 и отвечает за бизнес-логику, взаимодействие с аппаратным обеспечением и управление ресурсами. Пользовательский интерфейс реализован на декларативном языке QML с применением фреймворка Qt Quick.

Основной паттерн организации: синглтон — каждый функциональный модуль представлен единственным экземпляром объекта, созданным в функции main() и зарегистрированным в контексте QML. Взаимодействие между модулями осуществляется через механизм сигналов и слотов Qt.

2.2. Реестр синглтонов

Все синглтоны создаются и связываются в src/main.cpp. В следующей таблице приведён полный перечень модулей, зарегистрированных в контексте QML:

Имя в QMLКласс C++11Описание
splashScreenSplashScreenУправление экраном загрузки
navigationControllerNavigationControllerСтековая навигация между экранами
cameraManagerCameraManagerУправление жизненным циклом камеры
mediaStorageMediaStorageУправление хранилищем медиафайлов
photoCapturePhotoCaptureФотосъёмка
videoEncoderVideoEncoderВидеозапись
inputHandlerInputHandlerОбработка аппаратных кнопок
galleryModelGalleryModelМодель фотогалереи
videoGalleryModelVideoGalleryModelМодель видеогалереи
systemMetricsSystemMetricsСбор метрик производительности
diskSpaceMonitorDiskSpaceMonitorМониторинг дискового пространства
batteryWarningControllerBatteryWarningControllerПредупреждения о заряде батареи
autoCleanupAutoCleanupАвтоматическая очистка хранилища
settingsManagerSettingsManagerУправление настройками
wifiManagerWiFiManagerУправление Wi-Fi подключением
mjpegServerMjpegStreamingServerHTTP MJPEG стриминг
tcpStreamTcpStreamClientTCP мониторинг (ImagePDU)
nfcReaderNfcConfigReaderСчитывание конфигурации с NFC меток
TranslationsTranslationsЛокализация интерфейса
brightnessControllerBrightnessControllerУправление яркостью подсветки
inactivityMonitorInactivityMonitorМониторинг бездействия и энергосбережение

2.3. QML-типы

Следующие классы зарегистрированы как QML-типы в модуле Sensar 1.0:

  • MjpegAviPlayer — воспроизведение видеозаписей в формате MJPEG AVI;
  • CameraPreviewItem — отображение кадров с камеры в режиме реального времени.

2.4. Диаграмма межмодульных зависимостей

Ключевые сигнальные связи между модулями:

  • nfcReader → wifiManager: передача считанных с NFC метки параметров Wi-Fi (SSID, пароль);
  • wifiManager → tcpStream: уведомление об изменении состояния Wi-Fi подключения;
  • nfcReader → tcpStream: передача конфигурации TCP из NFC метки;
  • cameraManager → tcpStream: передача сырых JPEG кадров для TCP стриминга;
  • cameraManager → systemMetrics: подсчёт FPS через сигнал frameReady.

3. Аппаратная платформа

Программное обеспечение разработано и оптимизировано для следующей аппаратной конфигурации:

КомпонентХарактеристика
ПроцессорRockchip RV1126, ARM Cortex-A7 x4
ОЗУ1.75 ГБ DDR
НакопительeMMC (внутренняя flash-память)
ДисплейЖК, 4.5” сенсорный IPS, 854×480 пикселей
КамераUSB UVC-совместимая, форматы MJPEG/YUYV, разрешение до 1280×720
БатареяLi-ion, контроллер rk-bat (доступ через sysfs)
Wi-Fi802.11 b/g/n, интерфейс wlan0, управление через wpa_supplicant и nl80211
NFCFM17580 (Fudan Micro), UART /dev/ttyS4, скорость 115200 бод
Кнопки6 аппаратных кнопок, доступ через evdev (/dev/input/event0–4)
LED индикаторwork_led, управление через sysfs (триггеры: heartbeat / none)
USBUSB Type-C (зарядка, ADB, передача данных)
Подсветка дисплеяsysfs backlight, диапазон яркости 0–255

Графическая подсистема работает через драйвер linuxfb и DRM. Плагин eglfs недоступен в используемом BSP (Board Support Package). Аппаратное ускорение кодирования H.264 недоступно в текущей версии BSP, поэтому применяется программный MJPEG кодек.

4. Модуль управления камерой

4.1. Состав модуля

Модуль управления камерой включает следующие классы:

  • V4L2Camera — низкоуровневое взаимодействие с камерой через Video4Linux2 (V4L2) API;
  • CameraManager — синглтон, управляющий жизненным циклом камеры и публикацией кадров;
  • CameraWatchdog — независимый поток мониторинга подключения камеры.

4.2. Инициализация и автообнаружение

При запуске приложения CameraManager автоматически выполняет сканирование устройств /dev/video0 — /dev/video9 для обнаружения подключённой камеры. После обнаружения производится инициализация устройства с выбором оптимального формата и разрешения.

CameraWatchdog запускается в отдельном потоке и осуществляет периодический опрос состояния подключения камеры с интервалом 1 секунда. При обнаружении отключения или повторного подключения генерируются соответствующие сигналы.

4.3. Поддерживаемые форматы и разрешения

Приоритет выбора формата:

  1. MJPEG (приоритетный формат, аппаратное сжатие камеры);
  2. YUYV (YUV 4:2:2, программное преобразование);
  3. RGB24 (прямой RGB).

Поддерживаемые разрешения подключаемых устройств (в порядке убывания приоритета):

  • 1920х1080 (1080р);
  • 1280×720 (720p);
  • 960×540 (540p);
  • 640×480 (480p).

4.4. Буферизация

Для захвата видео применяется буферизация V4L2 через разделяемую память (mmap):

  • инициализация: VIDIOC_REQBUFS;
  • постановка буфера в очередь: VIDIOC_QBUF;
  • извлечение буфера из очереди: VIDIOC_DQBUF.

4.5. Декодирование

Декодирование JPEG кадров выполняется библиотекой libturbojpeg:

  • целевой формат пикселей: TJPF_BGRA;
  • флаг быстрого дискретного косинусного преобразования: TJFLAG_FASTDCT;
  • аппаратное ускорение: SIMD NEON (ARMv7).

При разрешении камеры 720p (1280×720) для отображения на экране превью производится масштабирование вниз в 2 раза до разрешения 640×360, что снижает нагрузку на CPU при рендеринге.

4.6. Публикация кадров

После декодирования кадра генерируются два сигнала:

  • frameReady(QImage) — декодированный кадр в формате QImage для отображения на экране;
  • rawFrameReady — сырые JPEG данные для передачи в модули сетевого стриминга.

5. Модуль фотосъёмки

Класс: PhotoCapture

Модуль отвечает за захват неподвижного изображения с камеры и сохранение его в файловой системе устройства.

Характеристики:

  • Формат сохранения: JPEG;
  • Разрешение: полное разрешение камеры (без масштабирования);
  • Декодирование выполняется без downscale для сохранения максимального качества изображения;
  • Формат имени файла: photo_yyyyMMdd_HHmmss.jpg, где yyyyMMdd — дата, HHmmss — время в момент съёмки;
  • Каталог сохранения: /userdata/media/photos/.

После сохранения файла модуль генерирует сигнал обновления галереи для отражения нового снимка в GalleryModel.

6. Модуль видеозаписи

Класс: VideoEncoder

Модуль обеспечивает запись видеопотока с камеры в файл.

Характеристики:

  • Формат контейнера: AVI (RIFF);
  • Видеокодек: MJPEG — каждый кадр представляет собой независимый JPEG образ, что обеспечивает совместимость и возможность покадрового доступа;
  • Частота кадров: 30 fps;
  • Формат имени файла: video_yyyyMMdd_HHmmss.avi;
  • Каталог сохранения: /userdata/media/videos/;
  • При записи автоматически генерируется файл миниатюры (thumbnail) для отображения в видеогалерее.

Запись начинается по сигналу от пользователя (нажатие кнопки SENSAR_TRIGGER или соответствующий элемент сенсорного интерфейса) и завершается повторным нажатием той же кнопки. В период активной видеозаписи таймер бездействия InactivityMonitor принудительно перезапускается при каждом записанном кадре для предотвращения перехода устройства в режим сна.

7. Модуль воспроизведения видео

7.1. Состав модуля

  • MjpegAviPlayer — QML-тип (наследует QQuickPaintedItem), рендер-таргет Image;
  • MjpegDecoderWorker — рабочий поток декодирования (отдельный QThread).

7.2. Парсинг AVI файлов

При открытии файла выполняется:

  1. Проверка RIFF magic (сигнатура AVI контейнера);
  2. Чтение частоты кадров из заголовка AVI: поле usPerFrame по смещению 0x20 (микросекунды на кадр);
  3. Если поле usPerFrame отсутствует или равно нулю, применяется значение по умолчанию — 15 fps.

7.3. Индексирование кадров

Для навигации по видео выполняется индексирование кадров:

  • Приоритетный метод: чтение чанка idx1 (16 байт на запись), содержащего смещения и размеры кадров;
  • Резервный метод: полное сканирование файла при отсутствии или повреждении чанка idx1.

Файл загружается в оперативную память через механизм mmap для обеспечения произвольного доступа к кадрам с минимальными задержками.

7.4. Декодирование

Декодирование каждого JPEG кадра выполняется библиотекой libturbojpeg:

  • целевой формат пикселей: TJPF_BGRA;
  • флаг: TJFLAG_FASTDCT;
  • при ширине кадра ≥ 1280 пикселей применяется масштабирование вниз в 2 раза для оптимизации рендеринга.

7.5. Управление таймингом воспроизведения

Применяется цепочечная схема таймера (chain-based): следующий кадр декодируется только после завершения рендеринга предыдущего. Это исключает накопление очереди декодирования при высокой нагрузке CPU.

Адаптивное планирование (adaptive scheduling):

  • компенсация отставания при незначительных задержках;
  • при накоплении отставания более 3 кадров производится сброс базовой точки отсчёта времени.

7.6. QML API

Свойство / МетодТипОписание
sourcestringПуть к файлу AVI
playingboolСостояние воспроизведения
durationintДлительность в миллисекундах
positionintТекущая позиция в миллисекундах
play()методНачать / возобновить воспроизведение
pause()методПриостановить воспроизведение
stop()методОстановить и вернуться в начало
seek(pos)методПерейти к указанной позиции (мс)
seekRelative(delta)методПерейти относительно текущей позиции (мс)

8. Модуль галерей

8.1. Классы

  • GalleryModel — модель данных для галереи фотографий;
  • VideoGalleryModel — модель данных для галереи видеозаписей.

8.2. Фотогалерея

GalleryModel предоставляет данные для отображения сетки миниатюр фотографий. Фотографии считываются из каталога /userdata/media/photos/ и сортируются от новых к старым.

8.3. Видеогалерея

VideoGalleryModel предоставляет данные для отображения списка видеозаписей с указанием длительности каждой записи. Видеозаписи считываются из каталога /userdata/media/videos/ и сортируются от новых к старым.

8.4. Кэш миниатюр

Для ускорения загрузки галерей реализован ThumbnailProvider:

  • тип кэша: in-memory;
  • максимальный размер кэша: 50 элементов;
  • размер каждой миниатюры: 210×155 пикселей.

9. Модуль отображения

9.1. Классы

  • CameraPreviewItem — QML-тип (наследует QQuickPaintedItem), рендер-таргет FramebufferObject;
  • FrameProvider — поставщик изображений для QML (QQuickImageProvider).

9.2. Рендеринг кадров

CameraPreviewItem подписывается на сигнал CameraManager::frameReady и выполняет прямой рендеринг кадра через QPainter::drawImage. Синхронизация между потоком камеры и потоком рендеринга Qt обеспечивается через QMutex.

При отсутствии кадра (камера не подключена или поток прерван) производится заливка области отображения чёрным цветом.

10. Сетевой модуль: Wi-Fi

Класс: WiFiManager

10.1. Аппаратный интерфейс

  • Сетевой интерфейс: wlan0;
  • Стандарт: IEEE 802.11 b/g/n;
  • Управление подключением: утилита wpa_cli (команды через QProcess);
  • Запуск wpa_supplicant с драйвером nl80211;
  • Получение IP-адреса: udhcpc -i wlan0 -q.

10.2. Управление питанием

После установки подключения автоматически отключается режим энергосбережения Wi-Fi адаптера командой:

iw dev wlan0 set power_save off

10.3. Таймеры опроса

ТаймерИнтервалНазначение
Статус подключения5 секундПроверка текущего состояния
Сигнал изменения статуса10 секундУведомление QML интерфейса
Результаты сканирования3 секунды после команды scanСчитывание найденных сетей

10.4. Шкала уровня сигнала

Уровень сигнала рассчитывается на основе значения RSSI:

Диапазон RSSI (дБм)Уровень (0–4)
≥ −504 (отличный)
−60 … −513 (хороший)
−70 … −612 (средний)
−80 … −711 (слабый)
< −800 (нет сигнала)

10.5. Парсинг результатов сканирования

Результаты сканирования (scan_results) разбираются по формату с разделителем табуляция: bssid, freq, signal, flags, ssid.

11. Сетевой модуль: MJPEG стриминг

Класс: MjpegStreamingServer

Модуль реализует HTTP сервер для трансляции видеопотока с камеры на внешние устройства в формате MJPEG.

Технические характеристики:

  • Протокол: HTTP;
  • Метод: GET /stream;
  • TCP-порт: 8080;
  • Content-Type: multipart/x-mixed-replace; boundary=frame;
  • Формат каждого кадра в потоке: заголовок Content-Type: image/jpeg + Content-Length: <размер> + бинарные данные JPEG;
  • Поддержка нескольких одновременных клиентских подключений (учёт через счётчик активных подключений).

Стриминг запускается автоматически при запуске приложения и активен на протяжении всей работы устройства при наличии подключения к Wi-Fi сети.

12. Сетевой модуль: TCP монитор

Класс: TcpStreamClient

12.1. Назначение

Модуль реализует передачу видеопотока во внешнюю систему мониторинга по протоколу TCP с использованием бинарного протокола ImagePDU.

12.2. Сетевые параметры

  • Порты назначения: 6123, 1312 (перебираются как кандидаты);
  • Параметры сокета: SO_SNDBUF 512 КБ, TCP_NODELAY, неблокирующий режим после handshake, флаг MSG_NOSIGNAL для отправки данных.

12.3. Протокол ImagePDU

Бинарный заголовок каждого пакета:

  • Префикс: 10 байт (##100006##);
  • Длина полезной нагрузки: 4 байта (uiPDULen, unsigned int);
  • Полезная нагрузка: данные JPEG изображения.

12.4. Процедура установки соединения (Handshake)

  1. Клиент отправляет строку ##100002##;
  2. Ожидание ответа: таймаут 3 секунды;
  3. Чтение и проверка ответного сообщения сервера.

12.5. Перекомпрессия JPEG

Перед отправкой каждый кадр перекомпрессируется для снижения трафика:

  • декодирование через libturbojpeg;
  • повторное кодирование с качеством quality=30, флаг TJFLAG_FASTDCT;
  • снижение размера кадра при передаче по сети.

12.6. Тайм-ауты отправки

  • Первый байт не отправлен за 50 мс → отправка отменяется, функция возвращает false;
  • Частичная отправка не завершена за 500 мс → отправка отменяется, функция возвращает false.

12.7. Алгоритм сканирования хостов

Для автоматического обнаружения сервера мониторинга применяется приоритетное сканирование подсети:

  • Приоритетные октеты хоста: {1, 100, 200, 50, 2, 254, 101, 10, 81} — проверяются в первую очередь;
  • Таймаут подключения для приоритетных хостов: 150 мс;
  • Таймаут подключения для остальных хостов: 100 мс.

12.8. Логика переподключения

ПараметрЗначение
Задержка перед переподключением3 секунды
Максимальное число циклов сканирования5
Пауза между циклами сканирования5 секунд
Максимальное число попыток подключения к хосту10
Пауза между попытками подключения1 секунда

12.9. LED индикация состояния

  • Подключение установлено: work_led brightness = 255 (постоянное свечение);
  • Подключение отсутствует: work_led trigger = heartbeat (мигание).

13. Сетевой модуль: NFC

Классы: NfcConfigReader, NfcUartWorker

13.1. Аппаратное обеспечение

  • Чип NFC считывателя: FM17580 производства Fudan Micro;
  • Интерфейс: UART (/dev/ttyS4);
  • Параметры порта: скорость 115200 бод, формат 8N1, без аппаратного управления потоком.

13.2. Протокол взаимодействия

Взаимодействие с чипом выполняется через бинарный командный протокол:

  • Команда инициализации: 6 байт;
  • Команда опроса наличия метки (poll): 16 байт, отправляется каждую секунду.

13.3. Формат данных NFC метки

Данные записываются на метку в текстовом формате UTF-8:

SSID|PASSWORD

где | — разделитель между именем сети и паролем.

Минимальная длина валидных данных: 5 байт. Байт recv_buf[3] содержит длину полезных данных.

13.4. Поллинг

Поллинг выполняется в отдельном потоке pthread. Ожидание данных через select с таймаутом 10 секунд.

13.5. Передача конфигурации

При успешном считывании метки генерируется сигнал tagRead, который преобразуется в сигнал wifiConfigReceived(ssid, password) и передаётся в WiFiManager для автоматического подключения к указанной сети.

14. Модуль настроек

Класс: SettingsManager

14.1. Хранение настроек

  • Формат файла: JSON;
  • Путь: /userdata/settings.json;
  • Файл создаётся при первом запуске приложения с настройками по умолчанию.

14.2. Параметры настроек

ПараметрТипДопустимые значенияОписание
Wi-Fibooltrue / falseВключение/отключение Wi-Fi
Дата/времяstringISO 8601Системное время устройства
Формат времениenum24h / 12hФормат отображения времени
Яркостьint0–255Яркость подсветки дисплея
ЯзыкenumRU / ENЯзык интерфейса

14.3. Сохранение

Для предотвращения избыточных операций записи при частом изменении параметров реализован debounce таймер: фактическая запись в файл выполняется через 500 мс после последнего изменения настроек.

15. Модуль яркости

Класс: BrightnessController

Управление яркостью подсветки дисплея осуществляется через интерфейс sysfs:

  • Путь к узлу управления: /sys/class/backlight/backlight/brightness;
  • Диапазон значений: 0 (выключена) — 255 (максимальная яркость);
  • Текущее значение яркости сохраняется в SettingsManager и восстанавливается при следующем запуске.

Модуль используется совместно с InactivityMonitor для управления яркостью при переходе в режим сна и при пробуждении.

16. Модуль энергосбережения

Класс: InactivityMonitor

16.1. Состояния устройства

Модуль управляет тремя состояниями:

  1. Активное — нормальная работа;
  2. Ожидание перехода в режим сна — обратный отсчёт 10 секунд перед переходом в сон;
  3. Режим сна — экран погашен, камера остановлена, питание на байонетном разъеме отключено.

16.2. Таймеры

ТаймерИнтервалДействие
Таймер бездействия600 000 мс (10 минут)Инициировать переход в режим сна
Обратный отсчёт10 секунд (TimerFd)Уведомить пользователя и перейти в режим сна
Таймер автовыключения1 800 000 мс (30 минут в режиме сна)Выполнить poweroff

16.3. Переход в режим сна

При входе в режим сна выполняются следующие действия последовательно:

  1. Остановка захвата с камеры (CameraManager);
  2. Сохранение текущего значения яркости;
  3. Гашение подсветки дисплея (brightness = 0);
  4. Выключение LED индикатора;
  5. Отключение питания на байонетном разъёме.

16.4. Пробуждение

При получении события пробуждения (нажатие любой кнопки):

  1. Включение питания USB;
  2. Включение LED индикатора;
  3. Восстановление яркости подсветки (3 попытки с паузой 200 мс, верификационная задержка 2 с);
  4. Через 500 мс — полный перезапуск приложения через execv().

Перезапуск через execv() обеспечивает корректную повторную инициализацию всех аппаратных компонентов без перезагрузки операционной системы.

16.5. Исключение при видеозаписи

При активной видеозаписи таймер бездействия принудительно перезапускается при каждом записанном кадре, что исключает переход в режим сна во время съёмки.

16.6. Сброс таймера бездействия

Сброс таймера выполняется при каждом нажатии аппаратной кнопки через метод InactivityMonitor::resetActivity(), вызываемый из InputHandler.

17. Модуль батареи

Класс: BatteryWarningController

17.1. Источник данных

Данные об уровне заряда считываются из интерфейса sysfs:

/sys/class/power_supply/rk-bat/capacity

Значение представляет собой целое число в диапазоне 0–100 (проценты).

17.2. Пороги предупреждений

Уровень зарядаДействие
35 %Показать предупреждение (3 мигания)
30 %Показать предупреждение (3 мигания)
25 %Показать предупреждение (3 мигания)
20 %Показать предупреждение (3 мигания)
15 %Показать предупреждение (3 мигания)
10 %Показать предупреждение (3 мигания)
5 %Показать предупреждение (3 мигания)

Предупреждение отображается однократно при достижении каждого порогового значения в сторону убывания.

17.3. Цветовая индикация заряда

Диапазон зарядаЦвет индикатора
≥ 60 %Зелёный
40–59 %Жёлтый
20–35 %Оранжевый
< 20 %Красный

18. Модуль дискового пространства

Классы: DiskSpaceMonitor, AutoCleanup

18.1. Мониторинг дискового пространства

DiskSpaceMonitor выполняет периодический опрос состояния файловой системы с интервалом 30 секунд. Результаты опроса публикуются в QML контексте и отображаются в строке состояния.

18.2. Цветовая индикация заполненности диска

ЗаполненностьЦвет индикатора
< 70 %Зелёный
70–89 %Жёлтый
≥ 90 %Красный

18.3. Автоматическая очистка хранилища

AutoCleanup активируется при превышении порога заполненности диска 70%. При активации модуль последовательно удаляет наиболее старые медиафайлы (фотографии и видеозаписи) до тех пор, пока заполненность не снизится до 30 %.

Порядок удаления: файлы удаляются в порядке от более старых к более новым на основании метки времени создания.

19. Модуль ввода

Класс: InputHandler

19.1. Архитектура

Модуль осуществляет мониторинг событий от аппаратных кнопок через подсистему evdev Linux:

  • Сканирование устройств: /dev/input/event0 — /dev/input/event4;
  • Режим открытия: O_RDONLY | O_NONBLOCK;
  • Обработка событий: QSocketNotifier на каждый файловый дескриптор;
  • Тип событий: EV_KEY (структура input_event).

19.2. Таблица кнопок

Имя кнопкиКод LinuxЗначениеНазначение
SENSAR_TRIGGER59KEY_F1ФОТО/ВИДЕО (курок)
SENSAR_OK30KEY_AПодтверждение выбора
SENSAR_UP103KEY_UPНавигация вверх
SENSAR_DOWN108KEY_DOWNНавигация вниз
SENSAR_MENU48KEY_BОткрытие меню
SENSAR_POWER116KEY_POWERПитание / сон

19.3. Обработка кнопки питания

Кнопка SENSAR_POWER поддерживает длительное нажатие:

  1. При удержании кнопки более 2 секунд инициируется последовательность выключения;
  2. Гашение подсветки дисплея и светодиодов на дистальном конце подключенного устройства;
  3. Вызов sync() для сброса буферов файловой системы;
  4. Выполнение /sbin/poweroff;
  5. Принудительное завершение: _exit(0).

19.4. Сброс таймера бездействия

При каждом нажатии любой кнопки вызывается метод InactivityMonitor::resetActivity() для сброса таймера бездействия.

20. Модуль локализации

Класс: Translations

Модуль обеспечивает поддержку многоязычного интерфейса.

Поддерживаемые языки:

  • Русский (RU) — язык по умолчанию;
  • Английский (EN).

Реализация: строки локализации хранятся непосредственно в исходном коде C++ без использования стандартного механизма Qt Linguist (файлы .ts / .qm). Все строки пользовательского интерфейса в QML файлах обращаются к свойствам объекта Translations.

Переключение языка выполняется мгновенно без перезагрузки приложения или пересоздания QML объектов — через обновление свойств синглтона.

21. Модуль логирования

Класс: Logger

Характеристики:

  • Путь к файлу журнала: /tmp/sensar.log;
  • Файл пересоздаётся при каждом запуске приложения (история предыдущих сессий не сохраняется);
  • Уровни детализации: DEBUG, INFO, WARNING, CRITICAL;
  • Интеграция с Qt: перехват системных сообщений Qt через qInstallMessageHandler (охватывает qDebug(), qWarning(), qCritical()).

Журнал предназначен для диагностики неисправностей и отладки. В производственной среде рекомендуется использовать уровень INFO или выше.

22. Модуль метрик

Класс: SystemMetrics

Модуль осуществляет непрерывный сбор метрик производительности системы и их запись в файл CSV.

Характеристики:

  • Путь к файлу метрик: /userdata/logs/sensar_metrics.csv;
  • Формат файла: CSV (значения, разделённые запятыми);
  • FPS подсчитывается через вызов метода incrementFrame() из модуля управления камерой при каждом полученном кадре.

Собираемые метрики:

МетрикаИсточник данных
FPSСчётчик кадров CameraManager
Использование ОЗУ/proc/meminfo
Загрузка CPU/proc/stat
Температура процессора/sys/class/thermal
Использование дискаstatvfs()
Уровень заряда батареи/sys/class/power_supply/rk-bat/capacity

23. Пользовательский интерфейс

23.1. Технология

  • Фреймворк: Qt Quick / QML;
  • Точка входа: qrc:/qml/main.qml;
  • Разрешение экрана: 854×480 пикселей;
  • Управление: сенсорный экран + аппаратные кнопки (InputHandler).

23.2. Экраны приложения

Приложение включает 10 экранов:

ЭкранQML файлОписание
SplashScreenЭкран загрузки при старте приложения
MainMenuГлавное меню
CameraViewПросмотр видеопотока с камеры в реальном времени
PhotoGalleryСетка миниатюр фотографий
PhotoViewerПросмотр выбранной фотографии
VideoGalleryСписок видеозаписей с миниатюрами
VideoPlayerВоспроизведение видеозаписи
GuideScreensrc/qml/GuideScreen.qmlУчебные материалы / инструкция
SettingsScreensrc/qml/SettingsScreen.qmlНастройки устройства
WifiSettingsScreensrc/qml/WifiSettingsScreen.qmlНастройки Wi-Fi

23.3. Оверлеи

Поверх основных экранов отображаются 5 оверлеев:

ОверлейQML файлНазначение
StatusBarВремя, уровень заряда, Wi-Fi, диск
BatteryWarningПредупреждение о низком заряде батареи
SleepCountdownОбратный отсчёт до перехода в режим сна
DiskWarningПредупреждение о заполнении диска
NfcOverlaysrc/qml/components/NfcOverlay.qmlУведомление о считывании NFC метки

23.4. Навигация

Навигация между экранами осуществляется через синглтон NavigationController, реализующий стековую модель: каждый переход помещает новый экран на стек, кнопка «назад» убирает верхний экран. Предусмотрена защита от возврата на SplashScreen после завершения загрузки.

23.5. Экран руководства пользователя

Экран GuideScreen отображает обучающие материалы по применению ларингоскопа. Контент представлен в виде последовательности страниц, включающих текстовые описания и иллюстрации. Тексты руководства локализованы и отображаются в соответствии с выбранным языком интерфейса.

23.6. Экран настроек

Экран SettingsScreen обеспечивает управление следующими параметрами:

  • Язык интерфейса (RU / EN);
  • Яркость экрана (ползунок 0–255);
  • Формат времени (24ч / 12ч);
  • Настройка даты и времени;
  • Просмотр информации о свободном месте на диске.

23.7. Экран Wi-Fi настроек

Экран WifiSettingsScreen обеспечивает:

  • Включение/отключение Wi-Fi;
  • Сканирование доступных сетей;
  • Подключение к выбранной сети с вводом пароля;
  • Отображение текущего статуса подключения и уровня сигнала.

24. Форматы данных

Тип данныхФорматРасширениеПуть храненияОписание
ФотографииJPEG.jpg/userdata/media/photos/Полное разрешение камеры
ВидеозаписиMJPEG AVI.avi/userdata/media/videos/RIFF контейнер, 30 fps
НастройкиJSON.json/userdata/settings.jsonПараметры приложения
МетрикиCSV.csv/userdata/logs/Данные производительности
ЖурналPlain text.log/tmp/sensar.logСистемный журнал

25. Используемые библиотеки и зависимости

БиблиотекаВерсияНазначение
Qt5.9.4UI фреймворк: Quick, QML, Concurrent, Network, Core
FFmpeglibavformat, libavcodec, libavutil, libswscale (парсинг AVI)
libturbojpegJPEG декодирование / кодирование с SIMD NEON ускорением
POSIXtimerfd, pthread, mmap, evdev, sysfs интерфейсы
wpa_supplicantУправление Wi-Fi подключением (вызов через wpa_cli)
udhcpcDHCP клиент для получения IP-адреса

Компиляция выполняется для архитектуры ARM Cortex-A7 (armhf) с кросс-компилятором arm-linux-gnueabihf-g++. Стандарт языка: C++11.

26. Системные требования и ограничения

26.1. Ресурсные требования

РесурсТребование
Минимальный объём ОЗУ~100 МБ для приложения
Свободное место на eMMCМинимум 500 МБ для операционных нужд
Частота процессораARM Cortex-A7, 4 ядра, ≥ 1 ГГц

26.2. Технические ограничения

Видеокодек. Аппаратное кодирование H.264 недоступно в текущей версии BSP для Rockchip RV1126. Применяется программный MJPEG кодек на CPU. Данное ограничение влияет на размер записываемых видеофайлов по сравнению с форматами с эффективным сжатием.

LED камеры. Индикационный светодиод камеры запитан от линии 5V USB напрямую. Программное отключение LED при переходе в режим сна невозможно без отключения питания всей USB линии.

Графическая подсистема. Используемый BSP поддерживает работу только через драйверы linuxfb и DRM. Плагин Qt QPA eglfs (OpenGL ES через EGL) недоступен. Доступные Qt QPA плагины:

  • linuxfb — прямой доступ к framebuffer;
  • minimal — без отображения (тестирование);
  • offscreen — внеэкранный рендеринг;
  • vnc — удалённый доступ через VNC.

26.3. Требования к операционной системе

  • Ядро Linux с поддержкой V4L2, evdev, sysfs;
  • Наличие wpa_supplicant, wpa_cli, udhcpc в системе;
  • Наличие iw для управления параметрами Wi-Fi;
  • Права на доступ к /dev/input/event*, /dev/video*, /dev/ttyS4.

Сведения о документе

Версия документа: 1.15 Дата составления: 23.02.2026 Разработчик ПО: ООО «ШИФТАПП»

Контакты
+7 (495) 161-60-21
info@sensar.su

Фактический адрес:
г. Москва, ул. 3-я Рыбинская, д. 18с22

Юридический адрес:
105122, г. Москва, вн. тер. г. муниципальный округ Измайлово, Сиреневый бульвар, д. 4, к. 3, помещ. 1/1

Обработка персональных данных на основании 152-ФЗ

OK
© ООО "СЕНСАР" 2024