diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-01-23 13:56:06 +0100 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-01-28 15:38:58 +0100 |
commit | 2b558bb1ec9f854769c556e84735e7dcd3a295e8 (patch) | |
tree | b88875e5cff3759be7bb8c93e61fd892b16ced8e /4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c | |
parent | 20a22fadf78660394ca2ce8354530306288578fc (diff) |
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 <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c')
-rw-r--r-- | 4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c | 237 |
1 files changed, 123 insertions, 114 deletions
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; } |