我目前正在尝试构建一个在通用应用程序上使用串行端口配置文件(SPP)的库。

据我发现,SPP在RFCOMM之上运行。在MSDN中概述了RFCOMM的基础知识,这很好。我还能够“找到”我的设备并“连接”到它。我还能够为RFCOMM创建StreamReader和StreamWriter。

现在麻烦出现了。我知道RFCOMM为各种功能/任务提供了某种渠道,其中一个可能是SPP(我知道设备具有SPP,甚至在通过“正常”串行连接完成后也可以工作)。

我想知道是否有一个示例,我必须通过该通道发送哪些字节才能在另一端获得单字节输出。是否需要某种连接设置(双向交换)?是否有这些数据包的示例,它们的名称是什么,是否有特定的规范。我想即使要搜索一些正确的词,我也会很高兴。

最佳答案

好吧,我认为基本上是错误的。这是用于非常简单(无错误处理,无任务等)通信的简约代码。

这进入Package.appxmanifest中:

<Capabilities>
  <m2:DeviceCapability Name="bluetooth.rfcomm">
    <m2:Device Id="any">
      <m2:Function Type="name:serialPort" />
    </m2:Device>
  </m2:DeviceCapability>
</Capabilities>


这是您选择的一种方法(确保您的蓝牙设备已配对,我的设备名称为“ HC-06”)。

// Find the device
var bluetoothDevicesSpp = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));
var bluetoothDeviceHc06 = bluetoothDevicesSpp.SingleOrDefault(d => d.Name == "HC-06");
var serviceRfcomm = await RfcommDeviceService.FromIdAsync(bluetoothDeviceHc06.Id);
StreamSocket socket = new StreamSocket();
await socket.ConnectAsync(serviceRfcomm.ConnectionHostName, serviceRfcomm.ConnectionServiceName, SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);
DataWriter writer = new DataWriter(socket.OutputStream);
DataReader reader = new DataReader(socket.InputStream);


要阅读,请使用以下命令:

await reader.LoadAsync(1);
byte b = reader.ReadByte();
Debug.WriteLine((char)b);


要编写,请使用以下命令:

writer.WriteString("MaM\r\n");
writer.StoreAsync();


字节将按原样传输,无需其他协议或类似协议。请享用。

关于c# - 通用应用程序+蓝牙+ SPP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30892154/

10-13 04:19