From ecb03929df1b66e0d41771e49f3f810d4bcdffba Mon Sep 17 00:00:00 2001 From: Jonathan Aillet Date: Mon, 17 Dec 2018 12:34:36 +0100 Subject: Add 'halmap' controls in hal 'info' verb response Add 'halmap' controls verbs (specified in json configuration file) in the response of verb 'info'. Bug-AGL: SPEC-1313 Change-Id: I4e7ec5c3d23fd505da1eb233c1da63708024912d Signed-off-by: Jonathan Aillet --- 4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | 96 ++++++++++++++++++----- 1 file changed, 76 insertions(+), 20 deletions(-) (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c') 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 b9ba537..ca3ba6b 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c @@ -489,18 +489,26 @@ json_object *HalCtlsGetJsonArrayForMixerDataTable(AFB_ApiT apiHandle, struct Ctl } for(idx = 0; idx < currentMixerDataT->count; idx++) { - if(dataType == MIXER_DATA_STREAMS) { - wrap_json_pack(¤tMixerData, - "{s:s s:s}", - "name", currentMixerDataT->data[idx].verb, - "cardId", currentMixerDataT->data[idx].streamCardId); - } - else { - wrap_json_pack(¤tMixerData, - "{s:s s:s}", - "name", currentMixerDataT->data[idx].verb, - "mixer-name", currentMixerDataT->data[idx].verbToCall, - "uid", currentMixerDataT->data[idx].streamCardId ? currentMixerDataT->data[idx].streamCardId : "none"); + switch(dataType) { + case MIXER_DATA_STREAMS: + wrap_json_pack(¤tMixerData, + "{s:s s:s}", + "name", currentMixerDataT->data[idx].verb, + "cardId", currentMixerDataT->data[idx].streamCardId); + break; + + case MIXER_DATA_PLAYBACKS: + case MIXER_DATA_CAPTURES : + wrap_json_pack(¤tMixerData, + "{s:s s:s}", + "name", currentMixerDataT->data[idx].verb, + "mixer-name", currentMixerDataT->data[idx].verbToCall, + "uid", currentMixerDataT->data[idx].streamCardId ? currentMixerDataT->data[idx].streamCardId : "none"); + break; + + default: + json_object_put(mixerDataArray); + return NULL; } json_object_array_add(mixerDataArray, currentMixerData); } @@ -508,6 +516,40 @@ json_object *HalCtlsGetJsonArrayForMixerDataTable(AFB_ApiT apiHandle, struct Ctl return mixerDataArray; } +json_object *HalCtlsGetJsonArrayForControls(AFB_ApiT apiHandle, struct CtlHalAlsaMapT *currentAlsaMapDataT) +{ + unsigned int idx; + + json_object *alsaMapDataArray, *currentAlsaMapData; + + if(! apiHandle) { + AFB_ApiError(apiHandle, "Can't get current hal controller api handle"); + return NULL; + } + + if(! currentAlsaMapDataT) { + AFB_ApiError(apiHandle, "Can't get Alsa map data table to handle"); + return NULL; + } + + alsaMapDataArray = json_object_new_array(); + if(! alsaMapDataArray) { + AFB_ApiError(apiHandle, "Can't generate json mixer data array"); + return NULL; + } + + for(idx = 0; idx < currentAlsaMapDataT->ctlsCount; idx++) { + wrap_json_pack(¤tAlsaMapData, + "{s:s s:s}", + "name", currentAlsaMapDataT->ctls[idx].uid, + "info", currentAlsaMapDataT->ctls[idx].info ? currentAlsaMapDataT->ctls[idx].info : "none"); + + json_object_array_add(alsaMapDataArray, currentAlsaMapData); + } + + return alsaMapDataArray; +} + void HalCtlsInfo(AFB_ReqT request) { char *apiToCall, *returnedStatus = NULL, *returnedInfo = NULL; @@ -517,7 +559,7 @@ void HalCtlsInfo(AFB_ReqT request) struct SpecificHalData *currentCtlHalData; - json_object *requestJson, *toReturnJ = NULL, *requestAnswer, *streamsArray, *playbacksArray, *capturesArray; + json_object *requestJson, *toReturnJ = NULL, *requestAnswer, *streamsArray, *playbacksArray, *capturesArray, *controlsArray; apiHandle = (AFB_ApiT) AFB_ReqGetApi(request); if(! apiHandle) { @@ -566,25 +608,39 @@ void HalCtlsInfo(AFB_ReqT request) return; } - streamsArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, ¤tCtlHalData->ctlHalSpecificData->ctlHalStreamsData, MIXER_DATA_STREAMS); - if(! streamsArray) { + if(! (streamsArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, + ¤tCtlHalData->ctlHalSpecificData->ctlHalStreamsData, + MIXER_DATA_STREAMS))) { AFB_ReqFail(request, "streams_data", "Didn't succeed to generate streams data array"); return; } - playbacksArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, ¤tCtlHalData->ctlHalSpecificData->ctlHalPlaybacksData, MIXER_DATA_PLAYBACKS); - if(! playbacksArray) { + if(! (playbacksArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, + ¤tCtlHalData->ctlHalSpecificData->ctlHalPlaybacksData, + MIXER_DATA_PLAYBACKS))) { AFB_ReqFail(request, "playbacks_data", "Didn't succeed to generate playbacks data array"); return; } - capturesArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, ¤tCtlHalData->ctlHalSpecificData->ctlHalCapturesData, MIXER_DATA_CAPTURES); - if(! capturesArray) { + if(! (capturesArray = HalCtlsGetJsonArrayForMixerDataTable(apiHandle, + ¤tCtlHalData->ctlHalSpecificData->ctlHalCapturesData, + MIXER_DATA_CAPTURES))) { AFB_ReqFail(request, "captures_data", "Didn't succeed to generate captures data array"); return; } - wrap_json_pack(&requestAnswer, "{s:o s:o s:o}", "streams", streamsArray, "playbacks", playbacksArray, "captures", capturesArray); + if(! (controlsArray = HalCtlsGetJsonArrayForControls(apiHandle, + currentCtlHalData->ctlHalSpecificData->ctlHalAlsaMapT))) { + AFB_ReqFail(request, "controls_data", "Didn't succeed to generate controls data array"); + return; + } + + wrap_json_pack(&requestAnswer, + "{s:o s:o s:o s:o}", + "streams", streamsArray, + "playbacks", playbacksArray, + "captures", capturesArray, + "controls", controlsArray); AFB_ReqSuccess(request, requestAnswer, "Requested data"); } \ No newline at end of file -- cgit 1.2.3-korg