diff options
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) { |