Народ, подскажите как писать\читать в этот порт заданному устройству. Данные о устройстве известны. Виден как hid — мышка. Пишу на делфи. В принцыпе понимаю маленько как это сделать через setupapi.dll and hid.dll, но сколько не мучился не получается. В надежде купил книгу Агурова... но там ни один пример не компилица, надо ещё какие-то библиотеки или доп. что-то ставить...Было бы более ясно если бы было написано на "чистом" делфи...
Спасибо
Здравствуйте, DenisKaVak, Вы писали:
DKV>Народ, подскажите как писать\читать в этот порт заданному устройству. Данные о устройстве известны. Виден как hid — мышка. Пишу на делфи. В принцыпе понимаю маленько как это сделать через setupapi.dll and hid.dll, но сколько не мучился не получается. В надежде купил книгу Агурова... но там ни один пример не компилица, надо ещё какие-то библиотеки или доп. что-то ставить...Было бы более ясно если бы было написано на "чистом" делфи... DKV>Спасибо
p.s. пробовал подключатся к мышке — винда не дает, возможно просто уже занято...
свое устройство вполне рабочее
примеры работы с hid есть в инете, если поискать
Re[2]: USB HID
От:
Аноним
Дата:
11.01.07 20:30
Оценка:
Здравствуйте, Rius, Вы писали:
R>http://www.progz.ru/forum/index.php?showtopic=24176
R>p.s. пробовал подключатся к мышке — винда не дает, возможно просто уже занято... R>свое устройство вполне рабочее R>примеры работы с hid есть в инете, если поискать
Все эти ссылки я уже "перелопатил" много раз за последнии четыре дня!
Везде по разному, или код кусками приводят! Ну "начинающий" я, с разбегу не въеду!
Мне не обязательно как к мышке, мне бы для начала прочитать VendorID,ProductID и параметры уст-ва, верез CreatFile!
Если у кого есть пример (100% работающий на чистом делфи) на делфи как определить все подключенные уст-ва, как считать их данные, и т.д. приведите его....
Здравствуйте, DenisKaVak, Вы писали:
DKV>Хорошо, бубу задавать конкретные вопросы: DKV>"открыть" — устройство — DKV>HANDLE = CreateFile(address, DKV> GENERIC_READ|GENERIC_WRITE, DKV> FILE_SHARE_READ|FILE_SHARE_WRITE, DKV> NULL, DKV> OPEN_EXISTING, DKV> 0, DKV> NULL)
DKV>Где взять address для HID зная его VendorID и ProductID?
здесь address в CreateFile — строка — один из путей для hid-устройств, найденных по guid (для hid выделен свой guid)
потом перебирается перечень этих устройств, поочередно запрашиваем инфу из каждого и ищем, у кого из них есть нужные VendorID и ProductID здесь примеры
Здравствуйте, Rius, Вы писали:
R>здесь address в CreateFile — строка — один из путей для hid-устройств, найденных по guid (для hid выделен свой guid) R>потом перебирается перечень этих устройств, поочередно запрашиваем инфу из каждого и ищем, у кого из них есть нужные VendorID и ProductID R>здесь примеры
Не надо ссылок пожалуйста!!! Я их уже все видел...
То что address в CreateFile это путь я догадываюсь... Только откуда его брать? Конкретно какой функцией его подучить, что передать ей в параметрах, желательно с примером на делфи?
Офтоп: Давайте не будем посылать на другие сайты что мол там есть примеры и т.д. Если по теме нечего сказать то лучше не отвечать, чем разводить "огород". Конкретный вопрос=конкретный ответ.
Спасибо!!!
Здравствуйте, DenisKaVak, Вы писали:
DKV>Не надо ссылок пожалуйста!!! Я их уже все видел... DKV>То что address в CreateFile это путь я догадываюсь... Только откуда его брать? Конкретно какой функцией его подучить, что передать ей в параметрах, желательно с примером на делфи?
DKV>Офтоп: Давайте не будем посылать на другие сайты что мол там есть примеры и т.д. Если по теме нечего сказать то лучше не отвечать, чем разводить "огород". Конкретный вопрос=конкретный ответ. DKV>Спасибо!!!
не имеет смысла копировать сюда код или цитировать по книге Агурова, если не хотите сами изучать имеющиеся примеры.
DKV>Народ, подскажите как писать\читать в этот порт заданному устройству. Данные о устройстве известны. Виден как hid — мышка. Пишу на делфи. В принцыпе понимаю маленько как это сделать через setupapi.dll and hid.dll, но сколько не мучился не получается. В надежде купил книгу Агурова... но там ни один пример не компилица, надо ещё какие-то библиотеки или доп. что-то ставить...Было бы более ясно если бы было написано на "чистом" делфи...
Смотри вот такую примочку EasyHID. Она заточена под построение USB интерфейса с микроконтроллероми. Внутри есть библиотека mcHID.dll в которой есть все нужные функции для работы с HID из языков высокого уровня. Она генерит события твоему приложению о подключении, отключении, приходе данных... И т.д. всё работает проверено.
Здравствуйте, MegaVoltik, Вы писали:
MV>Смотри вот такую примочку EasyHID. Она заточена под построение USB интерфейса с микроконтроллероми. Внутри есть библиотека mcHID.dll в которой есть все нужные функции для работы с HID из языков высокого уровня. Она генерит события твоему приложению о подключении, отключении, приходе данных... И т.д. всё работает проверено.
>В надежде купил книгу Агурова... но там ни один пример не компилица, >надо ещё какие-то библиотеки или доп. что-то ставить... >Было бы более ясно если бы было написано на "чистом" делфи...
Если прочитать внимательно, то в книге написано — либо поставьте библиотеку JEDI, либо используйте самостоятельно написанный модуль импорта функций. Выкладывать на диск библиотеку я не хочу. Абсолютно все примеры из книги (из обоих книг) работают. Утверждение про "чистый Delphi" это конечно забавно — может и WinApi выкинуть?
P_A>Если прочитать внимательно, то в книге написано — либо поставьте библиотеку JEDI, либо используйте самостоятельно написанный модуль импорта функций. Выкладывать на диск библиотеку я не хочу. Абсолютно все примеры из книги (из обоих книг) работают. Утверждение про "чистый Delphi" это конечно забавно — может и WinApi выкинуть?
Я к тому чтобы все исходники компилились без установки доп. библиотек, а если таковые используются то хотябы прилагались бы!
Здравствуйте, DenisKaVak, Вы писали:
DKV>Здравствуйте, Rius, Вы писали:
R>>здесь address в CreateFile — строка — один из путей для hid-устройств, найденных по guid (для hid выделен свой guid) R>>потом перебирается перечень этих устройств, поочередно запрашиваем инфу из каждого и ищем, у кого из них есть нужные VendorID и ProductID R>>здесь примеры
DKV>Не надо ссылок пожалуйста!!! Я их уже все видел... DKV>То что address в CreateFile это путь я догадываюсь... Только откуда его брать? Конкретно какой функцией его подучить, что передать ей в параметрах, желательно с примером на делфи?
DKV>Офтоп: Давайте не будем посылать на другие сайты что мол там есть примеры и т.д. Если по теме нечего сказать то лучше не отвечать, чем разводить "огород". Конкретный вопрос=конкретный ответ. DKV>Спасибо!!!
Немного модифицированный пример из Агурова
HidD_GetHidGuid(HidGuid);
PnPHandle := SetupDiGetClassDevs(@HidGuid, nil, 0, DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);
If PnPHandle = Pointer(INVALID_HANDLE_VALUE) then Exit;
Try
DevIndex := 0;
Repeat
DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
Success := SetupDiEnumDeviceInterfaces(PnPHandle, nil, HidGuid, DevIndex, DeviceInterfaceData);
If Success then begin
DevData.cbSize := SizeOf(DevData);
BytesReturned := 0;
SetupDiGetDeviceInterfaceDetail(PnPHandle, @DeviceInterfaceData, nil, 0, @BytesReturned, @DevData);
If (BytesReturned <> 0) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin
FunctionClassDeviceData := AllocMem(BytesReturned);
FunctionClassDeviceData.cbSize := 5;
If SetupDiGetDeviceInterfaceDetail(PnPHandle, @DeviceInterfaceData, FunctionClassDeviceData, BytesReturned, @BytesReturned, @DevData) then begin{Вот здесь определяется имя!!!}
HidName:= StrPas(PChar(@FunctionClassDeviceData.DevicePath));
lbDevices.Items.Add(HidName);
End;
FreeMem(FunctionClassDeviceData);
End;
End;
Inc(DevIndex);
Until not Success;
Finally
SetupDiDestroyDeviceInfoList(PnPHandle);
End;
Далее
HidHandle:= CreateFile(@HidName[1],
0,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING, 0, 0);
Здравствуйте, Pavel_Agurov, Вы писали:
>>В надежде купил книгу Агурова... но там ни один пример не компилица, >>надо ещё какие-то библиотеки или доп. что-то ставить... >>Было бы более ясно если бы было написано на "чистом" делфи...
P_A>Если прочитать внимательно, то в книге написано — либо поставьте библиотеку JEDI, либо используйте самостоятельно написанный модуль импорта функций. Выкладывать на диск библиотеку я не хочу. Абсолютно все примеры из книги (из обоих книг) работают. Утверждение про "чистый Delphi" это конечно забавно — может и WinApi выкинуть?
Павел, у Вас в книге есть пример использования функции HidD_GetInputReport. В библиотеке JEDI она не описана, самому подключить не удалось, может подскажете как решить эту проблему?
Заранее спасибо.
Здравствуйте, DenisKaVak, Вы писали:
DKV>Хорошо, бубу задавать конкретные вопросы: DKV>"открыть" — устройство — DKV>HANDLE = CreateFile(address, DKV> GENERIC_READ|GENERIC_WRITE, DKV> FILE_SHARE_READ|FILE_SHARE_WRITE, DKV> NULL, DKV> OPEN_EXISTING, DKV> 0, DKV> NULL)
DKV>Где взять address для HID зная его VendorID и ProductID?
Крайне несоветую открывать устройство с флагом GENERIC_WRITE и ему подобными(запись). Некоторые устройства (мышь к примеру) с этим флагом не откроются. Вначале открываете с ключами для чтения.Убеждаетесь,что это ваше устройство и оно запись держит, а только потом переоткрываете.
Только недавно исправлял код одного С++шника.