_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба Какую длину использовать при передаче String descriptor для iManufacturer и iProduct ? Использовать длину из самого дескриптора или из поля wLength запроса GET_DESCRIPTOR ? Ковыряю имеющийся код там используется длина из запроса. При энумерации хост запрашивает 4 байта для StringDescriptor_0, 16 байт для StringDescriptor_1 и 24 байта для StringDescriptor_2. Откуда берутся эти цифры (причем и в win и lin они одинаковые)? В спецификации и букварях нигде не нашел ограничений на длину StringDescriptor кроме 255 байт. StringDescriptor_2 у меня длиной 52 байта и получается лажа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба Отдавать не более чем запросил хост. Он в два этапа читает - запрашивает начало, где размер. А потом еще раз целиком. Если у Вас дескриптор на 5 байт а хост запросил 8 - отдаем 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 43 минуты назад, GenaSPB сказал: Отдавать не более чем запросил хост. Он в два этапа читает - запрашивает начало, где размер. А потом еще раз целиком. Если у Вас дескриптор на 5 байт а хост запросил 8 - отдаем 5 Хост действительно запрашивает 2 или 3 раза но всегда с фиксированной длиной. Целиком ни разу не запрашивает. Вот передергивание кабеля. I0L4D4 - сообщения обработчика GetStringDescriptorI - индекс дескриптора, L - поле wLength запроса, D - фактическая длина дескриптора Windows (Full speed) -------------------------------------------------- Suspend Request Interrupt Reset Status Interrupt Full speed after reset Device is configured for Full Speed Reset Status Interrupt Full speed after reset Device is configured for Full Speed I0L4D4 I2L24D52 I0L4D4 I1L16D22 I2L24D52 I2L24D52 USBR_GET_STATUS value of dx->remotewakeup is 0 I0L4D4 I1L16D22 I2L24D52 LINUX (Full speed) -------------------------------------------------- Suspend Request Interrupt Reset Status Interrupt Full speed after reset Device is configured for Full Speed Reset Status Interrupt Full speed after reset Device is configured for Full Speed I0L4D4 I2L24D52 I0L4D4 I1L16D22 I2L24D52 I2L24D52 I0L4D4 I1L16D22 I2L24D52 Reset Status Interrupt Full speed after reset Device is configured for Full Speed Reset Status Interrupt Full speed after reset Device is configured for Full Speed Reset Status Interrupt Full speed after reset Device is configured for Full Speed Reset Status Interrupt Full speed after reset Device is configured for Full Speed I0L4D4 I2L24D52 I1L16D22 I0L4D4 I2L24D52 Запрос полного дескриптора должен быть I2L52D52 а вместо этого всегда I2L24D52. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 4 minutes ago, _3m said: Целиком ни разу не запрашивает. Не должно быть так. А что в самих дескрипторах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 16 минут назад, aaarrr сказал: Не должно быть так. А что в самих дескрипторах? В дескрипторах текст. Поле длины соответствует. Я проверил вариант с передачей по длине дескриптора. Все работает, lsusb String descriptor-ы показывает правильно. Под виндой еще не нашел чем посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 9 minutes ago, _3m said: В дескрипторах текст. Поле длины соответствует. Увидеть это можно в исходнике? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 31 минуту назад, aaarrr сказал: Увидеть это можно в исходнике? это ковыряю, переделал на gcc. цель чтобы один и тот же xusb работал как с windows так и с linux и на любых хостах. Сейчас работает нестабильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 58 minutes ago, _3m said: это ковыряю, переделал на gcc Сочувствую. По-моему, это лучше не чинить, а писать заново. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 37 минут назад, aaarrr сказал: Сочувствую. По-моему, это лучше не чинить, а писать заново. Тем не менее вопрос почему хост не запрашивает полные дескрипторы остается открытым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 2 minutes ago, _3m said: Тем не менее вопрос почему хост не запрашивает полные дескрипторы остается открытым. Сниффером посмотрите. Под linux'ом wireshark, например, умеет USB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 15 минут назад, _3m сказал: Тем не менее вопрос почему хост не запрашивает полные дескрипторы остается открытым. Может ему не нравится ваш ответ на запрос короткого дескриптора? Он переспросил, вы ему снова чушь ответили, он обиделся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 8 minutes ago, Сергей Борщ said: Может ему не нравится ваш ответ на запрос короткого дескриптора? Может. Например, если при запросе 8 байт отправляется 8 байт + ZLP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 57 минут назад, Сергей Борщ сказал: Может ему не нравится ваш ответ на запрос короткого дескриптора? Он переспросил, вы ему снова чушь ответили, он обиделся. Нашел. #define STR0_DSCPT_LEN 4 #define STR1_DSCPT_LEN 16 #define STR2_DSCPT_LEN 24 https://github.com/OpenNuvoton/NUC970_NuWriter/blob/master/NuWriterFW/NuWriterFW/source/usbd.c#L44 https://github.com/OpenNuvoton/NUC970_NuWriter/blob/master/NuWriterFW/NuWriterFW/source/usbd.c#L530 Еще на неподдерживаемые дескрипторы (например OS String Descriptor) лучше отдавать stall а не бред. Бред не нравится усб стеку. Поправил, стало лучше но все равно для Windows и linux приходится собирать разные бинарники. Линукс хочет чтобы было выполнено честное переподключение с извлечением устройства а винда подхватывает на лету. Теперь так: WINDOWS (High speed) ------------------------------------ Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset I0L255D4 0x3F14FB0 I1L255D22 0x3F14FB4 I2L255D52 0x3F14FCC I0L255D4 0x3F14FB0 I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC I0L255D4 0x3F14FB0 I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC USBR_GET_STATUS value of dx->remotewakeup is 0 I0L255D4 0x3F14FB0 I1L255D22 0x3F14FB4 I2L255D52 0x3F14FCC I0L512D4 0x3F14FB0 I1L512D22 0x3F14FB4 I2L512D52 0x3F14FCC LINUX (High speed) ------------------------------------ Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset I0L255D4 0x3F14FB0 I1L255D22 0x3F14FB4 I2L255D52 0x3F14FCC I0L255D4 0x3F14FB0 I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC I0L255D4 0x3F14FB0 I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC I0L255D4 0x3F14FB0 I1L255D22 0x3F14FB4 I2L255D52 0x3F14FCC Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset I0L512D4 0x3F14FB0 I1L512D22 0x3F14FB4 I2L512D52 0x3F14FCC Reset Status Interrupt HS after reset Reset Status Interrupt HS after reset I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC I1L255D22 0x3F14FB4 I0L255D4 0x3F14FB0 I2L255D52 0x3F14FCC Хост запрашивает сразу 255 байт. А что там за повторные запросы по 512 байт ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 31 июля, 2019 Опубликовано 31 июля, 2019 · Жалоба 11 минут назад, _3m сказал: А что там за повторные запросы по 512 байт ? 1 час назад, aaarrr сказал: Сниффером посмотрите. Под linux'ом wireshark, например, умеет USB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться