Commit 9362d75a authored by Oleg Dzhimiev's avatar Oleg Dzhimiev

initial

parent 9cbc926d
Installation in Kubuntu 12.04:
1. Install the following packages, terminal:
sudo apt-get install php5 apache2
2. Make the src folder visible to the web server:
2a. Create a link, terminal: "sudo ln -sf <path-to-eyesis4pi_gui-folder> /var/www/eysisgui"
2b. Or copy all the files to /var/www/eyesisgui.
Note: "/var/www" is the (apache2) web server's document root folder.
3. Make the footage root folder "/data/footage" writable for everyone.
Questions: <support-list-eyesis@elphel.com>
\ No newline at end of file
This diff is collapsed.
button {
/* font-family:"Times New Roman", Times, serif;*/
border: 0px solid black;
font-size: 16px;
/*line-height: 24px;*/
padding: 4px 20px 3px 20px;
margin: 3px 3px 3px 3px;
/*border radius*/
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
/*shadow*/
-moz-box-shadow: 2px 2px 2px gray;
-webkit-box-shadow: 2px 2px 2px gray;
box-shadow: 2px 2px 2px gray;
/*text-shadow: 1px 1px 1px gray;*/
color: rgba(260,260,260,1);
text-align:center;
/*remove text selection*/
/* -webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;*/
}
button::-moz-focus-inner {
border: 0;
}
button:active, button:disabled {
text-shadow: 0px 0px 0px gray;
color: rgba(150,100,100,1);
/*shadow*/
-moz-box-shadow: 1px 1px 1px gray;
-webkit-box-shadow: 1px 1px 1px gray;
box-shadow: 1px 1px 1px gray;
/*margin: 3px 1px 3px 5px;*/
/* margin-left: 2px;
margin-top: 2px;*/
}
button:hover{
/* -moz-box-shadow: 0px 0px 10px black;
-webkit-box-shadow: 0px 0px 10px black;
box-shadow: 0px 0px 10px black; */
}
/*background gradients*/
button {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(200,100,100,0.7)), to(rgba(200,100,100,0.7))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(200,100,100,0.7), rgba(200,100,100,0.7)); /* for firefox 3.6+ */
}
button:hover {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(256,170,170,1)), to(rgba(230,130,130,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(256,170,170,1), rgba(230,130,130,1)); /* for firefox 3.6+ */
}
button:active, button:disabled {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(230,130,130,1)), to(rgba(256,170,170,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(230,130,130,1), rgba(256,170,170,1)); /* for firefox 3.6+ */
}
.input_text {
border: 0px solid black;
/*line-height: 22px;*/
width: 100px;
height: 24px;
-moz-line-height: 22px;
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
}
<html>
<head>
<title>Button style test</title>
<link rel="shortcut icon" href="favicon.ico" />
<script src="jquery-1.7.2.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="button.css" />
</head>
<body>
<table>
<tr>
<td>
<button style="height:100px;width:100px;">test</button>
</td><td>
<button style="height:100px;width:100px;">test1</button>
</td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
function camogm_launch(init){
if (init) camogm_create_table();
camogm_cmd("run_camogm",true,camogm_launch_response);
intvl_status = setInterval("status_message(true,'Launching camogm')",1000);
console.log("camogm launch");
//actions
// if (camogm_en) {
// }else{
// clearInterval(intvl_camogm_status);
// clearInterval(intvl_hdd_free_space);
// }
}
function camogm_exit(){
console.log("camogm exit");
camogm_cmd("exit",true);
}
function camogm_rec_start(){
console.log("camogm: begin recording");
//camogm_cmd("mount",false);
camogm_cmd("start",true);
if (!disable_intervals) intvl_camogm_status = setInterval("camogm_status(true)",10000);
if (!disable_intervals) intvl_hdd_free_space = setInterval("camogm_get_hdd_free_space(false)",10000);
}
function camogm_rec_stop(){
console.log("camogm: stop recording");
camogm_cmd("stop",false);
camogm_cmd("unmount",true);//replaced with sync
clearInterval(intvl_hdd_free_space);
clearInterval(intvl_camogm_status);
intvl_hdd_free_space = false;
intvl_camogm_status = false;
green_the_bars();
}
function camogm_cmd(cmd,async,callback) {
var url = "eyesis4pi_control.php?"+cmd+"&master_ip="+master_ip+"&n="+n+"&rec_delay="+camogm_rec_delay;
$.ajax({
url: url,
async: async,
success: function(data){
//$("#status").html(data);
if (typeof callback != 'undefined') callback(data);
}
});
}
function camogm_create_table(){
var table_html = "";
if (camogm_en) {
table_html = "<tr>\n\t<td></td>\n\t<td align='center'>SSD free space</td>\n<td>&nbsp;&nbsp;Buffer (important when recording)</td></tr>";
for (var i=0;i<n;i++) {
table_html += "<tr>\n\t<td>camera "+(i+1)+"</td><td id='cam"+(i+1)+"_hdd' align='right'></td><td><div id='buffer"+(i+1)+"_sum' class='buffer'><div id='buffer"+(i+1)+"' style='width:200px;' class='buffer_free'>free</div></div></td></tr>";
}
}
$("#hdd_free_space").html(table_html);
}
function camogm_get_hdd_free_space(mount_en){
// if (mount_en){
// //camogm_cmd("mount",false);
// camogm_cmd("get_hdd_space&mount_point=/var/html/CF",false,camogm_parse_hdd_free_space);
// //camogm_cmd("unmount",true);
// }else{
// camogm_cmd("get_hdd_space&mount_point=/var/html/CF",true,camogm_parse_hdd_free_space);
// }
camogm_cmd("get_hdd_space&mount_point=/var/html/CF",true,camogm_parse_hdd_free_space);
camogm_cmd("unmount",true);
}
function camogm_parse_hdd_free_space(data){
var raw_data=0;
var end = " KB";
var random_color = "rgba("+Math.floor(Math.random()*128)+","+Math.floor(Math.random()*128)+","+Math.floor(Math.random()*128)+",1)";
for (var i=0;i<n;i++) {
raw_data = +$(data).find('cam'+(i+1)).find('hdd_free_space').text();
end = " KB";
for (var j=0;j<3;j++) {
raw_data = Math.round(10*raw_data/1024)/10;
if (j==1) end = " MB";
if (j==2) end = " GB";
//emergency stop
if ((j==1)&&(raw_data<128)) {
status_message(false,"SSD: low free space");
camogm_rec_stop();
}
if (raw_data<1024) break;
}
$("#cam"+(i+1)+"_hdd").html("<b style='color:"+random_color+";'>"+raw_data+end+"</b>");
}
}
function camogm_status(async){
camogm_cmd("status",async,camogm_parse_status);
}
function camogm_parse_status(data){
var buf_free;
var buf_used;
var buf_sum;
for (var i=0;i<n;i++) {
buf_free = +$(data).find('cam'+(i+1)).find('camogm_state').find('buffer_free').text();
buf_used = +$(data).find('cam'+(i+1)).find('camogm_state').find('buffer_used').text();
buf_sum = buf_free+buf_used;
$("#buffer"+(i+1)).css({width:(Math.round(buf_free/buf_sum*$("#buffer"+(i+1)+"_sum").width()))+"px"});
}
var state = "";
for (var i=0;i<n;i++) {
state = $(data).find('cam'+(i+1)).find('camogm_state').find('state').text();
if (state!='"running"') break;
state = "running";
}
if (camogm_en) {
//status_update(state);
$("#status").html(state);
}
if (update_state_en) {
if (state=="running") {
restore_parameters_en = false;
if (!disable_intervals&&!intvl_camogm_status){
camogm_status(true);
intvl_camogm_status = setInterval("camogm_status(true)",10000);
}
if (!disable_intervals&&!intvl_hdd_free_space){
camogm_get_hdd_free_space(false);
intvl_hdd_free_space = setInterval("camogm_get_hdd_free_space(false)",10000);
}
}
if (restore_parameters_en) restore_parameters();
status_update(state);
console.log("camogm state: "+state);
}
}
function camogm_parse_state(data){
var tmp;
for (var i=0;i<n;i++) {
tmp = $(data).find('cam'+(i+1)).find('camogm_state').text();
if (tmp=="off") break;
}
if (tmp!="off") {
camogm_create_table();
camogm_status(true);
camogm_cmd("mount",false);
green_the_bars();
camogm_get_hdd_free_space(true);
}else{
camogm_launch(true);
}
}
function green_the_bars() {
for (var i=0;i<n;i++) {
$("#buffer"+(i+1)).css({width:$("#buffer"+(i+1)+"_sum").width()+"px"});
}
}
function camogm_launch_response(){
console.log("camogm launch response");
clearInterval(intvl_status);
status_message(false,"camogm launched");
camogm_cmd("mount",false);
camogm_status(true);
green_the_bars();
camogm_get_hdd_free_space(true);
}
\ No newline at end of file
<?php
$cmd = "do_nothing";
if (isset($_GET['cmd'])) $cmd = $_GET['cmd'];
if (isset($_GET['interval'])) $interval = $_GET['interval'];
if (isset($_GET['master_ip'])) $master_ip = $_GET['master_ip'];
else $master_ip = "221";
if (isset($_GET['n'])) $n = $_GET['n'];
if (isset($_GET['mask'])) $mask = $_GET['mask'];
if ($cmd=="launch") launch();
else if ($cmd=="set_path") set_path($cmd,$_GET['path'],$master_ip,$n,$mask,$_GET['subfolder'],$_GET['limit']);
else get_state($cmd,$interval,$n,$mask,$master_ip);
function launch(){
$status = system("./eyesis_daemon.php >> /data/footage/daemon_log.txt &");
echo "daemon started";
// if (!$status) {
// $response = "fail";
// echo "daemon started: ".$response;
// }else{
// echo "daemon started";
// }
// $port = 10009;
// $address = '127.0.0.1';
//
// $socket = stream_socket_client("tcp://$address:$port", $errno, $errstr, 30);
//
// if (!$socket) $response = "fail";
// echo "daemon started: ".$response;
//
// fclose($socket);
}
function get_state($cmd,$interval,$n,$mask,$ip){
$cmd = "<msg><cmd>$cmd</cmd><interval>$interval</interval><ip>$ip</ip><n>$n</n><mask>$mask</mask></msg>";
send_msg($cmd);
}
function set_path($cmd,$path,$ip,$n,$mask,$subfolder,$limit){
$msg = "<msg>\n";
$msg .= "<cmd>$cmd</cmd>\n";
$msg .= "<n>$n</n>\n";
$msg .= "<ip>$ip</ip>\n";
$msg .= "<mask>$mask</mask>\n";
$msg .= "<path>$path</path>\n";
$msg .= "<subfolder>$subfolder</subfolder>\n";
$msg .= "<limit>$limit</limit>\n";
$msg .= "</msg>";
send_msg($msg);
}
function send_msg($msg){
$port = 10009;
$address = '127.0.0.1';
$out = "";
$msg .= "\r\n\r\n";
$socket = stream_socket_client("tcp://$address:$port", $errno, $errstr, 30);
if (!$socket) {
$out = "$errstr ($errno)<br />\n";
} else {
fwrite($socket, $msg);
//somehow feof works only with the client side.
while (!feof($socket)) {
$out .= fgets($socket, 1024);
}
fclose($socket);
}
echo $out;
}
?>
\ No newline at end of file
$1 $2 $3
\ No newline at end of file
This diff is collapsed.
<?php
/*!***************************************************************************
*! FILE NAME : eyesis4pi_backup.php
*! DESCRIPTION: backup some important files
*! Copyright (C) 2012 Elphel, Inc
*! -----------------------------------------------------------------------------**
*! This program is free software: you can redistribute it and/or modify
*! it under the terms of the GNU General Public License as published by
*! the Free Software Foundation, either version 3 of the License, or
*! (at your option) any later version.
*!
*! This program is distributed in the hope that it will be useful,
*! but WITHOUT ANY WARRANTY; without even the implied warranty of
*! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*! GNU General Public License for more details.
*!
*! The four essential freedoms with GNU GPL software:
*! * the freedom to run the program for any purpose
*! * the freedom to study how the program works and change it to make it do what you wish
*! * the freedom to redistribute copies so you can help your neighbor
*! * the freedom to distribute copies of your modified versions to others
*!
*! You should have received a copy of the GNU General Public License
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! -----------------------------------------------------------------------------**
*! $Log: eyesis4pi_backup.php,v $
*/
$BaseIP=221;
$N=9;
$BACKUP_DIR = "EYESIS4PI_BKP_".time();
$pattern = array(
"<textarea rows=20 cols=80 name=content>",
"</textarea>"
);
//full path only
$list = array(
"/etc/autocampars.xml",
"/etc/conf.d/hostname",
"/etc/conf.d/net.eth0",
"/etc/conf.d/mac",
"/usr/html/eyesis_ide.php",
"/etc/imu_logger.xml",
"/etc/10364.config",
);
backup($BaseIP,$N,$BACKUP_DIR,$list);
function backup($ip,$n,$bkp_dir,$list){
if (!is_dir($bkp_dir)) mkdir($bkp_dir);
$RQ = "/admin-bin/editcgi.cgi?file";
for ($i=$ip;$i<($ip+$n);$i++) {
$final_dir = $bkp_dir."/".$i;
if (!is_dir($final_dir)) mkdir($final_dir);
foreach ($list as $file){
create_tree($file,$final_dir);
$content = file_get_contents("http://192.168.0.$i".$RQ."=".$file);
$tmp_arr = get_positions($content);
$content = substr($content,$tmp_arr[0],$tmp_arr[1]-$tmp_arr[0]);
// no need for "/" between names
file_put_contents($final_dir.$file,$content);
}
}
}
function create_tree($file,$path){
$tmp_path = $path;
$arr = explode("/",trim($file,"/"));
for ($i=0;$i<(count($arr)-1);$i++){
$tmp_path .= "/".$arr[$i];
if (!is_dir($tmp_path)) mkdir($tmp_path);
}
}
function get_positions($str){
global $pattern;
$arr[0] = strpos($str,$pattern[0])+strlen($pattern[0])+1;
$arr[1] = strrpos($str,$pattern[1]);
return $arr;
}
?>
\ No newline at end of file
This diff is collapsed.
<?php
/*!***************************************************************************
*! FILE NAME : eyesis4pi_controls.php
*! DESCRIPTION: change the settings of the 8 eyesis4pi cameras
*! Copyright (C) 2012 Elphel, Inc
*! -----------------------------------------------------------------------------**
*! This program is free software: you can redistribute it and/or modify
*! it under the terms of the GNU General Public License as published by
*! the Free Software Foundation, either version 3 of the License, or
*! (at your option) any later version.
*!
*! This program is distributed in the hope that it will be useful,
*! but WITHOUT ANY WARRANTY; without even the implied warranty of
*! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*! GNU General Public License for more details.
*!
*! The four essential freedoms with GNU GPL software:
*! * the freedom to run the program for any purpose
*! * the freedom to study how the program works and change it to make it do what you wish
*! * the freedom to redistribute copies so you can help your neighbor
*! * the freedom to distribute copies of your modified versions to others
*!
*! You should have received a copy of the GNU General Public License
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! -----------------------------------------------------------------------------**
*! $Log: eyesis4pi_controls.php,v $
*/
// Check location - should be launched on the PC websrver
$elp_const=get_defined_constants(true);
if (isset($elp_const["elphel"])) {
$fp = fopen($_SERVER['SCRIPT_FILENAME'], 'rb');
fseek($fp, 0, SEEK_END); /// file pointer at the end of the file (to find the file size)
$fsize = ftell($fp); /// get file size
fseek($fp, 0, SEEK_SET); /// rewind to the start of the file
/// send the headers
header("Content-Type: application/x-php");
header("Content-Length: ".$fsize."\n");
fpassthru($fp); /// send the script (this file) itself
fclose($fp);
exit (0);
}
//defaults
$master_ip = 221;
$n = 1;
$res_xml = "";
$cams = array();
// keys assign
if (isset($_GET['rq'])){
$pars = explode(",",$_GET['rq']);
foreach($pars as $val){
$ip = strtok($val,":");
$channel = strtok(":");
array_push($cams,array('ip'=>$ip,'channel'=>$channel));
}
}
if (true) {
$res_xml = "<Document>\n";
for ($i=0;$i<count($cams);$i++) {
$res_xml .= "\t<cam>\n";
for ($j=0;$j<4;$j++) {
$error=0;
$flag=1;
if ($fp = @simplexml_load_file("http://{$cams[$i]['ip']}/i2c.php?cmd=fromEEPROM{$cams[$i]['channel']}&EEPROM_chn=$chn")) {
if (isset($fp->error)) {
$flag = 0;
}
}else{
//double checking
if ($fp = @simplexml_load_file("http://{$cams[$i]['ip']}/i2c.php?cmd=fromEEPROM{$cams[$i]['channel']}&EEPROM_chn=$chn")) {
if (isset($fp->error)) {
$flag = 0;
}
}else{
$error = 1;
}
}
if (!$error) {
$res_xml .= "\t\t<chn$j>$flag</chn$j>\n";
}else{
$res_xml .= "\t\t<error>$error</error>\n";
}
if ($j==0){
if (isset($fp->model)){
if ($fp->model=="10338") break;
}
}
if ($error) break;
}
$res_xml .= "\t</cam>\n";
}
$res_xml .= "</Document>";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($res_xml)."\n");
header("Pragma: no-cache\n");
printf("%s", $res_xml);
flush();
}
?>
\ No newline at end of file
#!/usr/bin/php -q
<?php
include 'filesystem.php';
// Allow the script to hang around waiting for connections.
set_time_limit(0);
$CAMOGM = true;
$footage_root_path = "footage";
$footage_subfolder = "folder2";
$footage_index = "0";
$footage_file_limit = 1000;
$address = '127.0.0.1';
$port = 10009;
$out = "";
$socket = stream_socket_server("tcp://$address:$port", $errno, $errstr);
$status = "idle";
$ip = 221;
$interval = 1000;
$old_status_en = true;
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
// -1 sets stream_socket_accept timeout to 1 year
while ($conn = stream_socket_accept($socket,-1)) {
// Read until double CRLF, cause feof & stream_get_meta_data don't work
while( !preg_match('/\r?\n\r?\n/', $out) ) {
$out .= fgets($conn, 1024);
}
$out = substr($out,0,strrpos($out,"\r\n\r\n"));
$xml = new SimpleXMLElement($out);
//echo $out;
$cmd = $xml->cmd;
$interval = $xml->interval;
$ip = $xml->ip;
$n = $xml->n;
$mask = $xml->mask;
if ($cmd=="set_path") {
$footage_root_path = $xml->path;
$footage_subfolder = $xml->subfolder;
$footage_file_limit = $xml->limit;
$footage_index = 0;
if (check_subdir($footage_root_path,$footage_subfolder)<0) {
if ($old_status_en) $old_status = $status;
$old_status_en = false;
$status = "Please, check the footage root directory. error code: ".check_subdir($footage_root_path,$footage_subfolder);
}else{
$status = "Path parameters are set to path=$footage_root_path subfolder=$footage_subfolder limit=$footage_file_limit";
}
}
if ($cmd=="start") $status = "running";
if ($cmd=="stop") {
system("killall -9 recorder.php");
$ci = $interval*96000;
$fp = fopen("http://192.168.0.$ip/camogmgui/camogm_interface.php?cmd=set_parameter&pname=TRIG_PERIOD&pvalue=".($ci+1), 'r');
$fp = fopen("http://192.168.0.$ip/camogmgui/camogm_interface.php?cmd=set_parameter&pname=TRIG_PERIOD&pvalue=".($ci), 'r');
$status = "idle";
}
if ($cmd=="die") {
$status = "The daemon is dead";
system("killall -9 recorder.php");
fputs($conn, "$status\n");
fclose($conn);
break;
}
//fputs($conn, date('n/j/Y g:i:s a').": Command: '$out'. Status: '$status'.\n");
if ($cmd=="check"){
if (check_subdir($footage_root_path,$footage_subfolder)<0) {
if ($old_status_en) $old_status = $status;
$status = "Please, check the footage root directory. error code: ".check_subdir($footage_root_path,$footage_subfolder);
$old_status_en = false;
}else{
if (!$old_status_en) $status = $old_status;
$old_status_en = true;
}
}
//send reply
fputs($conn, "$status\n");
fclose($conn);
//if ($status=="running") {
if ($cmd=="start") {
echo "$ip $n $interval $mask $footage_root_path $footage_subfolder";
$footage_index = update_subsubdir("$footage_root_path/$footage_subfolder",$footage_index,$footage_file_limit,$index_max=1);
if ($footage_index>=0) {
passthru("./recorder.php ".$ip." ".$n." ".$interval." ".$mask." ".$footage_root_path." ".$footage_subfolder." ".$footage_file_limit." ".$footage_index." >> /dev/null 2>&1 &");
}
}
$cmd = "";
$out = "";
}
fclose($socket);
}
?>
\ No newline at end of file
favicon.ico

