您的位置:首页 > 产品设计 > UI/UE

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝牙4.0