CC2541\CC2540 特征值的添加和读写

1.GATT分析

  • 1.profole:可以理解为一种规范,一个标准的通信协议,profile存在于从机中。蓝牙组织规定了一系列的标准profile,例如防丢器,心率计等。每个profile中会包括多个Service,每个Service代表从机的一种能力。
  • 2.Service:可以理解为一个服务,在ble从机中,通常有多种服务,比如电量信息服务,系统信息服务等,每个Service中又包含多个Characteristic特征值。每个具体的特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的特征值存储在从机的profile中,这样主机即也可以通过这个特征值来读取数据。
  • 3.特征值:ble通信是通过特征值来完成的,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
  • 4.UUID:刚才我们提到的服务和特征值都需要一个唯一的UUID来标识。
  • 5.GATT:这个是管理数据的,数据的收发都要经过这一层来处理
  • 6.GAP:位于gatt的下层
  • 7.ATT:可以不用考虑
  • 举例分析:现有一个活动追踪的BLE设备和一个支持BLE的Android设备。Android设备支持Central角色,而BLE设备支持peripheral角色。创建一个BLE连接需要这两个角色都存在,都仅支持Central角色或者都仅支持peripheral角色则无法建立连接。当连接建立后,它们之间就需要传输GATT数据。谁做server,谁做client,则取决于具体数据传输的情况。例如,如果活动追踪的BLE设备需要向 Android设备传输sensor数据,则活动追踪器自然成为了server端;而如果活动追踪器需要从Android设备获取更新信息,则 Android设备作为server端可能更合适。
  • 关于整体的理解:这里涉及到handle,UUID等一并说完。我的理解,其实一个service就相当于一个结构体,这个profile中有很多个特征值,这些特征值也是一种数据类型,所以当一个profile只有一个service的时候,这个profile就相当于在内存中开辟了一段空间,数据的保存格式是由ATT决定的,ATT可以理解为具体的保存数据的数据类型,而gatt提供读写这些数据的接口,因此,函数中对特征值的读写都是通过Gatt完成的,profile仅仅是相当于一种定义,可以理解为profile类似于一类商品比如水果,特征值类似于具体的苹果,香蕉等,如果想要对苹果和香蕉进行操作,你要么知道它在超市中的位置即handle,或者知道他的标签UUID,通过这两种方式都可以对特征值进行操作。

2.获取当前例子per程序的特征值

在per这个例子中,使用了simpleGATTprofile,这个是自定义的profile并不是SIG规定的profile,我们只需要把这个看懂,然后官方定义的通用的profile是一样的道理。下面分析这个profile的实现原理,per中有几个profile,其中gap和gatt是必须要有的,设备信息的profile不是必须的(这个只能查看信息,不行修改,可以利用这个进行OAD的时候查看系统是否升级成功,这是后话了),要弄就弄明白!!

  • 2.1 simpleGATTprofile添加的地方 
    在初始化函数中添加了这个服务,具体往里面看的话是在gatt层注册的
  •  SimpleProfile_AddService( GATT_ALL_SERVICES );  // Simple GATT Profile

    具体来看这个函数

  • bStatus_t SimpleProfile_AddService( uint32 services )
    {
      uint8 status = SUCCESS;
    
      // Initialize Client Characteristic Configuration attributes
      GATTServApp_InitCharCfg( INVALID_CONNHANDLE, simpleProfileChar4Config );
    
      // Register with Link DB to receive link status change callback
      VOID linkDB_Register( simpleProfile_HandleConnStatusCB );  //这个是和连接相关的
    
      if ( services & SIMPLEPROFILE_SERVICE )
      {
        // Register GATT attribute list and CBs with GATT Server App
        //向GATT注册自己的属性值,第一个参数为属性值列表,第二个参数为大小,第三个参数为属性值更改之后的回调函数,查找simpleProfileCBs的定义可知,这里有两个,一个是读属性值回调,一个是写属性值回调 
        status = GATTServApp_RegisterService( simpleProfileAttrTbl, 
                                              GATT_NUM_ATTRS( simpleProfileAttrTbl ),
                                              &simpleProfileCBs );
      }
    
      return ( status );
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值