关于GATT Client 和 GATT Server 的疑问
各位哥们请问:
在SimpleBLEPeripheral范例里面是属于GATT Server 端,
在SimpleBLECentral范例里面是属于GATT Client端,
现在我想要让他们两个专案同时存在Client及Server,
所以在SimpleBLEPeripheral_Init() 添加 :
VOID GATT_InitClient();
GATT_RegisterForInd( simpleBLEPeripheral_TaskID );
以及 SimpleBLECentral_Init() 添加 :
SimpleProfile_AddService( GATT_ALL_SERVICES );
那么现在我在Peripheral 里面呼叫 GATT_DiscPrimaryServiceByUUID() ;
响应了 pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP , 事件里面的代码如下:
arr[0] = pMsg->msg.findByTypeValueRsp.handlesInfo[0].handle;
arr[1] = pMsg->msg.findByTypeValueRsp.handlesInfo[0].grpEndHandle;
uint16 cHandle;
GAPRole_GetParameter( 0x30E, &cHandle);
attReadByTypeReq_t req;
req.startHandle = arr[0];
req.endHandle = arr[1];
req.type.len = ATT_BT_UUID_SIZE;
req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR1_UUID);
req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR1_UUID);
GATT_ReadUsingCharUUID( cHandle, &req, simpleBLEPeripheral_TaskID );
这个 GATT_ReadUsingCharUUID() 方法会响应 ATT_READ_BY_TYPE_RSP or ATT_ERROR_RSP
但是我添加了这两个事件都没有进入判断式子里,所以我找不到Central的特征值,
可以确定的是在呼叫GATT_ReadUsingCharUUID() 后 osal 有发送 GATT_MSG_EVENT 事件,
怎样才能找到Central的特征呢?
请先了解蓝牙4.0协议中GATT的通讯原理,可以看论坛那个视频教程贴。
大致过程就是 从机起 service,主机访问操作,所以从机是server,主机是client。
论坛说两个可以同时存在....
"一个设备中可以同时为Client及Server,但实际应用中并不冲突"
你讲的从机起 service,主机访问操作,所以从机是server,主机是client。
只是我想将主机添加Server , 从机添加 client 。