static void set_random(gpointer data, const char *param) { if (strncmp(param, "on", 2) == 0) { mpd_player_set_random(connection, TRUE); } else if (strncmp(param, "off", 3) == 0) { mpd_player_set_random(connection, FALSE); } else { random_toggle(); } }
static void cb_shuffle_button_toggled (GtkToggleButton *button, gpointer data) { gboolean state; state = gtk_toggle_button_get_active (button); if (state == TRUE) { mpd_player_set_random (gmo, true); } else if (state == FALSE) { mpd_player_set_random (gmo, false); } return; }
bool gimmix_toggle_shuffle (MpdObj *mo) { int state; if (!mo) return FALSE; state = mpd_player_get_random (mo) ? 0 : 1; mpd_player_set_random (mo, state); return TRUE; }
void *Lkeys_thread() { int keystate = 0; int volume; struct pollfd fds; char ver[5]; strncpy(ver,G15DAEMON_VERSION,3); float g15v; sscanf(ver,"%f",&g15v); fds.fd = g15screen_fd; fds.events = POLLIN; while(!leaving){ int foo=0; current_fg_check = g15_send_cmd (g15screen_fd, G15DAEMON_IS_FOREGROUND, foo); static int last_fg_check = 0; if(playlist_mode && last_fg_check != current_fg_check){ if(own_keyboard){ if(current_fg_check==0){ own_keyboard=0; } }else if(current_fg_check && !own_keyboard) { own_keyboard=1; } last_fg_check = current_fg_check; } /* g15daemon series 1.2 need key request packets */ pthread_mutex_lock(&daemon_mutex); if((g15v*10)<=18) { keystate = g15_send_cmd (g15screen_fd, G15DAEMON_GET_KEYSTATE, foo); } else { if ((poll(&fds, 1, 5)) > 0) read (g15screen_fd, &keystate, sizeof (keystate)); } pthread_mutex_unlock(&daemon_mutex); if (keystate) { switch (keystate) { case G15_KEY_L1: exit(1); // FIXME quick hack to exit break; case G15_KEY_L2: menulevel++; if(menulevel>=MAX_MENU_MODES) menulevel=0; break; case G15_KEY_L3: if(!own_keyboard){ own_keyboard=playlist_mode=1; mpd_Song *song = mpd_playlist_get_current_song(obj); if(song) if(song->pos) track_info.currentsong=song->pos; }else{ //de-activate own_keyboard=playlist_mode=0; } break; case G15_KEY_L4: if(menulevel==MENU_MODE1){ mpd_player_set_random(obj,mpd_player_get_random(obj)^1); } if(menulevel==MENU_MODE2){ volume=mpd_status_get_volume(obj); if(volume>0) volume-=10; mpd_status_set_volume (obj,volume); } break; case G15_KEY_L5: if(menulevel==MENU_MODE1){ mpd_player_set_repeat(obj, mpd_player_get_repeat(obj)^1); } if(menulevel==MENU_MODE2){ volume=mpd_status_get_volume(obj); if(volume<100) volume+=10; mpd_status_set_volume (obj,volume); } break; default: break; } keystate = 0; } usleep(100*1000); } return NULL; }
void *main_mpd_cli(void *data ) { blockQueue char_queue; // kolejka polecen thread_data *my_data; my_data = (thread_data*)data; ////////////////////////////// LCD PART /////////////////////// my_data->mainLCD->set_print_song_state(0); /////////////////////////////////////////////////////////////////// int iport = 6600, button_counter =0; char *hostname = getenv("MPD_HOST"); char *port = getenv("MPD_PORT"); char *password = getenv("MPD_PASSWORD"); MpdObj *obj = NULL; std::cout << " adres hosta to " << hostname << std::endl; if(!hostname) { std::cout << " ip mpd to " << my_data->server_settings->MPD_IP << " ! \n"; hostname = (char*)my_data->server_settings->MPD_IP.c_str(); } if(port){ iport = std::stoi(port); } /* Create mpd object */ obj = mpd_new(hostname, iport,password); /* Connect signals */ mpd_signal_connect_error(obj,(ErrorCallback)error_callback, NULL); mpd_signal_connect_status_changed(obj,(StatusChangedCallback)status_changed , my_data ); /* Set timeout */ mpd_set_connection_timeout(obj, 10); int work; work = mpd_connect(obj); while (work){ log_file_mutex.mutex_lock(); log_file_cout << ERROR << "nie udalo sie polaczyc z MPD "<< std::endl; log_file_mutex.mutex_unlock(); system("service mpd stop"); sleep(1); system("service mpd start"); log_file_mutex.mutex_lock(); log_file_cout << INFO << "restart MPD "<< std::endl; log_file_cout << INFO << "nawiazuje nowe polaczenie z MPD "<< std::endl; log_file_mutex.mutex_unlock(); my_data->myEventHandler.run("mpd")->addEvent("restart MPD"); work = mpd_connect(obj); } std::cout << " stop "<<std::endl; if(!work) { char buffer; do{ if(char_queue._size() > 0) { //digitalWrite(LED7,1); buffer = char_queue._get(); switch(buffer) { case '\n': break; case 'D': mpd_player_next(obj); break; case 'U': mpd_player_prev(obj); break; case 't': mpd_player_play(obj); break; case 'A': mpd_player_pause(obj); break; case 'P': mpd_player_pause(obj); mpd_player_stop(obj); break; case 'q': printf("Quitting....\n"); break; case 'R': mpd_player_set_repeat(obj, !mpd_player_get_repeat(obj)); break; case 's': mpd_player_set_random(obj, !mpd_player_get_random(obj)); break; case 'p': /*if(char_queue._size() > 0) { buffer = char_queue._get(); int id = atoi(buffer); printf(GREEN"Playing:"RESET" %i\n", id); mpd_player_play_id(obj,id); } break;*/ case '+': mpd_status_set_volume(obj, mpd_status_get_volume(obj)+1); break; case '-': mpd_status_set_volume(obj, mpd_status_get_volume(obj)-1); break; case '%': mpd_status_set_volume(obj, my_data->ptr_MPD_info->volume); break; case '2': debug_level = (debug_level > 0)?0:3; printf( "Debug:"" %s\n", (debug_level >0)? "Enabled":"Disabled"); break; case 'I': mpd_player_play_id(obj,my_data->currentSongID); break; case 'h': printf("\th:\t\tHelp\n"\ "\td:\t\tToggle debug on/off\n"\ "\t+:\t\tIncrease volume\n"\ "\t-:\t\tDecrease volume\n"\ "\ta <pass>:\t Authentificate with pass\n"\ "\tp <id>:\t Play song with id\n"\ "\tl:\t\tList the playlist\n"\ "\ts:\t\tToggle shuffle mode\n"\ "\tr:\t\tToggle repeat\n"\ "\tq:\t\tQuit\n"\ "\tv:\t\tStop\n"\ "\tc:\t\tPause\n"\ "\tx:\t\tPlay\n"\ "\tz:\t\tPrevious\n"\ "\tb:\t\tNext\n"); break; default: printf("buffer: %c\n", buffer); } } if (!mpd_check_connected(obj)) { log_file_mutex.mutex_lock(); log_file_cout << WARNING << "utracono polacznie z MPD "<< std::endl; log_file_cout << INFO << "restart MPD" << std::endl; log_file_mutex.mutex_unlock(); system ("service mpd restart"); mpd_connect(obj); } mpd_status_update(obj); my_data->mainLCD->checkState(); if ( digitalRead(BUTTON_PIN) == HIGH ) { std::cout << " wcisnieta pin !" << std::endl; if (check_title_song_to == true && button_counter ==4) { char_queue._add('P'); std::cout << " \n\ngasze !" << std::endl; } else if (check_title_song_to == false && button_counter ==4) { char_queue._add('t'); std::cout << " \n\n\n zapalam !" << std::endl; } else if (check_title_song_to == false && button_counter ==10) { std::cout << " \n\n\n koniec programu z przyciska !" << std::endl; go_while = false; } std::cout << " \n\n\n licznik guzika wskazuje "<< button_counter << std::endl; ++button_counter; } else { button_counter =0; } } while(!usleep(500000) && go_while); mpd_player_stop(obj); sleep (3); } else{ std::cout << " NIE UDALO SIE POłączyć "<<std::endl; } mpd_free(obj); log_file_mutex.mutex_lock(); log_file_cout << INFO << " koniec watku klient MPD "<< std::endl; log_file_mutex.mutex_unlock(); return 0; }