diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-06-24 14:38:39 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-06-26 16:52:39 +0200 |
commit | c6cb9e4064c05ded2c52f833d5e26ab42a03d1de (patch) | |
tree | 1af5e72f45b631f4cfe534d2f70b323d81f8fafc /lib/4a-hal-utilities/4a-hal-utilities-data.c | |
parent | e62be7bd8ee0ad8fcd0c5a9f7c1f5831d789c5b4 (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/4a-hal-utilities/4a-hal-utilities-data.c')
-rw-r--r-- | lib/4a-hal-utilities/4a-hal-utilities-data.c | 53 |
1 files changed, 46 insertions, 7 deletions
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(¤tAlsaMapDataJ, - "{s:s s:s}", + wrapRet = wrap_json_pack(¤tAlsaMapInfoJ, + "{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) |