示例#1
0
SOL_API void
sol_shutdown(void)
{
    if (_init_count == 0) {
        SOL_CRI("sol_init() was not called");
        return;
    }
    _init_count--;
    if (_init_count > 0)
        return;

    SOL_DBG("shutdown");
    sol_ipm_shutdown();
    sol_update_shutdown();
    sol_comms_shutdown();
    sol_flow_shutdown();
    sol_crypto_shutdown();
    sol_blob_shutdown();
    sol_pin_mux_shutdown();
    sol_platform_shutdown();
    mainloop_impl->shutdown();
    sol_modules_clear_cache();

    sol_log_shutdown();
}
示例#2
0
SOL_API int
sol_run(void)
{
    if (_init_count == 0) {
        SOL_CRI("sol_init() was not called");
        return EXIT_FAILURE;
    }
    if (mainloop_running) {
        SOL_CRI("Mainloop already running");
        return EXIT_FAILURE;
    }

    SOL_DBG("run");
    mainloop_running = true;
    mainloop_impl->run();
    return mainloop_return_code;
}
int
sol_mainloop_impl_init(void)
{
    loop = g_main_loop_new(NULL, false);
    if (!loop) {
        SOL_CRI("cannot create mainloop");
        return errno ? -errno : -ENOENT;
    }

    g_unix_signal_add(SIGINT, on_signal, loop);
    g_unix_signal_add(SIGTERM, on_signal, loop);
    return 0;
}
示例#4
0
SOL_API void
sol_quit_with_code(int return_code)
{
    if (_init_count == 0) {
        SOL_CRI("sol_init() was not called");
        return;
    }
    if (!mainloop_running) {
        SOL_DBG("Mainloop was not running");
        return;
    }

    SOL_DBG("quit with code %d", return_code);
    mainloop_return_code = return_code;
    mainloop_running = false;
    mainloop_impl->quit();
}
int
sol_platform_impl_set_target(const char *target)
{
    if (!strncasecmp(target, SOL_PLATFORM_TARGET_POWEROFF, strlen(SOL_PLATFORM_TARGET_POWEROFF))) {
        lpm_set(LPM_POWERDOWN);
        return 0;
    }
    if (!strncasecmp(target, SOL_PLATFORM_TARGET_SUSPEND, strlen(SOL_PLATFORM_TARGET_SUSPEND))) {
        lpm_set(LPM_SLEEP);
        return 0;
    }
    if (!strncasecmp(target, SOL_PLATFORM_TARGET_DEFAULT, strlen(SOL_PLATFORM_TARGET_DEFAULT))) {
        lpm_set(LPM_ON);
        return 0;
    }
    SOL_CRI("Unsupported set target %s.", target);
    return -ENOTSUP;
}
示例#6
0
int
main(int argc, char *argv[])
{
    int r;

    if (!parse_args(argc, argv)) {
        usage(argv[0]);
        return EXIT_FAILURE;
    }

    if (sol_init() < 0) {
        SOL_CRI("Cannot initialize soletta.");
        return EXIT_FAILURE;
    }

    sol_idle_add(startup, NULL);

    r = sol_run();

    shutdown();
    sol_shutdown();

    return r;
}
示例#7
0
SOL_API void
sol_shutdown(void)
{
    if (_init_count == 0) {
        SOL_CRI("sol_init() was not called");
        return;
    }
    _init_count--;
    if (_init_count > 0)
        return;

    SOL_DBG("shutdown");
#ifdef NETWORK
    sol_comms_shutdown();
#endif
#ifdef FLOW_SUPPORT
    sol_flow_shutdown();
#endif
    sol_blob_shutdown();
    sol_pin_mux_shutdown();
    sol_platform_shutdown();
    sol_mainloop_impl_shutdown();
    sol_log_shutdown();
}
int
sol_platform_impl_restart_service(const char *service)
{
    SOL_CRI("Unsupported");
    return -ENOTSUP;
}
int
sol_platform_impl_del_service_monitor(const char *service)
{
    SOL_CRI("Unsupported");
    return -ENOTSUP;
}