Widcomm bluetooth: как открыть виртуальный COM
Я пытаюсь использовать стек Widcomm Bluetooth от Broadcomm, и он должен работать, но есть одна вещь, которую я все еще не могу понять: КАК МОЖНО АВТОМАТИЧЕСКИ ОТКРЫТЬ ВИРТУАЛЬНЫЙ COM, КОГДА Я ДОЛЖЕН ОБЩАТЬСЯ?
я пытаюсь использовать SPP (Serial Port Profile), но документация с SDK не так уж исчерпывающая.
ПОЖАЛУЙСТА, Я НЕ МОГУ ИСПОЛЬЗОВАТЬ 32FEET!
Я обернул SPP Server часть API:
[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? где я могу найти это? а чч и нмсг???
Спасибо
2 ответа
Я отправил ответ на это ранее, но, кажется, никогда не появлялся!:-(
В любом случае, я поддерживаю библиотеку 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 - это делает прямое P/Invoking в основном невозможным) для реализации событий / обратных вызовов, предположительно код Фигейры преобразует эти обратные вызовы в сообщения Window.
[1] Создание виртуальных COM-портов Bluetooth не так просто. На MSFT+Win32 не сказано, какое имя было выбрано для COM-порта! На MSFT+WM официальный API не работает на многих типах устройств. И наш неофициальный способ сделать это требует перезагрузки IIRC.:-(
Итак, сначала вы говорите, что не можете использовать 32feet.net. Зачем? Вы, очевидно, используете библиотеку стеков bluetooth Жоау Паулу Фигуейры, потому что это то, что представляет собой wcbts.dll, так что не может быть какого-то мандата против использования какой-либо сторонней библиотеки (а 32feet является бесплатным и открытым исходным кодом).
Это подводит меня к вопросу № 2. Если вы используете его библиотеку, вы смотрели на его пример, как использовать эту библиотеку? Он загружается из того же места, что и необходимая DLL.
Что касается того, что такое hWnd и nMsg, основываясь только на том факте, что это Windows-программирование и имя API, я бы сказал, что hWnd - это дескриптор окна, которое будет получать уведомления, когда что-то происходит в библиотеке, и nMsg - это любое другое константа сообщения, которую вы хотите передать в это окно, чтобы вы могли искать эти сообщения. Снова, я держу пари, что образец, который он предоставляет, показывает все это.