請問CC2541 central端如何得知現在已經跟peripheral有連接上?
有找到一些相關的function,但不知道如何使用。
如:GAPRole_GetParameter( GAPROLE_CONNHANDLE, &gapConnHandle ); //獲得handle
我在static void performPeriodicTask( void )中添加這個變數偵測好像沒用。
gapCentralRoleEvent_t *pEvent;
pEvent->gap.hdr.status
是否有一變數是直接儲存連線status的呢?
central端有GAP_LINK_ESTABLISHED_EVENT事件,在simpleBLECentralEventCB函数里面。
并会如下设置变量,你用simpleBLEState应该可以判断
simpleBLEState = BLE_STATE_CONNECTED;
simpleBLEConnHandle = pEvent->linkCmpl.connectionHandle;
simpleBLEProcedureInProgress = TRUE;
我一開始也是這麼認為,但從下面程序可以知道,simpleBLEState 只是一個被宣告的結構,並沒辦法知道real的連線狀態。
if ( p->simpleBLEState == BLE_STATE_IDLE ){
peerAddr = simpleBLEDevList[0].addr;
addrType = simpleBLEDevList[0].addrType;
p->simpleBLEState = BLE_STATE_CONNECTING;
GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, peerAddr );
}
謝謝您,我明白您的意思了。
我只要把我下面function中的
p->simpleBLEState = BLE_STATE_CONNECTING;註解掉,讓程序回到GAP_LINK_ESTABLISHED_EVENT,再讓其改變狀態就好了。
if ( p->simpleBLEState == BLE_STATE_IDLE ){
peerAddr = simpleBLEDevList[0].addr;
addrType = simpleBLEDevList[0].addrType;
p->simpleBLEState = BLE_STATE_CONNECTING;
GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, peerAddr );
}