summaryrefslogtreecommitdiffstats
path: root/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2018-06-01 22:44:21 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2018-10-08 15:51:00 +0200
commit8943be0ab8f315d935c9bfe7b46523c4e94b0025 (patch)
treef6043225194b93380a6e253822186fe088c3a3cd /4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c
parent67c4b9bb390192fa1cb4004da0ca3ec4ad8d54a6 (diff)
Handle mixer response after its init
Handle mixer response to get created streams and them corresponding card ids after mixer initialization. Store these informations into the controller hal data strucure. Creation of a verb for each stream is now handle at response handling. Remove unnecessary function because we don't need to search for a stream by his name. Change-Id: Id9e598668b071ca18d152b57e71109314025f698 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.c72
1 files changed, 16 insertions, 56 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 30f89ba..f80063d 100644
--- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c
+++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c
@@ -27,6 +27,7 @@
#include "../4a-hal-utilities/4a-hal-utilities-verbs-loader.h"
#include "4a-hal-controllers-cb.h"
+#include "4a-hal-controllers-mixer-handler.h"
/*******************************************************************************
* HAL controllers sections parsing functions *
@@ -34,16 +35,9 @@
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;
@@ -64,50 +58,8 @@ int HalCtlsHalMixerConfig(afb_dynapi *apiHandle, CtlSectionT *section, json_obje
if(wrap_json_unpack(MixerJ, "{s:s}", "mixerapi", &currentHalData->ctlHalSpecificData->mixerApiName))
return -5;
- if(wrap_json_unpack(MixerJ, "{s:s}", "uid", &currentHalData->ctlHalSpecificData->halSoftMixerVerb))
+ if(wrap_json_unpack(MixerJ, "{s:s}", "uid", &currentHalData->ctlHalSpecificData->mixerVerbName))
return -6;
-
- if(! json_object_object_get_ex(MixerJ, "streams", &streamsArray))
- return -7;
-
- 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 -8;
- }
-
- 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", &currentStreamName))
- return -10-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 -9;
}
return 0;
@@ -168,7 +120,7 @@ void HalCtlsActionOnStream(afb_request *request)
return;
}
- halSoftMixerVerb = currentCtlHalData->ctlHalSpecificData->halSoftMixerVerb;
+ halSoftMixerVerb = currentCtlHalData->ctlHalSpecificData->mixerVerbName;
if(! halSoftMixerVerb) {
afb_request_fail(request, "hal_softmixer_verb", "Can't get hal mixer verb prefix");
return;
@@ -254,9 +206,7 @@ void HalCtlsListVerbs(afb_request *request)
wrap_json_pack(&currentStream,
"{s:s s:s}",
"name", currentCtlHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].name,
- "cardId", currentCtlHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].cardId ?
- currentCtlHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].cardId :
- "");
+ "cardId", currentCtlHalData->ctlHalSpecificData->ctlHalStreamsData.data[idx].cardId);
json_object_array_add(streamsArray, currentStream);
}
@@ -269,6 +219,8 @@ void HalCtlsListVerbs(afb_request *request)
void HalCtlsInitMixer(afb_request *request)
{
+ unsigned int err;
+
char *apiToCall;
afb_dynapi *apiHandle;
@@ -311,11 +263,19 @@ void HalCtlsInitMixer(afb_request *request)
apiToCall);
}
else if(json_object_object_get_ex(returnJ, "response", &toReturnJ)) {
- // TODO JAI : get streams cardId from mixer response
+ err = HalCtlsHandleMixerAttachResponse(request, &currentCtlHalData->ctlHalSpecificData->ctlHalStreamsData, toReturnJ);
+ if(err) {
+ afb_request_success_f(request,
+ toReturnJ,
+ "Seems that create call to api %s succeed but this warning was rised by response decoder : %i",
+ apiToCall,
+ err);
+ return;
+ }
afb_request_success_f(request,
toReturnJ,
- "Seems that mix_new call to api %s succeed",
+ "Seems that create call to api %s succeed with no warning raised",
apiToCall);
}
else {