Commit 10412f81 authored by Andrey Filippov's avatar Andrey Filippov

working on LWIR16 control

parent 2c148fb3
......@@ -26,7 +26,7 @@ var apply_pending = false;
function parse_response(resp){
var result = "";
console.log(resp);
console.log("parse_response(), resp="+resp);
if (resp.getElementsByTagName("result").length!=0){
result = resp.getElementsByTagName("result")[0].childNodes[0].nodeValue;
}else if (resp.getElementsByTagName("reboot").length!=0){
......@@ -40,11 +40,13 @@ function parse_response(resp){
}
function send_request(rq,callback){
console.log("send_request(), rq="+rq);
var request = new XMLHttpRequest();
request.open('GET', rq, true);
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var resp = this.responseXML;
console.log("send_request(), callback, resp="+resp);
callback(resp);
}
};
......@@ -55,8 +57,10 @@ function send_request(rq,callback){
}
function sendStatusRequest(){
console.log("sendStatusRequest()");
var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=status";
if (apply_pending) {
console.log("sendStatusRequest(), apply_pending");
var mod_pars = modParameters();
// console.log('mod_pars members:');
for(const p in mod_pars) {
......@@ -69,6 +73,7 @@ function sendStatusRequest(){
}
function sendRestartRequest(){
console.log("sendRestartRequest()");
var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=restart&cmd=STATUS";
send_request(url,parseStatusResponse);
}
......@@ -76,6 +81,7 @@ function sendRestartRequest(){
function parseStatusResponse(resp){
console.log("parseStatusResponse(), resp="+resp);
var result = "";
// console.log(resp);
if (update_editable) {
......@@ -158,6 +164,7 @@ function parseStatusResponse(resp){
request_num++;
document.getElementById("idrequest_num").value = request_num;
update_editable = false;
console.log("parseStatusResponse() almost Done, sending again sendStatusRequest()");
sendStatusRequest();
}
......
#configuration for LWIR 16 camera
multicam_dir = "footage01"
multicam_rperiod = 5.0
multicam_speriod = 2.0
#save current settings to overwrite those in this file
multicam_conf = "/etc/elphel393/multicamconf.xml"
ips = "192.168.0.41,192.168.0.42,192.168.0.43,192.168.0.44,192.168.0.45"
port_masks= "15,15,15,15,15"
duration = 100
......
......@@ -487,7 +487,7 @@ EOT;
return $results;
}
function runCapture($run_ffc, $nowait = 0, $debug=0) {
function runCapture($run_ffc, $nowait = 0, $debug=0) { // works, but the main script hangs
// TODO: use lwir16.ini
// $eo_quality = 97;
// $exposure = 1000; // 1 ms
......@@ -662,7 +662,7 @@ EOT;
$GLOBALS[CAPTURE_RUN] = 0; // until command
$GLOBALS[LAST_FFC] = 0; // overdue
$GLOBALS[SECUENCE_NUM] = 0;
if ($GLOBALS[DEBUG > 1]) {
if ($GLOBALS[DEBUG] > 1) { // was if ($GLOBALS[DEBUG > 1]) {
printf("--- GLOBALS: ---\n");
print_r($GLOBALS);
}
......
......@@ -11,7 +11,8 @@ DOCS= index.html \
multicam.css \
multicam2.css \
multicam.php \
multicam2.php
multicam2.php \
reboot.html
ZIPDOCS= zip/deflate.js \
zip/inflate.js \
......
......@@ -25,7 +25,90 @@
<div id='display_controls'>
<button type="button" class="collapsible">Recording Status</button>
<div id='display_status'></div>
<button type="button" class="collapsible">LWIR16 Status</button>
<div id='lwir16_status'>
<table><tr><td>
<table>
<tr><td><label for="seq_num" >Seq Num</label></td><td><input type="text" id="idsequence_num" name="seq_num" size="5" value="?" disabled="disabled"></td></tr>
<tr><td><label for="request_num">Requests</label></td><td><input type="text" id="idrequest_num" name="request_num" size="5" value="?" disabled="disabled"></td></tr>
<tr><td><label for="capture_run">Running</label></td><td><input type="checkbox" id="idcapture_run" name="capture_run" disabled="disabled"></td></tr>
</table>
</td><td>
<table>
<tr><td><label for="last_ffc" >Last FFC</label></td><td><input type="text" id="idlast_ffc" name="last_ffc" size="5" value="?" disabled="disabled">s</td></tr>
<tr><td><label for="time_to_ffc" >To FFC</label></td><td><input type="text" id="idtime_to_ffc" name="time_to_ffc" size="5" value="?" disabled="disabled">s</td></tr>
<tr><td colspan = "2">&nbsp;</td></tr>
</table>
</td></tr></table>
</div>
<button type="button" class="collapsible">LWIR16 Controls</button>
<div id='lwir16_controls'>
<table><tr><td>
<table>
<tr><td><button id="idStartStop" name = "nStartStop" disabled="true">???</button></td>
<td><button id="idApply" name = "nApply" disabled = "true">???</button></td>
</tr>
<tr><td><label for="idpre_delay" >Inter-Delay</label></td><td><input type="text" id="idpre_delay" name="pre_delay" size="5" value="?">s</td></tr>
<tr><td><label for="duration" >LWIR frames</label></td><td><input type="text" id="idduration" name="duration" size="5" value="?"></td></tr>
<tr><td><label for="duration_eo" >RGB frames</label></td><td><input type="text" id="idduration_eo" name="duration_eo" size="5" value="?"></td></tr>
<tr><td><label for="compressor_run">Compress Init</label></td><td><input type="checkbox" id="idcompressor_run" name="compressor_run"></td></tr>
</table>
</td><td>
<table>
<tr><td><label for="ffc" >FFC</label></td><td><input type="checkbox" id="idffc" name="ffc"></td></tr>
<tr><td><label for="ffc_period" >FFC period</label></td><td><input type="text" id="idffc_period" name="ffc_period" size="5" value="?"></td></tr>
<tr><td><label for="ffc_groups" >FFC groups</label></td><td><select id="idffc_groups" name="idffc_groups">
<option value="1">1</option>
<option value="2">2</option>
<option value="4" selected="selected">4</option>
</select>
</td></tr>
<tr><td><label for="ffc_frames" >FFC frames</label></td><td><input type="text" id="idffc_frames" name="ffc_frames" size="5" value="?"></td></tr>
<tr><td><label for="debug" >Debug</label></td><td><input type="text" id="iddebug" name="debug" size="5" value="?"></td></tr>
</table>
</td></tr></table>
</div>
<button type="button" class="collapsible">Multicam Controls</button>
<div id='multicam settings'>
<table>
<tr>
<td>
<table>
<th><td colspan="2">Image Refresh<td> </th>
<tr> <td><label>Enable</label></td>
<td>
<div id="toggle_refresh" class="btn-group btn-toggle">
<button class="btn btn-xs btn-success active">ON</button>
<button class="btn btn-xs btn-default">OFF</button>
</div>
</td> </tr>
<tr><td><label for="ref_rate">Images</label></td>
<td><input type="text" id="ref_rate" name="ref_rate" size="4">s</td>
</tr><tr>
<td><label for="sref_rate">Status</label></td>
<td><input type="text" id="sref_rate" name="sref_rate" size="4">s
</td> </tr>
</table>
</td>
<td>
<table><th><td colspan="2">SSD Recording<td> </th>
<tr><td><label>Record</label></td>
<td><div id="toggle_record" class="btn-group btn-toggle">
<button class="btn btn-xs btn-success active">ON</button>
<button class="btn btn-xs btn-default">OFF</button>
</div>
</td>
</tr><tr> <td><label id = "root_dir" for="ssd_directory">/mnt/sda1/</label></td>
<td><input type="text" id="dir_name" name="ssd_directory" size="10"></td>
</tr><tr><td colspan="2">&nbsp;</td></tr></table>
</td>
</tr>
</table>
</div>
<button type="button" class="collapsible">Eyesis Controls</button>
<div id='settings'>
<table>
......@@ -52,11 +135,22 @@
<td>Auto Exposure:</td>
<td>
<div id="toggle_aexp" class="btn-group btn-toggle">
<button class="btn btn-xs btn-success active">ON</button>
<button class="btn btn-xs btn-default">OFF</button>
</div>
</td>
<button class="btn btn-xs btn-success active">ON</button>
<button class="btn btn-xs btn-default">OFF</button>
</div>
</td>
</tr>
<tr id="manual_exposure_div" title='Manual Exposure'>
<td><label for="exposure_ms">Manual</label></td>
<td><input type="text" id="exposure_ms" name="exposure_ms" size="6" value="50">ms</td>
</tr>
<tr id="image_quality_div" title='Image Quality'>
<td><label for="jpeg_quality">Quality</label></td>
<td><input type="text" id="jpeg_quality" name="jpeg_quality" size="6" value="97">%</td>
</tr>
<tr>
<td>
<button id='system_tests' title='system info' class="btn btn-sm btn-success">tests</button>
......
This diff is collapsed.
<?php
include "../include/elphel_functions_include.php";
$cmd = "donothing";
define('CONF_LWIR16', '/etc/elphel393/lwir16.ini');
define('IPS', 'ips');
define('PORT_MASKS', 'port_masks');
define('NUM_PORTS', 4);
define('IMGSRV_PORT0', 2323);
define('PORTSPATH', '/sys/devices/soc0/elphel393-detect_sensors@0');
define('MULTICAM_INI', 'multicam_ini');
define('MULTICAM_DIR', 'multicam_dir');
define('MULTICAM_RPERIOD', 'multicam_rperiod');
define('MULTICAM_SPERIOD', 'multicam_speriod');
define('MULTICAM_CONF', 'multicam_conf');
if (isset($_GET['cmd']))
$cmd = $_GET['cmd'];
$cmd = $_GET['cmd'];
else if (isset($argv[1]))
$cmd = $argv[1];
$cmd = $argv[1];
///$ini = parse_ini_file(CONF_LWIR16);
//$cmd = "donothing";
$config = "/var/volatile/html/multicam.xml";
//$config = "/var/volatile/html/multicam.xml";
// path to sysfs for port scanning
$portspath = "/sys/devices/soc0/elphel393-detect_sensors@0";
//$portspath = "/sys/devices/soc0/elphel393-detect_sensors@0";
// total number of ports in 10393
$nports = 4;
$port0 = 2323;
//$nports = 4;
//$port0 = 2323;
// extract ip addresses
if ($_SERVER['REQUEST_METHOD']==="POST"){
......@@ -27,30 +41,137 @@ if ($_SERVER['REQUEST_METHOD']==="POST"){
$list = $_SERVER['SERVER_ADDR'];
}
}
$ips = explode(',',$list);
// allow CORS
header('Access-Control-Allow-Origin: *');
// does not need configs
switch($cmd){
case "ports":
print(getports());
break;
case "ports":
xml_header();
print(getports());
exit (0);
}
getIni(); // wil exit OK now
//print ("<!--");
//print_r($lwir16_ini);
//print ("-->");
//exit(0);
switch($cmd){
case "ips":
xml_header();
print(getIps());
exit (0);
case "update":
foreach($_GET as $key=>$value) {
if (array_key_exists($key, $GLOBALS[MULTICAM_INI])){
$GLOBALS[MULTICAM_INI][$key] = $value;
}
}
writeConfig();
exitXmlOK();
exit(0); //
case "configs": // return xml with all $GLOBALS[MULTICAM_INI]
xml_header();
print(getConfigs());
exit(0);
// obsolete old commands
/*
case "write":
// write
// use get and post requests
write_config($config,$ips);
print("ok");
break;
write_config($config,$ips);
print("ok");
break;
case "snapshot":
send_zipped_images($ips);
break;
case "read":
default:
default:
// will never need read - config is in http://camip/var/multicam.xml
// read
print(file_get_contents($config));
/// print(file_get_contents($config));
* */
default:
exitXmlOK("Unknown");
}
function getIni() {
$ini= parse_ini_file(CONF_LWIR16);
// define parameter type here
$GLOBALS[MULTICAM_INI][IPS] = $ini[IPS];
$GLOBALS[MULTICAM_INI][PORT_MASKS] = $ini[PORT_MASKS];
$GLOBALS[MULTICAM_INI][MULTICAM_DIR] = $ini[MULTICAM_DIR];
$GLOBALS[MULTICAM_INI][MULTICAM_RPERIOD] = $ini[MULTICAM_RPERIOD];
$GLOBALS[MULTICAM_INI][MULTICAM_SPERIOD] = $ini[MULTICAM_SPERIOD];
$GLOBALS[MULTICAM_INI][MULTICAM_CONF] = $ini[MULTICAM_CONF];
// copy other default parameters
// try to read xml if exists
$multi_xml = 0;
if (file_exists($ini[MULTICAM_CONF])) {
$multi_xml = simplexml_load_file($ini[MULTICAM_CONF]);
}
if ($multi_xml) { // if file exists
$multi_ini = array();
foreach ( $multi_xml->children () as $entry ) {
$GLOBALS[MULTICAM_INI][$entry->getName ()] = (string) $entry;
}
} else {
writeConfig();
}
/*
print ("<!--");
var_dump($GLOBALS[MULTICAM_INI]);
print ("-->");
exit (0);
*/
if (isset($GLOBALS[MULTICAM_INI][IPS])) {
$GLOBALS[IPS] = explode(',',$GLOBALS[MULTICAM_INI][IPS]);
if (isset ($GLOBALS[MULTICAM_INI][PORT_MASKS])){
$masks = explode(',',$GLOBALS[MULTICAM_INI][PORT_MASKS]);
}
// Add port masks incdexed by IPs. Changing IPs resets masks
$GLOBALS[PORT_MASKS] = array();
for ($i = 0; $i < count($GLOBALS[IPS]); $i++){
if (isset($masks) && (count($masks) > $i)){
$GLOBALS[PORT_MASKS][$GLOBALS[IPS][$i]] = (int) $masks[$i];
} else {
$GLOBALS[PORT_MASKS][$GLOBALS[IPS][$i]] = (1 << NUM_PORTS) -1;
}
}
}
/*
print ("<!--");
var_dump($GLOBALS[MULTICAM_INI]);
echo "------------------------";
var_dump($GLOBALS[IPS]);
echo "------------------------";
var_dump($GLOBALS[PORT_MASKS]);
print ("-->");
exit (0);
*/
// exitXmlOK(); // exit for now
}
function writeConfig(){
$xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<multicam>\n";
foreach($GLOBALS[MULTICAM_INI] as $key=>$value){
$xml .= "\t<".$key.'>'.$value.'</'.$key.">\n";
}
$xml .= "</multicam>\n";
file_put_contents($GLOBALS[MULTICAM_INI][MULTICAM_CONF],$xml);
exec('sync');
}
function printToComment($str) {
echo "<!--".$str."-->";
}
function write_config($config,$ips){
......@@ -59,7 +180,7 @@ function write_config($config,$ips){
foreach($ips as $ip){
$list .= "\t<camera>$ip</camera>\n";
}
$xml = "<?xml version='1.0' standalone='yes'?>\n";
$xml = "<?xml version='1.0' encoding=\"iso-8859-1\" standalone='yes'?>\n";
$xml .= "<Document>\n";
$xml .= $list;
$xml .= "</Document>\n";
......@@ -69,32 +190,108 @@ function write_config($config,$ips){
return 0;
}
function getports(){
function getConfigs(){
$xml .= "<configs>\n";
// Add more when available. not Using foreach to keep order
$xml .= xmlEntry(MULTICAM_DIR, $GLOBALS[MULTICAM_INI][MULTICAM_DIR], 1);
$xml .= xmlEntry(MULTICAM_RPERIOD, $GLOBALS[MULTICAM_INI][MULTICAM_RPERIOD], 1);
$xml .= xmlEntry(MULTICAM_SPERIOD, $GLOBALS[MULTICAM_INI][MULTICAM_SPERIOD], 1);
$xml .= "</configs>\n";
return $xml;
}
global $nports, $portspath, $port0;
$res = "\t<camera ip='".$_SERVER['SERVER_ADDR']."'>\n";
for($i=0;$i<$nports;$i++){
$sensor = $portspath."/sensor{$i}0";
function getports(){
$res = "\t<camera ip='".$_SERVER['SERVER_ADDR']."'>\n";
for($i=0;$i<NUM_PORTS;$i++){
$sensor = PORTSPATH."/sensor{$i}0";
// the file is always there actually
if(is_file($sensor)){
$c = trim(file_get_contents($sensor));
$p = $port0+$i;
$p = IMGSRV_PORT0+$i;
$res .= "\t\t<port index='$i' port='$p'>$c</port>\n";
}
}
$res .= "\t</camera>\n";
$xml = "<?xml version='1.0' standalone='yes'?>\n";
$xml .= "<Document>\n";
$xml .= $res;
$xml .= "</Document>\n";
return $xml;
}
function getIps(){
//$GLOBALS[IPS]
$xml = "<cameras>\n";
for($i=0;$i< count($GLOBALS[IPS]);$i++){
$xml .= "\t<ip index='$i'>".$GLOBALS[IPS][$i]."</ip>\n";
}
$xml .= "</cameras>\n";
return $xml;
}
function exitXmlOK($str="ok"){
xml_header();
print ('<'.$str.'/>');
exit(0);
}
function xml_header() {
header("Content-type: text/xml");
header("Pragma: no-cache\n");
// allow CORS: needed for multi cams unified control
header('Access-Control-Allow-Origin: *');
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
}
function xmlEntry($key,$value,$ind=0){
$res = '';
for ($i = 0; $i < $ind; $i++) $res.="\t";
$res .= '<'.$key.'>'.$value.'</'.$key.">\n";
return $res;
}
function applyConf($arr){
//port_masks= "15,15,15,15,15"
if (isset($arr[IPS])) {
$GLOBALS[IPS] = explode(',',$arr[IPS]);
if (isset ($arr[PORT_MASKS])){
$masks = explode(',',$arr[PORT_MASKS]);
}
// Add port masks incdexed by IPs. Changing IPs resets masks
$GLOBALS[PORT_MASKS] = array();
for ($i = 0; $i < count($GLOBALS[IPS]); $i++){
if (isset($masks) && (count($masks) > $i)){
$GLOBALS[PORT_MASKS][$GLOBALS[IPS][$i]] = (int) $masks[$i];
} else {
$GLOBALS[PORT_MASKS][$GLOBALS[IPS][$i]] = (1 << NUM_PORTS) -1;
}
}
}
/*
if (isset($arr[DURATION])){
$GLOBALS[DURATION] = (int) $arr[DURATION];
$GLOBALS[DURATION_EO] = (int) ($GLOBALS[DURATION]/EO_DECIMATE+1);
}
if (isset($arr[DURATION_EO])) $GLOBALS[DURATION_EO] = (int) $arr[DURATION_EO];
if (isset($arr[PRE_DELAY])) $GLOBALS[PRE_DELAY] = (double) $arr[PRE_DELAY];
if (isset($arr[FFC_PERIOD])) $GLOBALS[FFC_PERIOD] = (double) $arr[FFC_PERIOD];
if (isset($arr[FFC_GROUPS])) $GLOBALS[FFC_GROUPS] = (int) $arr[FFC_GROUPS];
if (isset($arr[FFC_FRAMES])) $GLOBALS[FFC_FRAMES] = (int) $arr[FFC_FRAMES];
if (isset($arr[DAEMON_CMD])) $GLOBALS[DAEMON_CMD] = $arr[DAEMON_CMD];
if (isset($arr[DEBUG])) $GLOBALS[DEBUG] = (int) $arr[DEBUG];
if (isset($arr[COMPRESSOR_RUN])) $GLOBALS[COMPRESSOR_RUN] = (int) $arr[COMPRESSOR_RUN]; // only after INIT
if (isset($arr[FFC])) $GLOBALS[FFC] = $arr[FFC]?1:0;
if (isset($arr[TIFF_TELEM])) $GLOBALS[TIFF_TELEM] = (int) $arr[TIFF_TELEM];
if (isset($arr[TIFF_MN])) $GLOBALS[TIFF_MN] = (int) $arr[TIFF_MN];
if (isset($arr[TIFF_MX])) $GLOBALS[TIFF_MX] = (int) $arr[TIFF_MX];
if (isset($arr[TIFF_BIN_SHIFT])) $GLOBALS[TIFF_BIN_SHIFT] = (int) $arr[TIFF_BIN_SHIFT];
if (isset($arr[TIFF_AUTO])) $GLOBALS[TIFF_AUTO] = (int) $arr[TIFF_AUTO];
*/
}
function send_zipped_images($ips){
......
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