- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
具有正常特性的只读数据的 MTU 大小(20 字节)将被读取。我的客户将提供一个更大的特征(大约 100 字节)。
我看到 BLE 提供了“长读”功能,该功能会一直读取直到达到特征的大小。( https://bluegiga.zendesk.com/entries/25053373--REFERENCE-BLE-master-slave-GATT-client-server-and-data-RX-TX-basics )
attclient_read_long command - Starts a procedure where the client first sends normal read request to the server, and if the server returns an attribute value with a length equal to the BLE MTU (22 bytes), then the client continues to send "read long" requests until rest of the attribute is read. This only applies if you are reading attributes that are longer than 22 bytes. It is often simpler to construct your GATT server such that there are no long attributes, for simplicity. Note that the BLE protocol still requires that data is packetized into max. 22-byte chunks, so using "read long" does not save transmission time.
但是我如何在 Android 中使用此功能?BluetoothGatt 类仅提供简单的“Read()”——iOS 也一样。
增加 MTU 是不可能的,因为我们需要支持 AP 级别 < 21 的设备(增加 MTU 是在 API 21 中引入的)
最佳答案
我可以确认 iOS 将首先执行符合标准的读取操作。那么如果服务器返回一个完全填满的PDU,iOS设备就会继续执行blob读取操作。使用运行 iOS 11.2.x 的 iPhone 7 测试
对于长属性,您不需要多次调用 peripheral.readValue(characteristic)。 CoreBluetooth 在幕后完成所有这些工作。
请参阅蓝牙规范核心 v5.0,特别是第 3 卷第 F 部分“长属性值”。
实验证明如上。
我有一个 Android Thing 作为服务器,我在读取操作期间使用我的 iPhone 返回最大长度。 iOS 和我的 RPI3 交换了 185 的 MTU。所以读取响应是 (MTU - 1) 184 字节长。服务器 (RPI) 然后收到偏移量为 184 的新读取请求,然后您可以返回更多数据。这一直持续到偏移量> 512,或者最后一个读取响应返回小于 MTU - 1 长度。
基于 BluetoothGattServer 支持长属性这一事实,我假设 BluetoothGatt 对象也支持。由于无法通过 API 设置要读取的偏移量,因此我假设您只能调用一次读取。
关于android - 蓝牙 : Read Long Characteristics Value using Android/iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241986/
我想知道是否有比我通常采用的方法更直接的方法来计算某种类型的变量...... 下面的例子可能最好地解释了它。我有一个包含 2 列的数据框(水果以及水果是否腐烂)。我想为每一行添加例如同类别水果腐烂的百
在 peripheral didDiscoverServices() 和 peripheral didDiscoverCharacteristicsForService() 中,我正在尝试以下操作:
我正在使用以下代码为使用 IOS 核心蓝牙的蓝牙特性(重置设备)写入 0xDE 值: ... NSData *bytes = [@"0xDE" dataUsingEncoding:NSUTF8Stri
尝试使用以下函数从特征中检索可读信息: peripheral.discoverDescriptors(for: characteristic) 稍后的委托(delegate)方法: func peri
我尝试使用 Swift 3 在 Xcode 中创建一个小型 iOS 应用程序。我尝试连接到 BLE 设备,然后读取电池电量。 我收到这样的回复: ...UUID = Battery Level, pr
我正在尝试读取来自 BT 设备的读数并将其转换为字符串。 , notifying = YES> 基于我在网上找到的例子我做了 let u16 = (characteristic.value! as N
关于 http://en.cppreference.com/w/cpp/numeric/random : The Mersenne twister is slower and has greater
我有一个 Android (Glass) 应用程序,它充当 BLE 中央并连接到一个BLE 外围设备(这是一个使用 Core Bluetooth 的 iOS 设备)。我正在尝试从 和 写入外围设备。
我正在使用 BLE 开发一个安卓应用程序。此应用程序的要求是更新具有各种输入的特定硬件中的电压变化。所以我在这个应用程序中启用了 BLE 通知 API。这将在一段时间内通知应用程序最新的硬件电压。 实
我正在将一个计步器连接到 android。当我在 setCharacteristicNotification 函数中执行以下行时,我得到的描述符为 Null BluetoothGattDescript
已关注 sample 我知道: 如何阅读特征值。 但我不知道: 如何将数据写入固件。 我试了几次,还是不行。 这是编码: if ((charaProp | BluetoothGattCharacter
在我的应用程序中,我发现我的外围设备具有给定的服务。然后,在继续之前,我会检查是否存在所有需要的特征。 当我为我的特征写入一个值时,回调 didWriteValueForCharacteristic:
我正在尝试从我的移动设备(扫描仪)写入已连接的可穿戴设备(广播设备)中的描述符。 在可穿戴设备上,我将描述符定义为 readCharacteristic = new BluetoothGattChar
我已经编写了一些 CoreBluetooth 代码,我可以发现设备,但我似乎无法发现我发现的外围设备的特征。谁有好的示例代码可供我用来验证我的代码? 这是我写的: #import "ViewContr
如何找出低功耗蓝牙 (BLE) 中的 MTU 与最大特征尺寸之间的关系? 我有一个运行“回声”程序的 BLE 开发板 - 所以无论它收到什么,它都会立即回复。 在我的 Android 设备上,如果我请
我有一组 n 个实数。我也有一套功能, f_1, f_2, ..., f_m. 这些函数中的每一个都将数字列表作为其参数。我还有一组 m 个范围, [l_1, u_1], [l_2, u_2], ..
因为我经常使用流,其中一些流处理大量数据,所以我认为预先分配一个近似大小的基于集合的收集器是个好主意,以防止昂贵的重新分配作为集合成长。所以我想出了这个,以及其他集合类型的类似方法: public s
我正在编写一个 Android BLE 应用程序,我正在尝试获取某个特性的权限。我已经设法使用 characteristic.getProperties() 获取特征属性,它返回一个非零值,但是,当我
我正在使用 [peripheral writeValue:startFrame forCharacteristic:cbWriteCharacteristic type:CBCharacteristi
我搜索了一下,发现这是一个可能重复的问题: Multiple CBPeripheral's for same device 我的问题是: 我有多项服务,它们加起来大约有30-40 个特征(是的,我需要
我是一名优秀的程序员,十分优秀!