微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 求教TI大师:BLE Master不能从BLE Slave得到数据的原因是什么?

求教TI大师:BLE Master不能从BLE Slave得到数据的原因是什么?

时间:10-02 整理:3721RD 点击:

当执行完 void simpleBLECentralStartDiscovery( void ) 之后,

BLE会从Slave那里得到数据,并执行 static void simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg )。

 Code现在可以进入simpleBLEGATTDiscoveryEvent()中,但是读取不到 simpleBLESvcStartHdl and simpleBLESvcEndHdl。

原因就是 pMsg->msg.findByTypeValueRsp.numInfo = 0

请问为什么会出现这种情况?

Robert,

simpleBLECentralStartDiscovery() 指定只查找SIMPLEPROFILE_SERV_UUID 的uuid,不会返回其他服务的handle.

你的外设里面有SimpleBLEPeripheral吗?

Hi Yan

我用不是SIMPLEPROFILE_SERV_UUID ,但是我BLE Master用的UUID和BLE Slave用的UUID是一致的。

具体说明如下:

simpleBLECentralStartDiscovery()这个函数其实是从SimpleBLECentrol中Copy过来的。

原来的函数内容如下:

/*********************************************************************  

* @fn      simpleBLECentralStartDiscovery  *  

* @brief   Start service discovery.  *  

* @return  none  */

 static void simpleBLECentralStartDiscovery( void )

 {  

          uint8 uuid[ATT_BT_UUID_SIZE] = { LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID) };     // Initialize cached handles  

          simpleBLESvcStartHdl = simpleBLESvcEndHdl = simpleBLECharHdl = 0;

          simpleBLEDiscState = BLE_DISC_STATE_SVC;     // Discovery simple BLE service  

          GATT_DiscPrimaryServiceByUUID( simpleBLEConnHandle,    uuid,    ATT_BT_UUID_SIZE,  simpleBLETaskId );

 }

修改后的内容如下:

static void simpleBLECentralStartDiscovery( void )

{  

          uint8 uuid[ATT_BT_UUID_SIZE] = { LO_UINT16(KW0118_SERVICE_UUID), HI_UINT16(KW0118_SERVICE_UUID) };     // Initialize cached handles  

          simpleBLESvcStartHdl = simpleBLESvcEndHdl = simpleBLECharHdl = 0;

          simpleBLEDiscState = BLE_DISC_STATE_SVC;     // Discovery simple BLE service  

          GATT_DiscPrimaryServiceByUUID( simpleBLEConnHandle,    uuid,    ATT_BT_UUID_SIZE,  simpleBLETaskId );

}

BLE Slave中的UUID也是 KW0118_SERVICE_UUID。这样做修改可以吗?

 由于这个程序是从SimpleBLECentrol中Copy过来的,所以如simpBLEConnHandle, simpleBLETaskId,这些变量我就没有去改动。

程序在执行GATT_DiscPrimaryServiceByUUID( simpleBLEConnHandle,    uuid,    ATT_BT_UUID_SIZE,  simpleBLETaskId );的时候,

simpleBLEConnHandle为0, uuid是我自己定义的FFD0,simpleBLETaskId也是正确的。

本来想跟到GATT_DiscPrimaryServiceByUUID()里面看看,但是这个函数是封闭的,看不到什么内容,所以只能请教你了。

 

即将开始CC2640的工作。希望这周可以解决这个问题,望知情大侠多多帮助。谢谢啊

没 有人能回答这个问题么?

哪个大师能够指点?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top