Модель OSI
Все общение в UBI можно представить как видоизмененную модель OSI.
Представление уровней в UBI
Коротко о каждом уровне:
- Hardware layer отвечает на вопрос, какой hw порт мы используем. Он должен быть реализован на аппаратном уровне. То есть это настройка портов микроконтроллера, настройка DMA, прерываний и т.д.
- Port layer отвечает на вопрос, как мы используем hw интерфейс. Он работает hardware интерфейсом, управляет DMA, приемом и отправкой данных.
- Protocol layer отвечает на вопрос, как обернуть данные в header и CRC. Он описывающий формат данных, их обработку и передачу. Он проверяет целостность данных, и относится ли этот пакет к этому устройству. При отправке пакета он добавляет заголовок и CRC.
- Receiver layer отвечает на вопрос, что делать с полученными данными. Он обрабатывает принятые команды и запросы от уровня Protocol и вызывает соответствующие функции, забирает данные из User layer и отправляет их на уровень Protocol.
- User layer отвечает на вопрос, какие данные отдать на запрос. Это уровень, который работает с данными, которые пришли от Receiver layer. Он содержит задекларированные данные для устройства, дата слоты, колбеки и т.д.
HW уровень реализуется в файлах аппаратной платформы (HAL библиотеки для STM32, например). Реализация этого уровня специфична для каждого устройства.
Port, Protocol, Receiver находятся внутри /main_ubi_sdk и требуют корректной инициализации в начале работы (об этом далее). Они описывают алгоритмы передачи данных, поэтому не изменяются от устройства к устройству.
User layer реализуется внутри /SDK и содержит данные, специфичные для работы устройства.
Ресивер
В UBI один ресивер, который обрабатывает пакеты. В него можно направить команду или запрос параметра. При этом команда может быть базовой (main_reciever) или специфичной для устройства (custom_receiver).
Список протоколов
В данный момент в UBI реализованы следующие протоколы.
- Описание p2p протокола
P2P протокол предназначен для работы с высокоуровневыми портами USB и BLE. В рамках UBI архитектуры это подключаемые сторонние устройства, вроде мобильного телефона или компьютера.
- Описание внутрисистемного протокола
Внутрисистемный протокол, который используется для общения между устройствами внутри системы. Может работать на любом порту, но с usb и ble не используется, потому что есть p2p.
Список портов
В данный момент в UBI реализованы следующие порты:
- uart_port
- spi_port
- onewire_port
- usb_port
- ble_port
Список данных устройства
В данный момент в UBI реализованы следующие пользовательские данные:
- data_slots
- Parameters
- parameter_widgets (да, это часть параметров, но описание отдельное)