Для управления платформой был спроектирован собственный протокол обмена, которому должны придерживаться все принимаемые и передаваемемые сообщения между платформой и интерфейсом. Платформа поддерживает несколько интерфейсов через которые можно управлять и получать данные с платформы. Это:
- USB HID (USB Full Speed, 64 байт 1 пакет)
- USB CDC (USB Full Speed, 255байт 1 сообщение)
- UART 115200, 1 Stop bit, 8 word (255 байт 1 сообщение, на данный момент используеться для управления через bluetooth модуль FSC-BT802)
Для управления платформой был спроектирован собственный протокол обмена, которому должны придерживаться все принимаемые и передаваемемые сообщения между платформой и интерфейсом. Платформа поддерживает несколько интерфейсов через которые можно управлять и получать данные с платформы. Это:
- USB Custom HID (USB Full Speed, 64 байт 1 пакет)
- Отправка данных в аудио платформу
- Получение данных из аудио платформы
- USB CDC (USB Full Speed, 255байт 1 сообщение)
- Отправка данных в аудио платформу
- Получение данных из аудио платформы
- UART 115200, 1 Stop bit, 8 word (255 байт 1 сообщение, на данный момент используеться для управления через bluetooth модуль FSC-BT802)
- Отправка данных в аудио платформу
- Получение данных из аудио платформы
USB HID (USB Full Speed, 64 байт 1 пакет)
Обмен данными по USB Custom HID (Full Speed) даёт определённые преимущества, в виде отсутсвие необхоимости установки драйверов. Но также приподносит некоторые ограничения в виде не возможности передачи в одном пакете не более 64 байт данных. Для передачи более длинных сообщений (Например название треков из bluetooth модуля) был создан определённый механизм, который также здесь будет описан.
Отправка данных в аудио платформу
Максимальный размер передаваемых данных из USB Custom HID в платформу 64 байта включая всю служебную информацию. Это ограничение связано не только из за ограничения USB HID, а также из за внутренних буферов которые обрабатываются в процесе поступления данных. Которые кладутся в кольцевую очередь (FIFO) до 15 сообщений по 64 байта и могут занимать до 960 байт в оперативной памяти микроконтроллера, для дальнейшей обработки всех сообщений без пропусков и задержек.
При отправке данных по USB HID никаких сложностей возникнуть не должно. И должно соблюдаться два условия. Размер отправяемого буфер должен состоять из 65 байт, из которых самый первый байт это репорт контроллера, который всегда равен 0x01 т.е. еденице, начиная с 2-го байта по 65-й данные отправляемой команды.
Получение данных из аудио платформы
USB CDC (USB Full Speed, 255байт 1 сообщение)
Отправка данных в аудио платформу
Получение данных из аудио платформы
UART 115200, 1 Stop bit, 8 word
Отправка данных в аудио платформу
Получение данных из аудио платформы
Платформа поддерживает несколько интерфейсов через которые можно управлять и получать данные с платформы.
Все сообщения из платформы Dixom отправляются следудующим видом:
- - указатель длины сообщения, всегда занимает первый байт в сообщении (максимальная длина сообщения 255 байт)
- - тип сообщения, всегда занимает второй байт в сообщении
- - полезные данные
- - указатель конца сообщения "пробел\r\n"
В качестве примера разберём строку "8>5 3 0 60 \r\n" это приходящая команда из платформы выставление уровня основной громкости в прграмме Dixom PM
"8>5 3 0 60 \r\n" все команды состоят из служебных и полезных данных:
Служенбные данные: 8> и пробел\r\n
- 1) 8 - это длина полезных данных т.е. "5 3 0 60": всегда занимает первый байт в сообщениее (максимальная длина сообщения 255 байт)
- 2) > - это указатель типа сообщения, бывает несколько типов указателей сообщения: всегда занимает 2й байт в сообщении
- 2.1) > - Строковое цельное сообщение, указывает что сообщение целое и не имеет разрывов
- 2.2) ~ - Строковое частичное сообщение, начало части сообщение
- 2.3) + - Строковое частичное сообщение, часть сообщения
- 2.4) # - Строковое частичное сообщение, конец части сообщения
- 2.5) ^ - Байтовое цельное сообщение, указывает что сообщение целое и не имеет разрывов
- 2.6) [ - Байтовое частичное сообщение, начало части сообщение
- 2.7) & - Байтовое частичное сообщение, часть сообщения
- 2.8) ] - Байтовое частичное сообщение, конец части сообщения
- 3) пробел\r\n - указатель конца сообщения (конец сообщения состоиз из 3-х символов пробел, \r и \n)
Полезные данные: 5 3 0 60
В основную программу служебные данные не покападают, они отсекаются на уровне приёма данных и слжат исключительно для драйвера. Этот файл описывает полезные данные, в качестве примера разберём полезные данные выставления грмкости DSP.
5 3 0 60 *
| | | +--- 4 - int - DATA, Информация о уровне громкости, описание данных смотрите в классе POINTER так как каждый параметр индивидуален * | | +----- 3 - int - CHANNEL, Номер регулятора громкости, описание данных смотрите в классе POINTER так как каждый параметр индивидуален * | +------- 2 - int - PARRAM, VOLUME Параметр - это указатель параметра VOLUME в классе (PARAM.DSP.VOLUME) * +--------- 1 - int - PACKED, DSP Пакет - это указатель принадлежности к пакету DSP в классе (PACKED.DSP) * *
В основном описание данных происходит в 4 статичных классах, иногда добавляется класс POD_PARAM, описывающий данные в подпараметрах *
- PACKED - описывает общие пакеты *
- PARAM - описывает параметры которые относяться к конкретному пакет *
- GET_INFO - описывает данные, расположение указателей, типы данных и т.п и кокретное назначение. *
- CONST - константные данные сообщения