/* 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(); }
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); }
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); }
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); }
/* 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); }
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); } }