From 2b558bb1ec9f854769c556e84735e7dcd3a295e8 Mon Sep 17 00:00:00 2001 From: Jonathan Aillet Date: Wed, 23 Jan 2019 13:56:06 +0100 Subject: Migrate to newer application framework calls Migrate from 'afb_api_call_sync_legacy' function to 'afb_api_call_sync' function, therefore, handle function return and response json differently from before. Change-Id: Ia7fb42188b8d41e22db2d824459a0d10ed6d6a8e Signed-off-by: Jonathan Aillet --- .../4a-hal-utilities-appfw-responses-handler.c | 148 ------------- .../4a-hal-utilities-appfw-responses-handler.h | 45 ---- .../4a-hal-utilities-hal-streams-handler.c | 68 +++--- 4a-hal-utilities/CMakeLists.txt | 1 - .../4a-hal-controllers-alsacore-link.c | 237 +++++++++++---------- 4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | 20 +- .../4a-hal-controllers-mixer-link.c | 92 ++++---- .../4a-hal-controllers-mixer-link.h | 2 +- plugins/lib/bluealsa/hal-bluealsa.c | 4 +- 9 files changed, 220 insertions(+), 397 deletions(-) delete mode 100644 4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c delete mode 100644 4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h diff --git a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c b/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c deleted file mode 100644 index bf88571..0000000 --- a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2018 "IoT.bzh" - * Author Jonathan Aillet - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define _GNU_SOURCE - -#include -#include - -#include - -#include "4a-hal-utilities-appfw-responses-handler.h" - -/******************************************************************************* - * Handle application framework response function * - ******************************************************************************/ - -enum CallError HalUtlHandleAppFwCallError(afb_api_t apiHandle, char *apiCalled, char *verbCalled, json_object *callReturnJ, char **returnedStatus, char **returnedInfo) -{ - json_object *returnedRequestJ, *returnedStatusJ, *returnedInfoJ; - - if(! apiHandle || ! apiCalled || ! verbCalled || ! callReturnJ) - return CALL_ERROR_INVALID_ARGS; - - if(! json_object_object_get_ex(callReturnJ, "request", &returnedRequestJ)) { - AFB_API_WARNING(apiHandle, "Couldn't get response request object"); - return CALL_ERROR_REQUEST_UNAVAILABLE; - } - - if(! json_object_is_type(returnedRequestJ, json_type_object)) { - AFB_API_WARNING(apiHandle, "Response request object is not valid"); - return CALL_ERROR_REQUEST_NOT_VALID; - } - - if(! json_object_object_get_ex(returnedRequestJ, "status", &returnedStatusJ)) { - AFB_API_WARNING(apiHandle, "Couldn't get response status object"); - return CALL_ERROR_REQUEST_STATUS_UNAVAILABLE; - } - - if(! json_object_is_type(returnedStatusJ, json_type_string)) { - AFB_API_WARNING(apiHandle, "Response status object is not valid"); - return CALL_ERROR_REQUEST_STATUS_NOT_VALID; - } - - *returnedStatus = (char *) json_object_get_string(returnedStatusJ); - - if(! strcmp(*returnedStatus, "unknown-api")) { - AFB_API_WARNING(apiHandle, "Api %s not found", apiCalled); - return CALL_ERROR_API_UNAVAILABLE; - } - - if(! strcmp(*returnedStatus, "unknown-verb")) { - AFB_API_WARNING(apiHandle, "Verb %s of api %s not found", verbCalled, apiCalled); - return CALL_ERROR_VERB_UNAVAILABLE; - } - - if(! json_object_object_get_ex(returnedRequestJ, "info", &returnedInfoJ)) { - AFB_API_WARNING(apiHandle, "Couldn't get response info object"); - return CALL_ERROR_REQUEST_INFO_UNAVAILABLE; - } - - if(! json_object_is_type(returnedInfoJ, json_type_string)) { - AFB_API_WARNING(apiHandle, "Response info object is not valid"); - return CALL_ERROR_REQUEST_INFO_NOT_VALID; - } - - *returnedInfo = (char *) json_object_get_string(returnedInfoJ); - - AFB_API_WARNING(apiHandle, - "Api %s and verb %s found, but this error was raised : '%s' with this info : '%s'", - apiCalled, - verbCalled, - *returnedStatus, - *returnedInfo); - - return CALL_ERROR_RETURNED; -} - -void HalUtlHandleAppFwCallErrorInRequest(afb_req_t request, char *apiCalled, char *verbCalled, json_object *callReturnJ, char *errorStatusToSend) -{ - char *returnedStatus = NULL, *returnedInfo = NULL; - - afb_api_t apiHandle; - - if(! request || ! apiCalled || ! verbCalled || ! callReturnJ) { - afb_req_fail_f(request, "invalid_args", "Invalid arguments"); - return; - } - - if(! (apiHandle = afb_req_get_api(request))) { - afb_req_fail_f(request, "api_handle", "Can't get hal manager api handle"); - return; - } - - switch(HalUtlHandleAppFwCallError(apiHandle, apiCalled, verbCalled, callReturnJ, &returnedStatus, &returnedInfo)) { - case CALL_ERROR_REQUEST_UNAVAILABLE: - case CALL_ERROR_REQUEST_NOT_VALID: - case CALL_ERROR_REQUEST_STATUS_UNAVAILABLE: - case CALL_ERROR_REQUEST_STATUS_NOT_VALID: - case CALL_ERROR_REQUEST_INFO_UNAVAILABLE: - case CALL_ERROR_REQUEST_INFO_NOT_VALID: - afb_req_fail(request, errorStatusToSend, "Error with response object"); - return; - - case CALL_ERROR_API_UNAVAILABLE: - afb_req_fail_f(request, errorStatusToSend, "Api %s not found", apiCalled); - return; - - case CALL_ERROR_VERB_UNAVAILABLE: - afb_req_fail_f(request, errorStatusToSend, "Verb %s of api %s not found", verbCalled, apiCalled); - return; - - case CALL_ERROR_RETURNED: - afb_req_fail_f(request, - errorStatusToSend, - "Api %s and verb %s found, but this error was raised : '%s' with this info : '%s'", - apiCalled, - verbCalled, - returnedStatus ? returnedStatus : "not returned", - returnedInfo ? returnedInfo : "not returned"); - return; - - case CALL_ERROR_INVALID_ARGS: - afb_req_fail_f(request, - errorStatusToSend, - "Api %s and verb %s found, but the arguments are invalid", - apiCalled, - verbCalled); - return; - - default: - afb_req_fail_f(request, errorStatusToSend, "Unknown error happened during call to verb %s of api %s", verbCalled, apiCalled); - return; - } -} \ No newline at end of file diff --git a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h b/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h deleted file mode 100644 index 2bdbaab..0000000 --- a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2018 "IoT.bzh" - * Author Jonathan Aillet - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_ -#define _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_ - -#include - -#include - -#include - -// Enum for the type of error detected -enum CallError { - CALL_ERROR_INVALID_ARGS=-1, - CALL_ERROR_REQUEST_UNAVAILABLE=-2, - CALL_ERROR_REQUEST_NOT_VALID=-3, - CALL_ERROR_REQUEST_STATUS_UNAVAILABLE=-4, - CALL_ERROR_REQUEST_STATUS_NOT_VALID=-5, - CALL_ERROR_API_UNAVAILABLE=-6, - CALL_ERROR_VERB_UNAVAILABLE=-7, - CALL_ERROR_REQUEST_INFO_UNAVAILABLE=-8, - CALL_ERROR_REQUEST_INFO_NOT_VALID=-9, - CALL_ERROR_RETURNED=-10, -}; - -// Handle application framework response function -extern enum CallError HalUtlHandleAppFwCallError(afb_api_t apiHandle, char *apiCalled, char *verbCalled, json_object *callReturnJ, char **returnedStatus, char **returnedInfo); -void HalUtlHandleAppFwCallErrorInRequest(afb_req_t request, char *apiCalled, char *verbCalled, json_object *callReturnJ, char *errorStatusToSend); - -#endif /* _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_ */ \ No newline at end of file diff --git a/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c b/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c index 9f23787..3f30436 100644 --- a/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c +++ b/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c @@ -25,7 +25,6 @@ #include #include "4a-hal-utilities-data.h" -#include "4a-hal-utilities-appfw-responses-handler.h" #include "4a-hal-utilities-hal-streams-handler.h" /******************************************************************************* @@ -36,7 +35,7 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType) { int idx, count; - char *apiToCall; + char *apiToCall, *returnedError = NULL, *returnedInfo = NULL; afb_api_t apiHandle; CtlConfigT *ctrlConfig; @@ -44,7 +43,7 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType) struct SpecificHalData *currentCtlHalData; struct CtlHalMixerData *currentMixerData = NULL; - json_object *requestJson, *returnJ = NULL, *responseJ, *toReturnJ = NULL; + json_object *requestJson, *responseJ = NULL, *toReturnJ = NULL; if(! (apiHandle = afb_req_get_api(request))) { afb_req_fail(request, "api_handle", "Can't get current hal controller api handle"); @@ -98,32 +97,48 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType) break; default: - afb_req_fail(request, "hal_call_data", "Can't get current call data"); + afb_req_fail(request, "mixer_action_type", "Action type is unknown"); return; } for(idx = 0; idx < count; idx++) { - if(afb_api_call_sync_legacy(apiHandle, - apiToCall, - currentMixerData->verbToCall, - json_object_get(requestJson), - &returnJ)) { - HalUtlHandleAppFwCallErrorInRequest(request, apiToCall, currentMixerData->verbToCall, returnJ, "call_action"); - json_object_put(returnJ); + if(afb_api_call_sync(apiHandle, + apiToCall, + currentMixerData->verbToCall, + json_object_get(requestJson), + &responseJ, + &returnedError, + &returnedInfo)) { + if(responseJ) + json_object_put(responseJ); if(toReturnJ) json_object_put(toReturnJ); + afb_req_fail_f(request, + "mixer_call", + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s' (call to mixer %i out of %i)", + currentMixerData->verbToCall, + apiToCall, + returnedError ? returnedError : "not returned", + returnedInfo ? returnedInfo : "not returned", + idx, + count); + free(returnedError); + free(returnedInfo); return; } - if(wrap_json_unpack(returnJ, "{s:o}", "response", &responseJ)) { + if(! responseJ) { + if(toReturnJ) + json_object_put(toReturnJ); afb_req_fail_f(request, - "Seems that %s call to api %s succeed, but no response was found in : '%s'", + "mixer_call", + "Seems that %s call to api %s succeed but no response was returned (call to mixer %i out of %i)", currentMixerData->verbToCall, apiToCall, - json_object_get_string(returnJ)); - json_object_put(returnJ); - if(toReturnJ) - json_object_put(toReturnJ); + idx, + count); + free(returnedError); + free(returnedInfo); return; } @@ -137,28 +152,17 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType) switch(actionType) { case ACTION_ON_MIXER_STREAM: - toReturnJ = json_object_get(responseJ); + toReturnJ = responseJ; break; case ACTION_ON_MIXER_PLAYBACK: case ACTION_ON_MIXER_CAPTURE: - json_object_object_add(toReturnJ, currentMixerData->verbToCall, json_object_get(responseJ)); - break; - - case ACTION_ON_MIXER_ALL_STREAM: - json_object_object_add(toReturnJ, currentMixerData->verb, json_object_get(responseJ)); - break; - - default: + json_object_object_add(toReturnJ, currentMixerData->verbToCall, responseJ); + currentMixerData = currentMixerData->next; break; - } - json_object_put(returnJ); - - switch(actionType) { - case ACTION_ON_MIXER_PLAYBACK: - case ACTION_ON_MIXER_CAPTURE: case ACTION_ON_MIXER_ALL_STREAM: + json_object_object_add(toReturnJ, currentMixerData->verb, responseJ); currentMixerData = currentMixerData->next; break; diff --git a/4a-hal-utilities/CMakeLists.txt b/4a-hal-utilities/CMakeLists.txt index 76cc511..d90dd11 100644 --- a/4a-hal-utilities/CMakeLists.txt +++ b/4a-hal-utilities/CMakeLists.txt @@ -23,7 +23,6 @@ PROJECT_TARGET_ADD(4a-hal-utilities) # Define project Targets ADD_LIBRARY(${TARGET_NAME} STATIC 4a-hal-utilities-alsa-data.c - 4a-hal-utilities-appfw-responses-handler.c 4a-hal-utilities-data.c 4a-hal-utilities-hal-streams-handler.c 4a-hal-utilities-verbs-loader.c) diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c index 5fadd36..f814e74 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c @@ -30,7 +30,6 @@ #include "4a-hal-utilities-alsa-data.h" #include "4a-hal-utilities-data.h" -#include "4a-hal-utilities-appfw-responses-handler.h" #include "4a-hal-controllers-alsacore-link.h" #include "4a-hal-controllers-value-handler.h" @@ -72,13 +71,11 @@ snd_ctl_elem_type_t HalCtlsMapsAlsaTypeToEnum(const char *label) int HalCtlsGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) { - int cardId = -1; + int errorToReturn, cardId; - char *returnedStatus = NULL, *returnedInfo = NULL, *cardIdString = NULL; + char *returnedError = NULL, *returnedInfo = NULL, *cardIdString = NULL; - enum CallError returnedError; - - json_object *toSendJ, *returnJ = NULL, *responsJ, *devidJ; + json_object *toSendJ, *responseJ = NULL, *devidJ; if(! apiHandle) { AFB_API_ERROR(apiHandle, "Api handle not available"); @@ -92,68 +89,83 @@ int HalCtlsGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) wrap_json_pack(&toSendJ, "{s:s}", "devpath", devPath); - if(afb_api_call_sync_legacy(apiHandle, ALSACORE_API, ALSACORE_GETINFO_VERB, toSendJ, &returnJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_GETINFO_VERB, returnJ, &returnedStatus, &returnedInfo); - AFB_API_WARNING(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, - ALSACORE_GETINFO_VERB, - ALSACORE_API, - returnedStatus ? returnedStatus : "not returned", - returnedInfo ? returnedInfo : "not returned"); - } - else if(json_object_object_get_ex(returnJ, "response", &responsJ)) { - if(json_object_object_get_ex(responsJ, "devid", &devidJ) && json_object_is_type(devidJ, json_type_string)) { - cardIdString = (char *) json_object_get_string(devidJ); - if(sscanf(cardIdString, "hw:%i", &cardId) <= 0) { - AFB_API_WARNING(apiHandle, "Couldn't get valid devid from string: '%s'", cardIdString); - cardId = -2; - } + if(afb_api_call_sync(apiHandle, + ALSACORE_API, + ALSACORE_GETINFO_VERB, + toSendJ, + &responseJ, + &returnedError, + &returnedInfo)) { + AFB_API_ERROR(apiHandle, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", + ALSACORE_GETINFO_VERB, + ALSACORE_API, + returnedError ? returnedError : "not returned", + returnedInfo ? returnedInfo : "not returned"); + errorToReturn = -3; + } + else if(! responseJ) { + AFB_API_ERROR(apiHandle, + "Seems that %s call to api %s succeed but no response was returned", + ALSACORE_GETINFO_VERB, + ALSACORE_API); + errorToReturn = -4; + } + else if(json_object_object_get_ex(responseJ, "devid", &devidJ) && json_object_is_type(devidJ, json_type_string)) { + cardIdString = (char *) json_object_get_string(devidJ); + if(sscanf(cardIdString, "hw:%i", &cardId) == 1) { + json_object_put(responseJ); + return cardId; } else { - AFB_API_WARNING(apiHandle, "Response devid is not present/valid"); + AFB_API_WARNING(apiHandle, "Could not get valid devid from string: '%s'", cardIdString); + errorToReturn = -5; } } + else { + AFB_API_WARNING(apiHandle, "Response devid is not present/valid"); + errorToReturn = -6; + } - if(returnJ) - json_object_put(returnJ); + if(responseJ) + json_object_put(responseJ); - return cardId; + free(returnedError); + free(returnedInfo); + + return errorToReturn; } int HalCtlsSubscribeToAlsaCardEvent(afb_api_t apiHandle, char *cardId) { int err = 0; - char *returnedStatus = NULL, *returnedInfo = NULL; - - enum CallError returnedError; + char *returnedError = NULL, *returnedInfo = NULL; - json_object *subscribeQueryJ, *returnedJ = NULL, *returnedWarningJ; + json_object *subscribeQueryJ, *responseJ = NULL; wrap_json_pack(&subscribeQueryJ, "{s:s}", "devid", cardId); - if(afb_api_call_sync_legacy(apiHandle, ALSACORE_API, ALSACORE_SUBSCRIBE_VERB, subscribeQueryJ, &returnedJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_SUBSCRIBE_VERB, returnedJ, &returnedStatus, &returnedInfo); + if(afb_api_call_sync(apiHandle, + ALSACORE_API, + ALSACORE_SUBSCRIBE_VERB, + subscribeQueryJ, + &responseJ, + &returnedError, + &returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", ALSACORE_SUBSCRIBE_VERB, ALSACORE_API, - returnedStatus ? returnedStatus : "not returned", + returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); err = -1; } - else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { - AFB_API_ERROR(apiHandle, - "Warning raised during call to verb %s of %s api : '%s'", - ALSACORE_SUBSCRIBE_VERB, - ALSACORE_API, - json_object_get_string(returnedWarningJ)); - err = -2; - } - if(returnedJ) - json_object_put(returnedJ); + if(responseJ) + json_object_put(responseJ); + + free(returnedError); + free(returnedInfo); return err; } @@ -162,11 +174,9 @@ int HalCtlsGetAlsaCtlInfo(afb_api_t apiHandle, char *cardId, struct CtlHalAlsaCt { int err = 0; - char *returnedStatus = NULL, *returnedInfo = NULL; - - enum CallError returnedError; + char *returnedError = NULL, *returnedInfo = NULL; - json_object *queryJ, *returnedJ; + json_object *queryJ, *responseJ = NULL; *returnedDataJ = NULL; @@ -203,30 +213,37 @@ int HalCtlsGetAlsaCtlInfo(afb_api_t apiHandle, char *cardId, struct CtlHalAlsaCt return -4; } - if(afb_api_call_sync_legacy(apiHandle, ALSACORE_API, ALSACORE_CTLGET_VERB, queryJ, &returnedJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_CTLGET_VERB, returnedJ, &returnedStatus, &returnedInfo); + if(afb_api_call_sync(apiHandle, + ALSACORE_API, + ALSACORE_CTLGET_VERB, + queryJ, + &responseJ, + &returnedError, + &returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", ALSACORE_CTLGET_VERB, ALSACORE_API, - returnedStatus ? returnedStatus : "not returned", + returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); + free(returnedError); + free(returnedInfo); return -5; } - else if(currentAlsaCtl->name && wrap_json_unpack(returnedJ, "{s:{s:i}}", "response", "id", ¤tAlsaCtl->numid)) { - AFB_API_ERROR(apiHandle, "Can't find alsa control 'id' from control 'name': '%s' on device '%s'", currentAlsaCtl->name, cardId); - err = -6; + else if(! responseJ) { + AFB_API_ERROR(apiHandle, + "Seems that %s call to api %s succeed but no response was returned", + ALSACORE_CTLGET_VERB, + ALSACORE_API); + return -6; } - else if(! json_object_object_get_ex(returnedJ, "response", NULL)) { - AFB_API_ERROR(apiHandle, "Can't find alsa control 'id': %i on device '%s'", currentAlsaCtl->numid, cardId); - err = -7; + else if(currentAlsaCtl->name && wrap_json_unpack(responseJ, "{s:i}", "id", ¤tAlsaCtl->numid)) { + AFB_API_ERROR(apiHandle, "Can't find alsa control 'id' from control 'name': '%s' on device '%s'", currentAlsaCtl->name, cardId); + json_object_put(responseJ); + return -7; } - if(err) - json_object_put(returnedJ); - else - *returnedDataJ = returnedJ; + *returnedDataJ = responseJ; return err; } @@ -242,8 +259,7 @@ int HalCtlsUpdateAlsaCtlProperties(afb_api_t apiHandle, char *cardId, struct Ctl } // TBD JAI : get dblinear/dbminmax/... values else if(wrap_json_unpack(returnedDataJ, - "{s:{s:{s?:i s?:i s?:i s?:i s?:i}}}", - "response", + "{s:{s?:i s?:i s?:i s?:i s?:i}}", "ctl", "type", (int *) ¤tAlsaCtl->alsaCtlProperties.type, "count", ¤tAlsaCtl->alsaCtlProperties.count, @@ -276,7 +292,7 @@ int HalCtlsGetAlsaCtlValues(afb_api_t apiHandle, char *cardId, struct CtlHalAlsa if((err = HalCtlsGetAlsaCtlInfo(apiHandle, cardId, currentAlsaCtl, &returnedDataJ))) { return err; } - else if(wrap_json_unpack(returnedDataJ, "{s:{s:o}}", "response", "val", &returnedValuesArrayJ)) { + else if(wrap_json_unpack(returnedDataJ, "{s:o}", "val", &returnedValuesArrayJ)) { AFB_API_ERROR(apiHandle, "Didn't succeed to get control %i values on device '%s' : '%s'", currentAlsaCtl->numid, @@ -308,11 +324,9 @@ int HalCtlsSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, json_ob { int err = 0; - char *returnedStatus = NULL, *returnedInfo = NULL; - - enum CallError returnedError; + char *returnedError = NULL, *returnedInfo = NULL; - json_object *queryJ, *returnedJ = NULL, *returnedWarningJ; + json_object *queryJ, *responseJ = NULL; if(! apiHandle) { AFB_API_ERROR(apiHandle, "Api handle not available"); @@ -336,28 +350,27 @@ int HalCtlsSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, json_ob wrap_json_pack(&queryJ, "{s:s s:{s:i s:o}}", "devid", cardId, "ctl", "id", ctlId, "val", json_object_get(valuesJ)); - if(afb_api_call_sync_legacy(apiHandle, ALSACORE_API, ALSACORE_CTLSET_VERB, queryJ, &returnedJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_CTLSET_VERB, returnedJ, &returnedStatus, &returnedInfo); + if(afb_api_call_sync(apiHandle, + ALSACORE_API, + ALSACORE_CTLSET_VERB, + queryJ, + &responseJ, + &returnedError, + &returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", ALSACORE_CTLSET_VERB, ALSACORE_API, - returnedStatus ? returnedStatus : "not returned", + returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); - err = 1; - } - else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { - AFB_API_ERROR(apiHandle, - "Warning raised during call to verb %s of %s api : '%s'", - ALSACORE_CTLSET_VERB, - ALSACORE_API, - json_object_get_string(returnedWarningJ)); - err = 2; + err = -5; } - if(returnedJ) - json_object_put(returnedJ); + if(responseJ) + json_object_put(responseJ); + + free(returnedError); + free(returnedInfo); return err; } @@ -366,11 +379,9 @@ int HalCtlsCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct CtlHalAlsaCtl { int err = 0; - char *returnedStatus = NULL, *returnedInfo = NULL; - - enum CallError returnedError; + char *returnedError = NULL, *returnedInfo = NULL; - json_object *queryJ, *returnedJ = NULL, *returnedWarningJ, *responseJ; + json_object *queryJ, *responseJ = NULL; if(! apiHandle) { AFB_API_ERROR(apiHandle, "Api handle not available"); @@ -392,7 +403,7 @@ int HalCtlsCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct CtlHalAlsaCtl return -4; } - wrap_json_pack(&queryJ, "{s:s s:{s:i s:s s:i s:i s:i s:i s:i}}", + wrap_json_pack(&queryJ, "{s:s s:{s:i s:s s?:i s?:i s?:i s:i s:i}}", "devid", cardId, "ctl", "ctl", -1, @@ -403,46 +414,44 @@ int HalCtlsCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct CtlHalAlsaCtl "type", (int) alsaCtlToCreate->alsaCtlCreation->type, "count", alsaCtlToCreate->alsaCtlCreation->count); - if(afb_api_call_sync_legacy(apiHandle, ALSACORE_API, ALSACORE_ADDCTL_VERB, queryJ, &returnedJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_ADDCTL_VERB, returnedJ, &returnedStatus, &returnedInfo); + if(afb_api_call_sync(apiHandle, + ALSACORE_API, + ALSACORE_ADDCTL_VERB, + queryJ, + &responseJ, + &returnedError, + &returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", ALSACORE_GETINFO_VERB, ALSACORE_API, - returnedStatus ? returnedStatus : "not returned", + returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); err = -5; } - else if(! wrap_json_unpack(returnedJ, "{s:{s:o}}", "request", "info", &returnedWarningJ)) { + else if(! responseJ) { AFB_API_ERROR(apiHandle, - "Warning raised during call to verb %s of %s api : '%s'", - ALSACORE_GETINFO_VERB, - ALSACORE_API, - json_object_get_string(returnedWarningJ)); + "Seems that %s call to api %s succeed but no response was returned", + ALSACORE_ADDCTL_VERB, + ALSACORE_API); err = -6; } - else if(wrap_json_unpack(returnedJ, "{s:o}", "response", &responseJ)) { - AFB_API_ERROR(apiHandle, - "Can't get response of call to verb %s of %s api : %s", - ALSACORE_GETINFO_VERB, - ALSACORE_API, - json_object_get_string(returnedJ)); - err = -7; - } else if(wrap_json_unpack(responseJ, "{s:i}", "id", &alsaCtlToCreate->numid)) { AFB_API_ERROR(apiHandle, "Can't get create id from %s of %s api", ALSACORE_GETINFO_VERB, ALSACORE_API); - err = -8; + err = -7; } else if(wrap_json_unpack(responseJ, "{s:o}", "ctl", NULL)) { AFB_API_WARNING(apiHandle, "Control %s was already present but has been updated", alsaCtlToCreate->name); } - if(returnedJ) - json_object_put(returnedJ); + if(responseJ) + json_object_put(responseJ); + + free(returnedError); + free(returnedInfo); return err; } diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c index d648103..98d8d53 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c @@ -25,7 +25,6 @@ #include #include "4a-hal-utilities-data.h" -#include "4a-hal-utilities-appfw-responses-handler.h" #include "4a-hal-controllers-cb.h" #include "4a-hal-controllers-alsacore-link.h" @@ -487,7 +486,7 @@ json_object *HalCtlsGetJsonArrayForControls(afb_api_t apiHandle, struct CtlHalAl void HalCtlsInfo(afb_req_t request) { - char *apiToCall, *returnedStatus = NULL, *returnedInfo = NULL; + char *apiToCall, *returnedError = NULL, *returnedInfo = NULL; afb_api_t apiHandle; CtlConfigT *ctrlConfig; @@ -521,17 +520,12 @@ void HalCtlsInfo(afb_req_t request) return; } - if(HalCtlsGetInfoFromMixer(apiHandle, apiToCall, requestJson, &toReturnJ, &returnedStatus, &returnedInfo)) { - if(returnedStatus && returnedInfo) { - afb_req_fail_f(request, - "mixer_info", - "Call to mixer info verb didn't succeed with status '%s' and info '%s'", - returnedStatus, - returnedInfo); - } - else { - afb_req_fail(request, "mixer_info", "Call to mixer info verb didn't succeed"); - } + if(HalCtlsGetInfoFromMixer(apiHandle, apiToCall, requestJson, &toReturnJ, &returnedError, &returnedInfo)) { + afb_req_fail_f(request, + "mixer_info", + "Call to mixer info verb didn't succeed with status '%s' and info '%s'", + returnedError ? returnedError : "not returned", + returnedInfo ? returnedInfo : "not returned"); return; } diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c index 1574f83..2bd85be 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c @@ -24,7 +24,6 @@ #include -#include "4a-hal-utilities-appfw-responses-handler.h" #include "4a-hal-utilities-data.h" #include "4a-hal-utilities-hal-streams-handler.h" @@ -203,16 +202,14 @@ int HalCtlsAttachToMixer(afb_api_t apiHandle) { int err = 0, mixerError; - char *apiToCall, *returnedStatus = NULL, *returnedInfo = NULL; - - enum CallError returnedError; + char *apiToCall, *returnedError = NULL, *returnedInfo = NULL; CtlConfigT *ctrlConfig; struct SpecificHalData *currentCtlHalData, *concurentHalData = NULL; struct SpecificHalData **firstHalData; - json_object *returnJ = NULL, *toReturnJ; + json_object *responseJ = NULL; if(! apiHandle) { AFB_API_ERROR(apiHandle, "Can't get current hal api handle"); @@ -257,32 +254,35 @@ int HalCtlsAttachToMixer(afb_api_t apiHandle) return -6; } - if(afb_api_call_sync_legacy(apiHandle, apiToCall, MIXER_ATTACH_VERB, json_object_get(currentCtlHalData->ctlHalSpecificData->halMixerJ), &returnJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, apiToCall, MIXER_ATTACH_VERB, returnJ, &returnedStatus, &returnedInfo); + if(afb_api_call_sync(apiHandle, + apiToCall, + MIXER_ATTACH_VERB, + json_object_get(currentCtlHalData->ctlHalSpecificData->halMixerJ), + &responseJ, + &returnedError, + &returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", MIXER_ATTACH_VERB, apiToCall, - returnedStatus ? returnedStatus : "not returned", + returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); err = -7; } - else if(! json_object_object_get_ex(returnJ, "response", &toReturnJ)) { + else if(! responseJ) { AFB_API_ERROR(apiHandle, - "Seems that %s call to api %s succeed, but response is not valid : '%s'", + "Seems that %s call to api %s succeed but no response was returned", MIXER_ATTACH_VERB, - apiToCall, - json_object_get_string(returnJ)); + apiToCall); err = -8; } - else if((mixerError = HalCtlsHandleMixerAttachResponse(apiHandle, currentCtlHalData->ctlHalSpecificData, toReturnJ)) != (int) MIXER_NO_ERROR) { + else if((mixerError = HalCtlsHandleMixerAttachResponse(apiHandle, currentCtlHalData->ctlHalSpecificData, responseJ)) != (int) MIXER_NO_ERROR) { AFB_API_ERROR(apiHandle, "Seems that %s call to api %s succeed but this warning was risen by response decoder : %i '%s'", MIXER_ATTACH_VERB, apiToCall, mixerError, - json_object_get_string(toReturnJ)); + json_object_get_string(responseJ)); err = -9; } else { @@ -290,13 +290,15 @@ int HalCtlsAttachToMixer(afb_api_t apiHandle) "Seems that %s call to api %s succeed with no warning raised : '%s'", MIXER_ATTACH_VERB, apiToCall, - json_object_get_string(toReturnJ)); - + json_object_get_string(responseJ)); currentCtlHalData->status = HAL_STATUS_READY; } - if(returnJ) - json_object_put(returnJ); + if(responseJ) + json_object_put(responseJ); + + free(returnedError); + free(returnedInfo); return err; } @@ -305,14 +307,10 @@ int HalCtlsGetInfoFromMixer(afb_api_t apiHandle, char *apiToCall, json_object *requestJson, json_object **toReturnJ, - char **returnedStatus, + char **returnedError, char **returnedInfo) { - int err = 0; - - enum CallError returnedError; - - json_object *returnJ, *responseJ; + json_object *responseJ = NULL; if(! apiHandle) { AFB_API_ERROR(apiHandle, "Can't get current hal api handle"); @@ -329,24 +327,38 @@ int HalCtlsGetInfoFromMixer(afb_api_t apiHandle, return -3; } - if(afb_api_call_sync_legacy(apiHandle, apiToCall, MIXER_INFO_VERB, json_object_get(requestJson), &returnJ)) { - returnedError = HalUtlHandleAppFwCallError(apiHandle, apiToCall, MIXER_INFO_VERB, returnJ, returnedStatus, returnedInfo); + if(*returnedError || *returnedInfo) { + AFB_API_ERROR(apiHandle, "'returnedError' and 'returnedInfo' strings should be empty and set to 'NULL'"); + return -4; + } + + if(*toReturnJ) { + AFB_API_ERROR(apiHandle, "'toReturnJ' should be empty and set to 'NULL'"); + return -5; + } + + if(afb_api_call_sync(apiHandle, + apiToCall, + MIXER_INFO_VERB, + json_object_get(requestJson), + &responseJ, + returnedError, + returnedInfo)) { AFB_API_ERROR(apiHandle, - "Error %i during call to verb %s of %s api with status '%s' and info '%s'", - (int) returnedError, + "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'", apiToCall, MIXER_INFO_VERB, - *returnedStatus ? *returnedStatus : "not returned", + *returnedError ? *returnedError : "not returned", *returnedInfo ? *returnedInfo : "not returned"); - err = -4; + return -6; } - else if(! json_object_object_get_ex(returnJ, "response", &responseJ)) { + else if(! responseJ) { AFB_API_ERROR(apiHandle, - "Seems that %s call to api %s succeed, but response is not valid : '%s'", + "Seems that %s call to api %s succeed but no response was returned", MIXER_INFO_VERB, - apiToCall, - json_object_get_string(returnJ)); - err = -5; + apiToCall); + json_object_put(responseJ); + return -7; } else { AFB_API_NOTICE(apiHandle, @@ -354,10 +366,8 @@ int HalCtlsGetInfoFromMixer(afb_api_t apiHandle, MIXER_INFO_VERB, apiToCall, json_object_get_string(responseJ)); - - *toReturnJ = json_object_get(responseJ); + *toReturnJ = responseJ; } - json_object_put(returnJ); - return err; + return 0; } \ No newline at end of file diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.h b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.h index f7d8f83..744830c 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.h +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.h @@ -64,7 +64,7 @@ int HalCtlsGetInfoFromMixer(afb_api_t apiHandle, char *apiToCall, json_object *requestJson, json_object **toReturnJ, - char **returnedStatus, + char **returnedError, char **returnedInfo); #endif /* _HAL_CTLS_SOFTMIXER_LINK_INCLUDE_ */ \ No newline at end of file diff --git a/plugins/lib/bluealsa/hal-bluealsa.c b/plugins/lib/bluealsa/hal-bluealsa.c index 502bfc6..853ab05 100644 --- a/plugins/lib/bluealsa/hal-bluealsa.c +++ b/plugins/lib/bluealsa/hal-bluealsa.c @@ -556,7 +556,7 @@ static int halBlueAlsaAttachTransportStreams(bluealsa_transport_t * transport) { /* In softmixer, this will create a transaction verb (whose name is transactionUidS), * will be used later to destroy all the created objects upon transport removal */ - if (afb_api_call_sync_legacy(plugin->api, SMIXER_API_NAME, "attach", requestJ, &returnJ)) { + if (afb_api_call_sync(plugin->api, SMIXER_API_NAME, "attach", requestJ, &returnJ, NULL, NULL)) { AFB_API_ERROR(plugin->api, "Error calling attach verb of mixer" ); goto done; } @@ -593,7 +593,7 @@ static int halBluezAlsaRemoveTransportStream(bluealsa_transport_t * transport) { json_object_object_add(requestJ, "action", json_object_new_string("remove")); - if (afb_api_call_sync_legacy(plugin->api, SMIXER_API_NAME, transport->transactionUidS, requestJ, &returnJ)) { + if (afb_api_call_sync(plugin->api, SMIXER_API_NAME, transport->transactionUidS, requestJ, &returnJ, NULL, NULL)) { AFB_API_ERROR(plugin->api, "Error calling attach verb of mixer" ); goto fail; } -- cgit 1.2.3-korg