/** **************************************************************************************** * @addtogroup PRF * @{ **************************************************************************************** */ /* * INCLUDE FILES **************************************************************************************** */ #include "rwip_config.h" #if (BLE_PROFILES) #include "att.h" #include "prf.h" #if (BLE_HT_THERMOM) extern const struct prf_task_cbs *htpt_prf_itf_get(void); #endif // (BLE_HT_THERMOM) #if (BLE_HT_COLLECTOR) extern const struct prf_task_cbs *htpc_prf_itf_get(void); #endif // (BLE_HT_COLLECTOR) #if (BLE_DIS_SERVER) extern const struct prf_task_cbs *diss_prf_itf_get(void); #endif // (BLE_HT_THERMOM) #if (BLE_DIS_CLIENT) extern const struct prf_task_cbs *disc_prf_itf_get(void); #endif // (BLE_DIS_CLIENT) #if (BLE_BP_SENSOR) extern const struct prf_task_cbs *blps_prf_itf_get(void); #endif // (BLE_BP_SENSOR) #if (BLE_BP_COLLECTOR) extern const struct prf_task_cbs *blpc_prf_itf_get(void); #endif // (BLE_BP_COLLECTOR) #if (BLE_TIP_SERVER) extern const struct prf_task_cbs *tips_prf_itf_get(void); #endif // (BLE_TIP_SERVER) #if (BLE_TIP_CLIENT) extern const struct prf_task_cbs *tipc_prf_itf_get(void); #endif // (BLE_TIP_CLIENT) #if (BLE_HR_SENSOR) extern const struct prf_task_cbs *hrps_prf_itf_get(void); #endif // (BLE_HR_SENSOR) #if (BLE_HR_COLLECTOR) extern const struct prf_task_cbs *hrpc_prf_itf_get(void); #endif // (BLE_HR_COLLECTOR) #if (BLE_FINDME_LOCATOR) extern const struct prf_task_cbs *findl_prf_itf_get(void); #endif // (BLE_FINDME_LOCATOR) #if (BLE_FINDME_TARGET) extern const struct prf_task_cbs *findt_prf_itf_get(void); #endif // (BLE_FINDME_TARGET) #if (BLE_PROX_MONITOR) extern const struct prf_task_cbs *proxm_prf_itf_get(void); #endif // (BLE_PROX_MONITOR) #if (BLE_PROX_REPORTER) extern const struct prf_task_cbs *proxr_prf_itf_get(void); #endif // (BLE_PROX_REPORTER) #if (BLE_SP_CLIENT) extern const struct prf_task_cbs *scppc_prf_itf_get(void); #endif // (BLE_SP_CLENT) #if (BLE_SP_SERVER) extern const struct prf_task_cbs *scpps_prf_itf_get(void); #endif // (BLE_SP_SERVER) #if (BLE_BATT_CLIENT) extern const struct prf_task_cbs *basc_prf_itf_get(void); #endif // (BLE_BATT_CLIENT) #if (BLE_BATT_SERVER) extern const struct prf_task_cbs *bass_prf_itf_get(void); #endif // (BLE_BATT_SERVER) #if (BLE_HID_DEVICE) extern const struct prf_task_cbs *hogpd_prf_itf_get(void); #endif // (BLE_HID_DEVICE) #if (BLE_HID_BOOT_HOST) extern const struct prf_task_cbs *hogpbh_prf_itf_get(void); #endif // (BLE_HID_BOOT_HOST) #if (BLE_HID_REPORT_HOST) extern const struct prf_task_cbs *hogprh_prf_itf_get(void); #endif // (BLE_HID_REPORT_HOST) #if (BLE_GL_COLLECTOR) extern const struct prf_task_cbs *glpc_prf_itf_get(void); #endif // (BLE_GL_COLLECTOR) #if (BLE_GL_SENSOR) extern const struct prf_task_cbs *glps_prf_itf_get(void); #endif // (BLE_GL_SENSOR) #if (BLE_RSC_COLLECTOR) extern const struct prf_task_cbs *rscpc_prf_itf_get(void); #endif // (BLE_RSC_COLLECTOR) #if (BLE_RSC_SENSOR) extern const struct prf_task_cbs *rscps_prf_itf_get(void); #endif // (BLE_RSC_COLLECTOR) #if (BLE_CSC_COLLECTOR) extern const struct prf_task_cbs *cscpc_prf_itf_get(void); #endif // (BLE_CSC_COLLECTOR) #if (BLE_CSC_SENSOR) extern const struct prf_task_cbs *cscps_prf_itf_get(void); #endif // (BLE_CSC_COLLECTOR) #if (BLE_AN_CLIENT) extern const struct prf_task_cbs *anpc_prf_itf_get(void); #endif // (BLE_AN_CLIENT) #if (BLE_AN_SERVER) extern const struct prf_task_cbs *anps_prf_itf_get(void); #endif // (BLE_AN_SERVER) #if (BLE_PAS_CLIENT) extern const struct prf_task_cbs *paspc_prf_itf_get(void); #endif // (BLE_PAS_CLIENT) #if (BLE_PAS_SERVER) extern const struct prf_task_cbs *pasps_prf_itf_get(void); #endif // (BLE_PAS_SERVER) #if (BLE_CP_COLLECTOR) extern const struct prf_task_cbs *cppc_prf_itf_get(void); #endif //(BLE_CP_COLLECTOR) #if (BLE_CP_SENSOR) extern const struct prf_task_cbs *cpps_prf_itf_get(void); #endif //(BLE_CP_SENSOR) #if (BLE_LN_COLLECTOR) extern const struct prf_task_cbs *lanc_prf_itf_get(void); #endif //(BLE_CP_COLLECTOR) #if (BLE_LN_SENSOR) extern const struct prf_task_cbs *lans_prf_itf_get(void); #endif //(BLE_CP_SENSOR) #if (BLE_IPS_SERVER) extern const struct prf_task_cbs *ipss_prf_itf_get(void); #endif //(BLE_IPS_SERVER) #if (BLE_IPS_CLIENT) extern const struct prf_task_cbs *ipsc_prf_itf_get(void); #endif //(BLE_IPS_CLIENT) #if (BLE_ENV_SERVER) extern const struct prf_task_cbs *envs_prf_itf_get(void); #endif //(BLE_ENV_SERVER) #if (BLE_ENV_CLIENT) extern const struct prf_task_cbs *envc_prf_itf_get(void); #endif //(BLE_ENV_CLIENT #if (BLE_WSC_SERVER) extern const struct prf_task_cbs *wscs_prf_itf_get(void); #endif //(BLE_WSC_SERVER) #if (BLE_WSC_CLIENT) extern const struct prf_task_cbs *wscc_prf_itf_get(void); #endif //(BLE_WSC_CLIENT #if (BLE_BCS_SERVER) extern const struct prf_task_cbs *bcss_prf_itf_get(void); #endif //(BLE_BCS_SERVER) #if (BLE_BCS_CLIENT) extern const struct prf_task_cbs *bcsc_prf_itf_get(void); #endif //(BLE_BCS_CLIENT) #ifdef BLE_AM0_HEARING_AID_SERV extern const struct prf_task_cbs *am0_has_prf_itf_get(void); #endif // BLE_AM0_HEARING_AID_SERV #if (BLE_UDS_SERVER) extern const struct prf_task_cbs *udss_prf_itf_get(void); #endif //(BLE_UDS_SERVER) #if (BLE_UDS_CLIENT) extern const struct prf_task_cbs *udsc_prf_itf_get(void); #endif //(BLE_UDS_CLIENT) #if (BLE_VOICEPATH) extern const struct prf_task_cbs *voicepath_prf_itf_get(void); #endif //(BLE_VOICEPATH) #if (BLE_DATAPATH_SERVER) extern const struct prf_task_cbs *datapathps_prf_itf_get(void); #endif //(BLE_DATAPATH_SERVER) #if (BLE_OTA) extern const struct prf_task_cbs *ota_prf_itf_get(void); #endif //(BLE_OTA) #if (BLE_TOTA) extern const struct prf_task_cbs *tota_prf_itf_get(void); #endif //(BLE_TOTA) #if (BLE_BMS) extern const struct prf_task_cbs *bms_prf_itf_get(void); #endif //(BLE_BMS) #if (BLE_ANC_CLIENT) extern const struct prf_task_cbs *ancc_prf_itf_get(void); #endif //(BLE_ANC_CLIENT) #if (BLE_AMS_CLIENT) extern const struct prf_task_cbs *amsc_prf_itf_get(void); #endif //(BLE_AMS_CLIENT) #if (BLE_GFPS_PROVIDER) extern const struct prf_task_cbs *gfpsp_prf_itf_get(void); #endif //(BLE_GFPS_PROVIDER) #ifdef BLE_AI_VOICE extern const struct prf_task_cbs *ai_prf_itf_get(void); #endif #if (ANCS_PROXY_ENABLE) extern const struct prf_task_cbs *ancs_proxy_prf_itf_get(void); extern const struct prf_task_cbs *ams_proxy_prf_itf_get(void); #endif #if (BLE_TILE) extern const struct prf_task_cbs *tile_prf_itf_get(void); #endif //(BLE_TILE) /* * TYPE DEFINITIONS **************************************************************************************** */ /* * DEFINES **************************************************************************************** */ /* * MACROS **************************************************************************************** */ /* * GLOBAL VARIABLE DEFINITIONS **************************************************************************************** */ struct prf_env_tag prf_env; /* * LOCAL FUNCTIONS DEFINITIONS **************************************************************************************** */ /** **************************************************************************************** * @brief Retrieve profile interface **************************************************************************************** */ static const struct prf_task_cbs *prf_itf_get(uint16_t task_id) { const struct prf_task_cbs *prf_cbs = NULL; BLE_DBG(">>>>>> prf_itf_get task_id: %d task_id %d<<<<<<\n", KE_TYPE_GET(task_id), task_id); switch (KE_TYPE_GET(task_id)) { #if (BLE_HT_THERMOM) case TASK_ID_HTPT: prf_cbs = htpt_prf_itf_get(); break; #endif // (BLE_HT_THERMOM) #if (BLE_HT_COLLECTOR) case TASK_ID_HTPC: prf_cbs = htpc_prf_itf_get(); break; #endif // (BLE_HT_COLLECTOR) #if (BLE_DIS_SERVER) case TASK_ID_DISS: prf_cbs = diss_prf_itf_get(); break; #endif // (BLE_DIS_SERVER) #if (BLE_DIS_CLIENT) case TASK_ID_DISC: prf_cbs = disc_prf_itf_get(); break; #endif // (BLE_DIS_CLIENT) #if (BLE_BP_SENSOR) case TASK_ID_BLPS: prf_cbs = blps_prf_itf_get(); break; #endif // (BLE_BP_SENSOR) #if (BLE_BP_COLLECTOR) case TASK_ID_BLPC: prf_cbs = blpc_prf_itf_get(); break; #endif // (BLE_BP_COLLECTOR) #if (BLE_TIP_SERVER) case TASK_ID_TIPS: prf_cbs = tips_prf_itf_get(); break; #endif // (BLE_TIP_SERVER) #if (BLE_TIP_CLIENT) case TASK_ID_TIPC: prf_cbs = tipc_prf_itf_get(); break; #endif // (BLE_TIP_CLIENT) #if (BLE_HR_SENSOR) case TASK_ID_HRPS: prf_cbs = hrps_prf_itf_get(); break; #endif // (BLE_HR_SENSOR) #if (BLE_HR_COLLECTOR) case TASK_ID_HRPC: prf_cbs = hrpc_prf_itf_get(); break; #endif // (BLE_HR_COLLECTOR) #if (BLE_FINDME_LOCATOR) case TASK_ID_FINDL: prf_cbs = findl_prf_itf_get(); break; #endif // (BLE_FINDME_LOCATOR) #if (BLE_FINDME_TARGET) case TASK_ID_FINDT: prf_cbs = findt_prf_itf_get(); break; #endif // (BLE_FINDME_TARGET) #if (BLE_PROX_MONITOR) case TASK_ID_PROXM: prf_cbs = proxm_prf_itf_get(); break; #endif // (BLE_PROX_MONITOR) #if (BLE_PROX_REPORTER) case TASK_ID_PROXR: prf_cbs = proxr_prf_itf_get(); break; #endif // (BLE_PROX_REPORTER) #if (BLE_SP_SERVER) case TASK_ID_SCPPS: prf_cbs = scpps_prf_itf_get(); break; #endif // (BLE_SP_SERVER) #if (BLE_SP_CLIENT) case TASK_ID_SCPPC: prf_cbs = scppc_prf_itf_get(); break; #endif // (BLE_SP_CLIENT) #if (BLE_BATT_SERVER) case TASK_ID_BASS: prf_cbs = bass_prf_itf_get(); break; #endif // (BLE_BATT_SERVER) #if (BLE_BATT_CLIENT) case TASK_ID_BASC: prf_cbs = basc_prf_itf_get(); break; #endif // (BLE_BATT_CLIENT) #if (BLE_HID_DEVICE) case TASK_ID_HOGPD: prf_cbs = hogpd_prf_itf_get(); break; #endif // (BLE_HID_DEVICE) #if (BLE_HID_BOOT_HOST) case TASK_ID_HOGPBH: prf_cbs = hogpbh_prf_itf_get(); break; #endif // (BLE_HID_BOOT_HOST) #if (BLE_HID_REPORT_HOST) case TASK_ID_HOGPRH: prf_cbs = hogprh_prf_itf_get(); break; #endif // (BLE_HID_REPORT_HOST) #if (BLE_GL_COLLECTOR) case TASK_ID_GLPC: prf_cbs = glpc_prf_itf_get(); break; #endif // (BLE_GL_COLLECTOR) #if (BLE_GL_SENSOR) case TASK_ID_GLPS: prf_cbs = glps_prf_itf_get(); break; #endif // (BLE_GL_SENSOR) #if (BLE_RSC_COLLECTOR) case TASK_ID_RSCPC: prf_cbs = rscpc_prf_itf_get(); break; #endif // (BLE_RSC_COLLECTOR) #if (BLE_RSC_SENSOR) case TASK_ID_RSCPS: prf_cbs = rscps_prf_itf_get(); break; #endif // (BLE_RSC_SENSOR) #if (BLE_CSC_COLLECTOR) case TASK_ID_CSCPC: prf_cbs = cscpc_prf_itf_get(); break; #endif // (BLE_CSC_COLLECTOR) #if (BLE_CSC_SENSOR) case TASK_ID_CSCPS: prf_cbs = cscps_prf_itf_get(); break; #endif // (BLE_CSC_SENSOR) #if (BLE_CP_COLLECTOR) case TASK_ID_CPPC: prf_cbs = cppc_prf_itf_get(); break; #endif // (BLE_CP_COLLECTOR) #if (BLE_CP_SENSOR) case TASK_ID_CPPS: prf_cbs = cpps_prf_itf_get(); break; #endif // (BLE_CP_SENSOR) #if (BLE_LN_COLLECTOR) case TASK_ID_LANC: prf_cbs = lanc_prf_itf_get(); break; #endif // (BLE_LN_COLLECTOR) #if (BLE_LN_SENSOR) case TASK_ID_LANS: prf_cbs = lans_prf_itf_get(); break; #endif // (BLE_LN_SENSOR) #if (BLE_AN_CLIENT) case TASK_ID_ANPC: prf_cbs = anpc_prf_itf_get(); break; #endif // (BLE_AN_CLIENT) #if (BLE_AN_SERVER) case TASK_ID_ANPS: prf_cbs = anps_prf_itf_get(); break; #endif // (BLE_AN_SERVER) #if (BLE_PAS_CLIENT) case TASK_ID_PASPC: prf_cbs = paspc_prf_itf_get(); break; #endif // (BLE_PAS_CLIENT) #if (BLE_PAS_SERVER) case TASK_ID_PASPS: prf_cbs = pasps_prf_itf_get(); break; #endif // (BLE_PAS_SERVER) #ifdef BLE_AM0_HEARING_AID_SERV case TASK_ID_AM0_HAS: prf_cbs = am0_has_prf_itf_get(); break; #endif // defined(BLE_AM0_HEARING_AID_SERV) #if (BLE_IPS_SERVER) case TASK_ID_IPSS: prf_cbs = ipss_prf_itf_get(); break; #endif //(BLE_IPS_SERVER) #if (BLE_IPS_CLIENT) case TASK_ID_IPSC: prf_cbs = ipsc_prf_itf_get(); break; #endif //(BLE_IPS_CLIENT) #if (BLE_ENV_SERVER) case TASK_ID_ENVS: prf_cbs = envs_prf_itf_get(); break; #endif //(BLE_ENV_SERVER) #if (BLE_ENV_CLIENT) case TASK_ID_ENVC: prf_cbs = envc_prf_itf_get(); break; #endif //(BLE_ENV_CLIENT #if (BLE_WSC_SERVER) case TASK_ID_WSCS: prf_cbs = wscs_prf_itf_get(); break; #endif //(BLE_WSC_SERVER) #if (BLE_WSC_CLIENT) case TASK_ID_WSCC: prf_cbs = wscc_prf_itf_get(); break; #endif //(BLE_WSC_CLIENT #if (BLE_BCS_SERVER) case TASK_ID_BCSS: prf_cbs = bcss_prf_itf_get(); break; #endif //(BLE_BCS_SERVER) #if (BLE_BCS_CLIENT) case TASK_ID_BCSC: prf_cbs = bcsc_prf_itf_get(); break; #endif //(BLE_BCS_CLIENT) #if (BLE_UDS_SERVER) case TASK_ID_UDSS: prf_cbs = udss_prf_itf_get(); break; #endif //(BLE_UDS_SERVER) #if (BLE_UDS_CLIENT) case TASK_ID_UDSC: prf_cbs = udsc_prf_itf_get(); break; #endif //(BLE_UDS_CLIENT) #if (BLE_VOICEPATH) case TASK_ID_VOICEPATH: prf_cbs = voicepath_prf_itf_get(); break; #endif //(TASK_ID_VOICEPATH) #if (BLE_OTA) case TASK_ID_OTA: prf_cbs = ota_prf_itf_get(); break; #endif //(BLE_OTA) #if (BLE_TOTA) case TASK_ID_TOTA: prf_cbs = tota_prf_itf_get(); break; #endif //(BLE_TOTA) #if (BLE_BMS) case TASK_ID_BMS: prf_cbs = bms_prf_itf_get(); break; #endif //(BLE_BMS) #if (BLE_ANC_CLIENT) case TASK_ID_ANCC: prf_cbs = ancc_prf_itf_get(); break; #endif //(BLE_ANC_CLIENT) #if (BLE_AMS_CLIENT) case TASK_ID_AMSC: prf_cbs = amsc_prf_itf_get(); break; #endif //(BLE_AMS_CLIENT) #if (BLE_TILE) case TASK_ID_TILE: prf_cbs = tile_prf_itf_get(); break; #endif //(TASK_ID_TILE) #if (ANCS_PROXY_ENABLE) case TASK_ID_ANCSP: prf_cbs = ancs_proxy_prf_itf_get(); break; case TASK_ID_AMSP: prf_cbs = ams_proxy_prf_itf_get(); break; #endif //(ANCS_PROXY_ENABLE) #if (BLE_GFPS_PROVIDER) case TASK_ID_GFPSP: prf_cbs = gfpsp_prf_itf_get(); break; #endif //(BLE_GFPS_PROVIDER) #if (BLE_AI_VOICE) case TASK_ID_AI: prf_cbs = ai_prf_itf_get(); break; #endif //(BLE_AMA) #if (BLE_DATAPATH_SERVER) case TASK_ID_DATAPATHPS: prf_cbs = datapathps_prf_itf_get(); break; #endif //(BLE_DATAPATH_SERVER) default: /* Nothing to do */ break; } return prf_cbs; } /* * EXPORTED FUNCTIONS DEFINITIONS **************************************************************************************** */ void prf_init(bool reset) { uint8_t i; BLE_FUNC_ENTER(); BLE_DBG(">>>>>> prf_create reset %d<<<<<<\n", reset); if (!reset) { // FW boot profile initialization for (i = 0; i < BLE_NB_PROFILES; i++) { prf_env.prf[i].env = NULL; prf_env.prf[i].task = TASK_GAPC + i + 1; prf_env.prf[i].id = TASK_ID_INVALID; // Initialize Task Descriptor prf_env.prf[i].desc.msg_handler_tab = NULL; prf_env.prf[i].desc.state = NULL; prf_env.prf[i].desc.idx_max = 0; prf_env.prf[i].desc.msg_cnt = 0; ke_task_create(prf_env.prf[i].task, &(prf_env.prf[i].desc)); BLE_DBG("prf_init prf_env.prf[%d].task: %d\n", i, prf_env.prf[i].task); } } else { // FW boot profile destruction for (i = 0; i < BLE_NB_PROFILES; i++) { // Get Profile API const struct prf_task_cbs *cbs = prf_itf_get(prf_env.prf[i].id); if (cbs != NULL) { // request to destroy profile cbs->destroy(&(prf_env.prf[i])); } // unregister profile prf_env.prf[i].id = TASK_ID_INVALID; prf_env.prf[i].desc.msg_handler_tab = NULL; prf_env.prf[i].desc.state = NULL; prf_env.prf[i].desc.idx_max = 0; prf_env.prf[i].desc.msg_cnt = 0; // Request kernel to flush task messages ke_task_msg_flush(KE_TYPE_GET(prf_env.prf[i].task)); } } BLE_FUNC_LEAVE(); } uint8_t prf_add_profile(struct gapm_profile_task_add_cmd *params, ke_task_id_t *prf_task) { uint8_t i; uint8_t status = GAP_ERR_NO_ERROR; BLE_DBG(">>>>>> prf_add_profile <<<<<<\n"); // retrieve profile callback const struct prf_task_cbs *cbs = prf_itf_get(params->prf_task_id); if (cbs == NULL) { // profile API not available status = GAP_ERR_INVALID_PARAM; } // check if profile not already present in task list if (status == GAP_ERR_NO_ERROR) { for (i = 0; i < BLE_NB_PROFILES; i++) { if (prf_env.prf[i].id == params->prf_task_id) { status = GAP_ERR_NOT_SUPPORTED; break; } } } if (status == GAP_ERR_NO_ERROR) { // find first available task for (i = 0; i < BLE_NB_PROFILES; i++) { // available task found if (prf_env.prf[i].id == TASK_ID_INVALID) { // initialize profile status = cbs->init(&(prf_env.prf[i]), &(params->start_hdl), params->app_task, params->sec_lvl, params->param); // initialization succeed if (status == GAP_ERR_NO_ERROR) { // register profile prf_env.prf[i].id = params->prf_task_id; *prf_task = prf_env.prf[i].task; } break; } } if (i == BLE_NB_PROFILES) { status = GAP_ERR_INSUFF_RESOURCES; } } return (status); } void prf_create(uint8_t conidx) { uint8_t i; /* simple connection creation handler, nothing to do. */ BLE_DBG(">>>>>> prf_create <<<<<<\n"); // execute create function of each profiles for (i = 0; i < BLE_NB_PROFILES; i++) { // Get Profile API const struct prf_task_cbs *cbs = prf_itf_get(prf_env.prf[i].id); if (cbs != NULL) { // call create callback cbs->create(&(prf_env.prf[i]), conidx); } } } void prf_cleanup(uint8_t conidx, uint8_t reason) { uint8_t i; /* simple connection creation handler, nothing to do. */ BLE_DBG(">>>>>> prf_cleanup <<<<<<\n"); // execute create function of each profiles for (i = 0; i < BLE_NB_PROFILES; i++) { // Get Profile API const struct prf_task_cbs *cbs = prf_itf_get(prf_env.prf[i].id); if (cbs != NULL) { // call cleanup callback cbs->cleanup(&(prf_env.prf[i]), conidx, reason); } } } prf_env_t *prf_env_get(uint16_t prf_id) { prf_env_t *env = NULL; uint8_t i; // find if profile present in profile tasks BLE_DBG("%s prf_id %d", __func__, prf_id); for (i = 0; i < BLE_NB_PROFILES; i++) { // check if profile identifier is known if (prf_env.prf[i].id == prf_id) { env = prf_env.prf[i].env; break; } } return env; } ke_task_id_t prf_src_task_get(prf_env_t *env, uint8_t conidx) { ke_task_id_t task = PERM_GET(env->prf_task, PRF_TASK); BLE_DBG("%s conidx %d", __func__, conidx); if (PERM_GET(env->prf_task, PRF_MI)) { task = KE_BUILD_ID(task, conidx); } return task; } ke_task_id_t prf_dst_task_get(prf_env_t *env, uint8_t conidx) { ke_task_id_t task = PERM_GET(env->app_task, PRF_TASK); BLE_DBG("%s app_task %d conidx %d", __func__, env->app_task, conidx); if (PERM_GET(env->app_task, PRF_MI)) { task = KE_BUILD_ID(task, conidx); } return task; } ke_task_id_t prf_get_id_from_task(ke_msg_id_t task) { ke_task_id_t id = TASK_ID_INVALID; uint8_t idx = KE_IDX_GET(task); uint8_t i; task = KE_TYPE_GET(task); BLE_DBG("%s task %d", __func__, task); // find if profile present in profile tasks for (i = 0; i < BLE_NB_PROFILES; i++) { // check if profile identifier is known if (prf_env.prf[i].task == task) { id = prf_env.prf[i].id; break; } } return KE_BUILD_ID(id, idx); } ke_task_id_t prf_get_task_from_id(ke_msg_id_t id) { ke_task_id_t task = TASK_NONE; uint8_t idx = KE_IDX_GET(id); uint8_t i; id = KE_TYPE_GET(id); BLE_DBG("%s id %d", __func__, id); // find if profile present in profile tasks for (i = 0; i < BLE_NB_PROFILES; i++) { // check if profile identifier is known if (prf_env.prf[i].id == id) { task = prf_env.prf[i].task; break; } } return KE_BUILD_ID(task, idx); } #endif // (BLE_PROFILES) /// @} PRF