Windows 10下C++/WinRT向两个同Tx特征BLE设备分别写入的疑问
BLE多设备独立写入Tx特征问题(Windows 10 + C++/WinRT)
我使用Windows 10、VS 2019、C++/WinRT开发,目前遇到一个问题:连接两个具有相同Tx特征的BLE设备后,如何分别向它们的Tx特征写入数据以实现独立控制。我已完成单个设备的连接与运行代码,但研究现有代码时发现,写入Tx特征的操作并未关联特定的设备对象。
设备对象创建代码如下:
auto device1 = co_await BluetoothLEDevice::FromBluetoothAddressAsync(deviceAddress1); // device2同理
之后我获取了主服务以及两个设备相同的Tx和Rx特征。
初始化写入器的代码:
auto writer = Windows::Storage::Streams::DataWriter();
填充待写入命令:
writer.WriteString(wstrCommand);
实际写入Tx特征的代码:
status = co_await TxCharacteristic.WriteValueWithResultAsync(writer.DetachBuffer(), winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattWriteOption::WriteWithoutResponse);
请问该命令会发送给哪个设备?是否遗漏了对device1或device2对象的引用?
补充
是不是TxCharacteristic对象包含了服务对象,而服务对象又包含设备ID,因此写入TxCharacteristic1和TxCharacteristic2就能对应到正确的设备?我打算编写代码验证这一点。
问题解答
你的补充猜想完全正确——每个GattCharacteristic实例(即你分别从device1、device2获取的TxCharacteristic1、TxCharacteristic2)本身就和所属的设备绑定,不需要额外显式引用device1/device2对象。
具体逻辑:
- 从
device1获取的BLE服务,再从该服务提取的Tx特征实例,内部已经关联了device1的设备上下文;同理,从device2获取的Tx特征实例绑定的是device2的上下文。 - 调用
WriteValueWithResultAsync时,系统会根据特征实例内部携带的设备关联信息,自动将数据发送到对应的BLE设备。
你无需在写入操作中额外指定设备对象,只要确保操作的是对应设备的特征实例(给device1发数据用TxCharacteristic1,给device2发数据用TxCharacteristic2),就能实现对两个设备的独立控制。
内容的提问来源于stack exchange,提问作者ehardin
相关产品推荐
相关产品推荐

