Доступ к библиотеке HIDAPI в python - PullRequest
5 голосов
/ 05 апреля 2011

Я пытаюсь использовать python для связи с обычным устройством HID.

Я прочитал, что библиотека HIDAPI, написанная на C, превосходит libusb1.0 для простой и стабильной кроссплатформенной связи HID.Тем не менее, никто не удосужился показать, как вызывать функции HIDAPI из скрипта Python, и именно здесь у меня возникают проблемы.

Я понимаю достаточно типов ctypes для вызова действительно простых функций C, таких как:

int add(int n1, int n2) {
    return n1 + n2;
    }

Проблема в том, что функции HIDAPI являются более сложными, например (в заголовочном файле HIDAPI ):

struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id);

, который указывает на эту структуру (в mac ветвь C файл ):

struct hid_device_info  HID_API_EXPORT *hid_enumerate(unsigned short vendor_id, unsigned short product_id)
{
...
}

где '...' - это много кода на уровне ОС, который в итоге возвращает «указатель на связанный список типаstruct #hid_device, содержащая информацию об устройстве HID "

Как бы вы использовали ctypes или любой другой инструмент для вызова такой функции в скрипте Python?Я надеюсь, что эта страница stackoverflow послужит руководством для всех других людей, которые хотели бы решить ту же проблему, поэтому, пожалуйста, дайте много подробностей, спасибо.

1 Ответ

3 голосов
/ 16 апреля 2011

Это не точные ответы на ваш вопрос, но может дать несколько новых указателей.

При взаимодействии со сложными нативными библиотеками вам, вероятно, нужно написать некоторый код на C, чтобы "преодолеть разрыв" и использовать только ctypes.может не порезать его.Код моста упрощает структуры C перед передачей их в Python и наоборот, так как вы не сможете описать все изощренные варианты собственного кода с помощью ctypes.

Вы можете написать собственное расширение Python C вручную, но этоне рекомендуется.

Существует несколько «инструментов моста» или генераторов кода, которые вы можете использовать в подобных ситуациях.Одним из самых популярных из них является Cython, который позволяет писать модули .pyx, где вы можете свободно смешивать код на языке C и Python.

http://cython.org/

.pyx затем компилируется в получившийся собственный Cмодуль и модуль упаковки .py.Вы можете легко импортировать последнее в логику вашего приложения.

...