Exemple #1
0
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);
}
Exemple #2
0
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;
}