Ejemplo n.º 1
0
static int
two_port_process(struct sol_flow_node *node, void *data, uint16_t port_in, uint16_t port_out, const struct sol_flow_packet *packet, int (*func)(unsigned char, unsigned char))
{
    struct bitwise_data *mdata = data;
    int r;
    unsigned char in_value;
    unsigned char out_value;

    r = sol_flow_packet_get_byte(packet, &in_value);
    SOL_INT_CHECK(r, < 0, r);

    if (port_in) {
        mdata->in1 = in_value;
        mdata->in1_init = true;
    } else {
        mdata->in0 = in_value;
        mdata->in0_init = true;
    }

    if (!(mdata->in0_init && mdata->in1_init))
        return 0;

    out_value = func(mdata->in0, mdata->in1);

    return sol_flow_send_byte_packet(node, port_out, out_value);
}
Ejemplo n.º 2
0
static void
byte_receiver(void *data, uint32_t id, struct sol_blob *message)
{
    struct sol_flow_node *node = data;

    sol_flow_send_byte_packet(node,
        SOL_FLOW_NODE_TYPE_IPM_BYTE_READER__OUT__OUT,
        *(unsigned char *)message->mem);
    sol_blob_unref(message);
}
Ejemplo n.º 3
0
/*
 *----------------------- byte --------------------------
 */
static void
byte_read_data(void *data, int fd)
{
    struct unix_socket_data *mdata = data;
    uint8_t val;

    if (FILL_BUFFER(fd, val) < 0)
        return;

    sol_flow_send_byte_packet(mdata->node,
        SOL_FLOW_NODE_TYPE_UNIX_SOCKET_BYTE_READER__OUT__OUT, val);
}
Ejemplo n.º 4
0
static int
constant_byte_open(struct sol_flow_node *node, void *data, const struct sol_flow_node_options *options)
{
    const struct sol_flow_node_type_constant_byte_options *opts;

    SOL_FLOW_NODE_OPTIONS_SUB_API_CHECK(options,
        SOL_FLOW_NODE_TYPE_CONSTANT_BYTE_OPTIONS_API_VERSION, -EINVAL);
    opts = (const struct sol_flow_node_type_constant_byte_options *)options;

    return sol_flow_send_byte_packet(node,
        SOL_FLOW_NODE_TYPE_CONSTANT_BYTE__OUT__OUT, opts->value);
}
Ejemplo n.º 5
0
static int
not_process(struct sol_flow_node *node, void *data, uint16_t port, uint16_t conn_id, const struct sol_flow_packet *packet)
{
    int r;
    unsigned char in_value;
    unsigned char out_value;

    r = sol_flow_packet_get_byte(packet, &in_value);
    SOL_INT_CHECK(r, < 0, r);

    out_value = ~in_value;
    return sol_flow_send_byte_packet(node, SOL_FLOW_NODE_TYPE_BYTE_BITWISE_NOT__OUT__OUT, out_value);
}
Ejemplo n.º 6
0
static int
byte_filter_process(struct sol_flow_node *node, void *data, uint16_t port, uint16_t conn_id, const struct  sol_flow_packet *packet)
{
    unsigned char value;
    int r;
    struct byte_filter_data *mdata = data;

    r = sol_flow_packet_get_byte(packet, &value);
    SOL_INT_CHECK(r, < 0, r);

    if (value >= mdata->min && value <= mdata->max ) {
        return sol_flow_send_byte_packet(node, SOL_FLOW_NODE_TYPE_BYTE_FILTER__OUT__OUT, value);
    }
    return 0;
}
Ejemplo n.º 7
0
/*
 * WARNING: Do NOT use it for anything else than test purposes.
 */
static int
random_byte_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;
    uint8_t value;
    int r;

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

    return sol_flow_send_byte_packet(node,
        SOL_FLOW_NODE_TYPE_RANDOM_BYTE__OUT__OUT,
        value);
}
Ejemplo n.º 8
0
static int
convert_char(struct sol_flow_node *node, void *data, uint16_t port, uint16_t conn_id, const struct sol_flow_packet *packet)
{
    const char *in_value;
    int c_index, r;
    unsigned char byte = 0;

    r = sol_flow_packet_get_string(packet, &in_value);
    SOL_INT_CHECK(r, < 0, r);

    c_index = in_value[0];
    if (c_index != '\0' && c_index != ' ') {
        byte = conversion_table[c_index];
        if (!byte) {
            sol_flow_send_error_packet(node, EINVAL,
                "Char '%c' can't be represented with 7 segments.", c_index);
            return 0;
        }
    }

    return sol_flow_send_byte_packet(node,
        SOL_FLOW_NODE_TYPE_LED_7SEG_CHAR_TO_BYTE__OUT__OUT,
        byte);
}