Для управления платформой был спроектирован собственный протокол обмена, которому должны придерживаться все принимаемые и передаваемемые сообщения между платформой и интерфейсом.  Платформа поддерживает несколько интерфейсов через которые можно управлять и получать данные с платформы. Это:

  • 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 отправляются следудующим видом:         

  1. - указатель длины сообщения, всегда занимает первый байт в сообщении (максимальная длина сообщения 255 байт)
  2. - тип сообщения, всегда занимает второй байт в сообщении 
  3. - полезные данные 
  4. - указатель конца сообщения "пробел\r\n"       

В качестве примера разберём строку "8>5 3 0 60 \r\n" это приходящая команда из платформы выставление уровня основной громкости в прграмме Dixom PM 

"8>5 3 0 60 \r\n" все команды состоят из служебных и полезных данных:   

Служенбные данные: 8> и пробел\r\n           

  1. 1) 8 - это длина полезных данных т.е. "5 3 0 60": всегда занимает первый байт в сообщениее (максимальная длина сообщения 255 байт)         
  2. 2) > - это указатель типа сообщения, бывает несколько типов указателей сообщения: всегда занимает 2й байт в сообщении        
    • 2.1) > - Строковое цельное сообщение, указывает что сообщение целое и не имеет разрывов      
    • 2.2) ~ - Строковое частичное сообщение, начало части сообщение       
    • 2.3) + - Строковое частичное сообщение, часть сообщения  
    • 2.4) # - Строковое частичное сообщение, конец части сообщения
    • 2.5) ^ - Байтовое цельное сообщение, указывает что сообщение целое и не имеет разрывов       
    • 2.6) [ - Байтовое частичное сообщение, начало части сообщение      
    • 2.7) & - Байтовое частичное сообщение, часть сообщения      
    • 2.8) ] - Байтовое частичное сообщение, конец части сообщения
  3. 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 - константные данные сообщения