diff options
4 files changed, 107 insertions, 1 deletions
diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c index bf7ccbe..0b6a919 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c @@ -45,6 +45,8 @@ static CtlSectionT ctrlSections[] = {.key="onload" , .loadCB= OnloadConfig}, {.key="controls", .loadCB= ControlConfig}, {.key="events" , .loadCB= EventConfig}, + // TODO JAI: create a new section parser to get 'halmap' and store them into hal structure + {.key="halmixer", .loadCB= HalCtlsHalMixerConfig}, {.key=NULL} }; 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) { diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.h b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.h index 7bd6434..765001e 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.h +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.h @@ -23,6 +23,13 @@ #define AFB_BINDING_VERSION dyn #include <afb/afb-binding.h> +#include <ctl-config.h> + +// HAL controllers sections parsing functions +int HalCtlsHalMixerConfig(afb_dynapi *apiHandle, CtlSectionT *section, json_object *MixerJ); + +// HAL controllers verbs functions +void HalCtlsActionOnStream(afb_request *request); void HalCtlsListVerbs(afb_request *request); #endif /* _HALMGR_CB_INCLUDE_ */
\ No newline at end of file diff --git a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h index 9514571..f9b9b36 100644 --- a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h +++ b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h @@ -20,6 +20,8 @@ #include <stdio.h> +#include <wrap-json.h> + #define AFB_BINDING_VERSION dyn #include <afb/afb-binding.h> |