diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-05-26 19:42:50 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-10-08 15:51:00 +0200 |
commit | bb13f7376e40119d08bb4c2b6a291f49a3432e59 (patch) | |
tree | bb7305c03de6ba1853a627c0b02762e9bf6e97e8 /4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | |
parent | b1734993fee173ca854dc4396c85c0766d01bbb8 (diff) |
Parse controller config to get halmixer json object
Parse controller configuration to get halmixer json object, this
object is inside 'halmixer' section of controller configuration file.
Use streams defined in this 'halmixer' section to get available streams
of this hal, store them, and declare them as hal api verbs.
Change-Id: I47adb2756f89f2a84c8d651ba38ecea5b84079c3
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c')
-rw-r--r-- | 4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | 97 |
1 files changed, 96 insertions, 1 deletions
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 bc8339c..c05059d 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c @@ -23,12 +23,107 @@ #include <wrap-json.h> +#include "../4a-hal-utilities/4a-hal-utilities-data.h" +#include "../4a-hal-utilities/4a-hal-utilities-verbs-loader.h" + #include "4a-hal-controllers-cb.h" /******************************************************************************* - * HAL Manager verbs functions * + * HAL controllers sections parsing functions * ******************************************************************************/ +int HalCtlsHalMixerConfig(afb_dynapi *apiHandle, CtlSectionT *section, json_object *MixerJ) +{ + unsigned int streamCount, idx; + char *currentStreamName; + + CtlConfigT *ctrlConfig; + struct SpecificHalData *currentHalData; + + json_object *streamsArray, *currentStream; + + struct HalUtlApiVerb *CtlHalDynApiStreamVerbs; + + if(! apiHandle || ! section) + return -1; + + if(MixerJ) { + ctrlConfig = (CtlConfigT *) afb_dynapi_get_userdata(apiHandle); + if(! ctrlConfig) + return -2; + + currentHalData = (struct SpecificHalData *) ctrlConfig->external; + if(! currentHalData) + return -3; + + if(json_object_is_type(MixerJ, json_type_object)) + currentHalData->ctlHalSpecificData->halMixerJ = MixerJ; + else + return -4; + + if(wrap_json_unpack(MixerJ, "{s:s}", "mixerapi", ¤tHalData->ctlHalSpecificData->mixerApiName)) + return -5; + + if(! json_object_object_get_ex(MixerJ, "streams", &streamsArray)) + return -6; + + switch(json_object_get_type(streamsArray)) { + case json_type_object: + streamCount = 1; + break; + case json_type_array: + streamCount = json_object_array_length(streamsArray); + break; + default: + return -7; + } + + currentHalData->ctlHalSpecificData->ctlHalStreamsData.count = streamCount; + currentHalData->ctlHalSpecificData->ctlHalStreamsData.data = + (struct CtlHalStreamData *) calloc(streamCount, sizeof (struct CtlHalStreamData *)); + + CtlHalDynApiStreamVerbs = alloca((streamCount + 1) * sizeof(struct HalUtlApiVerb)); + memset(CtlHalDynApiStreamVerbs, '\0', (streamCount + 1) * sizeof(struct HalUtlApiVerb)); + CtlHalDynApiStreamVerbs[streamCount + 1].verb = NULL; + + for(idx = 0; idx < streamCount; idx++) { + if(streamCount > 1) + currentStream = json_object_array_get_idx(streamsArray, (int) idx); + else + currentStream = streamsArray; + + if(wrap_json_unpack(currentStream, "{s:s}", "uid", ¤tStreamName)) + return -9-idx; + + currentHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].name = strdup(currentStreamName); + currentHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].cardId = NULL; + + CtlHalDynApiStreamVerbs[idx].verb = currentStreamName; + CtlHalDynApiStreamVerbs[idx].callback = HalCtlsActionOnStream; + CtlHalDynApiStreamVerbs[idx].info = "Peform action on this stream"; + } + + if(HalUtlLoadVerbs(apiHandle, CtlHalDynApiStreamVerbs)) + return -8; + } + + return 0; +} + +// TODO JAI: create a new section parser to get 'halmap' and store them into hal structure + +/******************************************************************************* + * HAL controllers verbs functions * + ******************************************************************************/ + +// TODO JAI : to implement +void HalCtlsActionOnStream(afb_request *request) +{ + AFB_REQUEST_WARNING(request, "JAI :%s not implemented yet", __func__); + + afb_request_success(request, json_object_new_boolean(false), NULL); +} + // TODO JAI : to implement void HalCtlsListVerbs(afb_request *request) { |