aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-24 14:38:39 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-06-26 16:52:39 +0200
commitc6cb9e4064c05ded2c52f833d5e26ab42a03d1de (patch)
tree1af5e72f45b631f4cfe534d2f70b323d81f8fafc /lib
parente62be7bd8ee0ad8fcd0c5a9f7c1f5831d789c5b4 (diff)
Use haldependencies to process and handle halmap
Use haldependencies section definition to process and to handle halmap section. That means that each 'halmap' control can use its own probed audio device card number using a targeted dependencies. Also, change halmap section definition to be able to handle several halmap defined with the same dependencies. Update example hal to match new json file format. BUG-AGL: SPEC-2329 Change-Id: I31997a037ee8f0e727e0a67866d651b988b85260 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to 'lib')
-rw-r--r--lib/4a-hal-utilities/4a-hal-utilities-alsa-data.h10
-rw-r--r--lib/4a-hal-utilities/4a-hal-utilities-data.c53
-rw-r--r--lib/4a-hal-utilities/4a-hal-utilities-data.h2
3 files changed, 55 insertions, 10 deletions
diff --git a/lib/4a-hal-utilities/4a-hal-utilities-alsa-data.h b/lib/4a-hal-utilities/4a-hal-utilities-alsa-data.h
index d548c73..b387468 100644
--- a/lib/4a-hal-utilities/4a-hal-utilities-alsa-data.h
+++ b/lib/4a-hal-utilities/4a-hal-utilities-alsa-data.h
@@ -30,6 +30,8 @@
#include <ctl-config.h>
+#define HAL_UNKNOWN_DEVICE -1
+
struct InternalHalAlsaDBScale {
int min;
int max;
@@ -44,7 +46,7 @@ struct InternalHalAlsaCtlProperties {
int maxval;
int step;
// TBD JAI : use them
- const char **enums;
+ char **enums;
struct InternalHalAlsaDBScale *dbscale;
};
@@ -58,6 +60,12 @@ struct InternalHalAlsaCtl {
};
struct InternalHalAlsaMap {
+ char *targetUid;
+ char *targetInfo;
+
+ char *targetedDependency;
+ int cardNb;
+
char *uid;
char *info;
diff --git a/lib/4a-hal-utilities/4a-hal-utilities-data.c b/lib/4a-hal-utilities/4a-hal-utilities-data.c
index cebc223..b6d8abb 100644
--- a/lib/4a-hal-utilities/4a-hal-utilities-data.c
+++ b/lib/4a-hal-utilities/4a-hal-utilities-data.c
@@ -68,6 +68,7 @@ void *HalUtlAddNodeInList(struct cds_list_head *listHead, enum LinkedListType li
if(! returned)
return NULL;
nodeToAdd = &((struct InternalHalAlsaMap *) returned)->node;
+ ((struct InternalHalAlsaMap *) returned)->cardNb = HAL_UNKNOWN_DEVICE;
break;
case LINKED_LIST_FOR_HAL_DATA:
@@ -871,12 +872,18 @@ json_object *HalUtlGetJsonArrayForAllMixersData(afb_api_t apiHandle, struct cds_
void HalUtlFreeSelectedHalMapDataAllocation(struct InternalHalAlsaMap *halMapDataToFree)
{
+ free(halMapDataToFree->targetUid);
+ free(halMapDataToFree->targetInfo);
+
+ free(halMapDataToFree->targetedDependency);
+
free(halMapDataToFree->uid);
free(halMapDataToFree->info);
free(halMapDataToFree->action);
- free(halMapDataToFree->ctl.name);
+ if(halMapDataToFree->ctl.name != halMapDataToFree->uid)
+ free(halMapDataToFree->ctl.name);
if(halMapDataToFree->ctl.alsaCtlCreation) {
free(halMapDataToFree->ctl.alsaCtlCreation->enums);
@@ -918,7 +925,7 @@ json_object *HalUtGetJsonArrayForSpecificHalMapControl(afb_api_t apiHandle,
{
int wrapRet;
- json_object *currentAlsaMapDataJ;
+ json_object *currentAlsaMapInfoJ, *additionalInfoJ;
if(! apiHandle) {
AFB_API_ERROR(apiHandle, "Can't get current internal hal api handle");
@@ -930,16 +937,48 @@ json_object *HalUtGetJsonArrayForSpecificHalMapControl(afb_api_t apiHandle,
return NULL;
}
- wrapRet = wrap_json_pack(&currentAlsaMapDataJ,
- "{s:s s:s}",
+ wrapRet = wrap_json_pack(&currentAlsaMapInfoJ,
+ "{s:s s:s s:s}",
"name", currentHalMapData->uid,
- "info", currentHalMapData->info ? currentHalMapData->info : "none");
+ "info", currentHalMapData->info ? currentHalMapData->info : "none",
+ "target", currentHalMapData->targetedDependency);
if(wrapRet) {
- AFB_API_ERROR(apiHandle, "Didn't succeed to allocate current streams json object");
+ AFB_API_ERROR(apiHandle, "Didn't succeed to allocate current halmap control first part of info json object");
return NULL;
}
- return currentAlsaMapDataJ;
+ if(currentHalMapData->cardNb == HAL_UNKNOWN_DEVICE ||
+ ! currentHalMapData->ctl.alsaCtlProperties) {
+ json_object_object_add(currentAlsaMapInfoJ, "available", json_object_new_boolean(0));
+ }
+ else {
+ wrapRet = wrap_json_pack(&additionalInfoJ,
+ "{s:b s:i s:s}",
+ "available", 1,
+ "cardNb", currentHalMapData->cardNb,
+ "cardControlName", currentHalMapData->ctl.name ? currentHalMapData->ctl.name : "'N/A'");
+ if(wrapRet) {
+ AFB_API_ERROR(apiHandle, "Didn't succeed to allocate current halmap control second part of info json object");
+ json_object_put(currentAlsaMapInfoJ);
+ return NULL;
+ }
+
+ wrap_json_object_add(currentAlsaMapInfoJ, additionalInfoJ);
+ }
+
+ wrapRet = wrap_json_pack(&additionalInfoJ,
+ "{s:s s:s}",
+ "halmap-uid", currentHalMapData->targetUid,
+ "halmap-info", currentHalMapData->targetInfo ? currentHalMapData->targetInfo : "none");
+ if(wrapRet) {
+ AFB_API_ERROR(apiHandle, "Didn't succeed to allocate current halmap control third part of info json object");
+ json_object_put(currentAlsaMapInfoJ);
+ return NULL;
+ }
+
+ wrap_json_object_add(currentAlsaMapInfoJ, additionalInfoJ);
+
+ return currentAlsaMapInfoJ;
}
json_object *HalUtGetJsonArrayForAllHalMapControls(afb_api_t apiHandle, struct cds_list_head *halMapListHead)
diff --git a/lib/4a-hal-utilities/4a-hal-utilities-data.h b/lib/4a-hal-utilities/4a-hal-utilities-data.h
index 1ecfe00..bea92dd 100644
--- a/lib/4a-hal-utilities/4a-hal-utilities-data.h
+++ b/lib/4a-hal-utilities/4a-hal-utilities-data.h
@@ -30,8 +30,6 @@
#include "4a-hal-utilities-alsa-data.h"
-#define HAL_UNKNOWN_DEVICE -1
-
#define HAL_STREAM_UPDATES_EVENT_NAME "stream-updates"
// Enum for linked list type