Widcomm bluetooth: как открыть виртуальный COM - PullRequest
0 голосов
/ 05 января 2010

Я пытаюсь использовать стек Widcomm Bluetooth от Broadcomm, и он должен работать, но есть одна вещь, которую я до сих пор не могу понять: КАК МОЖНО АВТОМАТИЧЕСКИ ОТКРЫТЬ ВИРТУАЛЬНЫЙ COM, КОГДА Я ДОЛЖЕН СООБЩИТЬ?

Я пытаюсь использовать SPP (профиль последовательного порта), но документация с SDK не так уж исчерпывающая.

ПОЖАЛУЙСТА, Я НЕ МОГУ ИСПОЛЬЗОВАТЬ 32FEET!

Я обернул часть API сервера SPP:

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern IntPtr CreateSppServer(IntPtr pStack);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern void DeleteSppServer(IntPtr pServer);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern bool SppServerStart(IntPtr pServer, IntPtr pszServiceName);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern bool SppServerStop(IntPtr pServer);

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)]
    internal static extern IntPtr SppServerNotifyWindow(IntPtr pServer, IntPtr hWnd, int nMsg);

Что такое pszServiceName? где я могу найти это? и hWnd и nMsg ???

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 января 2010

Я отправил ответ на это ранее, но, кажется, никогда не появлялся! : - (

В любом случае, я поддерживаю библиотеку 32feet.NET и являюсь автором поддержки Widcomm. Во-первых, насколько я знаю, лицензия не должна быть проблемой для коммерческого распространения. См. Комментарий Питера Фута на http://32feet.net/forums/t/2289.aspx:

"32feet.NET бесплатен для коммерческого или некоммерческого использования. Если вы используете двоичные файлы, вы можете просто использовать библиотеку как есть, если вы вносите изменения в исходный код, вам нужно включить 32feet.NET License.txt документ и убедитесь, что заголовки файлов не изменены / удалены. "

Я посмотрю, сможет ли Питер оставить здесь комментарий, чтобы придать определенность.

В любом случае, мы не реализовали поддержку функциональности виртуального COM-порта Widcomm (это, безусловно, возможно, хотя никто не просил об этом - кроме вас). Я не большой поклонник виртуальных COM-портов. Кажется, всегда гораздо проще использовать прямое соединение с сокетами, чем пытаться настроить COM-порт и попытаться найти, какое имя было создано как [1], а затем открыть SerialPort, чтобы использовать его, а затем если соединение потеряно, никто не знает, и нужно просто повторять попытку ... Намного проще сделать следующее:

Dim addr As BluetoothAddress _
  = BluetoothAddress.Parse("001122334455")
'
Dim ep As New BluetoothEndPoint(addr, BluetoothService.SerialPort)
Dim cli As New BluetoothClient
cli.Connect(ep)
Dim peerStream As Stream = cli.GetStream()
peerStream.Write/Read ...

Подробнее на http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html

Чтобы ответить на ваши конкретные вопросы Widcomm. Может быть создано несколько экземпляров службы Bluetooth, то есть несколько служб SPP (каждая использует идентификатор класса обслуживания SPP), каждый из которых может предоставить атрибут имени службы, чтобы клиенты могли выбирать между ними. В большинстве случаев в этом нет необходимости, поэтому просто передайте строку с нулевой или нулевой длиной - документы Widcomm SDK не говорят, что разрешено. Что касается дескрипторов Window, Widcomm использует виртуальные методы C ++ (yuk - это делает direct P / Invoking в основном невозможным) для реализации событий / обратных вызовов, предположительно, код мистера Фигейры преобразует эти обратные вызовы в сообщения Window.

[1] Создать виртуальные COM-порты Bluetooth непросто. На MSFT + Win32 никто не говорит, какое имя было выбрано для COM-порта! На MSFT + WM официальный API не работает на многих типах устройств. И наш неофициальный способ сделать это требует перезагрузки IIRC. : - (

1 голос
/ 05 января 2010

Итак, прежде всего вы говорите, что не можете использовать 32feet.net . Зачем? Вы, очевидно, используете библиотеку стеков bluetooth Джоау Паулу Фигейры , потому что это то, что представляет собой wcbts.dll, так что не может быть никакого мандата против использования какой-либо сторонней библиотеки (а 32feet бесплатен и имеет открытый код).

Это подводит меня к вопросу № 2. Если вы используете его библиотеку, вы смотрели на его пример, как использовать эту библиотеку? Он загружается из того же места, что и DLL , которую вы должны иметь.

Что касается hWnd и nMsg, то, основываясь только на том факте, что это Windows-программирование и имя API, я бы сказал, что hWnd - это дескриптор окна, которое будет получать уведомления, когда что-то происходит в библиотеке и nMsg. является любой пользовательской константой сообщения, которую вы хотите передать в это окно, чтобы вы могли искать эти сообщения. Снова, я держу пари, что образец, который он предоставляет, показывает все это.

...