This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: CC2640

当执行完 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的工作。希望这周可以解决这个问题,望知情大侠多多帮助。谢谢啊

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

  • 哪个大师能够指点?