libusb_device_handle to HANDLE |
Здравствуйте, гость ( Вход | Регистрация )
libusb_device_handle to HANDLE |
Гость_Andiuxa_* |
23.8.2013, 12:47
Сообщение
#1
|
Гости |
Привет всем. Собственно сабж. Насколько реально такое преобразование.
Поясню. Libusb.h:
Описания структуры в этом файле нет. Далее Types.h:
Как быть или я идиот? |
|
|
Гость_Andriuxa_* |
23.8.2013, 12:58
Сообщение
#2
|
Гости |
доп к п.1
код:
cpHANDLE = dev_handle как сделать? |
|
|
Iron Bug |
23.8.2013, 14:41
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
никак. разработчики декларируют libusb_device_handle как непрозрачную для юзера структуру. если разработчики решили не давать ссылок на структуру объекта, значит, это не предусмотрено. теоретически, можно выкопать определение из сорцов, но это неправильный подход, чреватый ошибками работы с железом.
а зачем понадобился HANDLE? |
|
|
Гость_Andriuxa_* |
23.8.2013, 17:13
Сообщение
#4
|
Гости |
есть устройство cp210x, для него надо написать прогу. Так вот там функция cp210x_open(). Вот так выглядит:
передаю ей через (void **), пока, этот параметр, но мне заявляет, что у меня руки кривые и так она это устройство не найдет. libusb.h находит девайс сразу по vid/pid, а вот как cp210x заставить вкалывать, я понять не могу. |
|
|
Iron Bug |
24.8.2013, 22:02
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я так понимаю, что они поставляют уже готовую библиотеку для работы с их драйвером. зачем сюда лепить ещё usblib?
вот что разработчики пишут в документации к CP210x: http://www.silabs.com/Support%20Documents/...lDocs/an197.pdf а из приведённого тобой куска документации понятно, что надо сначала вызывать CP210x_GetNumDevices(), чтобы получить список доступных устройств данного типа. а потом выбрать нужное (по каким-то юзерким критериям, обычно там серийный номер или что-то типа того). обычный подход к написанию библиотек для таких девайсов: 1. считывается список доступных устройств. 2. выбирается одно из них (если их много) по какому-то признаку - это уже зависит от юзера. 3. открывается некий библитотечный дескриптор устройства через библиотечную функцию и дальше идёт работа с этим дескриптором. 4. открытый дескриптор закрывается. Сообщение отредактировал Iron Bug - 24.8.2013, 22:12 |
|
|
Гость_Andriuxa_* |
26.8.2013, 14:56
Сообщение
#6
|
Гости |
Благодарю за объяснение.
Вот только библиотека кривая какая-то. CP210x_GetNumDevices() - возвращает количество устройств
Однако теперь другая проблема. Судя, по ману, после GetNumDevices, я должен вызвать CP210x_GetProductString. Но при вызове у меня все дохнет (core dumped). В чем дело, я понять не могу.
Для чего вообще создавать указательного типа на void, я понять не могу.
Судя по отладчику, валится на if (CP210x_Open(dwDeviceNum, &h) == CP210x_SUCCESS). Я понимаю, что по логике, оно должно вернуть CP210x_DEVICE_NOT_FOUND, но этого не происходит. |
|
|
Iron Bug |
27.8.2013, 7:58
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
читай документацию.
Цитата CP210x_GetProductString
Description: This function returns a null terminated serial number (S/N) string, product description string or full path string for the device specified by an index passed in the DeviceNum parameter. The index of the first device is 0 and the index of the last device is the value (NumDevices) returned by CP210x_GetNumDevices() - 1. Supported Devices: CP2101, CP2102, CP2103 Location: CP210x Manufacturing DLL Prototype: CP210x_STATUS CP210x_GetProductString( DWORD DeviceNum, LPVOID DeviceString, DWORD Options ) Parameters: 1. DeviceNum—Index of the device for which the product description string, serial number or full path is desired. 2. DeviceString—Variable of type CP210x_DEVICE_STRING returning the NULL terminated serial number, device description or full path string. 3. Options—Flag that determines if DeviceString contains the product description, serial number or full path string. Return Value: CP210x_STATUS = CP210x_SUCCESS,CP210x_DEVICE_NOT_FOUND,CP210x_INVALID_PARAMETER |
|
|
laa88rf |
27.8.2013, 9:33
Сообщение
#8
|
Студент Группа: Участник Сообщений: 19 Регистрация: 30.7.2010 Из: Orsk Пользователь №: 1918 Спасибо сказали: 0 раз(а) Репутация: 0 |
Точно. Пропустил это. Однако тоже странно, что оно по-прежнему "валится", и в том же месте.
Еще один интересный факт. Если выполнить эту функцию без получения NumDevice, то я получаю сообщение с кодом 255 (что устройство не найдено) и руганью X����gj��=ĶX�^ 5 q�. Декодировать не стал. А вот как только я получаю NumDev:
То все валится. Может у меня проблема с понимаем работы с указателями, а может библиотека кривая или программного обеспечения не хватает? Или все сразу? |
|
|
Iron Bug |
27.8.2013, 9:49
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
NumDev чему равен при вызове? он изменяется от 0 до значения, возвращаемого CP210x_GetNumDevices - 1.
внимательно читаем документацию. |
|
|
laa88rf |
27.8.2013, 11:12
Сообщение
#10
|
Студент Группа: Участник Сообщений: 19 Регистрация: 30.7.2010 Из: Orsk Пользователь №: 1918 Спасибо сказали: 0 раз(а) Репутация: 0 |
Он равен на одной машине 6, а на другой 8. Т.е. по количеству usb-девайсов. Если usb нет совсем, то, я так думаю, он тогда должен вернуть -1.
|
|
|
Текстовая версия | Сейчас: 2.1.2025, 21:27 |