Разработчики шины USB — глубоко больные люди.
Только дебил или извращенец может придумать столько сложностей для того, чтобы, к примеру, передать пару байт от температурного датчика на компьютер. И только маньяк может написать такую гнусную документацию.
Кто-нибудь может кинуть ссылку на хорошее описание USB-HID дескрипторов для полностью нестандартных устройств? Как-то не прикольно, когда датчик распознается системой, как джойстик с одной осью.
>передать пару байт на компьютер
Для «передать пару байт» служит например COM порт. Половина USB железок которым надо передавать пару байт (сотовые модемы например) распознаются компьютерами именно как COM порт, подключенный по USB.
Протокол TCP/IP тоже для этого подходит, потому самые чоткие USB железки (в которых Windows Mobile) распознаются компьютерами как подключенная по USB 10-mbit сетевая карта.
Первая буква «U» = Universal, а именно:
Много режимов работы, «медленный» (HID например) и несколько «быстрых» (bulk mode).
В один USB порт можно воткнуть много (AFAIR до 127) одновременно работающих устройств.
Power management: любое из устройств можно усыпить разными способами, некоторые устройства могут будить заснувший компьютер.
Питание, согласование электрической мощности.
То, с чем ты столкнулся, не имеет отношения к ментальному здоровью разработчиков стандарта USB, а является накладными расходами за универсальность.
Но тебе повезло, если устройство является USB HID, в Microsoft почти всё за тебя сделали, см раздел MSDN «HIDClass Devices«, он тебя почти весь должен интересовать. Советую скачать WDK и скомпилировать пример «HClient«.
CDC Device и прочие Custom-class USB Device мне не подходят по простой причине — к ним требуются драйвера, а использоваться устройство будет в Win XP/Vista/7 и ALT Linux, причем пользователями с ограниченными правами. Имитировать COM-порт, может, и неплохо, но вот заводить для этого лишнюю недешевую микросхему со стандартными драйверами (типа TI3410 или FT232) не позволяют условия на разработку («датчик на одной микросхеме») и цена этих чипов. Если бы речь шла о копеечной 155-серии, может, заказчик и согласился бы, а вот эти преобразователи интерфейсов не подходят однозначно.
За пример спасибо, но мое устройство находится «по другую сторону баррикад» — проблема не в написании ПО для компьютера, а в дескрипторе, который отсылает устройство. HID-дескриптор придуман маньяком. Не удивлюсь, если он окажется тьюринг-эквивалентным илм будет содержать «заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp», что примерно то же самое.
Если ещё актуально. Пожалуй, лучшая из попадавшихся мне книг на эту тему — это: «Агуров П.В. Интерфейсы USB. Практика использования и программирования. — СПб.: БХВ-Петербург, 2004. — 576 с.: ил. ISBN 5-94157-202-6»
Интересующее есть в главе 13 «HID-устройство на основе Atmel AT89C5131».
Относительно разработчиков USB — да уж. Но не просто глубоко, а только безнадёжно больные люди могли долго медитировать и придумать, например, разъём «А», который втыкается двумя способами. Да и вообще там немало забавного. ;)
Я сейчас от безысходности сам на эту тему пишу, скоро появится на EasyElectronics :) Осилил документацию и USB in a Nutshell, теперь пытаюсь это «ужать» до четырех-пяти вордовских страничек. Вроде получается.
>скоро появится на EasyElectronics :)
А? ;)))
И так сложно отослать? В лёгкую! Думайте ламеры.