static gboolean on_button_interrupt( GIOChannel *channel, GIOCondition condition, gpointer user_data ) { Button* button = object_get_button((Object*)user_data); printf("Power Button pressed\n"); button_emit_button_pressed(button); }
static gboolean on_button_interrupt( GIOChannel *channel, GIOCondition condition, gpointer user_data ) { GError *error = 0; gsize bytes_read = 0; gchar buf[2]; buf[1] = '\0'; g_io_channel_seek_position( channel, 0, G_SEEK_SET, 0 ); GIOStatus rc = g_io_channel_read_chars( channel, buf, 1, &bytes_read, &error ); printf("%s\n",buf); time_t current_time = time(NULL); if (gpio_button.irq_inited) { Button* button = object_get_button((Object*)user_data); if (buf[0] == '0') { printf("Power Button pressed\n"); button_emit_pressed(button); button_set_timer(button,(long)current_time); } else { long press_time = current_time-button_get_timer(button); printf("Power Button released, held for %ld seconds\n",press_time); if (press_time > LONG_PRESS_SECONDS) { button_emit_pressed_long(button); } else { button_emit_released(button); } } } else { gpio_button.irq_inited = true; } return TRUE; }