USB HID example cBuilder

Dec 22, 2009 8 Replies

Hello, All!



А нет ли у кого работающего примера для CBuilder (ну или для любого другого, не завязанного на MFC и Visual C) работы с HID USB устройством? Я нашел в примерах для HC08, но оно что-то не работает еще до того места, где должно с моим устройством начать говорить.



dima

formatting link


Tue Dec 22 2009 19:42, Dmitry Orlov wrote to All:

DO> From: "Dmitry Orlov" snipped-for-privacy@isdn.net.il>

DO> Hello, All!

DO> á ÎÅÔ ÌÉ Õ ËÏÇÏ ÒÁÂÏÔÁÀÝÅÇÏ ÐÒÉÍÅÒÁ ÄÌÑ CBuilder (ÎÕ ÉÌÉ ÄÌÑ ÌÀÂÏÇÏ DO> ÄÒÕÇÏÇÏ, ÎÅ ÚÁ×ÑÚÁÎÎÏÇÏ ÎÁ MFC É Visual C) ÒÁÂÏÔÙ Ó HID USB DO> ÕÓÔÒÏÊÓÔ×ÏÍ?

÷ÏÔ:

formatting link
ó áÔÍÅÌÏÍ É ÞÅÒÅÚ GetFeature/SetFeature, ÎÏ ÉÎÉÃÉÁÌÉÚÁÃÉÑ É ÒÁÂÏÔÁ Ó ÕÓÔÒÏÊÓÔ×ÁÍÉ ÒÁÓÐÉÓÁÎÙ.

Hello, Alexander Nickolsky! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 24 Dec

2009 16:25:31 +0300:

DO>> А нет ли у кого работающего примера для CBuilder (ну или для любого DO>> другого, не завязанного на MFC и Visual C) работы с HID USB DO>> устройством?

AN> Вот:

AN>

formatting link
AN> С Атмелом и через GetFeature/SetFeature, но инициализация и работа с AN> устройствами расписаны.

Спасибо, правда я уже и сам написал, точнее переписал микрочиповский пример с MFC на голый С[++] и WinAPI. И еще несколько примеров нашел. Есть там одно отличие фундаментальное. Микрочиповский пример текстуально ищет свои PID и VID в реестре, куда их видимо сама винда прописывает при втыкании устройства. А другой пример пытается открыть "файл" устройства, прочитать из него атрибуты с PID и VID и сравнить с заданными. Какой способ лучше? В том коде, на котором ссылка с той страницы, что ты мне дал, тоже используется второй путь.

PS я столько лет боялся этого USB, а оказалось не так и сложно. Hе UART конечно, но при наличии готовых библиотек и аппаратной поддержки все делается достаточно линейно, во всяком случае если хост - PC.

dima

formatting link

Thu Dec 24 2009 17:29, Dmitry Orlov wrote to Alexander Nickolsky:

DO> ÏÄÎÏ ÏÔÌÉÞÉÅ ÆÕÎÄÁÍÅÎÔÁÌØÎÏÅ. íÉËÒÏÞÉÐÏ×ÓËÉÊ ÐÒÉÍÅÒ ÔÅËÓÔÕÁÌØÎÏ ÉÝÅÔ DO> Ó×ÏÉ PID É VID × ÒÅÅÓÔÒÅ, ËÕÄÁ ÉÈ ×ÉÄÉÍÏ ÓÁÍÁ ×ÉÎÄÁ ÐÒÏÐÉÓÙ×ÁÅÔ ÐÒÉ DO> ×ÔÙËÁÎÉÉ DO> ÕÓÔÒÏÊÓÔ×Á. á ÄÒÕÇÏÊ ÐÒÉÍÅÒ ÐÙÔÁÅÔÓÑ ÏÔËÒÙÔØ "ÆÁÊÌ" ÕÓÔÒÏÊÓÔ×Á, ÐÒÏÞÉÔÁÔØ DO> ÉÚ ÎÅÇÏ ÁÔÒÉÂÕÔÙ Ó PID É VID É ÓÒÁ×ÎÉÔØ Ó ÚÁÄÁÎÎÙÍÉ. ëÁËÏÊ ÓÐÏÓÏ ÌÕÞÛÅ?

HÁÓËÏÌØËÏ Ñ ÐÏÎÉÍÁÀ, ÜÔÏ ÐÒÏÓÔÏ ÏÄÎÏ É ÔÏ ÖÅ. ñ ÐÏÌØÚÕÀÓØ ÉÎÔÅÒÆÅÊÓÏÍ setupapi. HÁÓËÏÌØËÏ Ñ ÐÏÎÉÍÁÀ, ÚÁÐÉÓÉ × ÒÅÅÓÔÒÅ ÎÅÄÏËÕÍÅÎÔÉÒÏ×ÁÎÙ É ÍÏÇÕÔ ÉÚÍÅÎÉÔØÓÑ. ó ÄÒÕÇÏÊ ÓÔÏÒÏÎÙ, setupapi ÔÏÖÅ ÍÏÇÕÔ ÐÏÍÅÎÑÔØ.

