void FmpClearConnection(FmpChannel *channel, BtStatus status) { kal_trace(BT_TRACE_BLE_PROFILES, FMP_CLEAR_CONNECTION_STATUS, status); /* Release all resources in packet pool */ /* Notify the application */ FmpAppCallback(channel, FMPEVENT_CLOSED, status, channel->link, sizeof(BtRemoteDevice)); CMGR_RemoveDataLink(&channel->cmgr_handler); CMGR_RemoveCmgrWithDevice(&channel->cmgr_handler); FmpFreeChannel(channel); }
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; }