aboutsummaryrefslogtreecommitdiffstats
path: root/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c
diff options
context:
space:
mode:
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.c237
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", &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;
}