32.8 KB

<?php
//echo "<pre>";
//echo update_subsubdir("footage/folder2",0,0);
function check_subdir($path,$subdir){
if (is_dir("$path")) {
if (is_writable("$path")) {
if (is_dir("$path/$subdir")) {
if (is_writable("$path/$subdir"))
return 0;
else
return -2;
}else{
$old = umask(0);
mkdir("$path/$subdir",0777);
umask($old);
if (!is_dir("$path/$subdir")) return -3;
else return 0;
}
}
}else{
return -1;
}
}
function update_subsubdir($path,$index,$limit,$index_max=100000){
if ($index<=$index_max) {
if (!is_dir("$path/$index")) {
// if (!@mkdir("$path/$index",0777)) return -2;
// else return $index;
$old = umask(0);
if (!@mkdir("$path/$index",0777)) return -2;
umask($old);
return $index;
}else{
$files = scandir("$path/$index");
if (count($files)>=$limit+2) return update_subsubdir($path,$index+1,$limit);
else return $index;
}
}else{
return -1;
}
}
function get_free_space($path){
return disk_free_space($path);
}
?>
\ No newline at end of file
NOTE:
1. footage_downloader.html is not ready yet
SET UP INSTRUCTIONS:
1. Edit /etc/fstab according to the device names given to 2 extra eSATA HDDs connected to the PC.
/dev/sdc1 /mnt/sdc1 auto defaults,user,noauto 0 0
/dev/sdc2 /mnt/sdc2 auto defaults,user,noauto 0 0
/dev/sdd1 /mnt/sdd1 auto defaults,user,noauto 0 0
/dev/sdd2 /mnt/sdd2 auto defaults,user,noauto 0 0
2. Create /mnt/sdc1 & /mnt/sdd1:
mkdir /mnt/sdc1;mkdir /mnt/sdc2;
mkdir /mnt/sdd1;mkdir /mnt/sdd2;
3. If the devices are different, edit the footage_downloader.php.
USAGE:
1. Run under root
2. In the terminal window:
sudo php footage_downloader.php /data/footage/<example_folder> <filename.mov>, where
the <filename.mov> can be a particular file name or "*" (quoted) to download everything:
sudo php footage_downloader.php /data/footage/<example_folder> "*"
3. Switches the Eyesis4Pi IDE multiplexers and downloads the <filename.mov> from all of the SSDs.
\ No newline at end of file
<html>
<head>
<title>Footage Downloader</title>
<link rel="shortcut icon" href="favicon.ico" />
<script src="jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="jquery-ui-1.8.18.custom/js/jquery-ui-1.8.18.custom.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="jquery-ui-1.8.18.custom/css/ui-lightness/jquery-ui-1.8.18.custom.css" />
<script src="footage_downloader.js" type="text/javascript"></script>
<link href="footage_downloader.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" type="text/css" href="button.css" />
<link rel="stylesheet" type="text/css" href="index.css" />
</head>
<body>
<table style="background:rgba(200,200,200,0.5);">
<tr>
<td><b>Destination</b></td>
</tr>
<tr>
<td>Path:</td>
<td><input type="text" id="path" style="width:200px;" value="/data/footage"></td>
</tr>
<tr>
<td>Directory:</td>
<td><input type="text" id="dir" style="width:200px;" value="20130517_test"></td>
</tr>
<tr>
<td colspan="2"><button id="rec" onclick="footage_download()">Download</button></td>
</tr>
</table>
<table>
<tr>
<td>Status:</td>
<td></td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
function footage_download(){
$.ajax({
url:"footage_downloader.php?destination="+$("#path").val()+"/"+$("#dir").val(),
type: "GET",
async: true,
success: function(){
console.log("Downloading complete");
}
});
}
\ No newline at end of file
#!/usr/local/sbin/php -q
<?php
/*!*******************************************************************************
*! FILE NAME : footage_downloader.php
*! DESCRIPTION: downloads file from Eyesis4Pi internal SSDs
*! Copyright (C) 2013 Elphel, Inc
*! -----------------------------------------------------------------------------**
*! This program is free software: you can redistribute it and/or modify
*! it under the terms of the GNU General Public License as published by
*! the Free Software Foundation, either version 3 of the License, or
*! (at your option) any later version.
*!
*! This program is distributed in the hope that it will be useful,
*! but WITHOUT ANY WARRANTY; without even the implied warranty of
*! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*! GNU General Public License for more details.
*!
*! The four essential freedoms with GNU GPL software:
*! * the freedom to run the program for any purpose
*! * the freedom to study how the program works and change it to make it do what you wish
*! * the freedom to redistribute copies so you can help your neighbor
*! * the freedom to distribute copies of your modified versions to others
*!
*! You should have received a copy of the GNU General Public License
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! -----------------------------------------------------------------------------**
*!
*/
echo "<pre>\n";
$n=9;
$master_ip=221;
$muxes = Array();
$muxes[0] = "192.168.0.224";
$muxes[1] = "192.168.0.228";
$srcs = Array();
$srcs[0] = "sdc";
$srcs[1] = "sdd";
$dest = "";
if (isset($_GET['dest'])) $dest = $_GET['dest'];
else if (isset($argv[1])) $dest = $argv[1];
if (isset($_GET['file'])) $file = $_GET['file'];
else if (isset($argv[2])) $file = $argv[2];
if (!isset($file)) die("filename is not set");
//get "SerialNo"
$ssds = Array();
$request = "phpshell.php?command=hdparm%20-i%20/dev/hda|grep%20'SerialNo'";
for ($i=0;$i<$n;$i++){
fopen("http://192.168.0.".($master_ip+$i)."/phpshell.php?command=umount%20/var/html/CF",'r');
if ($fp=fopen("http://192.168.0.".($master_ip+$i)."/$request",'r')){
$content = '';
while ($line = fread($fp, 1024)) {
$content .= $line;
}
}
//various disks have serial number of various length
$ssd_tmp = explode("<",substr($content,strrpos($content,"SerialNo=")+strlen("SerialNo="),20));
$ssds[$i] = $ssd_tmp[0];
}
print_r($ssds);
if (!is_dir("$dest")) mkdir($dest);//data/footage/dest_path
if (!is_dir("$dest/mov")) mkdir("$dest/mov");//data/footage/dest_path
download_footage($muxes,"ssd1",$srcs,$file,$dest);
download_footage($muxes,"ssd2",$srcs,$file,$dest);
download_footage($muxes,"ssd3",$srcs,$file,$dest);
download_footage($muxes,"ssd4",$srcs,$file,$dest);
download_footage($muxes,"ssd5",$srcs,$file,$dest);
// download_footage($mux1,"ssd2","2",$src1,$argv[1]);
// download_footage($mux1,"ssd3","5",$src1,$argv[1]);
// download_footage($mux1,"ssd4","6",$src1,$argv[1]);
//
// // download_footage($mux2,"ssd1","3",$src2,$argv[1]);
// // download_footage($mux2,"ssd2","4",$src2,$argv[1]);
// // download_footage($mux2,"ssd3","7",$src2,$argv[1]);
// // download_footage($mux2,"ssd4","8",$src2,$argv[1]);
// // download_footage($mux2,"ssd5","9",$src2,$argv[1]);
//
// echo "Done\n";
//back to default states
fopen("http://192.168.0.224/eyesis_ide.php","r");
fopen("http://192.168.0.228/eyesis_ide.php","r");
function download_footage($muxes,$ssd,$srcs,$file,$dest){
global $ssds;
//switch IDE_MUX
fopen("http://".$muxes[0]."/103697.php?c:host4=$ssd","r");
fopen("http://".$muxes[1]."/103697.php?c:host4=$ssd","r");
sleep(30);
//exec("dmesg");
//mount
echo "\nChecking sdc\n";
//$result = exec("hdparm -i /dev/sdc | grep 'SerialNo' | awk '{print substr($0,45,20)}'");
$result_tmp = explode("SerialNo",exec("hdparm -i /dev/${srcs[0]} | grep 'SerialNo'"));
$result = trim(trim($result_tmp[1],"="));
$index = array_search($result,$ssds);
echo "The index is ".$index."\n";
$index++;
if ($index!=false) {
//sdc1
echo system("mount /mnt/${srcs[0]}1");
if (!is_dir("$dest/mov/$index")) mkdir("$dest/mov/$index");
echo "rsync -a /mnt/".$srcs[0]."1/$file $dest/mov/$index;umount /mnt/".$srcs[0]."1\n";
system("rsync -a /mnt/".$srcs[0]."1/$file $dest/mov/$index;umount /mnt/".$srcs[0]."1");
//sdc2
echo system("mount /mnt/${srcs[0]}2");
if (!is_dir("$dest/mov/$index")) mkdir("$dest/mov/$index");
echo "rsync -a /mnt/".$srcs[0]."2/$file $dest/mov/$index;umount /mnt/".$srcs[0]."2\n";
system("rsync -a /mnt/".$srcs[0]."2/$file $dest/mov/$index;umount /mnt/".$srcs[0]."2");
}
echo "\nChecking sdd\n";
//$result = exec("hdparm -i /dev/sdd | grep 'SerialNo' | awk '{print substr($0,45,20)}'");
$result_tmp = explode("SerialNo",exec("hdparm -i /dev/sdd | grep 'SerialNo'"));
$result = trim(trim($result_tmp[1],"="));
$index = array_search($result,$ssds);
echo "The index is ".$index."\n";
$index++;
if ($index!=false) {
//sdd1
echo system("mount /mnt/${srcs[1]}1");
if (!is_dir("$dest/mov/$index")) mkdir("$dest/mov/$index");
echo "rsync -a /mnt/".$srcs[1]."1/$file $dest/mov/$index;umount /mnt/".$srcs[1]."1\n";
system("rsync -a /mnt/".$srcs[1]."1/$file $dest/mov/$index;umount /mnt/".$srcs[1]."1");
//sdd2
echo system("mount /mnt/${srcs[1]}2");
if (!is_dir("$dest/mov/$index")) mkdir("$dest/mov/$index");
echo "rsync -a /mnt/".$srcs[1]."2/$file $dest/mov/$index;umount /mnt/".$srcs[1]."2\n";
system("rsync -a /mnt/".$srcs[1]."2/$file $dest/mov/$index;umount /mnt/".$srcs[1]."2");
}
//echo "\nChecking sde\n";
//echo exec("hdparm -i /dev/sdd | grep 'SerialNo' | awk '{print substr($0,45,20)}'");
//copy
//system("cp $src/* $dest");
// $files = scandir($src);
// foreach($files as $file){
// if (is_file($src."/".$file)) {
// $file_prefix = pathinfo($file, PATHINFO_FILENAME);
// $file_ending = pathinfo($file, PATHINFO_EXTENSION);
// $new_file = $file_prefix."_".$index.".".$file_ending;
// //place for rsync
// //system("cp $src/$file $dest/$new_file &");
// //echo $new_file."\n";
// }
//
// }
//unmount
//system("umount /mnt/".$srcs[0]);
}
?>
\ No newline at end of file
#!/usr/bin/env python
__author__ = "Elphel"
__copyright__ = "Copyright 2016, Elphel, Inc."
__license__ = "GPL"
__version__ = "3.0+"
__maintainer__ = "Oleg K Dzhimiev"
__email__ = "oleg@elphel.com"
__status__ = "Development"
import sys
import x393_downloader
C1 = x393_downloader.x393_downloader(ip="192.168.0.38")
C1.download()
sys.exit()
#!/usr/local/sbin/php -q
<?php
/*!*******************************************************************************
*! FILE NAME : split_mov.php
*! DESCRIPTION: splits a *.mov file into frames naming them by the timestamp
*! Copyright (C) 2011 Elphel, Inc
*! -----------------------------------------------------------------------------**
*! This program is free software: you can redistribute it and/or modify
*! it under the terms of the GNU General Public License as published by
*! the Free Software Foundation, either version 3 of the License, or
*! (at your option) any later version.
*!
*! This program is distributed in the hope that it will be useful,
*! but WITHOUT ANY WARRANTY; without even the implied warranty of
*! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*! GNU General Public License for more details.
*!
*! The four essential freedoms with GNU GPL software:
*! * the freedom to run the program for any purpose
*! * the freedom to study how the program works and change it to make it do what you wish
*! * the freedom to redistribute copies so you can help your neighbor
*! * the freedom to distribute copies of your modified versions to others
*!
*! You should have received a copy of the GNU General Public License
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*! -----------------------------------------------------------------------------**
*! $Log: split_mov.php,v $
*!
*/
set_time_limit(60*60*24);
$chunksize=10000000; // 10MB
$startMarkerWithExif=chr(hexdec("ff")).chr(hexdec("d8")).chr(hexdec("ff")).chr(hexdec("e1"));
echo "<pre>\n";
// if (!isset($_GET['path']) || !isset($_GET['ext'])) {
// echo "Usage split_mov.php?path=&lt;path_of_the_mov_file&gt;&ext=&lt;extension&gt;";
// //echo "Usage split_mov.php?path=path_of_the_mov_file&ext=extension";
// echo "</pre>\n";
// exit (1);
// }
if (isset($_GET['path'])) $path=$_GET['path'];
else $path=".";
if (isset($_GET['ext'])) $extension = $_GET['ext'];
else $extension = "jpeg";
if (isset($_GET['dest_path'])) $destination = $_GET['dest_path'];
else $destination = "result";
$files = scandir("$path");
if (!is_dir("$path/$destination")) mkdir("$path/$destination",0777);
foreach ($files as $file) {
if (get_file_extension($file)=="bin") {
echo "Splitting $path/$file into {$extension}s\n";
split_mov("$path",$file,$destination,$extension,$startMarkerWithExif,$chunksize);
}
}
function split_mov($path,$mov_file,$dest,$ext,$startMarkerWithExif,$chunksize) {
$path_with_name = "$path/$mov_file";
if (!is_file($path_with_name)) {
return -1;
}
$file=fopen($path_with_name,'r');
$markers=array(0);
$offset=0;
while (!feof($file)) {
fseek($file,$offset);
$s = fread($file,$chunksize);
$index=0;
$pos=0;
while (true) {
$pos=strpos($s,$startMarkerWithExif,$pos);
if ($pos === false) break;
$markers[count($markers)]=$offset+$pos;
$pos++;
}
$offset+=(strlen($s)-strlen($startMarkerWithExif)+1); // so each marker will appear once
}
$markers[count($markers)]=$offset+strlen($s); // full length of the file
for ($i=1;$i<(count($markers)-1);$i++) {
fseek($file,$markers[$i]);
$s = fread($file,$markers[$i+1]-$markers[$i]);
$old_file_name= "$path/tmp.".$ext;
$outFile=fopen($old_file_name,'w');
fwrite($outFile,$s);
fclose($outFile);
//read exif & rename
$exif_data = exif_read_data($old_file_name);
//converting GMT a local time GMT+7
$DateTimeOriginal_local=strtotime($exif_data['DateTimeOriginal']);/*-25200;*/
$new_file_name = $exif_data['PageNumber'] . "_" . $DateTimeOriginal_local."_".$exif_data['SubSecTimeOriginal'].".".$ext;
rename($old_file_name,"$path/$dest/$new_file_name");
}
return 0;
}
function get_file_extension($filename) {
return pathinfo($filename, PATHINFO_EXTENSION);
}
?>
\ No newline at end of file
__author__ = "Elphel"
__copyright__ = "Copyright 2016, Elphel, Inc."
__license__ = "GPL"
__version__ = "3.0+"
__maintainer__ = "Oleg K Dzhimiev"
__email__ = "oleg@elphel.com"
__status__ = "Development"
import subprocess
import time
import re
import os
import sys
class x393_downloader:
def __init__(self,user="root",ip="192.168.0.9"):
self.ip = ip
self.serialno = ""
self.sshcmd = "ssh "+user+"@"+ip
self.disable = False
self.dl_ssd_switch_timeout = 20 #seconds
self.dl_blocksize = 20 #Megabytes
self.dl_blockcount = 50
self.dl_chunks = 6
#ping and check access
self.check_connection()
def shout(self,cmd):
if not self.disable:
#subprocess.call prints to console
#subprocess.call(cmd,shell=True)
ret_str = ""
try:
ret_str = subprocess.check_output(cmd,shell=True)
except subprocess.CalledProcessError as e:
ret_str = str(e.returncode)
self.disable = True
return ret_str
def check_connection(self):
check = self.shout(self.sshcmd+" 'dmesg'")
if check.strip() == str(255):
print("Error: No route to host")
self.disable = True
def get_serialno(self,mode):
if not self.disable:
rq1 = "ls /dev/disk/by-id/ -all"
rq2 = "blkid"
if mode=="remote":
rq1 = self.sshcmd+" '"+rq1+"'"
rq2 = self.sshcmd+" '"+rq2+"'"
else:
rq2 = "sudo "+rq2
s1 = self.shout(rq1)
s2 = self.shout(rq2)
ret = ("","")
serialno=""
dev = ""
blkid_list = self.parse_blkid(s2)
#print("blkid list: "+str(blkid_list))
lines = s1.splitlines()
# record the whole devices first
dev_list = []
for line in lines:
line = re.sub(' +',' ',line)
pars = line.split(" ")
if len(pars)>0:
m0 = re.search('sd[a-z]$',pars[-1])
if m0:
m1 = re.search('^ata-',pars[-3])
if m1:
dev_list.append((m0.group(0),pars[-3]))
#print(dev_list)
# partitions (the first not formatted)
for line in lines:
line = re.sub(' +',' ',line)
pars = line.split(" ")
if len(pars)>0:
m0 = re.search('sd[a-z][0-9]',pars[-1])
if m0:
m1 = re.search('^ata-',pars[-3])
if m1:
# remove the whole device if a partition is found
for item in dev_list:
if item[0] in m0.group(0):
dev_list.remove(item)
if not "/dev/"+m0.group(0) in blkid_list:
print("("+mode+") raw partition: /dev/"+m0.group(0))
dev = "/dev/"+m0.group(0)
if self.serialno=="" or self.serialno==pars[-3]:
ret = (dev,pars[-3])
break
#print(dev_list)
if dev=="":
if (len(dev_list)>0):
if dev_list[0][1]==self.serialno:
print("Exiting @ "+dev_list[0][0]+" "+dev_list[0][1])
return (dev_list[0][0],dev_list[0][1])
#if dev=="":
# print("Warning: Device not found")
return ret
def parse_blkid(self,s):
ret = []
lines = s.splitlines()
for line in lines:
line = re.sub(' +',' ',line)
pars = line.split(":")
if len(pars)>0:
ret.append(pars[0])
return ret
def get_mountpoints(self,s,device):
mountpoints = []
lines = s.splitlines()
for line in lines:
pars = line.split(" ")
if (len(pars)>3):
if device in pars[0]:
print("Found mountpoint "+pars[2])
mountpoints.append(pars[2])
return mountpoints
def unmount(self):
mountpoints = self.get_mountpoints(self.shout(self.sshcmd+" 'mount'"),self.dev)
for mp in mountpoints:
print("Unmounting "+mp)
self.shout(self.sshcmd+" 'umount "+mp+"'")
mountpoints = self.get_mountpoints(self.shout(self.sshcmd+" 'mount'"),self.dev)
for mp in mountpoints:
print("Error: failed to unmount "+mp)
self.disable = True
def download(self):
# read device and serial of a disk
self.dev, self.serialno = self.get_serialno("remote")
if not self.disable:
# unmount all of the mounted partitions
self.unmount()
# unload driver
#self.shout(self.sshcmd+" 'rmmod ahci_elphel'")
# switch the switch to PC
self.shout(self.sshcmd+" '/usr/local/bin/x393sata_control.py set_esata_ssd'")
# check my serialno - not instant? 10 seconds?
timeout = self.dl_ssd_switch_timeout
t = 0
mydev, myserialno = ("","")
while mydev=="":
# get local device and serialno of a disk
mydev, myserialno = self.get_serialno("local")
t = t + 1
time.sleep(1)
if t>timeout:
print("Error: Disk not found")
self.disable = True
break
print("local device="+mydev+", local serial="+myserialno)
# dd
if not os.path.isdir(myserialno):
os.mkdir(myserialno)
bs = self.dl_blocksize
count = self.dl_blockcount
for i in range(0,self.dl_chunks):
fname = myserialno+"/"+"file_"+str(i)+".img"
skip = i*(count-1)
self.shout("sudo dd if="+mydev+" "+" of="+fname+" bs="+str(bs)+"M count="+str(count)+" skip="+str(skip))
#iflag=skip_bytes
self.shout(self.sshcmd+" '/usr/local/bin/x393sata_control.py set_zynq_ssd'")
# load the driver
#subprocess.call(self.sshcmd+" 'modprobe ahci_elphel &'",shell=True)
#time.sleep(1)
#self.shout(self.sshcmd+" 'echo 1 > /sys/devices/soc0/amba@0/80000000.elphel-ahci/load_module'")
# switch back the switch to Zynq
\ No newline at end of file
<?php
if (isset($_GET['path'])) $path = $_GET['path'];
else $path = "/";
echo disk_free_space($path);
?>
\ No newline at end of file
wget $1 -O "$2/$3" -o "$2/$4"
php rename.php $2 $3 $5
\ No newline at end of file
#!/bin/bash
IP=$1
N=$2
PATH1=$3
for ((i=0; i < N; i++))
do
SUM=$((i+IP))
INDEX=$((i+1))
./get_image.sh "http://192.168.0.$SUM:8081/bimg" "$PATH1" "$INDEX.jp4" "$INDEX.log" "$INDEX" &
done
body{
font-family: 'sans serif' ,serif, 'Serif';
/* font-family: DroidSerifRegular, serif;*/
}
table{
/*color:white;*/
padding: 2px 2px 2px 2px;
margin: 0px;
border: 0px;
}
table tr{
padding: 2px;
margin: 0px;
border: 0px;
}
table td{
padding: 2px 2px 2px 2px;
margin: 0px 0px 0px 0px;
}
input{
border: 0px;
padding: 2px;
/*border radius*/
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
}
#settings {
width:850;
height:650;
background:rgba(180,180,180,0.95);
/*color: white;*/
position:absolute;
top:50px;
left:10px;
/*border radius*/
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding: 10px;
-moz-box-shadow: 2px 2px 2px gray;
-webkit-box-shadow: 2px 2px 2px gray;
box-shadow: 2px 2px 2px gray;
}
#previews {
width:1375;
height:730;
background:rgba(220,220,220,0.95);
/*color: white;*/
position:absolute;
top:50px;
left:10px;
/*border radius*/
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
padding: 10px;
-moz-box-shadow: 2px 2px 2px gray;
-webkit-box-shadow: 2px 2px 2px gray;
box-shadow: 2px 2px 2px gray;
}
#address_field:disabled{
color: black;
}
.fixed_height{
height: 24px;
}
#rec, #stop {
font-weight: bold;
background: -webkit-gradient(linear, left top, left bottom, from(rgba(250,10,10,1)), to(rgba(220,30,30,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(250,10,10,1), rgba(220,30,30,1)); /* for firefox 3.6+ */
}
#rec:hover, #stop:hover {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(256,70,70,1)), to(rgba(255,100,100,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(256,70,70,1), rgba(230,100,100,1)); /* for firefox 3.6+ */
}
#rec:active, #rec:disabled, #stop:active, #stop:disabled {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(150,150,150,1)), to(rgba(200,200,200,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(150,150,150,1), rgba(200,200,200,1)); /* for firefox 3.6+ */
color: rgba(100,100,100,1);
}
.histograms {
/* width: 150px; */
/* height: 75px; */
/* background:#555555;*/
background:rgba(250,250,250,1);
border: 1px solid black;
/* filter: brightness(350%);
-webkit-filter: brightness(350%);
-moz-filter: brightness(350%);
-ms-filter: brightness(350%);
-o-filter: brightness(350%);*/
/* filter: contrast(350%);
-webkit-filter: contrast(350%);
-moz-filter: contrast(350%);
-ms-filter: contrast(350%);
-o-filter: contrast(350%);*/
}
.prevs{
/*background: red;*/
width: 150px;
height: 600px;
}
#prevs_images td {
padding:0px;
}
.special_rounding{
/*border radius*/
border-radius: 5px 5px 0px 0px;
-webkit-border-radius: 5px 5px 0px 0px;
-moz-border-radius: 5px 5px 0px 0px;
/*shadow*/
-moz-box-shadow: 1px 0px 1px gray;
-webkit-box-shadow: 1px 0px 1px gray;
box-shadow: 2px 0px 2px gray;
display: inline;
padding: 5px;
cursor: default;
}
.special_rounding:hover{
background:white;
}
.tabs_contents{
padding:10px;
width:840px;
height:613px;
background:rgba(230,230,230,0.95);
position:absolute;
top:32px;
left:5px;
}
#input_quality:disabled{
color:black;
}
.quality{
width: 32px;
height: 32px;
padding: 3px;
/*border radius*/
border-radius: 15px 15px 15px 15px;
-webkit-border-radius: 15px 15px 15px 15px;
-moz-border-radius: 15px 15px 15px 15px;
}
#btn_hdr_on, #btn_hdr_off,#btn_test_pattern_on,#btn_test_pattern_off,#btn_aexp_off,#btn_aexp_on,#set_exp {
width: 45px;
height: 20px;
font-size: 0.8em;
/*margin: 3px;*/
padding: 3px 3px 10px 3px;
}
#btn_jpeg, #btn_jp4{
/*margin: 3px;*/
padding: 3px;
font-size: 0.8em;
width: 45px;
text-align: center;
}
.apply_checkboxes{
margin: 5px;
padding: 5px;
}
#btn_uncheck_all{
width: 45px;
padding: 2px;
}
#close_settings, #close_previews, #close_notice{
width: 18px;
height: 18px;
text-align: center;
margin: 0px;
padding: 0px;
/*border radius*/
border-radius: 9px;
-webkit-border-radius: 9px;
-moz-border-radius: 9px;
}
#radio {
padding: 5px;
font-size: 10px;
}
/*gain sliders*/
#red, #green, #blue {
float: left;
clear: left;
width: 250px;
margin: 5px;
}
#wb-div {
position: relative;
}
#wb-div-input {
position: relative;
top: -13px;
left:0px;
}
#red,#green,#blue {height:8px;}
#red .ui-slider-range {
/*background: #ef2929; */
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(red), to(#eeaaaa));
background:-moz-linear-gradient(0% 90% 90deg, #eeaaaa, red);
}
#green .ui-slider-range {
/*background: #8ae234;*/
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(green), to(#aaeeaa));
background:-moz-linear-gradient(0% 90% 90deg, #aaeeaa, green);
}
#blue .ui-slider-range {
/*background: #729fcf;*/
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(blue), to(#aaaaee));
background:-moz-linear-gradient(0% 90% 90deg, #aaaaee, blue);
}
#red .ui-slider-handle { border-color: #ef2929; }
#green .ui-slider-handle { border-color: #8ae234; }
#blue .ui-slider-handle { border-color: #729fcf; }
#red .ui-slider-handle,
#green .ui-slider-handle,
#blue .ui-slider-handle {
width: 8px;
height: 8px;
padding:2px;
cursor: pointer;
top:-3px;
border-color: rgba(180,180,180,1);
/*border radius*/
border-radius: 7px;
-webkit-border-radius: 7px;
-moz-border-radius: 7px;
}
#red .ui-slider-handle { background: rgba(200,100,100,1);}
#green .ui-slider-handle { background: rgba(200,100,100,1);}
#blue .ui-slider-handle { background: rgba(200,100,100,1);}
.red { background:#ff9999;}
.green { background:#99ff99;}
.blue { background:#9999ff;}
#btn_dl_logs {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(250,10,10,1)), to(rgba(220,30,30,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(250,10,10,1), rgba(220,30,30,1)); /* for firefox 3.6+ */
}
#btn_dl_logs:hover{
background: -webkit-gradient(linear, left top, left bottom, from(rgba(256,70,70,1)), to(rgba(255,100,100,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(256,70,70,1), rgba(230,100,100,1)); /* for firefox 3.6+ */
}
#btn_dl_logs:active, #btn_dl_logs:disabled {
background: -webkit-gradient(linear, left top, left bottom, from(rgba(150,150,150,1)), to(rgba(200,200,200,1))); /* for webkit browsers */
background: -moz-linear-gradient(top, rgba(150,150,150,1), rgba(200,200,200,1)); /* for firefox 3.6+ */
color: rgba(100,100,100,1);
}
.buffer {
background:red;
width:240px;
height:15px;
border-radius:3px;
margin:0px 10px 0px 10px;
}
.buffer_free {
/*background-color:#009900;*/
background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(green), to(#00cc00));
background:-moz-linear-gradient(0% 90% 90deg, #00cc00, green);
text-align:center;
font-size:0.7em;
color:white;
overflow:hidden;
height:15px;
line-height:15px;
border-radius:3px 0px 0px 3px;
}
This diff is collapsed.
This diff is collapsed.
jQuery UI Authors (http://jqueryui.com/about)
This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
and logs, available at http://github.com/jquery/jquery-ui
Brandon Aaron
Paul Bakaus (paulbakaus.com)
David Bolter
Rich Caloggero
Chi Cheng (cloudream@gmail.com)
Colin Clark (http://colin.atrc.utoronto.ca/)
Michelle D'Souza
Aaron Eisenberger (aaronchi@gmail.com)
Ariel Flesler
Bohdan Ganicky
Scott González
Marc Grabanski (m@marcgrabanski.com)
Klaus Hartl (stilbuero.de)
Scott Jehl
Cody Lindley
Eduardo Lundgren (eduardolundgren@gmail.com)
Todd Parker
John Resig
Patty Toland
Ca-Phun Ung (yelotofu.com)
Keith Wood (kbwood@virginbroadband.com.au)
Maggie Costello Wachs
Richard D. Worth (rdworth.org)
Jörn Zaefferer (bassistance.de)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment