delphiXE开发蓝牙BLE4.0程序时遇到的notification问题
IDE环境delphiXE8
蓝牙硬件ST17H26
service:0xfee7
chareter:0xfec9
const u16 my_OEMServiceUUID=0xfee7;
const u16 my_OEMCharaterUUID=0xfec9;
在my_Attributes[]中添加
{4,2,2,(u8*)(&my_primaryServiceUUID), (u8*)(&my_OEMServiceUUID)},
{0,2,1,(u8*)(&my_characterUUID), (u8*)(&PROP_READ_WRITE_NORSP_NOTIFY)},
{0,2,1, (u8*)(&my_OEMCharaterUUID), (u8*)(&my_page)},
手机调试软件BLEReader可以正常看到service和charater,点击"开始通知",蓝牙端发送可以正常接收。
delphixe内容:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case Step of
:
try
FBluetoothManagerLE := TBluetoothLEManager.Current;
FAdapter := FBluetoothManagerLE.CurrentAdapter;
if ManagerConnected then
begin
FBluetoothManagerLE.OnDiscoveryEnd := BluetoothLE1EndDiscoverDevices;
FBluetoothManagerLE.StartDiscovery(, ADeviceUUIDList);
end;
except
on E: Exception do ShowMessage('step1'+E.Message);
end;
:
try
CurrDevice.OnServicesDiscovered := ServicesDiscovered; if (FServiceDiscovered = false) then CurrDevice.DiscoverServices;
except
on E: Exception do ShowMessage('step2'+E.Message);
end;
:
try
FChar1 := FService.GetCharacteristic(StringToGUID(UUID_CHAR1));
if FChar1<>nil then
begin
CurrDevice.OnCharacteristicRead := OnCharRead;
CurrDevice.SetCharacteristicNotification(FChar1,true);
CurrDevice.ReadCharacteristic(FChar1);
FChar1.GetDescriptor()
Memo1.Lines.Add('找到键值');
Step:=;
end else Memo1.Lines.Add('aaa');
except
on E: Exception do ShowMessage('step3'+E.Message);
end;
:
;
end;
end;
在SetCharacteristicNotification后,无法从server端获得notify,跟踪到源文件中:
function TBluetoothLEDevice.SetCharacteristicNotification(const ACharacteristic: TBluetoothGattCharacteristic;
Enable: Boolean): Boolean;
const
Desc_Configuration: TBluetoothUUID = '{00002902-0000-1000-8000-00805F9B34FB}';
var
LDesc: TBluetoothGattDescriptor;
begin
Result := False;
if [TBluetoothProperty.Notify, TBluetoothProperty.Indicate] * ACharacteristic.GetProperties <> [] then
begin
// This is to ensure that we have read the descriptors before querying.
ACharacteristic.Descriptors;
// We check that we have the Configurarion descriptor, and then we set the notification accordingly.
LDesc := ACharacteristic.GetDescriptor(Desc_Configuration);
if LDesc <> nil then
Result := DoSetCharacteristicNotification(ACharacteristic, Enable);
end;
end;
可以发现,在真正设置
DoSetCharacteristicNotification(ACharacteristic, Enable);前进行了一些列的判断,注意是要求该charater下要有个
Desc_Configuration的UUID,如果没有就不会实质上地设置notify。于是回过头来修改蓝牙代码:
增加了:
{0,2,2,(u8*)(&clientCharacterCfgUUID), (u8*)(serviceChangeCCC)},
修改mac(不知道为什么,不修改反映不出变化)
重新烧录后,0xfec9下面多了一个0x2902的describe。再次运行delphi端程序,可以得到notify,问题解决。
delphiXE开发蓝牙BLE4.0程序时遇到的notification问题的更多相关文章
- iOS蓝牙BLE4.0通信功能
概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...
- 在 NetBeans 中开发一般 Java 应用程序时配置 Allatori 进行代码混淆
要在 NetBeans 中开发一般 Java 应用程序时利用 Allatori 进行代码混淆,设置比 IntelliJ IDEA 稍微简单一点,首先在 NetBeans 项目所在硬盘目录内创建一个名为 ...
- 使用 IntelliJ IDEA 开发一般 Java 应用程序时配置 Allatori 进行代码混淆
使用 IntelliJ IDEA 开发一般 Java 应用程序时通过 Allatori 进行代码混淆非常容易配置,下面总结一下本人经验,介绍一下配置方法. 首先在 IDEA 的 Module 所在硬盘 ...
- 如何让iOS模拟器也能测试蓝牙4.0程序?
买一个CSR蓝牙4.0 USB适配器,插在Mac上 在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never" 重启 ...
- eclipse开发hadoop2.2.0程序
在 Eclipse 环境下可以方便地进行 Hadoop 并行程序的开发和调试.前提是安装hadoop-eclipse-plugin,利用这个 plugin, 可以在 Eclipse 中创建一个 Had ...
- 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解
一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录: 1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包: 对于连 ...
- 在生成.net core 3.0程序时不包含nuget库
在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...
- iOS蓝牙4.0协议简单介绍
iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...
- IOS BLE4.0蓝牙和外设连接和收发数据的流程
前言: 苹果在IOS 6系统之后开始支持BLE 4.0,iPhone4s,iPod 5,iPad 3等之后的机型开始内嵌BLE4.0硬件,因此在开发前请先确认你的开发环境符合上述要求,并且苹果在BLE ...
随机推荐
- 【原创】http请求中加号被替换为空格?源码背后的秘密
这是why技术的第**20**篇原创文章
Docker+Nginx使用流程 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 # uname -r 查看你当前的内核版本 # yum -y insta ...
- Oracle数据库设计省市区小区数据库建表
省CREATE TABLE "SF_JECF_BASE"."SF_PROVINCE" ( "id" VARCHAR2(64 BYTE) NO ...
- 不只是安装,Kolla 让 OpenStack 运维变简单
使用 kolla 部署的 OpenStack 环境和传统直接安装的环境相比较,因为使用了全容器化部署,基本操作上有很大不同.对于初学者,操作变得更清晰和更简单了,但是如果你已经有了一定的经验,可能反而 ...
- 【原创】Android adb错误“'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。”处理方法
才刚刚接触Android没多久,现在使用adb命令的时候出现错误“'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件.”,如下图所示: 这个问题一般有两种可能: 1.就是没有配置环境变量, ...
- 7个效果震憾的HTML5应用组件
在HTML5的世界里,任何文本.图像都可以变得令人难以想象,很多HTML5应用也都已经随着浏览器的升级而变得运行飞速,而且兼容性也越来越好.下面为大家介绍7款效果震憾的HTML5应用组件,HTML5是 ...