2013-03-12 1 views
0

Я пытаюсь создать приложение Windows с C#/Visual Studio 2010, которое будет выполнять следующие функции (последовательно): Для работы с bluetooth я использую 32-битную .Net библиотечные функции.32feet.net: Как подключиться к определенному COM-порту через BluetoothClient

  1. Найти устройства Bluetooth и перечислить их в списке/поле со списком для выбора пользователем. (Я хочу разрешить пользователю выбирать несколько устройств и, следовательно, НЕ использовать для опции SelectBluetoothDeviceDialog.). Я могу получить список устройств через BluetoothClient.DiscoverDevices(), однако это не операция async. Если возможно, я хотел бы перейти на асинхронную операцию. Я читал о классе BluetoothComponent с событиями DiscoverDevicesProgress и DiscoverDevicesComplete и методом DiscoverDevicesAsync, но не смог заставить его работать. Если возможно, поделитесь с этим примером кода.

  2. Пользователь выбирает устройства из списка и нажимает кнопку «Пара». Пока я могу успешно спрятать устройства через BluetoothSecurity.PairRequest. Здесь нет проблем.

  3. Пользователь теперь выбирает одно или несколько устройств из списка «парных» и нажимает «подключиться». Здесь я попытался подключиться к устройству с помощью BeginConnect (для работы async) и Connected методов класса BluetoothClient, но получил следующее исключение.

System.Net.Sockets.SocketsException: { "неверный аргумент поставляется 000319002CC6: 0000110100001000800000805f9b34fb"}.

Число в приведенном выше исключением является GUID, номер, который требуется для метода Connected, который я прошел с помощью BluetoothService.SerialPort. Это не удастся, так как мое устройство будет подключаться к порту COM7. Я не уверен, как я могу подключить/подключить устройство к конкретному COM-порту? Возможно ли даже библиотечные функции 32feet.Net? Если да, попросите образец кода.

Рекомендации Примечание. Я уже прочитал и попытался реализовать код, описанный в следующей статье в StackOverflow. Однако из-за моих требований (позволяющих пользователю подключаться и подключаться к нескольким устройствам на COM-портах) я не могу запустить тот же код. Однако это помогло понять концепцию. 32feet.net howto discover nearby bluetooth devices async in c#

Просьба сообщить вам, как лучше всего справиться с этой ситуацией. В случае, если я попытаюсь использовать любую другую библиотеку/функции, отличную от 32feet.Net, дайте мне знать.

Моя конечная цель - ОБЕЕ читать и записывать данные с и на подключенные устройства (устройства). Итак, на данный момент я просто пытаюсь подключиться к определенному порту COM через bluetooth.

С уважением, Rumit

=========================== EDIT: обновленная информация для ответа 1:

Я получил устройство bluetooh (патч), которое должно быть подключено к порту VOTTUAL BT COM TOSHIBA. Приносим извинения, если информация TOSHIBA необходима для лучшего ответа на вопрос. Я новичок в связи с портами. До сих пор я знаю, что мне нужно использовать COM7. У меня есть приложение, встроенное в C++, которое подключается к одному и тому же патчу на COM7 через bluetooh. Однако у меня нет исходного кода, и меня попросили реализовать ту же самую утилиту на C#.Из вашего ответа могу ли я предположить, что приложение C++ может использовать Windows Sockets 2 случайно?

Кроме того, я мог видеть параметр, указывающий значение порта (целочисленное значение) в BluetoothEndClient, но это также не сработало. Итак, я предполагаю, что порт не был COM и был другим портом.

С уважением, Rumit

ответ

0

Я нашел решение для успешного подключения к Bluetooth-устройству с использованием библиотеки WCL, как описано ниже.

Шаг1: Сделать свойство Transpport для wclClient для ctSerial.

client.Transport = wclClientTransport.ctSerial; //This makes the wclClient to listen to the COM ports. 

Шаг2: Укажите номер порта COM, установив для него свойство client.SerialParams.Port. Для примера,

client.SerialParams.Port = 5; // For COM5 

С уважением, Rumit

0

Просто кратко только сейчас. Вы, кажется, в основном на правильном пути.

1) Эта ошибка, предположительно, имеет имя «InvalidArgument» и код 10022 (отметьте SocketException.SocketErrorCode).

Таким образом, для MSFT Bluetooth стек имеет значение (см http://32feet.codeplex.com/wikipage?title=Errors):

"Plug and Play, driver-stack event, or other error caused failure." 

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

Пара с ним вручную в интерфейсе Bluetooth, а затем проверьте, работает ли соединение.

2) Вы действительно хотите порт COM? Я очень люблю работать с Sockets и System.IO.Streams. COM-порты трудно настраивать, очень сложно поддерживать и трудно использовать. Только если у вас есть сторонняя программа, которую только использует COM-порты, если вам нужно их использовать.

BluetoothClient не создает COM-порт, он использует сокеты и возвращает поток для чтения и записи.

+0

Я обновил свой оригинальный пост для получения дополнительной информации. Дайте мне знать, если это поможет. Кроме того, в отношении кода ошибки, я получил две ошибки случайным образом: 10058: Socket была ошибка завершения (может быть из-за недействительного порта) и 10022 в целом. –

+0

Я узнал, что могу использовать библиотеку WCL. Однако в этом случае я не вижу возможности указать COM-порт. Дайте мне знать, если вы можете предложить любую помощь с помощью WCL? –

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