diff options
Diffstat (limited to 'src/4a-internals-hal/4a-internals-hal-alsacore-link.c')
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-alsacore-link.c | 135 |
1 files changed, 93 insertions, 42 deletions
diff --git a/src/4a-internals-hal/4a-internals-hal-alsacore-link.c b/src/4a-internals-hal/4a-internals-hal-alsacore-link.c index 6eda170..db9e9b4 100644 --- a/src/4a-internals-hal/4a-internals-hal-alsacore-link.c +++ b/src/4a-internals-hal/4a-internals-hal-alsacore-link.c @@ -71,7 +71,7 @@ snd_ctl_elem_type_t InternalHalMapsAlsaTypeToEnum(const char *label) int InternalHalGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) { - int errorToReturn, cardId; + int errorToReturn, cardId, wrapRet; char *returnedError = NULL, *returnedInfo = NULL; @@ -87,7 +87,11 @@ int InternalHalGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) return -2; } - wrap_json_pack(&toSendJ, "{s:s}", "cardPath", devPath); + wrapRet = wrap_json_pack(&toSendJ, "{s:s}", "cardPath", devPath); + if(wrapRet) { + AFB_API_ERROR(apiHandle, "Didn't succeed to allocate cardpath json object (needed to search for audio card using path)"); + return -3; + } if(afb_api_call_sync(apiHandle, ALSACORE_API, @@ -102,25 +106,25 @@ int InternalHalGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) ALSACORE_API, returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); - errorToReturn = -3; + errorToReturn = -4; } 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; + errorToReturn = -5; } else if(! json_object_is_type(responseJ, json_type_object)) { AFB_API_ERROR(apiHandle, "Seems that %s call to api %s succeed but the returned response is invalid", ALSACORE_GETINFO_VERB, ALSACORE_API); - errorToReturn = -5; + errorToReturn = -6; } else if(wrap_json_unpack(responseJ, "{s:i}", "cardNb", &cardId)) { AFB_API_WARNING(apiHandle, "Response card id is not present/valid"); - errorToReturn = -6; + errorToReturn = -7; } else { return cardId; @@ -137,13 +141,18 @@ int InternalHalGetCardIdByCardPath(afb_api_t apiHandle, char *devPath) int InternalHalSubscribeToAlsaCardEvent(afb_api_t apiHandle, char *cardId) { - int err = 0; + int err = 0, wrapRet; char *returnedError = NULL, *returnedInfo = NULL; json_object *subscribeQueryJ, *responseJ = NULL; - wrap_json_pack(&subscribeQueryJ, "{s:s}", "devid", cardId); + wrapRet = wrap_json_pack(&subscribeQueryJ, "{s:s}", "devid", cardId); + if(wrapRet) { + AFB_API_ERROR(apiHandle, "Didn't succeed to allocate subscription query json object"); + return -1; + } + if(afb_api_call_sync(apiHandle, ALSACORE_API, ALSACORE_SUBSCRIBE_VERB, @@ -157,7 +166,7 @@ int InternalHalSubscribeToAlsaCardEvent(afb_api_t apiHandle, char *cardId) ALSACORE_API, returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); - err = -1; + err = -2; } if(responseJ) @@ -171,7 +180,7 @@ int InternalHalSubscribeToAlsaCardEvent(afb_api_t apiHandle, char *cardId) int InternalHalGetAlsaCtlInfo(afb_api_t apiHandle, char *cardId, struct InternalHalAlsaCtl *currentAlsaCtl, json_object **returnedDataJ) { - int err = 0; + int err = 0, wrapRet; char *returnedError = NULL, *returnedInfo = NULL; @@ -202,16 +211,29 @@ int InternalHalGetAlsaCtlInfo(afb_api_t apiHandle, char *cardId, struct Internal } if(currentAlsaCtl->numid > 0) { - wrap_json_pack(&queryJ, "{s:s s:i s:i}", "devid", cardId, "ctl", currentAlsaCtl->numid, "mode", 3); + wrapRet = wrap_json_pack(&queryJ, + "{s:s s:i s:i}", + "devid", cardId, + "ctl", currentAlsaCtl->numid, + "mode", 3); } else if(currentAlsaCtl->name) { - wrap_json_pack(&queryJ, "{s:s s:s s:i}", "devid", cardId, "ctl", currentAlsaCtl->name, "mode", 3); + wrapRet = wrap_json_pack(&queryJ, + "{s:s s:s s:i}", + "devid", cardId, + "ctl", currentAlsaCtl->name, + "mode", 3); } else { AFB_API_ERROR(apiHandle, "Need at least a control name or a control id"); return -4; } + if(wrapRet) { + AFB_API_ERROR(apiHandle, "Didn't succeed to allocate get ALSA control query json object"); + return -5; + } + if(afb_api_call_sync(apiHandle, ALSACORE_API, ALSACORE_CTLGET_VERB, @@ -227,19 +249,19 @@ int InternalHalGetAlsaCtlInfo(afb_api_t apiHandle, char *cardId, struct Internal returnedInfo ? returnedInfo : "not returned"); free(returnedError); free(returnedInfo); - return -5; + return -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; + return -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; + return -8; } *returnedDataJ = responseJ; @@ -272,7 +294,7 @@ int InternalHalUpdateAlsaCtlProperties(afb_api_t apiHandle, char *cardId, struct cardId, json_object_get_string(returnedDataJ)); - err = -8; + err = -9; } if(returnedDataJ) @@ -300,7 +322,7 @@ int InternalHalGetAlsaCtlValues(afb_api_t apiHandle, char *cardId, struct Intern cardId, json_object_get_string(returnedValuesArrayJ)); - err = -8; + err = -9; } else if(! json_object_is_type(returnedValuesArrayJ, json_type_array)) { AFB_API_ERROR(apiHandle, @@ -309,7 +331,7 @@ int InternalHalGetAlsaCtlValues(afb_api_t apiHandle, char *cardId, struct Intern cardId, json_object_get_string(returnedValuesArrayJ)); - err = -9; + err = -10; } if(! err) @@ -323,7 +345,7 @@ int InternalHalGetAlsaCtlValues(afb_api_t apiHandle, char *cardId, struct Intern int InternalHalSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, json_object *valuesJ) { - int err = 0; + int err = 0, wrapRet; char *returnedError = NULL, *returnedInfo = NULL; @@ -349,7 +371,16 @@ int InternalHalSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, jso return -4; } - wrap_json_pack(&queryJ, "{s:s s:{s:i s:o}}", "devid", cardId, "ctl", "id", ctlId, "val", json_object_get(valuesJ)); + wrapRet = wrap_json_pack(&queryJ, + "{s:s s:{s:i s:o}}", + "devid", cardId, + "ctl", + "id", ctlId, + "val", json_object_get(valuesJ)); + if(wrapRet) { + AFB_API_ERROR(apiHandle, "Didn't succeed to allocate set ALSA control query json object"); + return -5; + } if(afb_api_call_sync(apiHandle, ALSACORE_API, @@ -364,7 +395,7 @@ int InternalHalSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, jso ALSACORE_API, returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); - err = -5; + err = -6; } if(responseJ) @@ -378,7 +409,7 @@ int InternalHalSetAlsaCtlValue(afb_api_t apiHandle, char *cardId, int ctlId, jso int InternalHalCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct InternalHalAlsaCtl *alsaCtlToCreate) { - int err = 0; + int err = 0, wrapRet; char *returnedError = NULL, *returnedInfo = NULL; @@ -404,16 +435,21 @@ int InternalHalCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct InternalH return -4; } - 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, - "name", alsaCtlToCreate->name, - "min", alsaCtlToCreate->alsaCtlCreation->minval, - "max", alsaCtlToCreate->alsaCtlCreation->maxval, - "step", alsaCtlToCreate->alsaCtlCreation->step, - "type", (int) alsaCtlToCreate->alsaCtlCreation->type, - "count", alsaCtlToCreate->alsaCtlCreation->count); + wrapRet = 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, + "name", alsaCtlToCreate->name, + "min", alsaCtlToCreate->alsaCtlCreation->minval, + "max", alsaCtlToCreate->alsaCtlCreation->maxval, + "step", alsaCtlToCreate->alsaCtlCreation->step, + "type", (int) alsaCtlToCreate->alsaCtlCreation->type, + "count", alsaCtlToCreate->alsaCtlCreation->count); + if(wrapRet) { + AFB_API_ERROR(apiHandle, "Didn't succeed to allocate create ALSA control query json object"); + return -5; + } if(afb_api_call_sync(apiHandle, ALSACORE_API, @@ -428,21 +464,21 @@ int InternalHalCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct InternalH ALSACORE_API, returnedError ? returnedError : "not returned", returnedInfo ? returnedInfo : "not returned"); - err = -5; + err = -6; } else if(! responseJ) { AFB_API_ERROR(apiHandle, "Seems that %s call to api %s succeed but no response was returned", ALSACORE_ADDCTL_VERB, ALSACORE_API); - err = -6; + 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_ADDCTL_VERB, ALSACORE_API); - err = -7; + err = -8; } 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); @@ -463,6 +499,8 @@ int InternalHalCreateAlsaCtl(afb_api_t apiHandle, char *cardId, struct InternalH void InternalHalActionOnAlsaCtl(afb_req_t request) { + int wrapRet; + char cardIdString[6]; afb_api_t apiHandle; @@ -536,9 +574,16 @@ void InternalHalActionOnAlsaCtl(afb_req_t request) requestJson = afb_req_json(request); if(! requestJson) { - wrap_json_pack(&answerJ, - "{s:o}", - "current", normalizedPreviousControlValuesJ); + wrapRet = wrap_json_pack(&answerJ, + "{s:o}", + "current", normalizedPreviousControlValuesJ); + if(wrapRet) { + afb_req_fail(request, + "currentvalues_json_object", + "Didn't succeed to allocate ALSA control current values response json object"); + return; + } + afb_req_success(request, answerJ, "Current controls values"); json_object_put(previousControlValuesJ); return; @@ -627,10 +672,16 @@ void InternalHalActionOnAlsaCtl(afb_req_t request) json_object_put(appliedControlValuesJ); - wrap_json_pack(&answerJ, - "{s:o, s:o}", - "previous", normalizedPreviousControlValuesJ, - "current", normalizedAppliedControlValuesJ); + wrapRet = wrap_json_pack(&answerJ, + "{s:o, s:o}", + "previous", normalizedPreviousControlValuesJ, + "current", normalizedAppliedControlValuesJ); + if(wrapRet) { + afb_req_fail(request, + "values_json_object", + "Didn't succeed to allocate ALSA control previous and current values response json object"); + return; + } afb_req_success(request, answerJ, "Values correctly applied on alsa control"); }
\ No newline at end of file |