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); }
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); }
/* *----------------------- 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); }
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); }
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); }
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; }
/* * 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); }
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); }