Как изучать чужое USB устройство, чтоб сделать его эмулятор?
От: Alphelion  
Дата: 01.04.13 16:41
Оценка:
Здравствуйте, вот преподнесла мне нелегкая такой сюрприз...
В кратце, есть набор различных USB устройст (различные измерители силы, температуры, давления, расстояния, количества кислорода и т.д.)
Есть прога, которая определяет какое устройство подключено и выводит с него инфу в таблицы
Мне надо сделать, чтоб прога работала с виртуальными устройствами...

С чего начать? Сейча я планирую юзать DSF, там вроде есть готовый симулятор USB устройства, но для начала мне надо узнать как сделать, чтоб прога распознала подключенный эмулятор как одно из устройств?
Как вообще вклиниться или иным способ узнать протокол обмена данными между устройствами и прогой? Надо как-то перехватывать сообщения или еще как-то?
Буду рад любой информации...
Re: Как изучать чужое USB устройство, чтоб сделать его эмулятор?
От: LuciferSingapore Россия  
Дата: 01.04.13 16:48
Оценка:
Здравствуйте, Alphelion, Вы писали:

A>как сделать, чтоб прога распознала подключенный эмулятор как одно из устройств?


насколько я понимаю, надо, чтобы виртуальное USB-устройство прикидывалось устройством с тем же VendorId/ProductId, как и реальное устройство

A>Как вообще вклиниться или иным способ узнать протокол обмена данными между устройствами и прогой? Надо как-то перехватывать сообщения или еще как-то?


гуглить по словам "USB sniffer"
Re: Ответ
От: Alphelion  
Дата: 01.04.13 17:01
Оценка:
Забыл уточнить, схема подключения устройств такая:
К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.

Видимо тем, какое устройство подключено рулит главное устройство и оно же сообщения отсылает об измерениях. Ну да ладно, за наводку по сниферам спасибо. Буду разбираться
Re[2]: Ответ
От: redp Ниоткуда redplait.blogspot.com
Дата: 01.04.13 17:34
Оценка:
A>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.
ну логично — в главном usb hub, остальные можно подключать в любом порядке
доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB"
паранойя не болезнь, а критерий профпригодности
Re[3]: Ответ
От: pva  
Дата: 01.04.13 21:32
Оценка:
Здравствуйте, redp, Вы писали:

A>>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.

R>ну логично — в главном usb hub, остальные можно подключать в любом порядке
R>доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB"
Подозрительно все это. Обычно usb шина не используется для промышленной автоматизации. Главное устройство, скорей всего, контроллер с usb интерфейсом для общения с ПК. А вот остальные устройства могут работать на совершенно другой технологии. Можно покурить, начиная отсюда. Внизу там широкий блок полезных ссылок.
Вы уверенны, что все ваши устройства — usb?

А чтоб работать с виртуальными usb устройствами надо бы API извлечь из ПО. А уж потом разрабатывать, собственно, устройства. Для мониторинга usb обмена рекомендую UsbTrace или BusHound.
newbie
Re[4]: Ответ
От: mike_rs Россия  
Дата: 02.04.13 06:54
Оценка:
Здравствуйте, pva, Вы писали:

pva>Здравствуйте, redp, Вы писали:


A>>>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.

R>>ну логично — в главном usb hub, остальные можно подключать в любом порядке
R>>доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB"
pva>Подозрительно все это. Обычно usb шина не используется для промышленной автоматизации. Главное устройство, скорей всего, контроллер с usb интерфейсом для общения с ПК. А вот остальные устройства могут работать на совершенно другой технологии. Можно покурить, начиная отсюда. Внизу там широкий блок полезных ссылок.
pva>Вы уверенны, что все ваши устройства — usb?

а какая разница ? ему надо эмулировать именно юсб подключение и, разобравшись в протоколе, слать данные с любого количества якобы подключенных устройств. А как там они с мастером на физицеском уровне разговаривают — кого это волнует ? это все под капотом.
Совет правильные — сниффер пакетов и анализ протокола совмещенные с реверсингом управляющей программы и драйверов железки (если она не hid конечно, для hid все будет проще)
Re[5]: Ответ
От: pva  
Дата: 02.04.13 08:35
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>а какая разница ?

