Example #1
0
static int
platform_service_name_process(struct sol_flow_node *node, void *data,
    uint16_t port, uint16_t conn_id, const struct sol_flow_packet *packet)
{
    struct platform_service_data *mdata = data;
    const char *name;
    int r;

    r = sol_flow_packet_get_string(packet, &name);
    SOL_INT_CHECK(r, < 0, r);
    if (mdata->service_name) {
        sol_platform_del_service_monitor(on_service_state_changed,
            mdata->service_name, mdata);
    }

    r = sol_util_replace_str_if_changed(&mdata->service_name, name);
    SOL_INT_CHECK(r, < 0, r);

    sol_platform_add_service_monitor(on_service_state_changed,
        mdata->service_name, mdata);
    mdata->state = sol_platform_get_service_state(mdata->service_name);

    return sol_flow_send_boolean_packet(node,
        SOL_FLOW_NODE_TYPE_PLATFORM_SERVICE__OUT__ACTIVE,
        (mdata->state == SOL_PLATFORM_SERVICE_STATE_ACTIVE));
}
Example #2
0
static bool
on_timeout_cmd(void *data)
{
    const char *cmd;
    const char *param;

    cmd = cmds[cur_cmd++];
    param = cmds[cur_cmd++];

    printf("Firing new command: %s %s\n", cmd, param);

    if (!strcmp(cmd, "monitor"))
        sol_platform_add_service_monitor(on_service_changed, param, NULL);
    else if (!strcmp(cmd, "stop-monitor"))
        sol_platform_del_service_monitor(on_service_changed, param, NULL);
    else if (!strcmp(cmd, "start"))
        sol_platform_start_service(param);
    else if (!strcmp(cmd, "stop"))
        sol_platform_stop_service(param);
    else if (!strcmp(cmd, "restart"))
        sol_platform_restart_service(param);
    else if (!strcmp(cmd, "target"))
        sol_platform_set_target(param);

    if (n_cmds - cur_cmd >= 2)
        return true;

    timeout_handle = NULL;
    return false;
}
Example #3
0
static int
machine_id_start(const struct sol_platform_linux_micro_module *mod,
    const char *service)
{
    int ret = 0;
    static const char *FSTAB = "fstab";
    enum sol_platform_service_state state = SOL_PLATFORM_SERVICE_STATE_ACTIVE;

    name = service;

    if (done)
        return 0;

    /* If fstab is present and functional, wait for it to go up for
     * this to run. If it's not, try to do machine-id's business
     * nonetheless */
    ret = sol_platform_add_service_monitor
            (on_fstab_service_state_changed, FSTAB, mod);
    if (ret < 0)
        return run_do();
    ret = sol_platform_start_service(FSTAB);
    if (ret < 0) {
        sol_platform_del_service_monitor
            (on_fstab_service_state_changed, FSTAB, NULL);
        return run_do();
    }

    state = sol_platform_get_service_state(FSTAB);
    if (state == SOL_PLATFORM_SERVICE_STATE_ACTIVE)
        return run_do();

    return 0; /* wait for dep to activate */
}
Example #4
0
static void
platform_service_close(struct sol_flow_node *node, void *data)
{
    struct platform_service_data *mdata = data;

    sol_platform_del_service_monitor(on_service_state_changed, mdata->service_name, mdata);

    free(mdata->service_name);
}
Example #5
0
static void
shutdown(void)
{
    const char **itr;

    if (gpio)
        sol_gpio_close(gpio);
    sol_timeout_del(timeout);

    for (itr = services; *itr != NULL; itr++)
        sol_platform_del_service_monitor(on_service_change, *itr, NULL);
    sol_platform_del_state_monitor(on_platform_state_change, NULL);
}
Example #6
0
static int
machine_id_stop(const struct sol_platform_linux_micro_module *mod,
    const char *service,
    bool force_immediate)
{
    static const char *FSTAB = "fstab";

    sol_platform_del_service_monitor
        (on_fstab_service_state_changed, FSTAB, NULL);

    sol_platform_linux_micro_inform_service_state
        (name, SOL_PLATFORM_SERVICE_STATE_INACTIVE);

    return 0;
}
Example #7
0
static int
bluetooth_stop(const struct sol_platform_linux_micro_module *mod,
    const char *service,
    bool force_immediate)
{
    static const char *DBUS = "dbus";
    int err = 0;

    if (!fork_run)
        return 0;

    if (!force_immediate)
        err = sol_platform_linux_fork_run_send_signal(fork_run, SIGTERM);
    else {
        sol_platform_linux_fork_run_stop(fork_run);
        fork_run = NULL;
    }

    sol_platform_del_service_monitor
        (on_dbus_service_state_changed, DBUS, NULL);

    return err;
}
Example #8
0
static int
bluetooth_start(const struct sol_platform_linux_micro_module *mod,
    const char *service)
{
    int ret = 0;
    static const char *DBUS = "dbus";
    enum sol_platform_service_state state = SOL_PLATFORM_SERVICE_STATE_ACTIVE;

    name = service;

    if (fork_run)
        return 0;

    ret = sol_platform_add_service_monitor
            (on_dbus_service_state_changed, DBUS, mod);
    SOL_INT_CHECK_GOTO(ret, < 0, err);

    ret = sol_platform_start_service(DBUS);
    if (ret < 0) {
        SOL_WRN("D-Bus service is a dependency for bluetooth and could"
            " not be started");
        sol_platform_del_service_monitor
            (on_dbus_service_state_changed, DBUS, NULL);
        goto err;
    }

    state = sol_platform_get_service_state(DBUS);
    if (state == SOL_PLATFORM_SERVICE_STATE_ACTIVE)
        return fork_run_do();

    return 0; /* wait for dep to activate */

err:
    sol_platform_linux_micro_inform_service_state
        (service, SOL_PLATFORM_SERVICE_STATE_FAILED);
    return ret;
}