Beispiel #1
0
static int
irange_buffer_open(struct sol_flow_node *node, void *data,
    const struct sol_flow_node_options *options)
{
    struct irange_buffer_data *mdata = data;
    const struct sol_flow_node_type_int_buffer_options *opts =
        (const struct sol_flow_node_type_int_buffer_options *)options;

    mdata->node = node;
    mdata->cur_len = 0;

    SOL_FLOW_NODE_OPTIONS_SUB_API_CHECK
        (options, SOL_FLOW_NODE_TYPE_INT_BUFFER_OPTIONS_API_VERSION, -EINVAL);

    SOL_INT_CHECK(opts->timeout.val, < 0, -EINVAL);
    SOL_INT_CHECK(opts->samples.val, == 0, -EINVAL);

    mdata->n_samples = opts->samples.val;
    mdata->timeout = opts->timeout.val;
    mdata->normalize_cb = sol_str_table_ptr_lookup_fallback
                              (table, sol_str_slice_from_str(opts->operation), _normalize_mean);

    mdata->input_queue = calloc(mdata->n_samples, sizeof(*mdata->input_queue));
    SOL_NULL_CHECK(mdata->input_queue, -ENOMEM);

    if (mdata->timeout > 0)
        mdata->timer = sol_timeout_add(mdata->timeout, _timeout, mdata);

    return 0;
}
Beispiel #2
0
static inline const void *
sol_mavlink_parse_addr_protocol(const char *str, struct sol_str_slice *addr, int *port)
{
    struct sol_vector tokens;
    struct sol_str_slice slice = sol_str_slice_from_str(str);
    const void *init;

    tokens = sol_str_slice_split(slice, ":", 0);
    if (tokens.len <= 1) {
        SOL_ERR("Invalid addr string, it must specify at least <prot>:<addr>");
        return NULL;
    }

    init = sol_str_table_ptr_lookup_fallback
            (protocol_table, STR_SLICE_VAL(sol_vector_get(&tokens, 0)),
            sol_mavlink_init_tcp);
    if (!init) {
        SOL_ERR("Invalid protocol");
        goto err;
    }

    *addr = STR_SLICE_VAL(sol_vector_get(&tokens, 1));

    if (tokens.len >= 3)
        sol_str_slice_to_int(STR_SLICE_VAL(sol_vector_get(&tokens, 2)), port);

    sol_vector_clear(&tokens);

    return init;

err:
    sol_vector_clear(&tokens);
    return NULL;
}