Разница в том, что можно не разбираться с, возможно, самопальным USB протоколом обмена, а использовать стандартные протоколы. Но прийдется, конечно, сэмулировать все эти датчики и сделать сопряжение с другой стороны контроллера.
newbie
Re[4]: Ответ
От: Аноним  
Дата: 02.04.13 10:01
Оценка:
Вот, что написано про каждый из измерительных модулей: Модуль представляет собой пластиковый корпус с двумя разъемами USB типа A/F и A/M.

Меня еще вот что заинтересовало, может не обязательно писать эмулятор?
Может как-то можно внедриться в прогу и вызывать нужные мне функции с нужными параметрами?
Я точно не знаю, как прога запрашивает данные с USB устройства, но может можно определить адреса функций, которыми она пользуется или которые она вызывает, чтоб узнавать о подключении устройств или приеме данных, затем внедрить в нее DLL и из нее вызывать что-то или перехватывать что-то...

Как вообще происходит обмен данными между прогой и USB устройством? Я про прикладной уровень. Есть ли какие-то стандартные WinAPi функции для этого, которые мне можно легко отследить? Я уже смотрел ее, пока нашел только DDE функции, но толком не знаю для чего они используются, дело в том что прога многооконная (одновременно несколько окон открыто. НЕ MDI), может просто для передачи данных между окнами...
Re[5]: Ответ
От: Аноним  
Дата: 02.04.13 13:37
Оценка:
Еще заметил, что вместе с этой прогой, устанавливаются дрова silabser.sys
https://www.silabs.com/Support%20Documents/Software/CP210x_VCP_Windows_Release_Notes.txt
Какая-то хрень USB to UART Bridge Driver, увы, почитал что есть UART, но дает ли мне это что-то, не знаю
Re[6]: Ответ
От: andrey82  
Дата: 02.04.13 13:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Еще заметил, что вместе с этой прогой, устанавливаются дрова silabser.sys

А>https://www.silabs.com/Support%20Documents/Software/CP210x_VCP_Windows_Release_Notes.txt
А>Какая-то хрень USB to UART Bridge Driver, увы, почитал что есть UART, но дает ли мне это что-то, не знаю

Скорее всего это преобразователь USB-RS232/RS485. Сооств. подчиненные устройства используют эти простые интерфейсы. При подключении этого главного устройства в системе появляются дополнительные COM порты?
Re[7]: Ответ
От: Аноним  
Дата: 02.04.13 14:25
Оценка:
Благодарю за ответ. Завтра попробую узнать... Сейчас уже дома
Re[8]: Ответ
От: andrey82  
Дата: 02.04.13 16:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Благодарю за ответ. Завтра попробую узнать... Сейчас уже дома


В общем, если порты появляются, то скорее всего весь прикладной обмен идет через них (не исключено даже использование какого-либо стандартного протокола типа Modbus), и задача решается вообще без написания драйвера.
Re[9]: Ответ
От: Аноним  
Дата: 02.04.13 16:17
Оценка:
А порт должен появляться именно при вставке главного USB устройства и исчезать при извлечении?
Re[10]: Ответ
От: andrey82  
Дата: 02.04.13 16:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А порт должен появляться именно при вставке главного USB устройства и исчезать при извлечении?


Сложно сказать, не зная, что это за устройства.
Не исключен вариант, что главное — USB хаб, а отдельные содержат в себе конверторы USB-UART.
Но гораздо более вероятен вариант, что многопортовый конвертор — главное устройство, а остальные — подключаются уже по 232/485/еще что-то. Какая длина и тип кабелей от главного до дополнительных?
Re[11]: Ответ
От: Аноним  
Дата: 02.04.13 16:36
Оценка:
Главный модуль назовем М0, он подключается напрямую к USB компа.
К этому модулю, может быть подключен ТОЛЬКО один измерительный модуль, НО, к каждому измерительному модулю, можно подключить еще один измерительный...
Выходит, что к М0 может быть подключен какой-нибудь модуль для измерения напряжения, а уже к нему, термометр.

На схеме выглядит так:


Измерительные устройства втыкаются друг в друга и про каждое из них написано: "С двумя разъемами USB типа A/F и A/M"
Про М0 написано: "С двумя разъемами USB типа A/F и A/M и одним mini USB/M"
Re[12]: Ответ
От: andrey82  
Дата: 02.04.13 16:49
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Измерительные устройства втыкаются друг в друга и про каждое из них написано: "С двумя разъемами USB типа A/F и A/M"

