src/core/main.c
src/core/sig-handler.c
src/core/udev.c
+ src/core/resource-core.c
src/proc/cpu-info.c
src/time/time-handler.c
)
#include "shared/common.h"
#include "shared/devices.h"
#include <libsyscommon/libgdbus.h>
+#include <libsyscommon/resource-manager.h>
#include <libsyscommon/list.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
static guint delayed_init_timer;
+static int delayed_init_done_callback_id;
#define DELAYED_INIT_WAIT_TIME 30 /* second */
#define DEFAULT_DELAYED_INIT_VALUE (guint)0x0DEF0DEF
delayed_init_timer = 0;
}
+static void delayed_init_done_callback(int resource_type,
+ int resource_id, int attr_id, const void *data, void *user_data, int count)
+{
+ int done;
+
+ if (!data)
+ return;
+
+ done = *(const int *) data;
+ if (!done)
+ return;
+
+ delayed_init_stop();
+
+ syscommon_resman_unsubscribe_event(delayed_init_done_callback_id);
+ delayed_init_done_callback_id = 0;
+}
+
static int delayed_init_done(void *data)
{
static int done;
delayed_init_stop();
delayed_init_timer = 0;
+ syscommon_resman_unsubscribe_event(delayed_init_done_callback_id);
+
done = delayed_init_done(NULL);
if (done)
return G_SOURCE_REMOVE;
_I("delayed init");
done = 1;
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_CORE),
+ DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, 1);
syscommon_notifier_emit_notify_once(DEVICED_NOTIFIER_DELAYED_INIT, (void *)&done);
return G_SOURCE_REMOVE;
_I("restart booting done");
return;
}
+
+ syscommon_resman_subscribe_resource_attribute_event(DEVICED_RESOURCE_TYPE_CORE,
+ DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, delayed_init_done_callback,
+ NULL, &delayed_init_done_callback_id);
syscommon_notifier_subscribe_notify(DEVICED_NOTIFIER_DELAYED_INIT, delayed_init_done);
delayed_init_timer = g_timeout_add_seconds(DELAYED_INIT_WAIT_TIME,
delayed_init_timer_cb, NULL);
--- /dev/null
+#include <assert.h>
+
+#include <libsyscommon/resource-manager.h>
+#include <libsyscommon/resource-type.h>
+#include <system/syscommon-plugin-deviced-core.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
+#include <system/syscommon-plugin-deviced-common-interface.h>
+
+#include "shared/common.h"
+
+static bool delayed_init_done = false;
+
+static int get_core_attr_data(int resource_id,
+ const struct syscommon_resman_resource_attribute *attr, void *data)
+{
+ assert(attr);
+ assert(data);
+
+ switch (attr->id) {
+ case DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE:
+ *(int *) data = delayed_init_done;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int set_core_attr_data(int resource_id,
+ const struct syscommon_resman_resource_attribute *attr,
+ const void *data, int count)
+{
+ assert(attr);
+ assert(data);
+
+ switch (attr->id) {
+ case DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE:
+ {
+ delayed_init_done = *(const int *) data;
+ }
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static const struct syscommon_resman_resource_attribute core_attrs[] = {
+ {
+ .name = "DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE",
+ .id = DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE,
+ .type = SYSCOMMON_RESMAN_DATA_TYPE_INT,
+ .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+ .ops = {
+ .get = get_core_attr_data,
+ .set = set_core_attr_data,
+ .is_supported = syscommon_resman_resource_attr_supported_always,
+ },
+ },
+};
+
+static const struct syscommon_resman_resource_driver deviced_core_driver = {
+ .name = "core",
+ .type = DEVICED_RESOURCE_TYPE_CORE,
+ .flag = SYSCOMMON_RESMAN_RESOURCE_DRIVER_FLAG_COUNT_ONLY_ONE,
+ .attrs = core_attrs,
+ .num_attrs = ARRAY_SIZE(core_attrs),
+};
+SYSCOMMON_RESMAN_RESOURCE_DRIVER_REGISTER(&deviced_core_driver);
#include <eventsystem.h>
#include <libsyscommon/libgdbus.h>
#include <libsyscommon/libsystemd.h>
+#include <libsyscommon/resource-manager.h>
#include <libsyscommon/list.h>
#include <libsyscommon/file.h>
#include <libsyscommon/ini-parser.h>
+#include <system/syscommon-plugin-deviced-core-interface.h>
#include <system/syscommon-plugin-deviced-power-interface.h>
#include <hal/device/hal-board.h>
return;
}
CRITICAL_LOG("System session is ready.");
+ syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_CORE),
+ DEVICED_CORE_ATTR_INT_DELAYED_INIT_DONE, 1);
syscommon_notifier_emit_notify_once(DEVICED_NOTIFIER_DELAYED_INIT, &system_done);
} else if (strcmp(name, SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED) == 0) {