BtStatus time_gatt_connect_service(TimeCTransport *pChnl) { BtStatus status; TIMEASSERT(pChnl->check_byte == TIME_CHECK_BYTE); if (pChnl->handler.remDev) { _cur_timec_chnl = pChnl; // Wait for BT_GATT_APP_EVENT_CONNECTED status = GattClientConnect(pChnl->handler.remDev); OS_Report("[Time] GattClientConnect() returns %d", status); } else { status = BT_STATUS_INVALID_PARM; OS_Report("[Time] Error: pChnl->handler.remDev is NULL"); } return status; }
BtStatus FMP_Open(FmpChannel **channel, BD_ADDR *addr) { BtStatus status = BT_STATUS_FAILED; FmpChannel *ch; CheckUnlockedParm(BT_STATUS_INVALID_PARM, addr != 0); OS_LockStack(); kal_trace(BT_TRACE_BLE_PROFILES, FMP_OPENCONNECTION); if ((*channel != NULL) && IsNodeOnList(&FMP(dev_list), &((*channel)->node))) { ch = *channel; } else { ch = FmpNewChannel(); if (ch == NULL) { return BT_STATUS_NO_RESOURCES; } } if (ch->state == FMP_STATE_CLOSED) { status = CMGR_CreateDataLink(&ch->cmgr_handler, addr); kal_trace(BT_TRACE_BLE_PROFILES, FMP_CREATEDATALINK_STATUS, status); if (status == BT_STATUS_SUCCESS) { status = GattClientConnect(ch->cmgr_handler.remDev); } if (status != BT_STATUS_SUCCESS && status != BT_STATUS_PENDING) { FmpFreeChannel(ch); return status; } ch->state = FMP_STATE_OPENING; *channel = ch; } OS_UnlockStack(); return status; }
/*--------------------------------------------------------------------------- * HidCmgrCallback() *--------------------------------------------------------------------------- * * Synopsis: Called by connection manager with link state events. * * Return: (See header file) * */ void HidCmgrCallback(CmgrHandler *Handler, CmgrEvent Event, BtStatus Status) { BtStatus ret; HidChannel *channel = ContainingRecord(Handler, HidChannel, cmgrHandler); kal_trace(BT_TRACE_G2_PROFILES,HIDCMGRCALLBACKx02X ,Event); switch (Event) { case CMEVENT_DATA_LINK_CON_CNF: if (channel == NULL) { kal_trace(BT_TRACE_G2_PROFILES,HID_NOT_THE_CONNECT_BD_ADDR); return; } if(channel->cmgrHandler.bdc == 0) { kal_trace(BT_TRACE_G2_PROFILES,HIDCHANNELCMGRHANDLERBDC0); return; } kal_trace(BT_TRACE_G2_PROFILES,HID_STATUSx02X ,Status); if (Status != BT_STATUS_SUCCESS) { /* Indicate the query response failure to the application */ HidClearConnection(channel, Status, 0); return; } else { #ifdef __BT_4_0_BLE__ kal_trace(BT_TRACE_BLE_PROFILES, HID_CMGRCALLBACK_DEVTYPE, channel->cmgrHandler.bdc->devType); if (channel->cmgrHandler.bdc->devType == BT_DEV_TYPE_LE) { ret = GattClientConnect(channel->cmgrHandler.remDev); Report(("[HID] GattClientConnect ret: %d", ret)); /* Since HID Gatt callback will be called even if connection is existed, there is unnecessary to handle return success case here. */ /* if (ret == BT_STATUS_SUCCESS) { ret = HidStartGattServiceQuery(channel); if (ret != BT_STATUS_PENDING) { channel->flags &= ~CHNL_FLAG_SERVICE_QUERY; HidAppCallback(channel, HIDEVENT_QUERY_CNF, ret, &channel->queryRsp, (U16)(sizeof(HidQueryRsp))); } } */ } else #endif { if (channel->flags & CHNL_FLAG_SERVICE_QUERY) { HidStartServiceQuery(channel); } else { kal_trace(BT_TRACE_G2_PROFILES,HID_START_L2CAP_CONNECTION); /* Start the L2CAP connection */ if (L2CAP_ConnectReq(&HID(hidCtrlPsm), BT_PSM_HID_CTRL, channel->cmgrHandler.remDev, 0, &(channel->ctrlCid)) == BT_STATUS_PENDING) { channel->state = HID_STATE_CONN_PENDING; channel->flags |= CHNL_FLAG_INITIATOR; break; } } } } break; case CMEVENT_DATA_LINK_DIS: { HidClearConnection(channel, Status, 0); return; } default: break; } }