А>Про М0 написано: "С двумя разъемами USB типа A/F и A/M и одним mini USB/M"

Любопытно
Это серийное изделие? Документация хоть есть на него? А то запас телепатии на сегодня исчерпан
Предположу, что на эти самые вторичные USB разъемы выведено питание и сигнальные линии RS485 (2w). Соответственно, получаем шинную топологию, которая прекрасно работает в RS485.
Re[13]: Ответ
От: Alphelion  
Дата: 02.04.13 17:02
Оценка:
Изделие серийное, но документации у меня нет, и, сомневаюсь, что будет...
Есть левое описание для учеников, цитаты из которго я привел о разъемах, более ничего интересного.

Завтра, в общем, буду узнавать про COM порт. Очень надеюсь без эмуля обойтись
Re[13]: Ответ
От: Alphelion  
Дата: 02.04.13 17:38
Оценка:
При нажатии на кнопку обнаружения модулей в проге, выполняется вот что:
21:36:58,9943780 ProLog.exe 636 RegCloseKey HKCU SUCCESS
21:36:58,9944788 ProLog.exe 636 RegOpenKey HKCU SUCCESS Desired Access: Maximum Allowed
21:36:58,9946596 ProLog.exe 636 RegCloseKey HKCU SUCCESS
21:36:58,9947071 ProLog.exe 636 RegOpenKey HKLM\Hardware\devicemap\serialcomm SUCCESS Desired Access: All Access
21:36:58,9948789 ProLog.exe 636 RegQueryKey HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS Query: Cached, SubKeys: 0, Values: 2
21:36:58,9949577 ProLog.exe 636 RegEnumValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS Index: 0, Name: \Device\Serial0, Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9950272 ProLog.exe 636 RegEnumValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS Index: 1, Name: \Device\Serial1, Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9951264 ProLog.exe 636 RegCloseKey HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS
21:36:58,9951560 ProLog.exe 636 RegOpenKey HKLM\Hardware\devicemap\serialcomm SUCCESS Desired Access: All Access
21:36:58,9952295 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9952882 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9953527 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9954080 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9954661 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9955220 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial0 SUCCESS Type: REG_SZ, Length: 10, Data: COM1
21:36:58,9956195 ProLog.exe 636 RegCloseKey HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS
21:36:58,9956505 ProLog.exe 636 RegOpenKey HKLM\Hardware\devicemap\serialcomm SUCCESS Desired Access: All Access
21:36:58,9957139 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9957712 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9958293 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9958852 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9959433 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9959994 ProLog.exe 636 RegQueryValue HKLM\HARDWARE\DEVICEMAP\SERIALCOMM\\Device\Serial1 SUCCESS Type: REG_SZ, Length: 10, Data: COM2
21:36:58,9960980 ProLog.exe 636 RegCloseKey HKLM\HARDWARE\DEVICEMAP\SERIALCOMM SUCCESS

Что-то с COM портами связано...
Re[13]: Ответ
От: Alphelion  
Дата: 02.04.13 18:30
Оценка:
Это имеется ввиду при не подключенных USB устройствах... У меня их дома нет, только прога.
Re[14]: Ответ
От: x64 Россия http://x64blog.name
Дата: 03.04.13 01:49
Оценка: 11 (2)
A>При нажатии на кнопку обнаружения модулей в проге, выполняется вот что:

Да, направление верное, только я пошёл бы дальше и использовал бы API-монитор (рекомендую этот), там нужно протрейсить на рабочей машине (во время взаимодействия программы с устройством, разумеется) вызовы группы "Communications" типа GetCommConfig(), etc. и группы "File I/O" вроде CreateFile(), ReadFile(), etc. Ещё всякие DeviceIoControl() и SetupDiXxx() можно прихватить, на всякий случай, чтобы уж ничего не упустить. Вполне вероятно, что после этих мероприятий все данные будут как на ладони и останется только разобрать их формат. К слову, есть и более специализированные инструменты для анализа таких протоколов, например, это или это, вообще-то тысячи их.
JID: x64j@jabber.ru
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.