Hello, Alexander Nickolsky! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 24 Dec

2009 17:45:06 +0300:

AN> Thu Dec 24 2009 17:29, Dmitry Orlov wrote to Alexander Nickolsky:

DO>> одно отличие фундаментальное. Микрочиповский пример текстуально DO>> ищет свои PID и VID в реестре, куда их видимо сама винда DO>> прописывает при втыкании устройства. А другой пример пытается DO>> открыть "файл" устройства, прочитать из него атрибуты с PID и VID DO>> и сравнить с заданными. Какой способ лучше?

AN> Hасколько я понимаю, это просто одно и то же.

Hаверное да, второй способ не требует обращения к еще одной функции winapi и, видимо, все. Hу и сравнивать числа проще чем строки.

AN> Я пользуюсь интерфейсом setupapi. Hасколько я понимаю, записи в реестре AN> недокументированы и могут измениться. С другой стороны, setupapi AN> тоже могут поменять.

А вот этого я не понял. Там на том сайте, что ты сослался не слишком понятная мне фраза:

Зачем все это надо ? Дело в том, что файлы hid.h и hid.lib не входят в комплект SDK. Более того, эти функции в разных версиях hid.dll имеют разные номера! (Возможно, именно поэтому hid.lib и нет в SDK). Поэтому инициализацию мы будем проводить партизанским способом - через LoadLibrary. Функции для посылки и приема данных выглядят достаточно просто.

Я не слишком (мягко говоря) искушен в подоконном программировании, хидеры для библиотек где-то нашел, а их самих получил вызвав implib -c -f hid.lib %systemroot%\system32\hid.dll implib -c -f setupapi.lib %systemroot%\system32\setupapi.dll

Есть вероятность, что моя программа в разных версиях винды будет себя вести по-разному?

dima

formatting link

Thu Dec 24 2009 18:32, Dmitry Orlov wrote to Alexander Nickolsky:

DO> Hаверное да, второй способ не требует обращения к еще одной функции DO> winapi и, видимо, все.

libusb

DO> Hу и сравнивать числа проще чем строки.

strcmp() сложен да...

[ZX]

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sat, 26 Dec

2009 19:28:00 +0000 (UTC):

DO>> Hаверное да, второй способ не требует обращения к еще одной функции DO>> winapi и, видимо, все.

KF> libusb

Что?

DO>> Hу и сравнивать числа проще чем строки.

KF> strcmp() сложен да...

Hе подходит.

dima

formatting link

Thu Dec 24 2009 18:32, Dmitry Orlov wrote to Alexander Nickolsky:

DO> ÄÌÑ ÂÉÂÌÉÏÔÅË ÇÄÅ-ÔÏ ÎÁÛÅÌ, Á ÉÈ ÓÁÍÉÈ ÐÏÌÕÞÉÌ ×ÙÚ×Á× DO> implib -c -f hid.lib %systemroot%\system32\hid.dll DO> implib -c -f setupapi.lib %systemroot%\system32\setupapi.dll

DO> åÓÔØ ×ÅÒÏÑÔÎÏÓÔØ, ÞÔÏ ÍÏÑ ÐÒÏÇÒÁÍÍÁ × ÒÁÚÎÙÈ ×ÅÒÓÉÑÈ ×ÉÎÄÙ ÂÕÄÅÔ ÓÅÂÑ DO> ×ÅÓÔÉ DO> ÐÏ-ÒÁÚÎÏÍÕ?

éÍÅÎÎÏ ÞÔÏ ÂÕÄÅÔ. õ hid.dll ÄÌÑ Vista/XP É Win2000 ÒÁÚÎÙÅ ÉÄÅÎÔÉÆÉËÁÔÏÒÙ ÆÕÎËÃÉÊ.

Hello, Alexander Nickolsky! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sun, 27 Dec

2009 17:15:44 +0300:

DO>> для библиотек где-то нашел, а их самих получил вызвав implib -c -f DO>> hid.lib %systemroot%\system32\hid.dll implib -c -f setupapi.lib DO>> %systemroot%\system32\setupapi.dll

DO>> Есть вероятность, что моя программа в разных версиях винды будет DO>> себя вести по-разному?

AN> Именно что будет. У hid.dll для Vista/XP и Win2000 разные AN> идентификаторы функций.

Понятно, спасибо. Пока что это меня устраивает, потом сделаю как в этих примерах загрузку dll.

dima

formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required