2010-01-05 2 views
0

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

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

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

Я завернула часть SPP сервер 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? где я могу его найти? и hWnd и nMsg ???

Благодаря

ответ

2

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

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

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

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

Во всяком случае, мы не реализовали поддержку виртуальных функций 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), каждый может предоставить атрибут Service Name, чтобы клиенты могли выбирать между ними. В большинстве случаев это не обязательно, поэтому просто передайте строку с нулевой или нулевой длиной - документы Widcomm SDK не говорят, что разрешено. Что касается дескрипторов Window, Widcomm использует виртуальные методы C++ (yuk - это делает прямым P/Invoking в основном невозможным) для реализации событий/обратных вызовов, предположительно код г-на Фигейры преобразует эти обратные вызовы в сообщения Window.

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

1

Так первый от вас, что вы не можете использовать 32feet.net. Зачем? Вы, очевидно, используете João Paulo Figueira's bluetooth stack library, потому что это то, что wcbts.dll, поэтому у него не может быть определенного мандата против использования какой-либо сторонней библиотеки (а 32feet - бесплатный и с открытым исходным кодом).

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

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

+0

Да, я видел образец, но обертка не выполняла сервис SPP, который я пытаюсь добавить в проект, на самом деле часть кода выше написана мной – Sunrising

+0

Кроме того, 32feet не в порядке, если вы хотите продать свой продукт! – Sunrising

Смежные вопросы