function openMpdSocket($host, $port) { $this->sock = stream_socket_client('tcp://' . $host . ':' . $port . '', $errorno, $errorstr, 30); $response = $this->readMpdResponse(); if ($response = '') { sysCmd('command/shell.sh ' . $response); exit; } return $this->sock; }
function alsa_findHwMixerControl($device) { $cmd = "amixer -c " . $device . " |grep \"mixer control\""; $str = sysCmd($cmd); $hwmixerdev = substr(substr($str[0], 0, -(strlen($str[0]) - strrpos($str[0], "'"))), strpos($str[0], "'") + 1); return $hwmixerdev; }
// apc.ini $file = "/etc/php5/fpm/conf.d/20-apc.ini"; $fileData = file($file); $newArray = array(); foreach ($fileData as $line) { // find the line that starts with 'presentation_url" if (substr($line, 0, 8) == 'apc.stat') { // replace apc.stat with selected value $line = "apc.stat = " . $_SESSION['w_queueargs'] . "\n"; } $newArray[] = $line; } // Commit changes to /etc/php5/fpm/conf.d/20-apc.ini $fp = fopen($file, 'w'); fwrite($fp, implode("", $newArray)); fclose($fp); // Restart PHP service sysCmd('service php5-fpm restart'); playerSession('write', $db, 'enableapc', $_SESSION['w_queueargs']); break; } // reset locking and command queue $_SESSION['w_queue'] = ''; $_SESSION['w_queueargs'] = ''; $_SESSION['w_jobID'] = ''; $_SESSION['w_active'] = 0; $_SESSION['w_lock'] = 0; } session_write_close(); } // --- WORKER MAIN LOOP --- //
<?php $sezione = basename(__FILE__, '.php'); include '_header.php'; $tpl = 'credits.html'; ?> <!-- content --!> <?php eval("echoTemplate(\"" . getTemplate("templates/{$tpl}") . "\");"); ?> <!-- content --> <?php $cmd = 'mpc update NAS'; sysCmd($cmd); echo "Update NAS mount-drive running! "; sleep(5); ?> <script type="text/javascript"> window.location = "index.php" </script> <?php include '_footer.php'; ?>
if (!is_dir($my_file)) { unlink($my_file); } else { rmdir($my_file); } break; case 'check_wifi': $eth0 = "false"; $output = file_get_contents('/sys/class/net/eth0/operstate'); if ($output == "up\n") { $eth0 = "true"; } echo $eth0; break; case 'nw_reset': $output = sysCmd('service networking restart'); echo "\nNW resetted! " . $output; break; case 'check_mixer': $output = file_get_contents('/etc/mpd.conf'); $start = strrpos($output, "disabled"); if ($start === false) { $start = strrpos($output, "software"); if ($start === false) { $mixer = "\"hardware\"\n"; echo $mixer; } else { $mixer = "\"software\"\n"; echo $mixer; } } else {
// TC (Tim Curtis) 2015-06-26: set simple mixer name based on kernel version and i2s vs USB $mixername = getMixerName(getKernelVer($_SESSION['kernelver']), $_SESSION['i2s']); sysCmd("/var/www/tcmods/" . MOODE_RELEASE . "/cmds/tcmods.sh set-pcmvol " . $mixername . " " . $args); break; // TC (Tim Curtis) 2015-05-30: add clear system and playback history logs // TC (Tim Curtis) 2015-05-30: add clear system and playback history logs case 'clearsyslogs': sysCmd("/var/www/tcmods/" . MOODE_RELEASE . "/cmds/utility.sh clear-logs"); break; case 'clearplayhistory': sysCmd("/var/www/tcmods/" . MOODE_RELEASE . "/cmds/utility.sh clear-playhistory"); break; // TC (Tim Curtis) 2015-07-31: expand sd card storage // TC (Tim Curtis) 2015-07-31: expand sd card storage case 'expandsdcard': sysCmd("/var/www/tcmods/" . MOODE_RELEASE . "/cmds/resizefs.sh start"); break; } // update session Session::wrap(function () { logWorker("[daemon] Task done"); workerFinishTask(); }, true); } else { // update session even if no task processed to avoid deadlock Session::wrap(function () { workerFinishTask(); }, true); } sleep(5); }
function _setI2sDtoverlay($device) { if ($device == 'I2S Off') { _setI2sModules('I2S Off'); } else { $text = "# Device Tree Overlay being used\n"; file_put_contents('/etc/modules', $text); switch ($device) { case 'Generic': // use hifiberry driver // use hifiberry driver case 'G2 Labs BerryNOS': // use hifiberry driver // use hifiberry driver case 'G2 Labs BerryNOS Red': // use hifiberry driver // use hifiberry driver case 'Durio Sound PRO': case 'Hifimediy ES9023': case 'Audiophonics I-Sabre DAC ES9023 TCXO': case 'HiFiBerry DAC': sysCmd('echo dtoverlay=hifiberry-dac >> /boot/config.txt'); break; case 'HiFiBerry DAC+': sysCmd('echo dtoverlay=hifiberry-dacplus >> /boot/config.txt'); break; case 'HiFiBerry Digi(Digi+)': sysCmd('echo dtoverlay=hifiberry-digi >> /boot/config.txt'); break; case 'HiFiBerry Amp(Amp+)': sysCmd('echo dtoverlay=hifiberry-amp >> /boot/config.txt'); break; case 'RaspyPlay4': case 'IQaudIO Pi-DAC': sysCmd('echo dtoverlay=iqaudio-dac >> /boot/config.txt'); break; case 'IQaudIO Pi-DAC+': case 'IQaudIO Pi-AMP+': case 'IQaudIO Pi-DigiAMP+': sysCmd('echo dtoverlay=iqaudio-dacplus >> /boot/config.txt'); break; case 'RPi DAC': // exception since there is no dtoverlay driver for this dac in 3.18 sysCmd('echo dtoverlay= >> /boot/config.txt'); $text = "# " . $device . "\n"; $text .= "snd_soc_bcm2708\n"; $text .= "snd_soc_bcm2708_i2s\n"; $text .= "bcm2708_dmaengine\n"; $text .= "snd_soc_pcm5102a\n"; $text .= "snd_soc_rpi_dac\n"; file_put_contents($file, $text); break; } } }
function wrk_sysChmod() { sysCmd('chmod -R 777 /var/www/db'); sysCmd('chmod a+x /var/www/command/orion_optimize.sh'); sysCmd('chmod a+x /var/www/command/unmute.sh'); sysCmd('chmod 777 /run'); sysCmd('chmod 777 /run/sess*'); sysCmd('chmod a+rw /etc/mpd.conf'); }
function alsa_findHwMixerControl($device) { if (isset($_SESSION['i2s']) && $_SESSION['i2s'] == 'Hifiberryplus') { $hwmixerdev = 'Playback Digital'; } elseif (isset($_SESSION['i2s']) && $_SESSION['i2s'] == 'Hifiberry') { $hwmixerdev = 'Playback Digital'; } elseif (isset($_SESSION['i2s']) && $_SESSION['i2s'] == 'Iqaudio') { $hwmixerdev = 'Playback Digital'; } else { $cmd = "amixer -c " . $device . " |grep \"mixer control\""; $str = sysCmd($cmd); $hwmixerdev = substr(substr($str[0], 0, -(strlen($str[0]) - strrpos($str[0], "'"))), strpos($str[0], "'") + 1); } return $hwmixerdev; }
break; case 'getmpdstatus': $res = _parseStatusResponse(mpdStatus($mpd)); break; case 'readstationfile': // misuse mpd function to split lines $res = parseMpdKeyedResponse(file_get_contents(MPD_LIB . $_POST['path']), '='); break; case 'readplayhistory': $res = explode("\n", file_get_contents('/var/www/playhistory.log')); break; // TC (Tim Curtis) 2015-06-26: TESTING ALSA-Direct volume control, requires www-data user in visudo // TC (Tim Curtis) 2015-06-26: TESTING ALSA-Direct volume control, requires www-data user in visudo case 'sendalsacmd': $mixername = getMixerName(getKernelVer($_SESSION['kernelver']), $_SESSION['i2s']); $rtn = sysCmd("sudo " . $_POST['alsacmd'] . " " . $mixername . " " . $_POST['volumelevel'] . $_POST['scale']); $res = $rtn[0]; break; default: http_reponse_code(500); // internal server error exit; } header('Content-type: application/json'); echo json_encode($res, JSON_PRETTY_PRINT); exit; } /* * Audio info */ $_hwparams = getHwParams();
$jobID[] = wrk_control($redis, 'newjob', $data = array('wrkcmd' => 'mpdrestart')); } if ($_POST['syscmd'] === 'backup') { $jobID[] = wrk_control($redis, 'newjob', $data = array('wrkcmd' => 'backup')); } } } waitSyWrk($redis, $jobID); // push backup file if ($_POST['syscmd'] === 'backup') { pushFile($redis->hGet('w_msg', $jobID[0])); $redis->hDel('w_msg', $jobID[0]); } // collect system status $template->sysstate['kernel'] = file_get_contents('/proc/version'); $template->sysstate['time'] = implode('\\n', sysCmd('date')); $template->sysstate['uptime'] = date('d:H:i:s', strtok(file_get_contents('/proc/uptime'), ' ')); $template->sysstate['HWplatform'] = $redis->get('hwplatform') . " (" . $redis->get('hwplatformid') . ")"; $template->sysstate['playerID'] = $redis->get('playerid'); $template->hostname = $redis->get('hostname'); $template->ntpserver = $redis->get('ntpserver'); $template->timezone = $redis->get('timezone'); $template->orionprofile = $redis->get('orionprofile'); $template->airplay = $redis->hGetAll('airplay'); $template->dlna = $redis->hGetAll('dlna'); $template->udevil = $redis->get('udevil'); $template->coverart = $redis->get('coverart'); $template->globalrandom = $redis->get('globalrandom'); $template->lastfm = $redis->hGetAll('lastfm'); $template->cmediafix = $redis->get('cmediafix'); $template->proxy = $redis->hGetAll('proxy');
$_system_select['airplay_name'] = $_SESSION['airplay_name']; $_system_select['upnp_name'] = $_SESSION['upnp_name']; $_system_select['dlna_name'] = $_SESSION['dlna_name']; // TC (Tim Curtis) 2015-04-29: add PCM (alsamixer) volume // TC (Tim Curtis) 2015-06-26: updated logic if ($_SESSION['pcm_volume'] == 'none') { $_pcm_volume = ''; $_pcm_volume_readonly = 'readonly'; $_pcm_volume_hide = 'hide'; $_pcm_volume_msg = "<span class=\"help-block help-block-margin\">PCM volume mixer not detected for attached audio device</span>"; } else { // TC (Tim Curtis) 2015-06-26: get current volume setting, requires www-data user in visudo // TC (Tim Curtis) 2015-06-26: set simple mixer name based on kernel version and i2s vs USB $mixername = getMixerName($kernelver, $_SESSION['i2s']); $cmd = "sudo /var/www/tcmods/" . MOODE_RELEASE . "/cmds/tcmods.sh get-pcmvol " . $mixername; $rtn = sysCmd($cmd); $_pcm_volume = str_replace("%", "", $rtn[0]); if (isset($_POST['pcm_volume']) && $_pcm_volume != $_POST['pcm_volume']) { // player_wrk has not processed the change yet $_pcm_volume = $_POST['pcm_volume']; } $_pcm_volume_readonly = ''; $_pcm_volume_hide = ''; $_pcm_volume_msg = ''; } // TC (Tim Curtis) 2015-02-25: add kernel select list // TC (Tim Curtis) 2015-06-26: add 3.18.14 and 3.18.11 kernels to select list if ($_SESSION['procarch'] == "armv7l") { // Pi-2 $_linux_kernel['kernelver'] .= "<option value=\"3.18.14-v7+\" " . ($_SESSION['kernelver'] == '3.18.14-v7+' ? "selected" : "") . ">3.18.14-v7+</option>\n"; $_linux_kernel['kernelver'] .= "<option value=\"3.18.11-v7+\" " . ($_SESSION['kernelver'] == '3.18.11-v7+' ? "selected" : "") . ">3.18.11-v7+</option>\n";
function mpdTouchFiles() { return sysCmd("find '" . MPD_LIB . 'WEBRADIO' . "' -name \"" . "*.pls" . "\"" . " -exec touch {} \\+"); }