Связь вздрагивания и ПК USB


Мы разрабатываем какое-то устройство, и нам нужно найти хорошее решение для одной из необходимых функций.

Дело в том, что нам нужно общаться с WinCE 6.0 (ARM) и Windows на ПК. Проще всего, конечно, COM-порт, но в нашем случае это невозможно (все последовательные порты используются на WinCE, и мы не хотим добавлять еще один). Второй вариант-LAN, но для нас это не лучший вариант по нескольким причинам.

Таким образом, есть третий вариант, который мы могли бы использовать. Связь USB-USB, но как это сделать ? От вздрагивание курса является USB-устройством и ПК USB-хост, так что все основы аппаратного удовлетворения.

Мы могли бы использовать активную синхронизацию, но с ней мало проблем: - WinCE 6.0 не работает с WMDC (драйверы на устройстве просто вылетают после подключения устройства к ПК), и я не нашел никакого решения для этого, поэтому в этом случае нам нужно использовать WinXP на стороне ПК (старый ActiveSync) - нам нужно фильтровать связь с активной синхронизацией только для нашего приложения, никакое другое неавторизованное программное обеспечение не должно быть разрешено (что я знаю это невозможно получить).

Поэтому, вероятно, лучший способ сделать то, что нам нужно, - это общаться через USB, как стандартный COM (последовательная связь). Вопрос в том, как это можно сделать, нужно ли писать драйвер на WinCE, а также драйвер на Windows (PC), или есть лучшее решение? Возможно, некоторые драйвера для WinCE 6.0, что бы эмулировать виртуальный COM на компьютере (и, разумеется, допускают стандарт чтения/записи к ней на вздрагивания стороны) ? Может ли кто-нибудь сказать мне, Существует ли нечто подобное ?

1 3

1 ответ:

Мы, вероятно, нашли лучшее решение для нашей проблемы. Мы используем TCP / IP через ActiveSync (стандартное соединение WinSock через USB). Это возможно, потому что ActiveSync предоставляет IP-адрес для хост-компьютера. Его можно приобрести через что-то вроде этого (на вздрагивании):

std::string lIPAddress = "ppp_peer";
struct hostent * lH = gethostbyname(lIPAddress.c_str());

DEBUGMSG(ZONE_ERROR, (TEXT("Addr: %S\r\n"), lH->h_addr_list[0])); // just a debug info
lServerAddress.sin_addr.S_un.S_addr = *(u_long *)lH->h_addr_list[0];

Конечно, это не полный пример, это просто образец :)