aboutsummaryrefslogtreecommitdiffstats
path: root/src/4a-internals-hal/4a-internals-hal-mixer-link.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/4a-internals-hal/4a-internals-hal-mixer-link.c')
-rw-r--r--src/4a-internals-hal/4a-internals-hal-mixer-link.c96
1 files changed, 91 insertions, 5 deletions
diff --git a/src/4a-internals-hal/4a-internals-hal-mixer-link.c b/src/4a-internals-hal/4a-internals-hal-mixer-link.c
index 56dc840..19fb3a0 100644
--- a/src/4a-internals-hal/4a-internals-hal-mixer-link.c
+++ b/src/4a-internals-hal/4a-internals-hal-mixer-link.c
@@ -142,7 +142,7 @@ int InternalHalHandleMixerAttachResponse(afb_api_t apiHandle, struct InternalHal
return 0;
}
-int InternalHalAttachToMixer(afb_api_t apiHandle)
+int InternalHalAttachDependencyToMixer(afb_api_t apiHandle, struct InternalHalProbedDevice *probedDeviceToAttach)
{
int err = 0, mixerError;
@@ -194,9 +194,10 @@ int InternalHalAttachToMixer(afb_api_t apiHandle)
return -6;
}
- dependencyJ = HalUtlGetJsonArrayForAllDependencies(apiHandle,
- &currentHalData->internalHalData->probedDevicesListHead,
- DEPENDENCY_COMPACT_JSON);
+ dependencyJ = HalUtlGetJsonArrayForAllDependenciesInfoWithHandledDependency(apiHandle,
+ &currentHalData->internalHalData->probedDevicesListHead,
+ DEPENDENCY_COMPACT_JSON,
+ probedDeviceToAttach->uid);
if(! dependencyJ) {
AFB_API_ERROR(apiHandle, "Didn't succeed to generate available dependencies compact json array");
return -7;
@@ -251,10 +252,14 @@ int InternalHalAttachToMixer(afb_api_t apiHandle)
MIXER_ATTACH_VERB,
apiToCall,
json_object_get_string(responseJ));
- currentHalData->status = HAL_STATUS_READY;
}
}
+ if(err)
+ probedDeviceToAttach->mixerLinkStatus = DEPENDENCY_MIXER_ATTACH_FAILED;
+ else
+ probedDeviceToAttach->mixerLinkStatus = DEPENDENCY_MIXER_ATTACH_SUCCEED;
+
if(responseJ)
json_object_put(responseJ);
@@ -264,6 +269,87 @@ int InternalHalAttachToMixer(afb_api_t apiHandle)
return err;
}
+int InternalHalDetachDependencyToMixer(afb_api_t apiHandle, struct InternalHalProbedDevice *probedDeviceToDetach)
+{
+ int err, toReturn = 0;
+
+ char *apiToCall, *returnedError = NULL, *returnedInfo = NULL;
+
+ CtlConfigT *ctrlConfig;
+
+ struct HalData *currentHalData;
+
+ json_object *requestJ, *dependencyJ, *responseJ = NULL;
+
+ if(! apiHandle) {
+ AFB_API_ERROR(apiHandle, "Can't get current internal hal api handle");
+ return -1;
+ }
+
+ ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle);
+ if(! ctrlConfig) {
+ AFB_API_ERROR(apiHandle, "Can't get current internal hal controller config");
+ return -2;
+ }
+
+ currentHalData = (struct HalData *) getExternalData(ctrlConfig);
+ if(! currentHalData) {
+ AFB_API_ERROR(apiHandle, "Can't get current internal hal controller data");
+ return -3;
+ }
+
+ apiToCall = currentHalData->internalHalData->mixerApiName;
+ if(! apiToCall) {
+ AFB_API_ERROR(apiHandle, "Can't get mixer api");
+ return -4;
+ }
+
+ dependencyJ = HalUtlGetJsonForSpecificDependenciesUsingUid(apiHandle,
+ &currentHalData->internalHalData->probedDevicesListHead,
+ probedDeviceToDetach->uid,
+ DEPENDENCY_COMPACT_JSON);
+ if(! dependencyJ) {
+ AFB_API_ERROR(apiHandle, "Didn't succeed to get dependency %s compact json array", probedDeviceToDetach->uid);
+ return -5;
+ }
+
+ err = wrap_json_pack(&requestJ, "{s:o}", "dependencies", dependencyJ);
+ if(err) {
+ AFB_API_ERROR(apiHandle,
+ "Didn't succeed to allocate detach dependency %s request json", probedDeviceToDetach->uid);
+ return -6;
+ }
+
+ if(afb_api_call_sync(apiHandle,
+ apiToCall,
+ MIXER_DETACH_VERB,
+ requestJ,
+ &responseJ,
+ &returnedError,
+ &returnedInfo)) {
+ AFB_API_ERROR(apiHandle,
+ "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s'",
+ MIXER_DETACH_VERB,
+ apiToCall,
+ returnedError ? returnedError : "not returned",
+ returnedInfo ? returnedInfo : "not returned");
+ toReturn = -7;
+ }
+
+ if(toReturn)
+ probedDeviceToDetach->mixerLinkStatus = DEPENDENCY_MIXER_DETACH_FAILED;
+ else
+ probedDeviceToDetach->mixerLinkStatus = DEPENDENCY_MIXER_DETACH_SUCCEED;
+
+ if(responseJ)
+ json_object_put(responseJ);
+
+ free(returnedError);
+ free(returnedInfo);
+
+ return toReturn;
+}
+
int InternalHalGetInfoFromMixer(afb_api_t apiHandle,
char *apiToCall,
json_object *requestJson,