Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2010 21:17:13

tachi512
От:
Зарегистрирован: 2010-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

эмуляция USB порта

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

понимаю, что это изврат, так как по идее нужно писать дрова на соответствующем языке, но я бегаю меж 3мя ОС (win7, linux 2.4.20 & 2.6.30) и мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)



Офлайн

#2 Апрель 21, 2010 21:28:00

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

эмуляция USB порта

tachi512
мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)
в этом случае, без этого, я думаю не обойтись…



Офлайн

#3 Апрель 21, 2010 21:47:09

tachi512
От:
Зарегистрирован: 2010-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

эмуляция USB порта

надежда мрет последней) я просто надеялся, что работа с API реализована уже в библиотеках питона, а мне вместо них дадут универсальные методы с универсальным набором переменных…
по сути мне нужно организовать прямую трансляцию порт<->порт через туннель, но в winAPI сложность написания дров не зависит от количества операций в них ))))



Офлайн

#4 Апрель 21, 2010 23:00:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

эмуляция USB порта

tachi512
я просто надеялся, что работа с API реализована уже в библиотеках питона…
Работа с API чего? Универсальный драйвер устройства для любой OS??? :O



Офлайн

#5 Апрель 21, 2010 23:28:23

tachi512
От:
Зарегистрирован: 2010-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

эмуляция USB порта

вот именно что ничего… вся работа с устройством будет на уровне другого драйвера (например драйвер принтера) мне же нужно только организовать коридор от реального устройства до нужной мне машины и представиться там как USB порт, а данные будет обрабатывать другой драйвер, конечно же уникальный для каждого устройства. грубо говоря нужен программный USB хаб



Офлайн

#6 Апрель 22, 2010 07:34:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

эмуляция USB порта

Позвольте расписать более подробно ту плевую задачку, которую вы хотите решить.
Во первых, для эмуляции USB потребуется драйвер. Драйвера пишут обычно на С (при желании - на С++ с обрезаным runtime). Это происходит не только от нелюбви разработчиков к прогрессивным языкам программирования.
Дело в том, что драйвер работает в kernel mode. Там нет многих привычных вещей, доступны совсем другие библиотеки и, главное, очень суровые требования по памяти и быстродействию. Так что альтернативы нет. Хотя взять пример и сделать USB hub с одной function - не очень сложно.
Далее нужно открыть существующее usb устройство и зацепится на его in/out/ioctl/что там еще у usb есть. Открывать, как я понимаю, нужно на другой машине - так что это будет обычная програмка. Может быть даже на Питоне.
Следующий шаг - следует как-то наладить коммуникацию между драйвером эмулируемого usb и программой, которая прицепилась к реальному порту. Поскольку машины разные, нужен какой-нибудь транспорт. Вероятно, TCP/IP подойдет.
Работать с tcp/ip стеком из ядра - удовольствие сильно ниже среднего. Значит, на машине с драйвером нужно завести демон, который и будет разговаривать с сетью. Зацепить его на наш драйвер (наверное, удобней всего создать еще одно устройство, специально для общения с демоном).

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



Отредактировано (Апрель 22, 2010 07:36:31)

Офлайн

#7 Апрель 22, 2010 17:19:19

tachi512
От:
Зарегистрирован: 2010-04-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

эмуляция USB порта

абсолютно точно) вообще есть аналоги, но под винду, а мне нужно хотя бы одну из частей запустить на линуксе (принтсервер на роутере)

ясно, спасибо… в принципе я так и думал, но надеялся на лучше - вдруг питон позаботился о программистах до самых глубин ядра



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version