我有一个带CC2540芯片的设备,我尝试连接并从Android读取/写入数据。
设备被发现,我能够连接,但是当我尝试发送读取命令时,我得到状态= 10:
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
我使用了“BLE传感器标签”源代码并根据我的更改了UUID - 我得到了相同的结果
我使用了Google Play的“BLE设备监视器”应用程序 - 我得到相同的结果(附加屏幕截图)
我的问题是:
“status = 10”代表什么?
它来自哪里?芯片?的Android?
如何调试?
我有一个iPhone设备,效果很好......
答案 0 :(得分:1)
" status = 10"代表什么?
它可以是任何真实的,因为您无法访问BLE设备监视器的来源。您可以找到通用的GATT个人资料状态代码here(BluetoothGatt)
运行TI" BleSensorTag&#34>时,您是否看到相同的错误代码?来源示例?
它来自哪里?芯片? Android的? 怎么调试呢?
这是Android的BluetoothGattCallback()函数从芯片通过BluetoothAdapter访问它的解释。
我建议专注于" BleSensorTag"源代码; 对于状态代码find
private BluetoothGattCallback mGattCallbacks = new BluetoothGattCallback()
;" BluetoothLeService.java"关于第82行。您获取状态代码的位置以及已覆盖的回调随后会注册到BluetoothDevice对象的connectGatt()方法。
mBluetoothGatt = device.connectGatt(this, false, mGattCallbacks)
如果可能的话,我还要确保我的BLE数据包使用TI的sniffer格式正确。如果不是,你也可以调试BluetoothAdapter.LeScanCallback
中出现的内容再次出现在" BleSensorTag"在MainActivity.java中查找public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord)
方法。并改变;
public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
public void run() {
// Filter devices
为:
public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
final byte[] scanRecordStream = scanRecord;
runOnUiThread(new Runnable() {
public void run() {
// Filter devices
Log.i(TAG, "scanRecord:" + Conversion.BytetohexString(scanRecordStream, scanRecordStream.length));
rest是相同的,你应该在logcat中看到你的字节流。
[编辑] 根据Core Bluetooth Spec V4.0
,这是 LE通用数据包结构
以下是BLE数据包字节结构的示例,我将其添加为一个示例,以防您在控制台上记录数据包的长度并将其作为参考时使用。< / p>
可以预期BLE广告包具有通用形式:
02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)
B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)
00 49: major
00 0A: minor
C5: 2’s complement of measured TX power
快乐的调试。