gpt4 book ai didi

c# - 通过蓝牙读取原始数据

转载 作者:行者123 更新时间:2023-11-30 12:31:23 25 4
gpt4 key购买 nike

我有一个数字人机接口(interface)设备,我正尝试使用 32feet.net 连接它,这样我就可以从中读取输入数据并在我的应用程序中处理输出。我以前从未用蓝牙编程过,我边学边学。

我可以使用 microsoft/broadcom 堆栈将我的设备连接到 Windows 7,没问题。我也可以使用 32feet.net 发现该设备,但是当我尝试连接它时出现错误。我确保使用 BluetoothRadio.IsSupported 支持我的堆栈这是一个代码片段:

 var client = new BluetoothClient();
var dlg = new SelectBluetoothDeviceDialog();
DialogResult result = dlg.ShowDialog(this);
if (result != DialogResult.OK)
{
return;
}
BluetoothDeviceInfo device = dlg.SelectedDevice;
BluetoothAddress addr = device.DeviceAddress;
Console.WriteLine(device.DeviceName);
Guid serviceClass = BluetoothService.HumanInterfaceDevice;
client.Connect(new BluetoothEndPoint(addr, serviceClass));

最后一行导致以下错误:System.dll 中发生类型为“System.Net.Sockets.SocketException”的第一次机会异常

我还尝试了一些其他的 client.Connect 方法。我试过使用 DiscoverDevices 获取 DeviceInfo 数组并手动从该数组中选择设备并连接到它。我已经尝试将 serviceClass 设置为 Empty,因为这是我使用 DeviceInfo.ClassOfDevice.Service 时显示的内容。我已经能够使用 DeviceInfo.SetServiceState(BluetoothService.HumanInterfaceDevice, true) 将设备连接到 Windows,但无法从中获取流。

即使在 Windows 中连接设备后我可以从设备获取数据流,那也没关系。我的目标很简单,就是能够像按下按钮一样从设备读取输入。

最佳答案

试试这个:

var client = new BluetoothClient();
var dlg = new SelectBluetoothDeviceDialog();
DialogResult result = dlg.ShowDialog(this);
if (result != DialogResult.OK)
{
return;
}
BluetoothDeviceInfo device = dlg.SelectedDevice;
BluetoothAddress addr = device.DeviceAddress;
Console.WriteLine(device.DeviceName);
BluetoothSecurity.PairRequest(addr, "Whatever pin");
device.SetServiceState(BluetoothService.HumanInterfaceDevice, true);
Thread.Sleep(100); // Just in case
if (device.InstalledServices.Length == 0)
{
// I wouldn't know why it doesn't install the service
}
client.Connect(addr, BluetoothService.HumanInterfaceDevice);

无论如何我都不是专家,但对我来说:

  1. 如果设备未显示在蓝牙设备中,我需要配对设备。您只需对使用蓝牙 radio 发现的每个新设备执行一次此操作,或者如果您卸载它,我每次都会执行此操作,以防万一选择了新设备。
  2. 启动服务,执行此操作后,设备将在设备属性的“服务”下显示串行端口(在您的情况下为 HID)可用。
  3. 连接

在每个阶段都需要发生一些事情:

  1. 确保设备出现在“控制面板”的“蓝牙设备”中。
  2. 在设备“属性”中的“服务”选项卡下,应该显示“人机界面”或其他内容。
  3. 应勾选该服务。

另一方面,您得到的异常确实很神秘,但它只是让我想到设备是否尚未连接到某物。如果您选中“device.Connected”,它必须返回 false,否则您将永远无法连接。

关于c# - 通过蓝牙读取原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com