Форум сайта python.su
добрый день. подскажите пожалуйста, есть ли возможность реализовать в питоне модуль, который будет создавать в системе виртуальный USB порт, данные на котором будут создаваться программно этим самым модулем, которые тот возьмет с другого порта? если да, то куда лучше копать, так как вопрос “слегка” специфичен ))
понимаю, что это изврат, так как по идее нужно писать дрова на соответствующем языке, но я бегаю меж 3мя ОС (win7, linux 2.4.20 & 2.6.30) и мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)
Офлайн
tachi512в этом случае, без этого, я думаю не обойтись…
мне желательно что-то, что будет работать везде, а не ковырять API каждой системы)
Офлайн
надежда мрет последней) я просто надеялся, что работа с API реализована уже в библиотеках питона, а мне вместо них дадут универсальные методы с универсальным набором переменных…
по сути мне нужно организовать прямую трансляцию порт<->порт через туннель, но в winAPI сложность написания дров не зависит от количества операций в них ))))
Офлайн
tachi512Работа с API чего? Универсальный драйвер устройства для любой OS??? :O
я просто надеялся, что работа с API реализована уже в библиотеках питона…
Офлайн
вот именно что ничего… вся работа с устройством будет на уровне другого драйвера (например драйвер принтера) мне же нужно только организовать коридор от реального устройства до нужной мне машины и представиться там как USB порт, а данные будет обрабатывать другой драйвер, конечно же уникальный для каждого устройства. грубо говоря нужен программный 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)
Офлайн
абсолютно точно) вообще есть аналоги, но под винду, а мне нужно хотя бы одну из частей запустить на линуксе (принтсервер на роутере)
ясно, спасибо… в принципе я так и думал, но надеялся на лучше - вдруг питон позаботился о программистах до самых глубин ядра
Офлайн