summaryrefslogtreecommitdiffstats
path: root/src/4a-internals-hal/4a-internals-hal-alsacore-link.c
diff options
context:
space:
mode:
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.c135
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", &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;
+ 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