aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c148
-rw-r--r--4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h45
-rw-r--r--4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c68
-rw-r--r--4a-hal-utilities/CMakeLists.txt1
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c237
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c20
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.c92
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-link.h2
-rw-r--r--plugins/lib/bluealsa/hal-bluealsa.c4
9 files changed, 220 insertions, 397 deletions
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 <jonathan.aillet@iot.bzh>
- *
- * 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 <stdio.h>
-#include <string.h>
-
-#include <afb/afb-binding.h>
-
-#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 <jonathan.aillet@iot.bzh>
- *
- * 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 <stdio.h>
-
-#include <wrap-json.h>
-
-#include <afb/afb-binding.h>
-
-// 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 <ctl-config.h>
#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", &currentAlsaCtl->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", &currentAlsaCtl->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 *) &currentAlsaCtl->alsaCtlProperties.type,
"count", &currentAlsaCtl->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 <afb/afb-binding.h>
#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 <afb/afb-binding.h>
-#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;
}