summaryrefslogtreecommitdiffstats
path: root/src/platform-info-devices.h
diff options
context:
space:
mode:
authorFarshid Monhaseri <monhaseri.f@gmail.com>2020-11-10 13:05:37 +0330
committerFarshid Monhaseri <monhaseri.f@gmail.com>2020-11-10 09:55:46 +0000
commit172db50c33beeb53f8e75c115699179be880b960 (patch)
treeeb0b124e43cf409c4b12b72a4df1e12d3219936d /src/platform-info-devices.h
parente40da34d561aa802ea8f1d8f5bf7b5898f84b083 (diff)
Add device monitoring feature (hotplug device detection)
Changes: - Implement libudev 'monitor' interface to detect hotplug devices. - Forward udev rules as AFB 'subscribe' args to udev_monitoring objects. - Filter retrieved property fields through 'mask' argument from 'subscribe' args. - Generate detached threads (event loop) and data context for each client, so every user can subscribe for device events with their own udev rules and receive their desired device parameters. Bug-AGL: SPEC-3512 Signed-off-by: Farshid Monhaseri <monhaseri.f@gmail.com> Change-Id: I0fc007d9707deaf39d21147aa8240fde302f5f9e
Diffstat (limited to 'src/platform-info-devices.h')
-rw-r--r--src/platform-info-devices.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/platform-info-devices.h b/src/platform-info-devices.h
new file mode 100644
index 0000000..ad658f9
--- /dev/null
+++ b/src/platform-info-devices.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2020 "IoT.bzh"
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PLATFORM_INFO_DEVICE_H
+#define PLATFORM_INFO_DEVICE_H
+
+#include <afb/afb-binding.h>
+#include "json-c/json.h"
+
+#define PINFO_OK (0)
+#define PINFO_ERR (-1)
+
+struct udev;
+struct udev_monitor;
+struct pthread_t;
+
+typedef struct {
+ struct json_object* info;
+ int client_count;
+}pinfo_api_ctx_t;
+
+typedef struct {
+ struct udev *udev_ctx;
+ struct udev_monitor *umon_hndl;
+ struct json_object *filter;
+ struct json_object *mask;
+ pinfo_api_ctx_t *api_ctx;
+ void(*umon_cb)(void* client_ctx, struct json_object* jdevice);
+ pthread_t th;
+ afb_event_t ev_devs_changed;
+}pinfo_client_ctx_t;
+
+
+int pinfo_device_monitor(afb_req_t req);
+
+#endif