示例#1
0
static bool
timer_tick(void *data)
{
    struct sol_flow_node *node = data;
    struct boolean_generator_data *mdata = sol_flow_node_get_private_data(node);
    bool out_packet;

    if (*mdata->it == 'T') {
        out_packet = true;
    } else if (*mdata->it == 'F') {
        out_packet = false;
    } else {
        mdata->timer = NULL;
        sol_flow_send_error_packet(node, ECANCELED,
            "Unknown sample: %c. Option 'sequence' must be composed by 'T' and/or 'F' chars.",
            *mdata->it);
        return false;
    }

    sol_flow_send_bool_packet(node, SOL_FLOW_NODE_TYPE_TEST_BOOLEAN_GENERATOR__OUT__OUT,
        out_packet);

    mdata->it++;
    return *mdata->it != '\0';
}
示例#2
0
int
blob_validator_process(
    struct sol_flow_node *node,
    void *data,
    uint16_t port,
    uint16_t conn_id,
    const struct sol_flow_packet *packet)
{
    struct blob_validator_data *mdata = data;
    struct sol_blob *val;
    bool match;
    int r;

    if (mdata->done) {
        sol_flow_send_error_packet(node, ECANCELED,
            "Input stream already deviated from expected data, ignoring packets.");
        return 0;
    }

    r = sol_flow_packet_get_blob(packet, &val);
    SOL_INT_CHECK(r, < 0, r);
    match = (mdata->expected.size == val->size) && memcmp(mdata->expected.mem, val->mem, val->size) == 0;

    sol_flow_send_bool_packet(node, SOL_FLOW_NODE_TYPE_TEST_BOOLEAN_VALIDATOR__OUT__OUT, match);
    mdata->done = true;

    return 0;
}
示例#3
0
void
service_status_cb(void *data, const struct sol_netctl_service *service)
{
    struct sol_flow_node *node = data;
    struct network_service_data *mdata = sol_flow_node_get_private_data(node);
    enum sol_netctl_service_state current_state;
    const char *name;
    int r;

    name = sol_netctl_service_get_name(service);

    if (!name || strcmp(name, mdata->service_name))
        return;

    current_state = sol_netctl_service_get_state(service);
    if (current_state == mdata->state)
        return;

    r = sol_flow_send_string_packet(node,
        SOL_FLOW_NODE_TYPE_NETCTL_SERVICE__OUT__OUT,
        sol_netctl_service_state_to_str(current_state));
    SOL_INT_CHECK_GOTO(r, < 0, error);

    if (mdata->state == SOL_NETCTL_SERVICE_STATE_ONLINE) {
        r = sol_flow_send_bool_packet(node,
            SOL_FLOW_NODE_TYPE_NETCTL_SERVICE__OUT__ONLINE,
            false);
        SOL_INT_CHECK_GOTO(r, < 0, error);
    }
示例#4
0
static void
check_cb(void *data, int status, const struct sol_update_info *response)
{
    struct sol_flow_node *node = data;
    struct update_data *mdata = sol_flow_node_get_private_data(node);

    if (status < 0) {
        sol_flow_send_error_packet(node, -status,
            "Error while checking for updates: %s", sol_util_strerrora(-status));
        goto end;
    }

#ifndef SOL_NO_API_VERSION
    if (SOL_UNLIKELY(response->api_version != SOL_UPDATE_INFO_API_VERSION)) {
        SOL_WRN("Update info config version '%u' is unexpected, expected '%u'",
            response->api_version, SOL_UPDATE_INFO_API_VERSION);
        return;
    }
#endif

    sol_flow_send_string_packet(node,
        SOL_FLOW_NODE_TYPE_UPDATE_CHECK__OUT__VERSION, response->version);
    sol_flow_send_irange_value_packet(node,
        SOL_FLOW_NODE_TYPE_UPDATE_CHECK__OUT__SIZE, response->size);
    sol_flow_send_bool_packet(node,
        SOL_FLOW_NODE_TYPE_UPDATE_CHECK__OUT__NEED_UPDATE, response->need_update);

end:
    mdata->handle = NULL;
}
示例#5
0
int
int_validator_process(
    struct sol_flow_node *node,
    void *data,
    uint16_t port,
    uint16_t conn_id,
    const struct sol_flow_packet *packet)
{
    struct int_validator_data *mdata = data;
    struct sol_irange val;
    int32_t *op;
    bool match;
    int r;

    if (mdata->done) {
        sol_flow_send_error_packet(node, ECANCELED,
            "Input stream already deviated from expected data, ignoring packets.");
        return 0;
    }
    r = sol_flow_packet_get_irange(packet, &val);
    SOL_INT_CHECK(r, < 0, r);
    op = sol_vector_get(&mdata->values, mdata->next_index);
    match = val.val == *op;
    mdata->next_index++;

    if (mdata->next_index == mdata->values.len || !match) {
        sol_flow_send_bool_packet(node,
            SOL_FLOW_NODE_TYPE_TEST_INT_VALIDATOR__OUT__OUT, match);
        mdata->done = true;
    }
    return 0;
}
示例#6
0
int
float_validator_process(
    struct sol_flow_node *node,
    void *data,
    uint16_t port,
    uint16_t conn_id,
    const struct sol_flow_packet *packet)
{
    struct float_validator_data *mdata = data;
    struct sol_drange input;
    double *op;
    bool match;
    int r;

    if (mdata->done) {
        sol_flow_send_error_packet(node, ECANCELED,
            "Input stream already deviated from expected data, ignoring packets.");
        return 0;
    }

    r = sol_flow_packet_get_drange(packet, &input);
    SOL_INT_CHECK(r, < 0, r);
    op = sol_vector_get(&mdata->values, mdata->next_index);
    SOL_NULL_CHECK(op, -EINVAL);
    match = sol_util_double_eq(input.val, *op);
    mdata->next_index++;

    if (mdata->next_index == mdata->values.len || !match) {
        sol_flow_send_bool_packet(node, SOL_FLOW_NODE_TYPE_TEST_FLOAT_VALIDATOR__OUT__OUT,
            match);
        mdata->done = true;
    }
    return 0;
}
示例#7
0
文件: ipm.c 项目: Learn-iot/soletta
static void
boolean_receiver(void *data, uint32_t id, struct sol_blob *message)
{
    struct sol_flow_node *node = data;

    sol_flow_send_bool_packet(node,
        SOL_FLOW_NODE_TYPE_IPM_BOOLEAN_READER__OUT__OUT, *(bool *)message->mem);
    sol_blob_unref(message);
}
示例#8
0
static void
on_toggle_changed(GtkRange *range, gpointer data)
{
    bool value;
    struct gtk_common_data *mdata = data;

    value =  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mdata->widget));

    sol_flow_send_bool_packet(mdata->node,
        SOL_FLOW_NODE_TYPE_GTK_TOGGLE__OUT__OUT,
        value);
}
示例#9
0
static void
on_minutes_packet(void *data, struct sol_flow_node *n, uint16_t port, const struct sol_flow_packet *packet)
{
    int32_t value = get_int32_packet_and_log(n, port, packet);
    static int i = 0;

    if (value < 0)
        return;

    /* do some logic.
     *
     * Here we will disconnect the 'OUT' output port from 'seconds',
     * this would have single-node to stop delivering packets on that
     * port to 'on_seconds_packet()', if running with
     * SOL_LOG_LEVELS=sol-flow:4 you'd see that packets were dropped.
     *
     * And we send a boolean packet with value 'false' to the input
     * port 'ENABLED' of 'seconds' node so it will stop emitting these
     * packets.
     *
     * in the next minute we reverse it, re-connecting the 'OUT' port
     * and sending true to 'ENABLED'.
     */
    i++;
    if (i == 1)
        return; /* first time let it go */
    if (i % 2 == 0) {
        puts("stop seconds and disconnect output port, will change in 1 minute");
        sol_flow_single_disconnect_port_out(seconds, seconds_port_out);
        sol_flow_send_bool_packet(seconds, seconds_port_enabled, false);
    } else {
        puts("start seconds and connect output port, will change in 1 minute");
        sol_flow_single_connect_port_out(seconds, seconds_port_out);
        sol_flow_send_bool_packet(seconds, seconds_port_enabled, true);
    }
}
示例#10
0
/*
 * WARNING: Do NOT use it for anything else than test purposes.
 */
static int
random_boolean_generate(struct sol_flow_node *node, void *data, uint16_t port, uint16_t conn_id, const struct sol_flow_packet *packet)
{
    struct random_node_data *mdata = data;
    bool value;
    int r;

    r = sol_random_get_bool(mdata->engine, &value);
    if (r < 0)
        return r;

    return sol_flow_send_bool_packet(node,
        SOL_FLOW_NODE_TYPE_RANDOM_BOOLEAN__OUT__OUT,
        value);
}
示例#11
0
static void
install_cb(void *data, int status)
{
    struct sol_flow_node *node = data;
    struct update_data *mdata = sol_flow_node_get_private_data(node);

    if (status < 0) {
        sol_flow_send_error_packet(node, -status,
            "Error while installing update: %s", sol_util_strerrora(-status));
    }

    sol_flow_send_bool_packet(node,
        SOL_FLOW_NODE_TYPE_UPDATE_INSTALL__OUT__SUCCESS, status == 0);

    mdata->handle = NULL;
}