Доступ к оборудованию USB (матрица датчиков давления с собственным API C++) с использованием Python

Я работаю с матрасом, чувствительным к давлению, с интерфейсом USB. Производитель предоставляет драйверы USB-устройств для Windows и API, написанный на C++, который имеет функции для запроса данных и установки некоторых параметров.

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

Также я вообще не могу использовать линукс с датчиком, так как драйверов под линукс нет, и я не знаю с чего начать "хакнуть" датчик, поэтому и спрашиваю:

«Если бы я попытался прочитать данные с этого датчика напрямую с помощью Python и, возможно, в Linux, что мне следует сделать в первую очередь или сначала прочитать?»

РЕДАКТИРОВАТЬ: устройство имеет драйвер FTDI (FTD2XX.dll), если это поможет.

Любая помощь будет очень кстати


person heltonbiker    schedule 18.08.2011    source источник


Ответы (2)


Скорее всего, это HID-устройство, и в этом случае вы, вероятно, можете начать писать для него linux-драйвер пользовательского пространства, используя либхид. Первое, с чего нужно начать, — это перечисление дерева, которое дает вам информацию о его возможностях. (lsusb -vvv или пример)

В противном случае вы можете использовать libusb в Linux (и на других платформах в наши дни), чтобы написать драйвер пользовательского пространства. Вы можете использовать что-то вроде usbsnoop или < href="http://www.lecroy.com/protocolanalyzer/protocoloverview.aspx?seriesid=280&capid=103&mid=511" rel="nofollow noreferrer">эквивалент реального оборудования, чтобы узнать, что делает официальный драйвер, когда он разговаривает с устройством и имитирует его оттуда.

Со стороны python вы, вероятно, можете создать приличную оболочку для существующего C++ API, используя SWIG с относительно небольшими усилиями, особенно по сравнению с разработкой полностью пользовательского драйвера.

Обновлять:

Если это устройство FTDI, то с ним может быть намного проще работать. В зависимости от того, что показывает поставщик и идентификатор продукта, он может автоматически работать с драйвером FTDI в Linux, предоставляя вам последовательный порт USB. Если у модуля нет параметров - vendor и product, которые, как я полагаю, вы можете использовать, чтобы заставить его требовать другие устройства, кроме комбинаций pid/vid, о которых он уже знает. Оттуда вы можете попробовать открыть устройство последовательного порта с другими настройками. Если повезет, он может уже регулярно отправлять информацию о состоянии.

Если это не так, вы хотите попробовать узнать, что отправляет официальное программное обеспечение, чтобы оно начало играть. Вы снова вернулись в область обнюхивания, но я думаю, что вполне могут быть вещи, которые делают это на последовательном уровне, а не на уровне USB для Windows (хотя я не могу назвать ни одного). Вы также можете кое-что узнать, попытавшись заставить их библиотеку использовать последовательный порт, эмулируемый программным обеспечением, вместо устройства FTDI, и посмотреть, что он пишет.

person Flexo    schedule 18.08.2011
comment
Очень полный ответ, мне нужно время, чтобы понять все это, так как я не знаком с C. +1! - person heltonbiker; 18.08.2011
comment
Некоторое время назад я написал тривиальный драйвер пользовательского пространства для HID-устройства. Попробую раскопать. Я бы по-прежнему рекомендовал оборачивать существующий код с помощью swig поверх действительно низкоуровневых вещей в любой день! - person Flexo; 18.08.2011
comment
packages.debian.org/sid/python-hid пропускает сторону C, если вы идете напрямую по HID-маршруту. Не могу найти мой тривиальный пример прямо сейчас, я думаю, что он на рабочем ПК, который выключен. - person Flexo; 18.08.2011
comment
Отличный совет, @awoodland. Я читал документацию по API и вспомнил, что датчик использует драйвер FTD2XX.dll (наверное, связанный с FTDI). Это что-то меняет? Это то же самое, что HID? - person heltonbiker; 18.08.2011
comment
Тогда вполне может быть серийное устройство. То же самое относится и к сниффингу, за исключением того, что вы, вероятно, хотите использовать модуль ядра usbserial для доступа к нему. - person Flexo; 19.08.2011
comment
Обновлено, чтобы больше рассказать о догадке FTDI. - person Flexo; 19.08.2011

Чипы FTDI имеют драйвер Linux. Просто зайдите на сайт FTDI и скачайте его. Драйвер создает виртуальный последовательный порт. Вы можете использовать PySerial для взаимодействия с ним.

Жаль, что не увидел пост раньше!

person Jeff    schedule 08.05.2013
comment
Что ж, я очень ценю ваш ответ! К сожалению, мы поставили проект в долгий резерв, к тому же я уже учусь программировать на C# :о) - person heltonbiker; 09.05.2013