Loading src/lwir16/index.html +43 −18 Original line number Diff line number Diff line Loading @@ -18,12 +18,16 @@ var debug;// = 0; var sequence_num;// = 0; var last_ffc;// = 0; var time_to_ffc;// = 0; var left_capture; var capture_run;// = 0; var capture_wait;// wait sequence end to stop var capture_wait_was = 0; var want_run; var request_num = 0; var update_editable = true; var apply_pending = false; console.log("self.location.host="+self.location.host); function parse_response(resp){ var result = ""; console.log("parse_response(), resp="+resp); Loading Loading @@ -58,7 +62,7 @@ function send_request(rq,callback){ function sendStatusRequest(){ console.log("sendStatusRequest()"); var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=status"; var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=status"; if (apply_pending) { console.log("sendStatusRequest(), apply_pending"); var mod_pars = modParameters(); Loading @@ -74,7 +78,7 @@ function sendStatusRequest(){ function sendRestartRequest(){ console.log("sendRestartRequest()"); var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=restart&cmd=STATUS"; var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=restart&cmd=STATUS"; send_request(url,parseStatusResponse); } Loading Loading @@ -145,12 +149,22 @@ function parseStatusResponse(resp){ document.getElementById("idtime_to_ffc").value = time_to_ffc; } if (resp.getElementsByTagName("left_capture").length!=0){ left_capture = parseFloat(resp.getElementsByTagName("left_capture")[0].childNodes[0].nodeValue); document.getElementById("idleft_capture").value = left_capture; } if (resp.getElementsByTagName("capture_run").length!=0){ capture_run = parseInt(resp.getElementsByTagName("capture_run")[0].childNodes[0].nodeValue); document.getElementById("idcapture_run").checked = capture_run > 0; if (update_editable) { document.getElementById("idStartStop").innerHTML=capture_run?"Stop":"Start"; document.getElementById("idStartStop").disabled = false; if (resp.getElementsByTagName("capture_wait").length!=0){ capture_wait_was = capture_wait; capture_wait = parseInt(resp.getElementsByTagName("capture_wait")[0].childNodes[0].nodeValue); } document.getElementById("idcapture_run").checked = (capture_run > 0) || (capture_wait > 0); // still waiting // if (update_editable || (want_run != capture_run)) { if (update_editable || (capture_wait_was && !capture_wait)) { document.getElementById("idStartStop").innerHTML=capture_run?"Stop":(capture_wait?"Waiting":"Start"); document.getElementById("idStartStop").disabled = capture_wait; //false; want_run = capture_run; } } Loading Loading @@ -227,6 +241,13 @@ function clickedApply(){ setPending(); } function clickedAbort(){ setPending(); want_run=false; console.log("sendAbortRequest()"); var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=status&cmd=ABORT"; send_request(url,parseStatusResponse); } </script> </head> Loading @@ -236,6 +257,7 @@ function clickedApply(){ <tr><td> <button id="idStartStop" name = "nStartStop" onclick="clickedRun()" disabled="true">???</button> <button id="idAbort" name = "nAbort" onclick="clickedAbort()">Abort</button> </td><td> <button id="idApply" name = "nApply" onclick="clickedApply()" disabled = "true">???</button> </td><td> </td> <td> </td><td> </td> Loading @@ -249,26 +271,26 @@ function clickedApply(){ <tr><td>Sequence length (@60Hz)</td><td> <input id="idduration" name="nduration" size="10" maxlength="10" value="?" type="text"> </td><td>frames</td><td>Request count</td><td> <input id="idrequest_num" name="nrequest_num" size="10" maxlength="10" value="?" type="text" disabled > </td><td>frames</td><td>Frames left</td><td> <input id="idleft_capture" name="nleft_capture" size="10" maxlength="10" value="?" type="text" disabled > </td><td> </td></tr> <tr><td>Sequence length (@10Hz)</td><td> <input id="idduration_eo" name="nduration_eo" size="10" maxlength="10" value="?" type="text"> </td><td>frames</td><td>Capture run</td><td> <input id="idcapture_run" name="ncapture_run" type="checkbox" disabled> </td><td>frames</td><td>Request count</td><td> <input id="idrequest_num" name="nrequest_num" size="10" maxlength="10" value="?" type="text" disabled > </td><td> </td></tr> <tr><td>FFC</td><td> <input id="idffc" name="nffc" type="checkbox"> </td><td> </td><td>Last FFC</td><td> <input id="idlast_ffc" name="nlast_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> </td><td> </td><td>Capture run</td><td> <input id="idcapture_run" name="ncapture_run" type="checkbox" disabled> </td><td> </td></tr> <tr><td>FFC period</td><td> <input id="idffc_period" name="nffc_period" size="10" maxlength="10" value="?" type="text"> </td><td>sec</td><td>Time to FFC</td><td> <input id="idtime_to_ffc" name="ntime_to_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td><td>Last FFC</td><td> <input id="idlast_ffc" name="nlast_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> <tr><td>FFC groups</td><td> Loading @@ -277,7 +299,10 @@ function clickedApply(){ <option value="2">2</option> <option value="4" selected="selected">4</option> </select> </td><td> </td><td> </td><td> </td><td> </td></tr> </td><td> </td> <td>Time to FFC</td><td> <input id="idtime_to_ffc" name="ntime_to_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> <tr><td>FFC frames</td><td> <input id="idffc_frames" name="nffc_frames" size="10" maxlength="10" value="?" type="text"> Loading src/lwir16/lwir16.ini +17 −11 Original line number Diff line number Diff line Loading @@ -7,9 +7,13 @@ 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 pre_delay = 3.0 ffc_period = 30.0 #1 - run/stop, 2 - continuous, 0 do not use run_modes = "1,1,1,1,2" lwir_fps = 59.98 eo_decimate_m1 = 5 duration = 500 pre_delay = 2.0 ffc_period = 180.0 ffc_groups = 2 ffc_frames = 8 ffc = 1 Loading @@ -18,6 +22,8 @@ tiff_mn = 0 tiff_mx = 65535 tiff_bin_shift = 1 tiff_auto = 0 frames_idle = 10 frames_wait = 20 debug = 1 output_log = /var/log/lwir16.log # no spaces around commas! Loading src/lwir16/lwir16.php +191 −65 File changed.Preview size limit exceeded, changes collapsed. Show changes src/php_top/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ PHP_SCRIPTS=i2c.php \ ccam.php \ diag_utils.php \ framepars.php \ frame_to_ts.php \ parsedit.php \ phpinfo.php \ raw.php \ Loading src/php_top/capture_range.php +114 −33 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ *! -----------------------------------------------------------------------------** *! */ define('CAPTURE_RANGE_STATE', '/var/state/capture_range.state'); set_include_path ( get_include_path () . PATH_SEPARATOR . '/www/pages/include' ); include 'show_source_include.php'; include "elphel_functions_include.php"; // includes curl functions Loading @@ -41,6 +42,7 @@ $port_mask = $argv[2]; $frame = $argv[3]; // absolute frame to start compressor $duration = $argv[4]; // number of frames to run compressor $notify = $argv[5]; // double-quoted URL if ($frame > 0){ $frame +=1; // seem there is a bug - actual compressed frames numbers (and last compressed frame number) are 1 less than expected Loading @@ -53,6 +55,9 @@ elphel_capture_range($sensor_port, $port_mask, $frame, $duration); // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"elphel_capture_range DONE\n"); if ($notify){ // complete url with http:// file_get_contents($notify); } // fclose ( $f ); exit(0); } Loading @@ -64,6 +69,9 @@ if (count($_GET) < 1) { print ("CGI mode"); // Be carefull watching that USAGE is not indented (after auto-indenting). That leads to errors such as (at much later line number)! // Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) // or number (T_NUM_STRING) in /www/pages/capture_range.php on line 143 echo <<<USAGE <p>This script returns the timestamp for specified frame (frame=?) or expected frame number when the specified timestamp (timestamp = ?.?) will be reached. If none of the frame number Loading @@ -78,6 +86,8 @@ USAGE; $timestamp = 0.0; $PARS_FRAMES = 16; $minahead = 2; $notify_args=array(); $notify_url=""; // $port_mask = 15; // not set - same as ts2frame.php // $duration = 1; // not set - end, set - start // $wait = false; Loading @@ -85,6 +95,8 @@ USAGE; foreach($_GET as $key=>$value) { if ($key == 'sensor_port'){ $sensor_port = (integer) $value; } else if (($key == 'state')) { $read_state = 1; // all other parameters will not be used, maybe in the future - use multi request and combine responses? } else if (($key == 'a') || ($key == 'ahead')){ // will overwrite timestamp with this value (in seconds) from now $ahead_now = (double) $value; } else if (($key == 'ts') || ($key == 'timestamp')){ Loading @@ -109,8 +121,65 @@ USAGE; $extra = (integer) $value; // not used? } else if (($key == 'ip') || ($key == 'ips')){ // multicamera operation $ips = explode(',',$value); } else if (substr($key,0,7) == "notify_") { $nk = substr($key,7); if ($nk == 'cmd'){ $notify_cmd=$value; } else if (substr($nk,0,3) == 'key') { $ni = intval(substr($nk,3)); if (!isset($notify_args[$ni])) $notify_args[$ni]=array(); $notify_args[$ni][0] = $value; } else if (substr($nk,0,3) == 'val') { $ni = intval(substr($nk,3)); if (!isset($notify_args[$ni])) $notify_args[$ni]=array(); $notify_args[$ni][1] = $value; } } } //capture_range.php?sensor_port=0&state&frame=20 # will respond and block if there are fewer than 20 frames if (isset($read_state)) { // if $frame >0 wait if less frames are left $xml = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><capture_range/>"); // does the state file exist? $this_frame = 0; $left = 0; if (file_exists(CAPTURE_RANGE_STATE)) { $ini = parse_ini_file(CAPTURE_RANGE_STATE); $end_frame = intval($ini['end_frame']); $this_frame=elphel_get_frame($sensor_port); $left = $end_frame - $this_frame; if (($frame > 0) && ($left > 0) && ($left < $frame)){ elphel_wait_frame_abs($sensor_port, $end_frame); // wait and block client } $this_frame=elphel_get_frame($sensor_port); $left = $end_frame - $this_frame; } $xml->addChild ('frame',$this_frame); $xml->addChild ('end_frame',$end_frame); $xml->addChild ('left',$left); $rslt=$xml->asXML(); header("Content-Type: text/xml"); header("Content-Length: ".strlen($rslt)."\n"); header("Pragma: no-cache\n"); printf($rslt); exit(0); } if (isset($notify_cmd)){ $wait = false; $notify_url='http://'.$notify_cmd; // $notify_cmd includes full url $i=0; foreach ($notify_args as $kv) { if (isset($kv[0])) { $notify_url .= ($i ? '&' : '?'); // $notify_url .= ($i ? '&' : '?'); $notify_url .= $kv[0]; if (isset($kv[1])) { $notify_url .= '=' . $kv[1]; } $i ++; } } } if (isset($ahead_now)){ $this_frame=elphel_get_frame($sensor_port); $this_timestamp=elphel_frame2ts($sensor_port,$this_frame); Loading Loading @@ -190,20 +259,21 @@ USAGE; $xml = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><capture_range/>"); $flags = 0; $use_daemon = ($frame != 0); if (isset($port_mask)) { // start or stop compressor $this_frame = elphel_get_frame($sensor_port); if ($frame == 0){ // e.g. to stop ASAP if (! $use_daemon) { // e.g. to stop ASAP $frame=0, $duration !=0 - start ASAP if (isset($duration)) { elphel_compressor_run($sensor_port, 0, $flags, $port_mask); // turn on ASAP $xml->addChild('compressor', 1); } else { } else { // frame = 0; duration ==0 - stop ASAP elphel_compressor_stop($sensor_port, 0, $flags, $port_mask); // turn off ASAP $xml->addChild('compressor', 0); } $frame = $this_frame + $minahead; } $ahead = $frame - $this_frame; if ($ahead < $minahead) { if ($use_daemon && ($ahead < $minahead)) { $xml->addChild('error', 'TOO LATE'); $xml->addChild('ahead', $ahead); } else { // OK, enough time to program Loading @@ -216,16 +286,27 @@ USAGE; // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"exec(/www/pages/capture_range.php $sensor_port $port_mask $frame $duration > /dev/null 2>&1 &\n"); // fclose ( $f ); exec("/www/pages/capture_range.php $sensor_port $port_mask $frame $duration > /dev/null 2>&1 &"); // if ($notify_url) { // $xml->addChild ('notify_url', $notify_url); // urlencode($notify_url)); // dry run, do nothing // } else { if ($use_daemon) { exec("/www/pages/capture_range.php $sensor_port $port_mask $frame $duration '$notify_url'> /dev/null 2>&1 &"); // } // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"DONE exec\n"); // fclose ( $f ); if ($duration > 0) { $frame += $duration; // xml will contain end frame } file_put_contents(CAPTURE_RANGE_STATE, "end_frame = $frame\n"); if ($wait) { elphel_wait_frame_abs($sensor_port, $frame + 1); } } else { if (file_exists(CAPTURE_RANGE_STATE)) { unlink(CAPTURE_RANGE_STATE); } } } } else { // just ts2frame.php mode if ($frame == 0) { Loading Loading
src/lwir16/index.html +43 −18 Original line number Diff line number Diff line Loading @@ -18,12 +18,16 @@ var debug;// = 0; var sequence_num;// = 0; var last_ffc;// = 0; var time_to_ffc;// = 0; var left_capture; var capture_run;// = 0; var capture_wait;// wait sequence end to stop var capture_wait_was = 0; var want_run; var request_num = 0; var update_editable = true; var apply_pending = false; console.log("self.location.host="+self.location.host); function parse_response(resp){ var result = ""; console.log("parse_response(), resp="+resp); Loading Loading @@ -58,7 +62,7 @@ function send_request(rq,callback){ function sendStatusRequest(){ console.log("sendStatusRequest()"); var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=status"; var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=status"; if (apply_pending) { console.log("sendStatusRequest(), apply_pending"); var mod_pars = modParameters(); Loading @@ -74,7 +78,7 @@ function sendStatusRequest(){ function sendRestartRequest(){ console.log("sendRestartRequest()"); var url = "http://192.168.0.41/lwir16/lwir16.php?daemon=restart&cmd=STATUS"; var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=restart&cmd=STATUS"; send_request(url,parseStatusResponse); } Loading Loading @@ -145,12 +149,22 @@ function parseStatusResponse(resp){ document.getElementById("idtime_to_ffc").value = time_to_ffc; } if (resp.getElementsByTagName("left_capture").length!=0){ left_capture = parseFloat(resp.getElementsByTagName("left_capture")[0].childNodes[0].nodeValue); document.getElementById("idleft_capture").value = left_capture; } if (resp.getElementsByTagName("capture_run").length!=0){ capture_run = parseInt(resp.getElementsByTagName("capture_run")[0].childNodes[0].nodeValue); document.getElementById("idcapture_run").checked = capture_run > 0; if (update_editable) { document.getElementById("idStartStop").innerHTML=capture_run?"Stop":"Start"; document.getElementById("idStartStop").disabled = false; if (resp.getElementsByTagName("capture_wait").length!=0){ capture_wait_was = capture_wait; capture_wait = parseInt(resp.getElementsByTagName("capture_wait")[0].childNodes[0].nodeValue); } document.getElementById("idcapture_run").checked = (capture_run > 0) || (capture_wait > 0); // still waiting // if (update_editable || (want_run != capture_run)) { if (update_editable || (capture_wait_was && !capture_wait)) { document.getElementById("idStartStop").innerHTML=capture_run?"Stop":(capture_wait?"Waiting":"Start"); document.getElementById("idStartStop").disabled = capture_wait; //false; want_run = capture_run; } } Loading Loading @@ -227,6 +241,13 @@ function clickedApply(){ setPending(); } function clickedAbort(){ setPending(); want_run=false; console.log("sendAbortRequest()"); var url = "http://"+self.location.host+"/lwir16/lwir16.php?daemon=status&cmd=ABORT"; send_request(url,parseStatusResponse); } </script> </head> Loading @@ -236,6 +257,7 @@ function clickedApply(){ <tr><td> <button id="idStartStop" name = "nStartStop" onclick="clickedRun()" disabled="true">???</button> <button id="idAbort" name = "nAbort" onclick="clickedAbort()">Abort</button> </td><td> <button id="idApply" name = "nApply" onclick="clickedApply()" disabled = "true">???</button> </td><td> </td> <td> </td><td> </td> Loading @@ -249,26 +271,26 @@ function clickedApply(){ <tr><td>Sequence length (@60Hz)</td><td> <input id="idduration" name="nduration" size="10" maxlength="10" value="?" type="text"> </td><td>frames</td><td>Request count</td><td> <input id="idrequest_num" name="nrequest_num" size="10" maxlength="10" value="?" type="text" disabled > </td><td>frames</td><td>Frames left</td><td> <input id="idleft_capture" name="nleft_capture" size="10" maxlength="10" value="?" type="text" disabled > </td><td> </td></tr> <tr><td>Sequence length (@10Hz)</td><td> <input id="idduration_eo" name="nduration_eo" size="10" maxlength="10" value="?" type="text"> </td><td>frames</td><td>Capture run</td><td> <input id="idcapture_run" name="ncapture_run" type="checkbox" disabled> </td><td>frames</td><td>Request count</td><td> <input id="idrequest_num" name="nrequest_num" size="10" maxlength="10" value="?" type="text" disabled > </td><td> </td></tr> <tr><td>FFC</td><td> <input id="idffc" name="nffc" type="checkbox"> </td><td> </td><td>Last FFC</td><td> <input id="idlast_ffc" name="nlast_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> </td><td> </td><td>Capture run</td><td> <input id="idcapture_run" name="ncapture_run" type="checkbox" disabled> </td><td> </td></tr> <tr><td>FFC period</td><td> <input id="idffc_period" name="nffc_period" size="10" maxlength="10" value="?" type="text"> </td><td>sec</td><td>Time to FFC</td><td> <input id="idtime_to_ffc" name="ntime_to_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td><td>Last FFC</td><td> <input id="idlast_ffc" name="nlast_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> <tr><td>FFC groups</td><td> Loading @@ -277,7 +299,10 @@ function clickedApply(){ <option value="2">2</option> <option value="4" selected="selected">4</option> </select> </td><td> </td><td> </td><td> </td><td> </td></tr> </td><td> </td> <td>Time to FFC</td><td> <input id="idtime_to_ffc" name="ntime_to_ffc" size="10" maxlength="10" value="?" type="text" disabled > </td><td>sec</td></tr> <tr><td>FFC frames</td><td> <input id="idffc_frames" name="nffc_frames" size="10" maxlength="10" value="?" type="text"> Loading
src/lwir16/lwir16.ini +17 −11 Original line number Diff line number Diff line Loading @@ -7,9 +7,13 @@ 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 pre_delay = 3.0 ffc_period = 30.0 #1 - run/stop, 2 - continuous, 0 do not use run_modes = "1,1,1,1,2" lwir_fps = 59.98 eo_decimate_m1 = 5 duration = 500 pre_delay = 2.0 ffc_period = 180.0 ffc_groups = 2 ffc_frames = 8 ffc = 1 Loading @@ -18,6 +22,8 @@ tiff_mn = 0 tiff_mx = 65535 tiff_bin_shift = 1 tiff_auto = 0 frames_idle = 10 frames_wait = 20 debug = 1 output_log = /var/log/lwir16.log # no spaces around commas! Loading
src/lwir16/lwir16.php +191 −65 File changed.Preview size limit exceeded, changes collapsed. Show changes
src/php_top/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ PHP_SCRIPTS=i2c.php \ ccam.php \ diag_utils.php \ framepars.php \ frame_to_ts.php \ parsedit.php \ phpinfo.php \ raw.php \ Loading
src/php_top/capture_range.php +114 −33 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ *! -----------------------------------------------------------------------------** *! */ define('CAPTURE_RANGE_STATE', '/var/state/capture_range.state'); set_include_path ( get_include_path () . PATH_SEPARATOR . '/www/pages/include' ); include 'show_source_include.php'; include "elphel_functions_include.php"; // includes curl functions Loading @@ -41,6 +42,7 @@ $port_mask = $argv[2]; $frame = $argv[3]; // absolute frame to start compressor $duration = $argv[4]; // number of frames to run compressor $notify = $argv[5]; // double-quoted URL if ($frame > 0){ $frame +=1; // seem there is a bug - actual compressed frames numbers (and last compressed frame number) are 1 less than expected Loading @@ -53,6 +55,9 @@ elphel_capture_range($sensor_port, $port_mask, $frame, $duration); // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"elphel_capture_range DONE\n"); if ($notify){ // complete url with http:// file_get_contents($notify); } // fclose ( $f ); exit(0); } Loading @@ -64,6 +69,9 @@ if (count($_GET) < 1) { print ("CGI mode"); // Be carefull watching that USAGE is not indented (after auto-indenting). That leads to errors such as (at much later line number)! // Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) // or number (T_NUM_STRING) in /www/pages/capture_range.php on line 143 echo <<<USAGE <p>This script returns the timestamp for specified frame (frame=?) or expected frame number when the specified timestamp (timestamp = ?.?) will be reached. If none of the frame number Loading @@ -78,6 +86,8 @@ USAGE; $timestamp = 0.0; $PARS_FRAMES = 16; $minahead = 2; $notify_args=array(); $notify_url=""; // $port_mask = 15; // not set - same as ts2frame.php // $duration = 1; // not set - end, set - start // $wait = false; Loading @@ -85,6 +95,8 @@ USAGE; foreach($_GET as $key=>$value) { if ($key == 'sensor_port'){ $sensor_port = (integer) $value; } else if (($key == 'state')) { $read_state = 1; // all other parameters will not be used, maybe in the future - use multi request and combine responses? } else if (($key == 'a') || ($key == 'ahead')){ // will overwrite timestamp with this value (in seconds) from now $ahead_now = (double) $value; } else if (($key == 'ts') || ($key == 'timestamp')){ Loading @@ -109,8 +121,65 @@ USAGE; $extra = (integer) $value; // not used? } else if (($key == 'ip') || ($key == 'ips')){ // multicamera operation $ips = explode(',',$value); } else if (substr($key,0,7) == "notify_") { $nk = substr($key,7); if ($nk == 'cmd'){ $notify_cmd=$value; } else if (substr($nk,0,3) == 'key') { $ni = intval(substr($nk,3)); if (!isset($notify_args[$ni])) $notify_args[$ni]=array(); $notify_args[$ni][0] = $value; } else if (substr($nk,0,3) == 'val') { $ni = intval(substr($nk,3)); if (!isset($notify_args[$ni])) $notify_args[$ni]=array(); $notify_args[$ni][1] = $value; } } } //capture_range.php?sensor_port=0&state&frame=20 # will respond and block if there are fewer than 20 frames if (isset($read_state)) { // if $frame >0 wait if less frames are left $xml = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><capture_range/>"); // does the state file exist? $this_frame = 0; $left = 0; if (file_exists(CAPTURE_RANGE_STATE)) { $ini = parse_ini_file(CAPTURE_RANGE_STATE); $end_frame = intval($ini['end_frame']); $this_frame=elphel_get_frame($sensor_port); $left = $end_frame - $this_frame; if (($frame > 0) && ($left > 0) && ($left < $frame)){ elphel_wait_frame_abs($sensor_port, $end_frame); // wait and block client } $this_frame=elphel_get_frame($sensor_port); $left = $end_frame - $this_frame; } $xml->addChild ('frame',$this_frame); $xml->addChild ('end_frame',$end_frame); $xml->addChild ('left',$left); $rslt=$xml->asXML(); header("Content-Type: text/xml"); header("Content-Length: ".strlen($rslt)."\n"); header("Pragma: no-cache\n"); printf($rslt); exit(0); } if (isset($notify_cmd)){ $wait = false; $notify_url='http://'.$notify_cmd; // $notify_cmd includes full url $i=0; foreach ($notify_args as $kv) { if (isset($kv[0])) { $notify_url .= ($i ? '&' : '?'); // $notify_url .= ($i ? '&' : '?'); $notify_url .= $kv[0]; if (isset($kv[1])) { $notify_url .= '=' . $kv[1]; } $i ++; } } } if (isset($ahead_now)){ $this_frame=elphel_get_frame($sensor_port); $this_timestamp=elphel_frame2ts($sensor_port,$this_frame); Loading Loading @@ -190,20 +259,21 @@ USAGE; $xml = new SimpleXMLElement("<?xml version='1.0' standalone='yes'?><capture_range/>"); $flags = 0; $use_daemon = ($frame != 0); if (isset($port_mask)) { // start or stop compressor $this_frame = elphel_get_frame($sensor_port); if ($frame == 0){ // e.g. to stop ASAP if (! $use_daemon) { // e.g. to stop ASAP $frame=0, $duration !=0 - start ASAP if (isset($duration)) { elphel_compressor_run($sensor_port, 0, $flags, $port_mask); // turn on ASAP $xml->addChild('compressor', 1); } else { } else { // frame = 0; duration ==0 - stop ASAP elphel_compressor_stop($sensor_port, 0, $flags, $port_mask); // turn off ASAP $xml->addChild('compressor', 0); } $frame = $this_frame + $minahead; } $ahead = $frame - $this_frame; if ($ahead < $minahead) { if ($use_daemon && ($ahead < $minahead)) { $xml->addChild('error', 'TOO LATE'); $xml->addChild('ahead', $ahead); } else { // OK, enough time to program Loading @@ -216,16 +286,27 @@ USAGE; // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"exec(/www/pages/capture_range.php $sensor_port $port_mask $frame $duration > /dev/null 2>&1 &\n"); // fclose ( $f ); exec("/www/pages/capture_range.php $sensor_port $port_mask $frame $duration > /dev/null 2>&1 &"); // if ($notify_url) { // $xml->addChild ('notify_url', $notify_url); // urlencode($notify_url)); // dry run, do nothing // } else { if ($use_daemon) { exec("/www/pages/capture_range.php $sensor_port $port_mask $frame $duration '$notify_url'> /dev/null 2>&1 &"); // } // $f = fopen ( "/var/log/capture_range.log", 'a' ); // fwrite($f,"DONE exec\n"); // fclose ( $f ); if ($duration > 0) { $frame += $duration; // xml will contain end frame } file_put_contents(CAPTURE_RANGE_STATE, "end_frame = $frame\n"); if ($wait) { elphel_wait_frame_abs($sensor_port, $frame + 1); } } else { if (file_exists(CAPTURE_RANGE_STATE)) { unlink(CAPTURE_RANGE_STATE); } } } } else { // just ts2frame.php mode if ($frame == 0) { Loading