From f410a02a35b565de39f247c8ee48e7b98ff78432 Mon Sep 17 00:00:00 2001 From: Jonathan Aillet Date: Thu, 6 Sep 2018 10:15:23 +0200 Subject: Force hals init before ending hal-manager init Force launched hals initialization before ending hal-manager initialization. This way, external api requiring 'hal-manager' will be sure that all launched hals are initialized. Change-Id: I00b9b14da623828d7cf7bc507873ad6de8ba2391 Signed-off-by: Jonathan Aillet --- 4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c | 3 ++- 4a-hal/4a-hal-manager/4a-hal-manager.c | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c index 7e771e5..c6fc4d6 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c @@ -95,7 +95,6 @@ static int HalCtlsInitOneApi(AFB_ApiT apiHandle) // Fill SpecificHalDatadata structure currentCtlHalData->internal = 1; - currentCtlHalData->apiName = (char *) ctrlConfig->api; currentCtlHalData->sndCardPath = (char *) ctrlConfig->uid; currentCtlHalData->info = (char *) ctrlConfig->info; @@ -183,6 +182,8 @@ int HalCtlsCreateApi(AFB_ApiT apiHandle, char *path, struct HalMgrData *HalMgrGl if(! currentCtlHalData) return -4; + currentCtlHalData->apiName = (char *) ctrlConfig->api; + // Stores current hal controller data in controller config ctrlConfig->external = (void *) currentCtlHalData; diff --git a/4a-hal/4a-hal-manager/4a-hal-manager.c b/4a-hal/4a-hal-manager/4a-hal-manager.c index 19f8e8a..0a75923 100644 --- a/4a-hal/4a-hal-manager/4a-hal-manager.c +++ b/4a-hal/4a-hal-manager/4a-hal-manager.c @@ -69,6 +69,7 @@ struct SpecificHalData **HalMngGetFirstHalData(void) static int HalMgrInitApi(AFB_ApiT apiHandle) { + struct SpecificHalData *currentCtlHalData; struct HalMgrData *HalMgrGlobalData; if(! apiHandle) @@ -85,6 +86,17 @@ static int HalMgrInitApi(AFB_ApiT apiHandle) if(HalUtlInitializeHalMgrData(apiHandle, HalMgrGlobalData, HAL_MANAGER_API_NAME, HAL_MANAGER_API_INFO)) return -3; + currentCtlHalData = HalMgrGlobalData->first; + + while(currentCtlHalData) { + if(! currentCtlHalData->apiName) + return -4; + else if(AFB_RequireApi(apiHandle, currentCtlHalData->apiName, 1)) + return -5; + + currentCtlHalData = currentCtlHalData->next; + } + return 0; } -- cgit 1.2.3-korg