Как следует форматировать пакеты USB MIDI?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как следует форматировать пакеты USB MIDI?

Сообщение Anonymous »

У меня есть устройство на базе микроконтроллера LPC1768, с которым я хочу подключиться к своему ноутбуку через USB3.0. Со стороны микроконтроллера — USB-C (и имеет соответствующие раскрывающиеся списки), а со стороны ноутбука — USB-A. Пакеты, которые я отправляю, — это Midi Show Control (MSC). Я читаю эти пакеты из USBPcap через Wireshark.
Пакеты каким-то образом искажены, и единственный ресурс, который мне удалось найти, — это определение класса USB-устройств для MIDI-устройств. Других устройств на шине нет. Вот пример одного пакета — отправляемые данные MSC идут от выделенного октета f0 до конца. Это соответствует спецификации MSC, указанной выше. Информация в раскрывающемся списке в левом нижнем углу навела меня на мысль, что по какой-то причине это анализируется как два пакета MIDI-событий.
Изображение

Как видно на изображении выше, мой ноутбук (хост) каждый раз отвечает URB_BULK. Я не могу найти упоминания об этом в спецификации класса устройства или любой другой документации, касающейся MIDI через USB или MSC. Я не уверен, что это за часть протокола. Вот URB_BULK.
Изображение

Устройство монтируется/определяется как «Композитное USB-устройство». Сообщения MSC не обнаруживаются программным обеспечением, принимающим MSC, или анализаторами пакетов, специфичными для MSC.
Я пробовал модифицировать отправляемый пакет MSC, манипулировать временем, изменять длину пакета. маска, биты RD_EN/WR_EN, конечные точки, а также изменение процесса монтирования/перечисления и инициализации шины. Что не так с данными, которые я отправляю? Как мне привести его в соответствие с ожидаемым форматом?
Это часть соответствующего кода. ep_write взят из usbcore.cpp в ОС mbed. Я могу придумать, как изменить свой код, если знаю, как должен выглядеть отправленный пакет, мне просто нужно знать, чем то, что я отправляю, отличается от этого формата.

Код: Выделить всё

#define TxENDPKT (1USBTxData = *buf++;
}
LPC_USB->USBCtrl = 0;
LPC_USB->USBDevIntClr |= TxENDPKT;
sie_command(SIE_SEL_EP+ep);     // select endpoint
sie_command(SIE_VAL_BUFFER);    // validate TX buffer
}

/*
Takes command byte (0x06 for set), data pointer, and data length.
Sends a formatted MSC message over serial.
Returns 0 on success.
*/
int sendMSC(uint8_t command, uint8_t *data, int datalen) {
uint8_t msc_packet[] = {0xF0, 0x7F, 0x7F, 0x02, 0x7F, command};
/*[F07F] header, marks univ sys ex/realtime
[7F] target device (broadcast)
[02] MSC specifier
[7F] command format (all)*/
memcpy(msc_packet + 6, data, datalen); //copy data to end of msc packet
uint8_t msc_close = 0xF7; //closing octet
memcpy(msc_packet + 6 + datalen, &msc_close, 1);

if (VERBOSE) {
debug(("Sending MSC packet => "));
for (int i = 0; i < 7 + datalen; ++i) {
debug(("%x ", msc_packet[i]));
}
debug(("\n"));
}
ep_write(EP5, msc_packet, 7 + datalen);
return 0;
}
Результаты USBTreeView:
Изображение
< /p>
После изменения его на HID-совместимое устройство с использованием библиотеки USBHID mbed:
[img]https://i.stack.imgur .com/mF5qX.png[/img]


Подробнее здесь: https://stackoverflow.com/questions/781 ... -formatted
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»