static void gpio_process_cb(void *data) { struct sol_gpio *gpio = data; bool val; val = sol_gpio_read(gpio); gpio->irq.cb((void *)gpio->irq.data, gpio, val); }
/* GPIO READER ********************************************************************/ static void gpio_reader_event(void *data, struct sol_gpio *gpio) { int value; struct sol_flow_node *node = data; struct gpio_data *mdata = sol_flow_node_get_private_data(node); value = sol_gpio_read(mdata->gpio); SOL_INT_CHECK(value, < 0); sol_flow_send_boolean_packet(node, SOL_FLOW_NODE_TYPE_GPIO_READER__OUT__OUT, value); }
static bool gpio_timeout_cb(void *data) { struct sol_gpio *gpio = data; int val; val = sol_gpio_read(gpio); if (gpio->irq.last_value != val) { gpio->irq.last_value = val; if ((val && gpio->irq.on_raise) || (!val && gpio->irq.on_fall)) gpio->irq.cb((void *)gpio->irq.data, gpio, val); } return true; }