コード例 #1
0
ファイル: irman.c プロジェクト: jetlive/xynth
/* simply a wrapper for ir_close_port() */
static int ir_finish (void)
{
	if (!ir_enabled) {
		errno = ENXIO;
		return -1;
	}
	ir_enabled = 0;
	return ir_close_port();
}
コード例 #2
0
ファイル: configure.c プロジェクト: sedwards/xmms3
static void irconf_control_cancel_cb(GtkWidget * w, gpointer data)
{
	keepConfGoing = FALSE;
	ir_close_port();
	if (ir_was_enabled)
		irapp_init_port(ircfg.device);
	irconf_is_going = FALSE;
	gtk_widget_destroy(irconf_controlwin);
}
コード例 #3
0
ファイル: configure.c プロジェクト: sedwards/xmms3
static void irconf_ok_cb(GtkWidget * w, gpointer data)
{
	ircfg.device = g_strdup(gtk_entry_get_text(GTK_ENTRY(dev_entry)));
	ircfg.codelen = atoi(gtk_entry_get_text(GTK_ENTRY(codelen_entry)));
	if(ircfg.codelen > IR_MAX_CODE_LEN)
	    ircfg.codelen = IR_MAX_CODE_LEN;
	if(ircfg.codelen < 0)
	    ircfg.codelen = 0;
	/* Re-initialize remote using new settings */
	ir_close_port();
	ir_open_port(ircfg.device);
	irapp_save_config();
	gtk_widget_destroy(irconf_mainwin);
}
コード例 #4
0
ファイル: configure.c プロジェクト: sedwards/xmms3
static void irconf_control_ok_cb(GtkWidget * w, gpointer data)
{
	gint i;

	keepConfGoing = FALSE;
	ir_close_port();
	if (ir_was_enabled)
		irapp_init_port(ircfg.device);
	irconf_is_going = FALSE;
	if (!strcmp(irbutton_to_edit, ir_control[0]))
		ircfg.button_play = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[1]))
		ircfg.button_stop = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[2]))
		ircfg.button_pause = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[3]))
		ircfg.button_prev = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[4]))
		ircfg.button_next = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[5]))
		ircfg.button_volup = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[6]))
		ircfg.button_seekb = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[7]))
		ircfg.button_seekf = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[8]))
		ircfg.button_voldown = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[9]))
		ircfg.button_shuffle = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[10]))
		ircfg.button_repeat = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[11]))
		ircfg.button_playlist = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else if (!strcmp(irbutton_to_edit, ir_control[12]))
		ircfg.button_plus100 = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));
	else
		for (i = 0; i < 10; i++)
			if (!strcmp(irbutton_to_edit, ir_playlist[i]))
				ircfg.button[i] = g_strdup(gtk_entry_get_text(GTK_ENTRY(ircode_entry)));

	gtk_widget_destroy(irconf_controlwin);
}
コード例 #5
0
ファイル: ir.c プロジェクト: sedwards/xmms3
/* Our main thread */
static void *xmms_irapp_routine(void *arg)
{
	unsigned char *code;
	char *text;
	gint playlist_time, playlist_pos, output_time, vl, vr, i;
	gint ir_numpress = -1;
	gint ir_hundreds = 0;
	gboolean ir_playlist_mode = FALSE;
	GList *ir_playlist;
	GTimer *timer1, *timer2;

#define S_PAUSE	0.2
#define L_PAUSE 0.4
#define PL_PAUSE 2.0

	timer1 = g_timer_new();
	timer2 = g_timer_new();
	g_timer_start(timer1);

	while (keepGoing)
	{
		if (!irconf_is_going)
		{
			code = ir_poll_code();
			if (code)
			{
				text = ir_code_to_text(code);
				if (!strcmp(text, ircfg.button_play) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_play(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}

				else if (!strcmp(text, ircfg.button_stop) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_stop(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_pause) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_pause(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_shuffle) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_toggle_shuffle(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_repeat) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_toggle_repeat(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_playlist) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					ir_playlist_mode = !ir_playlist_mode;
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_next) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_playlist_next(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_prev) && g_timer_elapsed(timer1, NULL) > L_PAUSE)
				{
					xmms_remote_playlist_prev(ir_gp.xmms_session);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_seekf) && g_timer_elapsed(timer1, NULL) > S_PAUSE / 2)
				{
					output_time = xmms_remote_get_output_time(ir_gp.xmms_session);
					playlist_pos = xmms_remote_get_playlist_pos(ir_gp.xmms_session);
					playlist_time = xmms_remote_get_playlist_time(ir_gp.xmms_session, playlist_pos);
					if (playlist_time - output_time < 5000)
						output_time = playlist_time - 5000;
					xmms_remote_jump_to_time(ir_gp.xmms_session, output_time + 5000);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_seekb) && g_timer_elapsed(timer1, NULL) > S_PAUSE / 2)
				{
					output_time = xmms_remote_get_output_time(ir_gp.xmms_session);
					if (output_time < 5000)
						output_time = 5000;
					xmms_remote_jump_to_time(ir_gp.xmms_session, output_time - 5000);
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_stop(timer2);
					ir_hundreds = 0;
				}
				else if (!strcmp(text, ircfg.button_volup) && g_timer_elapsed(timer1, NULL) > S_PAUSE)
				{
					xmms_remote_get_volume(ir_gp.xmms_session, &vl, &vr);
					if (vl > 95)
						vl = 95;
					if (vr > 95)
						vr = 95;
					xmms_remote_set_volume(ir_gp.xmms_session, vl + 5, vr + 5);
					g_timer_reset(timer1);
				}
				else if (!strcmp(text, ircfg.button_voldown) && g_timer_elapsed(timer1, NULL) > S_PAUSE)
				{
					xmms_remote_get_volume(ir_gp.xmms_session, &vl, &vr);
					if (vl < 5)
						vl = 5;
					if (vr < 5)
						vr = 5;
					xmms_remote_set_volume(ir_gp.xmms_session, vl - 5, vr - 5);
					g_timer_reset(timer1);
				}
				else if (!strcmp(text, ircfg.button_plus100) && g_timer_elapsed(timer1, NULL) > S_PAUSE)
				{
					ir_hundreds += 1;
					g_timer_reset(timer1);
					g_timer_reset(timer2);
					g_timer_start(timer2);
				}
				else
				{
					for (i = 0; i < 10; i++)
					{
						if (!strcmp(text, ircfg.button[i]) && g_timer_elapsed(timer1, NULL) > S_PAUSE)
						{
							g_timer_reset(timer2);
							if (ir_numpress >= 0)
							{
								g_timer_stop(timer2);
								if (ir_playlist_mode)
								{
									if (strcmp(ircfg.playlist[(10 * ir_numpress) + i], ""))
									{
										ir_playlist = NULL;
										ir_playlist = g_list_append(ir_playlist, ircfg.playlist[(10 * ir_numpress) + i]);
										xmms_remote_play_files(ir_gp.xmms_session, ir_playlist);
										g_list_free(ir_playlist);
									}
									ir_playlist_mode = FALSE;
								}
								else
								{
									ir_numpress = (100 * ir_hundreds) + (10 * ir_numpress) + i;
									if (ir_numpress == 0)
										xmms_remote_set_playlist_pos(ir_gp.xmms_session,
													     xmms_remote_get_playlist_length(ir_gp.xmms_session) - 1);
									else
										xmms_remote_set_playlist_pos(ir_gp.xmms_session, ir_numpress - 1);
								}
								ir_numpress = -1;
								ir_hundreds = 0;
							}
							else
							{
								g_timer_start(timer2);
								ir_numpress = i;
							}
							g_timer_reset(timer1);
						}
					}
				}
			}
			if (g_timer_elapsed(timer2, NULL) > PL_PAUSE)
			{
				if (ir_numpress >= 0 || ir_hundreds > 0)
				{
					if (ir_playlist_mode)
					{
						if (strcmp(ircfg.playlist[ir_numpress], ""))
						{
							ir_playlist = NULL;
							ir_playlist = g_list_append(ir_playlist, ircfg.playlist[ir_numpress]);
							xmms_remote_play_files(ir_gp.xmms_session, ir_playlist);
							g_list_free(ir_playlist);
						}
					}
					else if (ir_numpress <= 0)
						if (ir_hundreds > 0)
							xmms_remote_set_playlist_pos(ir_gp.xmms_session, (100 * ir_hundreds) - 1);
						else
							xmms_remote_set_playlist_pos(ir_gp.xmms_session,
										     xmms_remote_get_playlist_length(ir_gp.xmms_session) - 1);
					else
						xmms_remote_set_playlist_pos(ir_gp.xmms_session, (100 * ir_hundreds) + ir_numpress - 1);
				}
				ir_numpress = -1;
				ir_hundreds = 0;
				ir_playlist_mode = FALSE;
				g_timer_reset(timer2);
				g_timer_stop(timer2);
			}
		}
		ir_usleep(20000L);
	}
	g_timer_destroy(timer1);
	ir_close_port();
	pthread_exit(NULL);
}
コード例 #6
0
ファイル: configure.c プロジェクト: sedwards/xmms3
static void irconf_control_cb(GtkWidget * w, gchar * data)
{
	GtkWidget *vbox, *frame, *table, *button, *box;
	gint i;

	if (!irconf_controlwin && !irconf_playlistwin)
	{
		char *tmp;

		keepConfGoing = TRUE;
		irbutton_to_edit = data;
		irconf_controlwin = gtk_window_new(GTK_WINDOW_DIALOG);
		gtk_signal_connect(GTK_OBJECT(irconf_controlwin), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &irconf_controlwin);
		tmp=g_strdup_printf(_("`%s' Button Setup"),_(data));
		gtk_window_set_title(GTK_WINDOW(irconf_controlwin), tmp);
		g_free(tmp);
		gtk_window_set_policy(GTK_WINDOW(irconf_controlwin), FALSE, FALSE, FALSE);
		gtk_window_set_position(GTK_WINDOW(irconf_controlwin), GTK_WIN_POS_MOUSE);
		gtk_container_border_width(GTK_CONTAINER(irconf_controlwin), 10);

		vbox = gtk_vbox_new(FALSE, 10);
		gtk_container_add(GTK_CONTAINER(irconf_controlwin), vbox);

		frame = gtk_frame_new(_("Enter code or use remote"));
		gtk_container_border_width(GTK_CONTAINER(frame), 5);
		gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);

		table = gtk_table_new(1, 1, FALSE);
		gtk_container_set_border_width(GTK_CONTAINER(table), 5);
		gtk_container_add(GTK_CONTAINER(frame), table);
		gtk_table_set_row_spacings(GTK_TABLE(table), 2);
		gtk_table_set_col_spacings(GTK_TABLE(table), 5);

		ircode_entry = gtk_entry_new();
		gtk_table_attach_defaults(GTK_TABLE(table), ircode_entry, 0, 1, 0, 1);
		if (!strcmp(data, ir_control[0]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_play);
		else if (!strcmp(data, ir_control[1]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_stop);
		else if (!strcmp(data, ir_control[2]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_pause);
		else if (!strcmp(data, ir_control[3]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_prev);
		else if (!strcmp(data, ir_control[4]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_next);
		else if (!strcmp(data, ir_control[5]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_volup);
		else if (!strcmp(data, ir_control[6]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_seekb);
		else if (!strcmp(data, ir_control[7]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_seekf);
		else if (!strcmp(data, ir_control[8]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_voldown);
		else if (!strcmp(data, ir_control[9]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_shuffle);
		else if (!strcmp(data, ir_control[10]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_repeat);
		else if (!strcmp(data, ir_control[11]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_playlist);
		else if (!strcmp(data, ir_control[12]))
			gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button_plus100);
		else
			for (i = 0; i < 10; i++)
				if (!strcmp(data, ir_playlist[i]))
					gtk_entry_set_text(GTK_ENTRY(ircode_entry), ircfg.button[i]);
		gtk_widget_show(ircode_entry);

		box = gtk_hbutton_box_new();
		gtk_button_box_set_layout(GTK_BUTTON_BOX(box), GTK_BUTTONBOX_END);
		gtk_button_box_set_spacing(GTK_BUTTON_BOX(box), 5);
		gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0);

		button = gtk_button_new_with_label(_("OK"));
		gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(irconf_control_ok_cb), NULL);
		GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
		gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
		gtk_widget_grab_default(button);
		gtk_widget_show(button);

		button = gtk_button_new_with_label(_("Cancel"));
		gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(irconf_control_cancel_cb), NULL);
		GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
		gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
		gtk_widget_show(button);

		gtk_widget_show(box);
		gtk_widget_show(table);
		gtk_widget_show(frame);
		gtk_widget_show(vbox);
		gtk_widget_show(irconf_controlwin);

		if ((ir_was_enabled = ir_get_portfd()))
			ir_close_port();
		irapp_init_port(g_strdup(gtk_entry_get_text(GTK_ENTRY(dev_entry))));
		irconf_is_going = TRUE;
		gtk_timeout_add(10, irconf_codeentry_routine, NULL);
	}
}