Delphi BLE 的一个 bug

BLE L2CAP详解:MTU协商、ECN流控与丢包排查实战 L2CAP(逻辑链路控制与适配协议)是蓝牙低功耗(BLE)协议栈中承上启下的关键层,负责数据分片、重组、信道管理与流量控制。其核心机制包括MTU协商、基于信用的流控(ECN)及多种L2CAP信道类型(如面向连接信道COC),直接决定GATT通信的吞吐量、实时性与可靠性。在传感器采集、心电图回传、AT指令透传等典型场景中,90%以上的‘notify丢包’‘GATT_ERROR’‘串口乱码’问题,根源并非ATT或应用层错误,而是L2CAP参数配置失当——如MTU不匹配、ECN信用耗尽、分片超时或信令信道被静默丢 阅读详情

这个莫名其妙的 bug 浪费了我 N 多个小时,为了搞清楚原因俺熬夜到1点。

这个BUG是这样的:

BluetoothLE1 第一个操作是 DiscoverDevice,扫描发现周围的蓝牙设备。扫描后,BluetoothLE1 内部有一个扫描到的设备对象列表;

第二个操作是针对某个设备,执行对该设备提供哪些服务进行一个扫描发现操作:DiscoverServices。执行完成后,BluetoothLE1内部有一个服务对象列表,同时每个服务内还有一个该服务拥有的特征对象列表。

然后,采用 BluetoothLE1.GetCharacteristic(AService, ChaUUID); 就能获得指定UUID的特征对象。我们和 BLE 设备通信的最终目的就是读设备的某个值或者写某个值(接收数据或者发送数据),就是要读写这个特征对象。

BUG 来了:如果不对服务列表做一次 for 循环操作,BluetoothLE1.GetCharacteristic 这个方法一定是返回 nil,也就是找不到你要的特征对象。

解决方法:做 BluetoothLE1.GetCharacteristic 之前,先对它做一个循环:

for i := 0 to AService.Characteristics.Count -1 do

delphi 蓝牙 TBluetoothLE delphi 蓝牙 TBluetoothLE、TBluetoothLEManager BLE http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_Bluetooth_Low_Energy 指定UUID HRSERVICE: TBluetoothUUID = '{0000180D-0000-1000-8000-00805F9B3... 阅读详情

相关推荐

使用Delphi做蓝牙BLE开发的一个问题

Delphi 的 BLE 开发,拖一个 TBlueToothLe 到界面上,使用这个控件,就可以进行 BLE 的开发,比如去连接一个蓝牙手环。Delphi 自带的 Demo 里面,有一个 BLEScanner 程序,可以作为开发的起点。

pcplayer的博客 1710

Delphi 的 Blooth LE(蓝牙4.0) 编程原理简介

首先,Delphi 官方的例子程序里面,有BLE的例子,可以先参考。 蓝牙的不同版本:2.0 3.0 4.0 其通讯协议有很大的不同。4.0 就是 BLE,低功耗蓝牙。 以下是我经过自己写例子代码操作蓝牙设备的测试摸索后对BLE蓝牙编程原理的理解。安卓手机上测试通过。 Delphi 提供了BLE的控件:TBluetoothLE 拖一个控件放到界面上,设置控件的 Enable 为 T

pcplayer的博客 6559

芯烨打印机开发包实战:从DLL报错到ESC/POS指令排障

Windows系统中,打印机开发常遇到缺少api-ms-win-core-path-l1-1-0.dll之类的运行库报错,这并非设备或驱动损坏,而是系统Universal C Runtime缺失所致。理解这一原理后,开发者才能正确安装VC++运行库并避免乱下DLL。在打印实现层面,ESC/POS指令通过串口或USB向设备发送字节流,驱动、端口、编码三大要素决定了能否稳定输出。这一技术广泛应用于收银小票、快递面单、标签打印等场景。本文以芯烨打印机开发包为例,系统梳理从解压文件、安装驱动、跑通Demo,到排查D

weixin_29186249的博客 273

Delphi 10.4 社区版安卓下蓝牙的一个问题

蓝牙控件有这么一个方法: var ACharacteristic: TBluetoothGattCharacteristic; ACharacteristic := BluetoothLE1.GetCharacteristic(AService, My_Characteristic_ID); 但是,这个方法可能会返回 nil,不是这个ACharacteristic 不存在,而是一个 bug。这个 bug 在 Delphi 10.3.3 社区版就存在,10.4 还在。 在执行上述方法获得一个...

pcplayer的博客 731

Delphi 蓝牙 BLEScanner

Delphi 蓝牙 BLEScanner

Delphi 蓝牙 ClBluetooth

Delphi 蓝牙 ClBluetooth

delphi BLE 学习

TBluetoothLE 控件 TBluetoothLE.FManager: TBluetoothLEManager; class constructor TBluetoothLEManager.Create; begin FBluetoothManagerClass := TPlatformBluetoothLEManager; end; FM...

weixin_34290000的博客 666

Delphi 经典蓝牙控件及Demo (android版本)

1. Delphi 经典蓝牙(Android)控件原代码 2. 控件演示程序工程文件源代码

Bluetooth LE相关学习笔记

Bluetooth LE相关学习笔记。

狂想家 1467

delphi 蓝牙VCL——BlueToothFramewor,有demo

delphi的蓝牙控件,有示例可操作研究一下是怎样进行连接通信的。也可用于红外,串口通信。

DelphiXE 10.2编写的HC-08C 蓝牙模块测试Android程序

DelphiXE 10.2编写Android程序 ,通过蓝牙接口控制程序,能扫描蓝牙模块,并且连接HC-08C 蓝牙模块,与该模块进行数据交互。

【Delphi】经典蓝牙控件(Android)

在用 Delphi 开发手机APP的时候,肯定会遇到使用蓝牙功能,蓝牙按照发展版本不同,区分为经典蓝牙和低功耗蓝牙,本文介绍的是经典蓝牙的Delphi控件,由于IOS没有开放经典蓝牙功能,所以本文讨论的只是Android的经典蓝牙控件。 开发蓝牙功能的时候,需要调用一些列的函数,比较繁杂,于是我们就将这些功能封装成控件,控件只提供简单的2个属性,8个函数和一个事件就可以立即使用手机的经典蓝牙功能。 控件源说明及代码下载(源代码位于2.5中) 控件Demo下载(APK) 全部源代码(...

sensor_WU 博客 3034

delphi xe android 蓝牙扫描

自己写的ble 蓝牙检索程序,用于寻找蓝牙的服务uuid 和特征uuid

Bluetooth LE(低功耗蓝牙) - 第一部分

在写作的时候,谷歌刚刚发布了Android ,而摩托罗拉宣布摩托罗拉360智能手表。磨损的API仍然相当基本的,很好的记录,还有更多的来的,所以我不打算对他们写一个教程(没有,至少!)一个有趣的一件事。摩托罗拉360是由4.3个和后来的Android。这最明显的原因是,蓝牙LE只有在Android 4.3和以后的支持,这将意味着,摩托360将支持蓝牙LE。蓝牙乐是一种将不仅可穿戴技术中心的技术

如竹的技术博 1万+

delphi xe10 蓝牙串口通讯DEMO

通过delphi xe10 的标准串口协议进行通讯的例子,很好用的demo

Android实例-Delphi开发蓝牙官方实例解析(XE10+小米2+小米5)

2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!

上一篇: Delphi 的 Blooth LE(蓝牙4.0) 编程原理简介
下一篇: 关于 Delphi 的字符串
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值