Помогите разобраться с источниками событий (GSource, GIOSource), контекстами (GMainContext) и обработчиками этих событий.
У меня есть Beaglebone, на котором я хочу обрабатывать прерывание изменения уровня на одном из GPIO. Вот пример того как это делается на C. Для Ъ:
struct pollfd pfd[1];
pfd[0].fd = open ("/sys/class/gpio/gpio34/value", O_RDONLY);
pfd[0].event = POLLPRI;
pfd[0].revent = 0;
while (1) {
poll (pfd, 1, -2);
something_useful ();
}
А теперь вопрос, как это сделать с использованием GLib, желательно даже на Vala, но и на C пойдёт.
Правильно я понимаю, что «вместо» while (1) будет GMainLoop? Правильно ли я понимаю, что нужно в каком-то контексте завести источник событий (GIOSource?) ? А ещё нужно к чему-то прицепить g_source_add_poll() и g_source_set_callback(). Может кто-нибудь показать пример кода?