微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541主从连接,出现connected但是不能收发数据的问题

CC2541主从连接,出现connected但是不能收发数据的问题

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

我用的是TI提供的SimpleCentral 和 SimpleBLEPeripheral的例子

在实际使用的时候,有时候LCD上会只显示connected但没有Simple Svc found。此时虽然显示连接,但是不能传输数据,只有当出现Simple Svc found的时候才能正常收发数据。代码是这么写的:

static void simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg )

{

……

else if ( simpleBLEDiscState == BLE_DISC_STATE_CHAR )
{
// Characteristic found, store handle
if ( pMsg->method == ATT_READ_BY_TYPE_RSP &&
pMsg->msg.readByTypeRsp.numPairs > 0 )
{
simpleBLECharHdl = BUILD_UINT16( pMsg->msg.readByTypeRsp.dataList[0],
pMsg->msg.readByTypeRsp.dataList[1] );

LCD_WRITE_STRING( "Simple Svc Found", HAL_LCD_LINE_1 );

……

}

static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )

{……

case GAP_LINK_ESTABLISHED_EVENT:
{
if ( pEvent->gap.hdr.status == SUCCESS )
{
simpleBLEState = BLE_STATE_CONNECTED;
simpleBLEConnHandle = pEvent->linkCmpl.connectionHandle;
simpleBLEProcedureInProgress = TRUE;

// If service discovery not performed initiate service discovery
if ( simpleBLECharHdl == 0 )
{
osal_start_timerEx( simpleBLETaskId, START_DISCOVERY_EVT, DEFAULT_SVC_DISCOVERY_DELAY );
}

LCD_WRITE_STRING( "Connected", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( bdAddr2Str( pEvent->linkCmpl.devAddr ), HAL_LCD_LINE_2 );
}

也就是说出现这种情况的原因是主从连接后,虽然有了GAP_LINK_ESTABLISHED_EVENT,从而出现了"Connected",但此时句柄并没有被正确存下来,也就是此时句柄还,初始的0(表示没有GATT服务发现),然后触发了1秒的“发现事件”,去设置定时的START_DISCOVERY_EVT。但这个connected以后,就再也不会出现Simple Svc found 也就是存不了正确的句柄。但断开连接后,可能可以正常使用。

所以我的问题是:为什么会出现connected但句柄始终是0的情况,要怎么样修改这个问题?(用的程序都是TI提供的,偶尔会出现这个问题)

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

网站地图

Top