summaryrefslogtreecommitdiffstats
path: root/lib/4a-hal-utilities/4a-hal-utilities-data.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/4a-hal-utilities/4a-hal-utilities-data.c')
-rw-r--r--lib/4a-hal-utilities/4a-hal-utilities-data.c81
1 files changed, 80 insertions, 1 deletions
diff --git a/lib/4a-hal-utilities/4a-hal-utilities-data.c b/lib/4a-hal-utilities/4a-hal-utilities-data.c
index 6d1afd0..865bebb 100644
--- a/lib/4a-hal-utilities/4a-hal-utilities-data.c
+++ b/lib/4a-hal-utilities/4a-hal-utilities-data.c
@@ -313,6 +313,26 @@ int HalUtlGetNumberOfProbedDevicesInList(struct cds_list_head *probedDevicesList
return HalUtlGetNumberOfNodesInList(probedDevicesListHead);
}
+int HalUtlGetNumberOfDynamicProbedDevicesInList(struct cds_list_head *probedDevicesListHead)
+{
+ int numberOfDynamicProbedDevicesInList = 0;
+
+ struct InternalHalProbedDevice *currentProbedDevice;
+
+ if(! probedDevicesListHead)
+ return -1;
+
+ if(cds_list_empty(probedDevicesListHead))
+ return 0;
+
+ cds_list_for_each_entry(currentProbedDevice, probedDevicesListHead, node) {
+ if(currentProbedDevice->deviceClass == DYNAMIC_PROBED_DEVICE)
+ numberOfDynamicProbedDevicesInList++;
+ }
+
+ return numberOfDynamicProbedDevicesInList;
+}
+
struct InternalHalProbedDevice *HalUtlSearchProbedDeviceDataById(struct cds_list_head *probedDevicesListHead,
char *uid)
{
@@ -467,8 +487,9 @@ json_object *HalUtlGetCompactJsonForSpecificDependencies(afb_api_t apiHandle,
cardNb = requestedProbedDevice->deviceData->extendedCardNb;
wrapRet = wrap_json_pack(&requestedProbedDeviceJ,
- "{s:s s:s}",
+ "{s:s, s:b, s:s}",
"uid", requestedProbedDevice->uid,
+ "available", cardNb ? 1 : 0,
"cardNb", cardNb ? cardNb : "none");
if(wrapRet) {
AFB_API_ERROR(apiHandle,
@@ -771,6 +792,64 @@ json_object *HalUtlGetJsonArrayForAllDependencies(afb_api_t apiHandle,
return requestedDependenciesInfoJ;
}
+json_object *HalUtlGetJsonArrayForAllDependenciesInfoWithHandledDependency(afb_api_t apiHandle,
+ struct cds_list_head *probedDevicesListHead,
+ enum DependencyInfoJsonFormat jsonFormat,
+ char *handledProbedDeviceUid)
+{
+ int err;
+ size_t idx, dependencyNb;
+ char *currentDependencyObjectUidString = NULL;
+
+ json_object *requestedDependenciesInfoJ, *currentDependencyObject;
+
+ if(! apiHandle) {
+ AFB_API_ERROR(apiHandle, "Api handle is not valid");
+ return NULL;
+ }
+
+ if(! probedDevicesListHead) {
+ AFB_API_ERROR(apiHandle, "Probed device list is not valid");
+ return NULL;
+ }
+
+ if(cds_list_empty(probedDevicesListHead)) {
+ AFB_API_INFO(apiHandle, "Probed device list is empty");
+ return NULL;
+ }
+
+ if(! handledProbedDeviceUid) {
+ AFB_API_ERROR(apiHandle, "Probed device uid is not valid");
+ return NULL;
+ }
+
+ requestedDependenciesInfoJ = HalUtlGetJsonArrayForAllDependencies(apiHandle,
+ probedDevicesListHead,
+ jsonFormat);
+ if(! requestedDependenciesInfoJ) {
+ AFB_API_ERROR(apiHandle, "Didn't succeed get all devices (dependencies) info");
+ return NULL;
+ }
+
+ dependencyNb = json_object_array_length(requestedDependenciesInfoJ);
+ for(idx = 0; idx < dependencyNb; idx++) {
+ currentDependencyObject = json_object_array_get_idx(requestedDependenciesInfoJ, idx);
+
+ err = wrap_json_unpack(currentDependencyObject, "{s:s}", "uid", &currentDependencyObjectUidString);
+ if(err) {
+ AFB_API_ERROR(apiHandle, "Dependency object is malformed (no uid key)");
+ return NULL;
+ }
+
+ if(! strcmp(handledProbedDeviceUid, currentDependencyObjectUidString))
+ json_object_object_add(currentDependencyObject, "handled", json_object_new_boolean(1));
+ else
+ json_object_object_add(currentDependencyObject, "handled", json_object_new_boolean(0));
+ }
+
+ return requestedDependenciesInfoJ;
+}
+
/*******************************************************************************
* Internal Hal - Streams data handling functions *
******************************************************************************/