int main(int argc, char **argv) { int ret, size; int fd = -1, fdv = -1, ls; struct input_event ev; struct pollfd fds[3]; int num_fds = 0; struct sigaction sa_int; /* * initialize our state */ daemonize(argv[0]); #ifdef DEBUG_PRINT console = fopen("/dev/console", "w"); if(console == NULL) exit(1); #endif if (sound_connect()) goto fail_sound; running = 0; if (backlight_connect() == 0) backlight = 1; fd = open_input_device("LF1000 Keyboard"); if (fd < 0) { dbprintf("can't open input device\n"); goto fail_kb; } fds[LFD_KEY_PRESS].fd = fd; fds[LFD_KEY_PRESS].events = POLLIN; num_fds++; /* volume fd open */ fdv = open_input_device("OpenLF Didj volume interface"); if (fdv < 0) { dbprintf("can't open volume input device\n"); goto fail_kb; } fds[LFD_VOLUME].fd = fdv; fds[LFD_VOLUME].events = POLLIN; num_fds++; ls = create_listening_socket(LFD_SOCKET_PATH); if (ls < 0) { dbprintf("can't create listening socket\n"); goto fail_sock; } fcntl(ls, F_SETFL, O_NONBLOCK); fds[LFD_CONTROL_SOCKET].fd = ls; fds[LFD_CONTROL_SOCKET].events = POLLIN; num_fds++; mv = battery_get_mv(); /* * trap SIGTERM so that we clean up before exiting */ running = 1; sigemptyset(&sa_int.sa_mask); sa_int.sa_handler = handle_signal; sa_int.sa_flags = 0; if (sigaction(SIGTERM, &sa_int, NULL) == -1) { dbprintf("can't trap SIGTERM\n"); goto fail_sig; } if (sigaction(SIGINT, &sa_int, NULL) == -1) { dbprintf("can't trap SIGINT\n"); goto fail_sig; } /* * monitor */ while (running) { ret = poll(fds, num_fds, 1000); if (ret == 0) { /* timeout */ mv = battery_get_mv(); } else if (ret > 0) { if (fds[LFD_KEY_PRESS].revents & POLLIN) { size = read(fd, &ev, sizeof(ev)); if (ev.type == EV_KEY && ev.value == 1) handle_key(ev.code); } if(fds[LFD_VOLUME].revents & POLLIN) { size = read(fdv, &ev, sizeof(ev)); if (ev.type == EV_ABS) handle_volume(ev.value); } if (fds[LFD_CONTROL_SOCKET].revents & POLLIN) handle_control_socket(ls); } } dbprintf("exiting...\n"); close(ls); close(fd); sound_disconnect(); #ifdef DEBUG_PRINT fclose(console); #endif exit(0); fail_sig: close(ls); fail_sock: fail_sound: close(fd); close(fdv); fail_kb: sound_disconnect(); #ifdef DEBUG_PRINT fclose(console); #endif exit(1); }
bool Skin::setSkin (const QString& path) { DirIteratorBase *iter = DirIteratorBase::open(path); if (iter == 0) { return false; } m_path = path; m_items.clear(); m_letterMap.clear(); m_smallNumbers.clear (); m_numbers.clear(); m_pledit_txt.clear(); m_playlist.clear (); bool b_main = false, b_titlebar = false, b_posbar = false, b_volume = false; bool b_balance = false, b_cbuttons = false, b_monoster = false; bool b_playpaus = false, b_shufrep = false, b_text = false; bool b_numbers = false, b_eqmain = false, b_eq_ex = false; bool b_pledit = false, b_pledit_txt = false; QPixmap p_eq_ex; QPixmap p_numbers; QPixmap p_volume; QString entry; while (!(entry = iter->next ().toLower ()).isEmpty ()) { if ((entry = QFileInfo (entry).fileName ()).isEmpty ()) { // workaround to ignore pathes in archives continue; } if (entry.endsWith (".txt")) { QPointer<QIODevice> d = iter->entry (); if (d == 0) continue; d->setTextModeEnabled (true); if ( entry == "pledit.txt") { b_pledit_txt = handle_pledit_txt (d); } continue; } else if (entry.endsWith (".cur")) { // Cursor files are not supported yet continue; } else { entry = entry.section(".", 0, 0); if (entry == "main") { b_main = handle_main (iter->pixmapEntry ()); } else if (entry == "titlebar") { b_titlebar = handle_titlebar (iter->pixmapEntry ()); } else if (entry == "posbar" ) { b_posbar = handle_posbar (iter->pixmapEntry ()); } else if (entry == "volume") { p_volume = iter->pixmapEntry (); b_volume = handle_volume (p_volume); } else if (entry == "balance") { b_balance = handle_balance (iter->pixmapEntry ()); } else if (entry == "cbuttons") { b_cbuttons = handle_cbuttons (iter->pixmapEntry ()); } else if (entry == "monoster") { b_monoster = handle_monoster (iter->pixmapEntry ()); } else if (entry == "playpaus") { b_playpaus = handle_playpaus (iter->pixmapEntry ()); } else if (entry == "shufrep") { b_shufrep = handle_shufrep (iter->pixmapEntry ()); } else if (entry == "text") { b_text = handle_text (iter->pixmapEntry ()); } else if (entry == "nums_ex") { b_numbers = handle_numbers (iter->pixmapEntry ()); } else if (entry == "numbers") { p_numbers = iter->pixmapEntry (); } else if (entry == "eqmain") { b_eqmain = handle_eqmain (iter->pixmapEntry ()); } else if (entry == "eq_ex") { p_eq_ex = iter->pixmapEntry (); } else if (entry == "pledit") { b_pledit = handle_pledit (iter->pixmapEntry ()); } continue; } } delete iter; if (!b_balance) { // Fallback, use volume image if skin has no balance image handle_balance (p_volume); } if (!b_numbers) { // Fallback if skin has no nums_ex file b_numbers = handle_numbers (p_numbers); } // handle_eq_ex must be called after handle_eqmain if (b_eqmain) { b_eq_ex = handle_eq_ex (p_eq_ex); } if (!(b_main && b_titlebar && b_posbar && b_volume && b_cbuttons && b_monoster && b_playpaus && b_shufrep && b_text && b_numbers && b_eqmain && b_eq_ex && b_pledit && b_pledit_txt)) { // Some debug information to find out why a skin failed to load QStringList list; if (!b_main) { list << "main"; } if (!b_titlebar) { list << "titlebar"; } if (!b_posbar) { list << "posbar"; } if (!b_volume) { list << "volume"; } if (!b_cbuttons) { list << "cbuttons"; } if (!b_monoster) { list << "monoster"; } if (!b_playpaus) { list << "playpaus"; } if (!b_shufrep) { list << "shufrep"; } if (!b_text) { list << "text"; } if (!b_numbers) { list << "numbers/nums_ex"; } if (!b_eqmain) { list << "equmain"; } if (!b_eq_ex) { list << "eq_ex"; } if (!b_pledit) { list << "pledit"; } if (!b_pledit_txt) { list << "pledit.txt"; } qDebug() << "Could not load Skin" << path << ": failed to load files" << list; return false; } return true; }