Найти - Пользователи
Полная версия: эмуляция USB порта
Начало » Python для новичков » эмуляция USB порта
1
tachi512
добрый день. подскажите пожалуйста, есть ли возможность реализовать в питоне модуль, который будет создавать в системе виртуальный USB порт, данные на котором будут создаваться программно этим самым модулем, которые тот возьмет с другого порта? если да, то куда лучше копать, так как вопрос “слегка” специфичен ))

понимаю, что это изврат, так как по идее нужно писать дрова на соответствующем языке, но я бегаю меж 3мя ОС (win7, linux 2.4.20 & 2.6.30) и мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)
igor.kaist
tachi512
мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)
в этом случае, без этого, я думаю не обойтись…
tachi512
надежда мрет последней) я просто надеялся, что работа с API реализована уже в библиотеках питона, а мне вместо них дадут универсальные методы с универсальным набором переменных…
по сути мне нужно организовать прямую трансляцию порт<->порт через туннель, но в winAPI сложность написания дров не зависит от количества операций в них ))))
Андрей Светлов
tachi512
я просто надеялся, что работа с API реализована уже в библиотеках питона…
Работа с API чего? Универсальный драйвер устройства для любой OS??? :O
tachi512
вот именно что ничего… вся работа с устройством будет на уровне другого драйвера (например драйвер принтера) мне же нужно только организовать коридор от реального устройства до нужной мне машины и представиться там как USB порт, а данные будет обрабатывать другой драйвер, конечно же уникальный для каждого устройства. грубо говоря нужен программный USB хаб
Андрей Светлов
Позвольте расписать более подробно ту плевую задачку, которую вы хотите решить.
Во первых, для эмуляции USB потребуется драйвер. Драйвера пишут обычно на С (при желании - на С++ с обрезаным runtime). Это происходит не только от нелюбви разработчиков к прогрессивным языкам программирования.
Дело в том, что драйвер работает в kernel mode. Там нет многих привычных вещей, доступны совсем другие библиотеки и, главное, очень суровые требования по памяти и быстродействию. Так что альтернативы нет. Хотя взять пример и сделать USB hub с одной function - не очень сложно.
Далее нужно открыть существующее usb устройство и зацепится на его in/out/ioctl/что там еще у usb есть. Открывать, как я понимаю, нужно на другой машине - так что это будет обычная програмка. Может быть даже на Питоне.
Следующий шаг - следует как-то наладить коммуникацию между драйвером эмулируемого usb и программой, которая прицепилась к реальному порту. Поскольку машины разные, нужен какой-нибудь транспорт. Вероятно, TCP/IP подойдет.
Работать с tcp/ip стеком из ядра - удовольствие сильно ниже среднего. Значит, на машине с драйвером нужно завести демон, который и будет разговаривать с сетью. Зацепить его на наш драйвер (наверное, удобней всего создать еще одно устройство, специально для общения с демоном).

Вот и все. После непродолжительной отладки можно с чистой совестью отправляться за честно заработанным пирожком. Самая проблемная часть работы на Питоне не реализуется никак, хоть тресни. С кроссплатформенностью тоже будут сложности - по сути придется написать две системы, для linux и windows.
Но при желании вполне все может получиться.
tachi512
абсолютно точно) вообще есть аналоги, но под винду, а мне нужно хотя бы одну из частей запустить на линуксе (принтсервер на роутере)

ясно, спасибо… в принципе я так и думал, но надеялся на лучше - вдруг питон позаботился о программистах до самых глубин ядра
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB