TI中文支持网
TI专业的中文技术问题搜集分享网站

Peripheral如何将数据发送给Central?

各位大神,你们好!

        我从Central向Peripheral发送数据,并从串口将数据打印出来,已经实现。但是如何从Peripheral向Central发送数据呢?找了好多TI的例层,但是没找到,希望大家指教。

Yan:

hi Qin,

可以通过central 向peripheral 发送读请求, peripheral回复,

或者peripheral 发送notification, 或indication 给central 实现.

具体请参考central 和 peripheral 代码.

Qin Daohong:

回复 Yan:

Peripheral  每5秒执行performPeriodicTask( void )函数,通过SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, sizeof(uint8), &valueToCopy);向Central发送数据。但是SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, sizeof(uint8), &valueToCopy)-> simpleProfile_ProcessCharCfg( simpleProfileChar4Config, &simpleProfileChar4, FALSE )->simpleProfile_ProcessCharCfg()->GATT_Notification(),但是GATT_Notification()这个函数更本就没调用。  simpleProfile_ProcessCharCfg函数中

           if ( ( pItem->connHandle != INVALID_CONNHANDLE ) &&  ( pItem->value != GATT_CFG_NO_OPERATION ) )

条件就没法成立。

Qin Daohong:

回复 Qin Daohong:

bStatus_t SimpleProfile_AddService( uint32 services ) {  

uint8 status = SUCCESS;

  // Initialize Client Characteristic Configuration attributes  

 for ( uint8 i = 0; i < GATT_MAX_NUM_CONN; i++ )   {   

  simpleProfileChar4Config[i].connHandle = INVALID_CONNHANDLE;  /'/不知道这里为什么都填为INVALID_CONNHANDLE?

   simpleProfileChar4Config[i].value = GATT_CFG_NO_OPERATION;

  }

  // 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    

status = GATTServApp_RegisterService( simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ),                                          

 simpleProfile_ReadAttrCB, simpleProfile_WriteAttrCB, NULL );

  }

  return ( status );

 }

Qin Daohong:

回复 Yan:

能给一下指导吗?

TI的工程师怎么也不给个回应呢!

Yan:

回复 Qin Daohong:

hi qin,

 simpleProfile_ProcessCharCfg() 是什么? 你自己加的代码? 为什么没有用 GATTServApp_ProcessCharCfg() ?

请麻烦你再把你的具体情况说清楚一点, 是否自己加了代码.

GATTServApp_ProcessCharCfg() 会调用GATT_Notification().  

请参考以下这个帖子:http://www.deyisupport.com/question_answer/analog/wireless_connectivity/f/45/t/23478.aspx

有时候你问的问题可能已经在论坛里面有人解答过了, 所以有可能的话请在提问前在论坛里面搜索一下 🙂

Yan:

回复 Qin Daohong:

INVALID_CONNHANDLE , 这是表示蓝牙连接的handle.

你初始化的时候根本没有设备给你连上, 当然默认全都是invalid.

你这个代码也不是TI 的源码, 被人改过的. 请去官网下载正宗的协议栈对比一下:

http://www.ti.com/tool/ble-stack?DCMP=wbu-blestack&HQS=blestack

Qin Daohong:

回复 Yan:

 我之前用的是BLE-CC254X-1.1版本的。现在换了BLE-CC254x-1.3版本了。

我的问题是,Central和Peripheral建立连接后,Peripheral给Central的发送数据,主机接收不到数据,且没任何反应。

现在两个Central和Peripheral能建立连接。因为主机打印了Connected,还打印了从机地址0xE0C79D60DEC6。

GATTServApp_ProcessCharCfg( simpleProfileChar4Config, &simpleProfileChar4, FALSE, simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ), INVALID_TASK_ID );是周期性地调用,但是,主机没任何反应。

 

Yan:

回复 Qin Daohong:

Hi Qin,

请确认主机已经把从机的CHAR4 的 notification enable打开.

Qin Daohong:

回复 Yan:

怎样做,主机才能把从机的CHAR4 的 notification enable打开呢?我之前在其他坛子也看到了你这句话,但是一直没明白。是在主机和从机连接完成后吗,还是连接过程中呢?

Yan:

回复 Qin Daohong:

Hi Qin,

这是在连接完成后进行操作的.

具体的话, 你先看simpleGATTProfile.c 中,  CHAR4 的定义里, 有个

// Characteristic 4 configuration {     { ATT_BT_UUID_SIZE, clientCharCfgUUID },    GATT_PERMIT_READ | GATT_PERMIT_WRITE,     0,     (uint8 *)simpleProfileChar4Config },

simpleProfileChar4Config 这个值负责的就是notification 和 indication 的打开关闭.

连接成功后, master 端用 write 的方式把这个值写成 0x0001, 就把notification 打开了.

赞(0)
未经允许不得转载:TI中文支持网 » Peripheral如何将数据发送给Central?
分享到: 更多 (0)