2541添加128bitUUID
2016-06-17 21:41
344 查看
2541添加128bitUUID
最后修改时间:2016年6月17日21:42:25
一、简介
本文介绍如何在SimpleBLEPeripheral工程中,将16bit的UUID转换成128bit的UUID
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF(主芯片CC2541)
三、具体步骤
从机添加128bitUUID
1.首先要在simpleGATTprofile.h添加
#define TI_UUID(uuid) 0x9C, 0x65, 0x0C, 0x00, 0xE4, 0x78, 0xA1, 0xA1,0xCC,0x10,
0x24, 0x3C, LO_UINT16(uuid), HI_UINT16(uuid), 0x3F, 0x23
//这里的显示是倒着现实的比如
发送通道UUID为"6e400002-b5a3-f393-e0a9-e50e24dcca9e"
#define TI_UUID(uuid) 0x9C, 0x65, 0x0C, 0x00, 0xE4, 0x78, 0xA1, 0xA1,0xCC,0x10,
0x24, 0x3C, LO_UINT16(uuid), HI_UINT16(uuid), 0x3F, 0x23
2.在simpleBLEPeripheral.c中adverData中增加条件编译
//这里要注意
#if defined() #else #endif 的用法
其中#if defined(
1.用字母开头
2.要有下划线
)
例如:
#if defined (UUID_128)
0x11, // length of this data
GAP_ADTYPE_128BIT_MORE, // some of the UUID's, but not all
TI_UUID(SIMPLEPROFILE_SERV_UUID),
#else
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),
#endif
此时可以编译下载,但是UUID还是没有变化。那是为什么那,我们还要继续修改。
3.在att.h中我们定义了蓝牙uuid的长度,这里已经定义直接使用就行
// Size of 16-bit Bluetooth UUID
#define ATT_BT_UUID_SIZE 2
// Size of 128-bit UUID
#define ATT_UUID_SIZE 16
而TI给出的参考代码中又在
simpleGATTprofile.h又重新定义了UUID的长度我感觉多此一举,这里贴出TI的代码
#if (defined USE_128_BIT_UUID)
#define UUID_SIZE 16
#else
#define UUID_SIZE 2
#endif
4. 在simpleGATTprofile.c中 从71行到105行添加条件编译
主要是要改变UUID的长度
不用LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID)
要用 TI_UUID(SIMPLEPROFILE_SERV_UUID)这一句就行。
5. 在simpleGATTprofile.c中这句话添加条件编译
// Simple Profile Service attribute
static CONST gattAttrType_t simpleProfileService = { ATT_BT_UUID_SIZE, simpleProfileServUUID };
主要是要将UUID的长度“ATT_BT_UUID_SIZE”转换成“ATT_UUID_SIZE”
6.在Profile的表格中
第一个是说明这个表格的格式
第二个为通道一的声明
//每一组的这个要添加条件编译
第三个为通道一的值的描述(主要设置通道的权限、只写无返回...、保存数据的位置)
//比如
// Characteristic Value 1
{
#ifdef UUID_128
{ ATT_UUID_SIZE, simpleProfilechar1UUID },
#else
{ ATT_BT_UUID_SIZE, simpleProfilechar1UUID },
#endif
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
&simpleProfileChar1
},
第四个为用户的描述
以后每三个为一组(如果有notify的功能要添加一项为四个一组)。
7.在simpleGATTprofile.c中simpleProfile_WriteAttrCB函数中
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
这个要添加条件编译
主要是将ATT_BT_UUID_SIZE改为ATT_UUID_SIZE
8.在simpleGATTprofile.c中simpleProfile_WriteAttrCB函数中
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
这句话要进行条件编译
TI参考历程中在这一步出现了问题。
主要修改是将
uuid[0] uuid[1]
这两个改为
uuid[12] uuid[13]
这些修改后,重新编译,最好rebuild all这样保证编译成功。
这样128位的UUID就成功了。
但是这样做了之后会发现手机app端的notify开关按下后没有反应,但是可以使用。
这个还要请各位大侠指教。
主机端添加128bitUUID
1.在simpleBLECentral.c中的函數simpleBLECentralStartDiscovery中添加条件编译
#if defined(UUID_128)
uint8 uuid[ATT_UUID_SIZE] = { TI_UUID(SIMPLEPROFILE_SERV_UUID) };
#else
uint8 uuid[ATT_BT_UUID_SIZE] = { LO_UINT16(SIMPLEPROFILE_SERV_UUID),
HI_UINT16(SIMPLEPROFILE_SERV_UUID) };
#endif
2.在simpleBLECentral.c中的函數simpleBLEGATTDiscoveryEvent中添加条件编译
#if defined(UUID_128)
req.type.len = ATT_UUID_SIZE;
#else
req.type.len = ATT_BT_UUID_SIZE;
#endif
#if defined(UUID_128)
uint8 uuid[ATT_
4000
UUID_SIZE] = { TI_UUID(SIMPLEPROFILE_CHAR1_UUID) };
VOID osal_memcpy( req.type.uuid, uuid, ATT_UUID_SIZE );
#else
req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR1_UUID);
req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR1_UUID);
#endif
最后修改时间:2016年6月17日21:42:25
一、简介
本文介绍如何在SimpleBLEPeripheral工程中,将16bit的UUID转换成128bit的UUID
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF(主芯片CC2541)
三、具体步骤
从机添加128bitUUID
1.首先要在simpleGATTprofile.h添加
#define TI_UUID(uuid) 0x9C, 0x65, 0x0C, 0x00, 0xE4, 0x78, 0xA1, 0xA1,0xCC,0x10,
0x24, 0x3C, LO_UINT16(uuid), HI_UINT16(uuid), 0x3F, 0x23
//这里的显示是倒着现实的比如
发送通道UUID为"6e400002-b5a3-f393-e0a9-e50e24dcca9e"
#define TI_UUID(uuid) 0x9C, 0x65, 0x0C, 0x00, 0xE4, 0x78, 0xA1, 0xA1,0xCC,0x10,
0x24, 0x3C, LO_UINT16(uuid), HI_UINT16(uuid), 0x3F, 0x23
2.在simpleBLEPeripheral.c中adverData中增加条件编译
//这里要注意
#if defined() #else #endif 的用法
其中#if defined(
1.用字母开头
2.要有下划线
)
例如:
#if defined (UUID_128)
0x11, // length of this data
GAP_ADTYPE_128BIT_MORE, // some of the UUID's, but not all
TI_UUID(SIMPLEPROFILE_SERV_UUID),
#else
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),
#endif
此时可以编译下载,但是UUID还是没有变化。那是为什么那,我们还要继续修改。
3.在att.h中我们定义了蓝牙uuid的长度,这里已经定义直接使用就行
// Size of 16-bit Bluetooth UUID
#define ATT_BT_UUID_SIZE 2
// Size of 128-bit UUID
#define ATT_UUID_SIZE 16
而TI给出的参考代码中又在
simpleGATTprofile.h又重新定义了UUID的长度我感觉多此一举,这里贴出TI的代码
#if (defined USE_128_BIT_UUID)
#define UUID_SIZE 16
#else
#define UUID_SIZE 2
#endif
4. 在simpleGATTprofile.c中 从71行到105行添加条件编译
主要是要改变UUID的长度
不用LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID)
要用 TI_UUID(SIMPLEPROFILE_SERV_UUID)这一句就行。
5. 在simpleGATTprofile.c中这句话添加条件编译
// Simple Profile Service attribute
static CONST gattAttrType_t simpleProfileService = { ATT_BT_UUID_SIZE, simpleProfileServUUID };
主要是要将UUID的长度“ATT_BT_UUID_SIZE”转换成“ATT_UUID_SIZE”
6.在Profile的表格中
第一个是说明这个表格的格式
第二个为通道一的声明
//每一组的这个要添加条件编译
第三个为通道一的值的描述(主要设置通道的权限、只写无返回...、保存数据的位置)
//比如
// Characteristic Value 1
{
#ifdef UUID_128
{ ATT_UUID_SIZE, simpleProfilechar1UUID },
#else
{ ATT_BT_UUID_SIZE, simpleProfilechar1UUID },
#endif
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
&simpleProfileChar1
},
第四个为用户的描述
以后每三个为一组(如果有notify的功能要添加一项为四个一组)。
7.在simpleGATTprofile.c中simpleProfile_WriteAttrCB函数中
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
这个要添加条件编译
主要是将ATT_BT_UUID_SIZE改为ATT_UUID_SIZE
8.在simpleGATTprofile.c中simpleProfile_WriteAttrCB函数中
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
这句话要进行条件编译
TI参考历程中在这一步出现了问题。
主要修改是将
uuid[0] uuid[1]
这两个改为
uuid[12] uuid[13]
这些修改后,重新编译,最好rebuild all这样保证编译成功。
这样128位的UUID就成功了。
但是这样做了之后会发现手机app端的notify开关按下后没有反应,但是可以使用。
这个还要请各位大侠指教。
主机端添加128bitUUID
1.在simpleBLECentral.c中的函數simpleBLECentralStartDiscovery中添加条件编译
#if defined(UUID_128)
uint8 uuid[ATT_UUID_SIZE] = { TI_UUID(SIMPLEPROFILE_SERV_UUID) };
#else
uint8 uuid[ATT_BT_UUID_SIZE] = { LO_UINT16(SIMPLEPROFILE_SERV_UUID),
HI_UINT16(SIMPLEPROFILE_SERV_UUID) };
#endif
2.在simpleBLECentral.c中的函數simpleBLEGATTDiscoveryEvent中添加条件编译
#if defined(UUID_128)
req.type.len = ATT_UUID_SIZE;
#else
req.type.len = ATT_BT_UUID_SIZE;
#endif
#if defined(UUID_128)
uint8 uuid[ATT_
4000
UUID_SIZE] = { TI_UUID(SIMPLEPROFILE_CHAR1_UUID) };
VOID osal_memcpy( req.type.uuid, uuid, ATT_UUID_SIZE );
#else
req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR1_UUID);
req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR1_UUID);
#endif
相关文章推荐
- 分享Android 蓝牙4.0(ble)开发的解决方案
- TI 蓝牙4.0 CC2540开始大批量供货啦!
- 4.0蓝牙 ble开发记录
- 安卓蓝牙4.0BLE 通信
- 关于: 安卓能否与iphone通过蓝牙4.0(BLE)通讯?
- Android蓝牙4.0读写数据返回状态码及出现异常解决办法
- 蓝牙即时通信
- BLE4.0配对绑定过程的底层剖析
- 【BLE4.0】CC254x-修改广播时间
- Android 蓝牙4.0(BLE) 理解--紧随智能家居和可穿戴设备潮流
- iBeacon技术解析
- Android 蓝牙4.0 BLE 理解
- Android 蓝牙4.0 BLE 理解
- 理解BLE:近场无线网络,让可穿戴设备、智能家居、室内定位变得可能
- iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
- android蓝牙4.0BLE
- BLE4.0配对绑定过程的底层剖析
- 精读OSAL --时钟及休眠(hal_sleep.c)
- 精读OSAL --按键的执行流程(hal_key.c onboard.c)
- Android蓝牙4.0之玩爆智能穿戴、家具(二)【进阶篇】