Loading src/autocampars.php +61 −71 Original line number Original line Diff line number Diff line Loading @@ -276,7 +276,7 @@ log_msg("Processing camera state: " . $GLOBALS['camera_state_arr']['state']); get_sysfs_sensors(); get_sysfs_sensors(); log_msg("Sensors map read from the sysfs:\n".str_sensors($GLOBALS['sensors']),1); log_msg("Sensors map read from the sysfs: ".str_sensors($GLOBALS['sensors'],1),1); $GLOBALS['useDefaultPageNumber'] = 15; $GLOBALS['useDefaultPageNumber'] = 15; $GLOBALS['protectedPage'] = 0; // / change to -1 to enable saving to page 0 $GLOBALS['protectedPage'] = 0; // / change to -1 to enable saving to page 0 Loading Loading @@ -507,15 +507,15 @@ function update_minor_version($port, $silent = 0) { if (substr ( $GLOBALS ['configs'] [$port] ['version'], 0, strrpos ( $GLOBALS ['configs'] [$port] ['version'], '.' ) ) == if (substr ( $GLOBALS ['configs'] [$port] ['version'], 0, strrpos ( $GLOBALS ['configs'] [$port] ['version'], '.' ) ) == substr ( $GLOBALS ['version'], 0, strrpos ( $GLOBALS ['version'], '.' ) )) { substr ( $GLOBALS ['version'], 0, strrpos ( $GLOBALS ['version'], '.' ) )) { if (!$silent) { if (!$silent) { log_msg ( "+++ WARNING: updating minor mismatch version for port $port: " . log_msg ( "WARNING: updating minor mismatch version for port $port: " . $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'] ); $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'], 4); } } $GLOBALS ['configs'] [$port] ['version'] = $GLOBALS ['version']; $GLOBALS ['configs'] [$port] ['version'] = $GLOBALS ['version']; $GLOBALS['configs'][$port]['version'] = $GLOBALS['version']; $GLOBALS['configs'][$port]['version'] = $GLOBALS['version']; saveRotateConfig ($port, $GLOBALS['numBackups'] ); saveRotateConfig ($port, $GLOBALS['numBackups'] ); } else { } else { log_msg ( "+++ ERROR: Can not auto-update version for port $port as MAJOR revision differs: " . log_msg ( "ERROR: Can not auto-update version for port $port as MAJOR revision differs: " . $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'] ); $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'], 2); } } } } } } Loading Loading @@ -625,15 +625,16 @@ function detect_camera(){ } } } } if ($needupdate) { if ($needupdate) { log_msg("Sensors not disabled by the application mode (10389 EEPROM):\n".str_sensors($GLOBALS['sensors']),1); log_msg("Sensors not disabled by the application mode (10389 EEPROM): ".str_sensors($GLOBALS['sensors'],1),1); update_sysfs_sensors(); update_sysfs_sensors(); } } // All eyesis cameras - disable fan control to re-use for 10359 power // All eyesis cameras - disable fan control to re-use for 10359 power if ($GLOBALS['camera_state_arr']['eyesis_power']){ // disable fan control, reuse it to control power if ($GLOBALS['camera_state_arr']['eyesis_power']){ // disable fan control, reuse it to control power $rslt=set_eyesis_power_control(); $rslt=set_eyesis_power_control(); log_msg("set_eyesis_power_control()=>".print_r($rslt,1)); log_msg("Setting sensors/multiplexers power"); log_msg("GLOBALS['camera_state_arr']=>".print_r($GLOBALS['camera_state_arr'],1)); log_msg("set_eyesis_power_control()=>".print_r($rslt,1),0); log_msg("GLOBALS['camera_state_arr']=>".print_r($GLOBALS['camera_state_arr'],1),0); } } // Set IPs of slave cameras (if any) // Set IPs of slave cameras (if any) if ($multicamera) { if ($multicamera) { Loading @@ -658,7 +659,7 @@ function detect_camera(){ } } log_msg("Continue with master camera"); log_msg("Continue with master camera"); log_msg("=== Setting FPGA and sensor power ==="); log_msg("Setting FPGA and sensor power"); if ($GLOBALS['camera_state_arr']['has_slaves']) { if ($GLOBALS['camera_state_arr']['has_slaves']) { $rslt = wait_slaves_boot ($GLOBALS['BOOT_RETRIES']); $rslt = wait_slaves_boot ($GLOBALS['BOOT_RETRIES']); Loading Loading @@ -737,8 +738,8 @@ function detect_camera(){ fclose($f); fclose($f); log_msg("Started detection for sensor port ".$port); log_msg("Started detection for sensor port ".$port); } } log_msg("System FPGA version: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_version'))); log_msg("System FPGA version: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_version')), 3); log_msg("Sensor interface type: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_sensor_interface'))); log_msg("Sensor interface type: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_sensor_interface')), 3); log_msg("All frames:\n" .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')),0); log_msg("All frames:\n" .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')),0); log_msg('Frames: '. implode(", ",$frame_nums),0); log_msg('Frames: '. implode(", ",$frame_nums),0); Loading @@ -747,7 +748,7 @@ function detect_camera(){ foreach ($GLOBALS['ports'] as $port) { foreach ($GLOBALS['ports'] as $port) { if (elphel_get_P_value ( $port, ELPHEL_SENSOR) != $sensor_code){ if (elphel_get_P_value ( $port, ELPHEL_SENSOR) != $sensor_code){ log_msg("#### Wrong/missing sensor on port ".$port.", code=".elphel_get_P_value ( $port, ELPHEL_SENSOR). log_msg("#### Wrong/missing sensor on port ".$port.", code=".elphel_get_P_value ( $port, ELPHEL_SENSOR). ' (expected '.$sensor_code.") . Driver reports errors until port is disabled at later stage ####",1); ' (expected '.$sensor_code.") . Driver reports errors until port is disabled at later stage ####",2); for ($chn =0; $chn <4; $chn++) { for ($chn =0; $chn <4; $chn++) { $GLOBALS['sensors'][$port][$chn] = 'none'; $GLOBALS['sensors'][$port][$chn] = 'none'; } } Loading Loading @@ -775,7 +776,7 @@ function detect_camera(){ } } } } if ($needupdate) update_sysfs_sensors(); if ($needupdate) update_sysfs_sensors(); log_msg("detected sensors:\n".str_sensors($GLOBALS['sensors']),1); log_msg("Detected sensors: ".str_sensors($GLOBALS['sensors'],1),3); // Collect results from slave channels that were running in parallel // Collect results from slave channels that were running in parallel $nrep =0; $nrep =0; Loading Loading @@ -838,9 +839,10 @@ function detect_camera(){ if (isset ($curl_data)){ // wait and collect responses if (isset ($curl_data)){ // wait and collect responses $enable_echo = !array_key_exists('REQUEST_METHOD',$_SERVER); $enable_echo = !array_key_exists('REQUEST_METHOD',$_SERVER); if ($enable_echo) echo "Waiting slaves to finish: "; if ($enable_echo) echo colorize("Waiting slaves to finish (number left): ",'YELLOW',0); $results = curl_multi_finish($curl_data, true, 0, $enable_echo); // Switch true -> false if errors are reported (other output damaged XML) $results = curl_multi_finish($curl_data, true, 0, $enable_echo); // Switch true -> false if errors are reported (other output damaged XML) log_msg('curl_multi returned: '.print_r($results,1)); if ($enable_echo) echo colorize(" DONE\n",'GREEN',0); log_msg('curl_multi returned: '.print_r($results,1),0); } } if ($GLOBALS['camera_state_arr']['exit_stage'] == $GLOBALS['camera_state_arr']['state']){ if ($GLOBALS['camera_state_arr']['exit_stage'] == $GLOBALS['camera_state_arr']['state']){ respond_xml($GLOBALS['camera_state_arr']['state']); respond_xml($GLOBALS['camera_state_arr']['state']); Loading @@ -854,10 +856,16 @@ function detect_camera(){ } } function str_sensors($sens_arr){ function str_sensors($sens_arr,$inline=0){ $sports=array(); $sports=array(); if ($inline) { foreach ($sens_arr as $port=>$subchn) $sports[]=implode(", ",$subchn); return '['.implode("],[",$sports).']'; } else { foreach ($sens_arr as $port=>$subchn) $sports[]=$port.': '.implode(", ",$subchn); foreach ($sens_arr as $port=>$subchn) $sports[]=$port.': '.implode(", ",$subchn); return implode("\n",$sports); return implode("\n",$sports); } } } Loading Loading @@ -906,7 +914,7 @@ function init_cameras(){ // $page) { init can only be from default page as page $urls[] = "http://" . $ip . "/autocampars.php?init_stage=SENSORS_SYNCHRONIZED&exit_stage=INITIALIZED"; $urls[] = "http://" . $ip . "/autocampars.php?init_stage=SENSORS_SYNCHRONIZED&exit_stage=INITIALIZED"; } } $curl_data = curl_multi_start ($urls); $curl_data = curl_multi_start ($urls); log_msg ($cmd . 'Started curl_multi: '.print_r($urls),0); log_msg ($cmd . 'Started curl_multi: '.print_r($urls,1),0); } } // Set most parameters in immediate mode (to protect from i2c 64-command overflow), // Set most parameters in immediate mode (to protect from i2c 64-command overflow), Loading Loading @@ -1020,7 +1028,7 @@ function init_cameras(){ // $page) { init can only be from default page as page log_msg("2.Trigger $i:\n".file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')); log_msg("2.Trigger $i:\n".file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')); } } elphel_set_P_arr ($GLOBALS['master_port'], $GLOBALS['trig_pars']); // set other parameters - they will not take effect immediately elphel_set_P_arr ($GLOBALS['master_port'], $GLOBALS['trig_pars']); // set other parameters - they will not take effect immediately log_msg("Started camera in free running mode"); log_msg("Started camera in free running mode",3); log_msg("Reached state ".$GLOBALS['camera_state_arr']['state']); log_msg("Reached state ".$GLOBALS['camera_state_arr']['state']); } else if (!array_key_exists('TRIG_CONDITION',$GLOBALS['trig_pars']) || !$GLOBALS['trig_pars']['TRIG_CONDITION']){ } else if (!array_key_exists('TRIG_CONDITION',$GLOBALS['trig_pars']) || !$GLOBALS['trig_pars']['TRIG_CONDITION']){ Loading @@ -1037,7 +1045,7 @@ function init_cameras(){ // $page) { init can only be from default page as page usleep ($GLOBALS['camera_state_arr']['max_frame_time']); usleep ($GLOBALS['camera_state_arr']['max_frame_time']); if ($trig_period){ if ($trig_period){ elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); log_msg("Started camera in periodic self-triggered mode, period = ".(0.00000001*$trig_period)." s"); log_msg("Started camera in periodic self-triggered mode, period = ".(0.00000001*$trig_period)." s",3); } else { // manually advance frames } else { // manually advance frames if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; Loading Loading @@ -1077,8 +1085,9 @@ function init_cameras(){ // $page) { init can only be from default page as page log_msg(" trig_period = $trig_period"); log_msg(" trig_period = $trig_period"); log_msg("Remaining GLOBALS[trig_pars] = ".print_r($GLOBALS['trig_pars'],1)); log_msg("Remaining GLOBALS[trig_pars] = ".print_r($GLOBALS['trig_pars'],1)); $enable_echo = !array_key_exists ('REQUEST_METHOD', $_SERVER); $enable_echo = !array_key_exists ('REQUEST_METHOD', $_SERVER); if ($enable_echo) echo "Waiting slaves to finish initialization: "; if ($enable_echo) echo colorize("Waiting slaves to finish initialization (number left): ",'YELLOW',0); $results = curl_multi_finish ($curl_data, true, 0, $enable_echo); $results = curl_multi_finish ($curl_data, true, 0, $enable_echo); if ($enable_echo) echo colorize(" DONE\n",'GREEN',0); ////$results = curl_multi_finish ($curl_data, false, 0, $enable_echo); ////$results = curl_multi_finish ($curl_data, false, 0, $enable_echo); log_msg ('curl_multi returned: ' . print_r ($results, 1)); log_msg ('curl_multi returned: ' . print_r ($results, 1)); unset ($curl_data); unset ($curl_data); Loading @@ -1091,7 +1100,7 @@ function init_cameras(){ // $page) { init can only be from default page as page } } if ($trig_period){ if ($trig_period){ elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); log_msg("Started camera in periodic mode, period = ".(0.00000001*$trig_period)." s"); log_msg("Started camera in periodic mode, period = ".(0.00000001*$trig_period)." s",3); } else { // manually advance frames } else { // manually advance frames if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; Loading Loading @@ -1196,38 +1205,7 @@ function update_sysfs_sensors() get_sysfs_sensors(); get_sysfs_sensors(); log_msg ("Updated sysfs sensor map"); log_msg ("Updated sysfs sensor map"); } } /* def colorize(string, color, bold): color=color.upper() attr = [] if color == 'RED': attr.append('31') elif color == 'GREEN': attr.append('32') elif color == 'YELLOW': attr.append('33') elif color == 'BLUE': attr.append('34') elif color == 'MAGENTA': attr.append('35') elif color == 'CYAN': attr.append('36') elif color == 'GRAY': attr.append('37') else: pass # red if bold: attr.append('1') return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) def log_msg(msg): with open ('/proc/uptime') as f: t=float(f.read().split()[0]) with open(LOGFILE,'a') as msg_file: print (colorize("[%8.2f] %s: "%(t, sys.argv[0].split('/')[-1].split('.')[0]),'YELLOW',0)+msg) print("[%8.2f] %s"%(t,msg),file=msg_file) */ function colorize($string, $color, $bold) { function colorize($string, $color, $bold) { $color = strtoupper($color); $color = strtoupper($color); $attr = array(); $attr = array(); Loading @@ -1253,23 +1231,38 @@ function get_uptime(){ function log_open(){ function log_open(){ $GLOBALS['logFile'] = fopen ( $GLOBALS['logFilePath'], "a" ); $GLOBALS['logFile'] = fopen ( $GLOBALS['logFilePath'], "a" ); } } function log_msg($msg, $any_length = -1) { /** Log message and optionally print to console */ function log_msg($msg, ///< message to print $mode = -1) ///< -1 - print only short messages, 0 - never print, 1 - always print, 2 print in bold red (error), 3 - bold white, 4 - bold yellow (warning) { // do not output log when in HTTP request mode // do not output log when in HTTP request mode $ut=get_uptime(); $ut=get_uptime(); if (($any_length != 0) && !array_key_exists ('REQUEST_METHOD', $_SERVER) && (($any_length > 0) || (strlen ($msg) < $GLOBALS['LOG_MAX_ECHO']))) { if (($mode != 0) && !array_key_exists ('REQUEST_METHOD', $_SERVER) && (($mode > 0) || (strlen ($msg) < $GLOBALS['LOG_MAX_ECHO']))) { // echo '('.date ("G:i:s").' autocampars) ' . $msg . "\n"; switch ($mode) { printf(colorize(sprintf("[%8.2f] autocampars: ",$ut),"GREEN",0).$msg."\n"); case 2: $emsg = colorize($msg,'RED',1); // bold red break; case 3: $emsg = colorize($msg,'',1); // bold white break; case 4 : $emsg = colorize($msg, 'YELLOW', 1); // bold white break; default: $emsg = $msg; } printf(colorize(sprintf("[%8.2f] autocampars: ",$ut),"GREEN",0).$emsg."\n"); } } // fwrite ($GLOBALS['logFile'], $msg . " at " . date ("F j, Y, G:i:s") . "\n"); fwrite ($GLOBALS['logFile'], sprintf("%08.2f autocampars: %s\n",$ut,$msg)); // date ("F j, Y, G:i:s") fwrite ($GLOBALS['logFile'], sprintf("%08.2f autocampars: %s\n",$ut,$msg)); // date ("F j, Y, G:i:s") } } function log_error($msg) { function log_error($msg) { log_msg ($msg, 1); log_msg ($msg, 2); log_close (); log_close (); exit (1); exit (1); } } function log_close() { function log_close() { log_msg ("Log file saved as " . $GLOBALS['logFilePath'], 1); log_msg ("Log file saved as " . $GLOBALS['logFilePath'], 3); log_msg ("----------------------------------------------", 0); log_msg ("----------------------------------------------", 0); fclose ($GLOBALS['logFile']); fclose ($GLOBALS['logFile']); unset ($GLOBALS['logFile']); // to catch errors unset ($GLOBALS['logFile']); // to catch errors Loading Loading @@ -1333,7 +1326,7 @@ function get_application_mode() { if ($xml === false) { if ($xml === false) { log_msg("10389 board not present"); log_msg("10389 board not present"); } else { } else { log_msg ( 'Application - ' . (( string ) $xml->app) . ', mode: ' . (( string ) $xml->mode) . "\n" ); log_msg ( 'Application - ' . (( string ) $xml->app) . ', mode: ' . (( string ) $xml->mode) . "\n" , 3); $GLOBALS ['camera_state_arr'] ['rev10389'] = ''.$xml->rev; $GLOBALS ['camera_state_arr'] ['rev10389'] = ''.$xml->rev; if ((( string ) $xml->app) != '') { if ((( string ) $xml->app) != '') { $GLOBALS ['camera_state_arr'] ['application'] = ''.$xml->app; $GLOBALS ['camera_state_arr'] ['application'] = ''.$xml->app; Loading Loading @@ -1533,11 +1526,11 @@ function get_remote_states($IPs){ // Wait for both slave modules to be in 'BOOT' state // Wait for both slave modules to be in 'BOOT' state function wait_slaves_boot($retries){ function wait_slaves_boot($retries){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo 'Waiting for slaves to come up: '; echo colorize('Waiting for slaves to come up: ','YELLOW',0); } } for ($retry = 0; $retry < $retries; $retry++){ for ($retry = 0; $retry < $retries; $retry++){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo "$retry "; echo colorize("$retry ",'YELLOW',1); } } $states = get_remote_states(array( $states = get_remote_states(array( $GLOBALS['camera_state_arr']['ip_top'], $GLOBALS['camera_state_arr']['ip_top'], Loading @@ -1548,14 +1541,12 @@ function wait_slaves_boot($retries){ array_key_exists('state', $states[1]) && array_key_exists('state', $states[1]) && !array_key_exists('autocampars', $states[0]) && // autocampars.php should already terminate !array_key_exists('autocampars', $states[0]) && // autocampars.php should already terminate !array_key_exists('autocampars', $states[1])){ !array_key_exists('autocampars', $states[1])){ // if (($states[0]['state']!='BOOT') || ($states[1]['state']!='BOOT')){ break; // wrong state - need system reboot TODO: Add slave reboot by master break; // wrong state - need system reboot TODO: Add slave reboot by master // } } } } } } } if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo " Done\n"; echo colorize(" Done\n",'GREEN',0); } } log_msg("In wait_slaves_boot() states = ".print_r($states,1)); log_msg("In wait_slaves_boot() states = ".print_r($states,1)); if (($states[0]['state'] == 'BOOT') || ($states[1]['state'] == 'BOOT')) return true; if (($states[0]['state'] == 'BOOT') || ($states[1]['state'] == 'BOOT')) return true; Loading Loading @@ -2365,7 +2356,7 @@ function curl_multi_start($urls) { curl_multi_exec ($curl_mh, $curl_active); curl_multi_exec ($curl_mh, $curl_active); // we wait for a bit to allow stuff TCP handshakes to complete and so forth... // we wait for a bit to allow stuff TCP handshakes to complete and so forth... usleep (10000); usleep (10000); echo "."; // echo "."; } } return array ("mh" => $curl_mh,"handles" => $aCurlHandles); return array ("mh" => $curl_mh,"handles" => $aCurlHandles); } } Loading @@ -2381,8 +2372,7 @@ function curl_multi_finish($data, $use_xml=true, $ntry=0, $echo = false) { $curl_mrc = curl_multi_exec ($curl_mh, $curl_active); $curl_mrc = curl_multi_exec ($curl_mh, $curl_active); } while ($curl_mrc == CURLM_CALL_MULTI_PERFORM ); } while ($curl_mrc == CURLM_CALL_MULTI_PERFORM ); } } // if ($echo) echo "$nrep: ($curl_active/$curl_mrc) "; if ($echo) echo colorize("$curl_active ",'YELLOW',1); if ($echo) echo "$curl_active "; $nrep++; $nrep++; if ($ntry && ($nrep > $ntry)) { if ($ntry && ($nrep > $ntry)) { break; break; Loading Loading
src/autocampars.php +61 −71 Original line number Original line Diff line number Diff line Loading @@ -276,7 +276,7 @@ log_msg("Processing camera state: " . $GLOBALS['camera_state_arr']['state']); get_sysfs_sensors(); get_sysfs_sensors(); log_msg("Sensors map read from the sysfs:\n".str_sensors($GLOBALS['sensors']),1); log_msg("Sensors map read from the sysfs: ".str_sensors($GLOBALS['sensors'],1),1); $GLOBALS['useDefaultPageNumber'] = 15; $GLOBALS['useDefaultPageNumber'] = 15; $GLOBALS['protectedPage'] = 0; // / change to -1 to enable saving to page 0 $GLOBALS['protectedPage'] = 0; // / change to -1 to enable saving to page 0 Loading Loading @@ -507,15 +507,15 @@ function update_minor_version($port, $silent = 0) { if (substr ( $GLOBALS ['configs'] [$port] ['version'], 0, strrpos ( $GLOBALS ['configs'] [$port] ['version'], '.' ) ) == if (substr ( $GLOBALS ['configs'] [$port] ['version'], 0, strrpos ( $GLOBALS ['configs'] [$port] ['version'], '.' ) ) == substr ( $GLOBALS ['version'], 0, strrpos ( $GLOBALS ['version'], '.' ) )) { substr ( $GLOBALS ['version'], 0, strrpos ( $GLOBALS ['version'], '.' ) )) { if (!$silent) { if (!$silent) { log_msg ( "+++ WARNING: updating minor mismatch version for port $port: " . log_msg ( "WARNING: updating minor mismatch version for port $port: " . $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'] ); $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'], 4); } } $GLOBALS ['configs'] [$port] ['version'] = $GLOBALS ['version']; $GLOBALS ['configs'] [$port] ['version'] = $GLOBALS ['version']; $GLOBALS['configs'][$port]['version'] = $GLOBALS['version']; $GLOBALS['configs'][$port]['version'] = $GLOBALS['version']; saveRotateConfig ($port, $GLOBALS['numBackups'] ); saveRotateConfig ($port, $GLOBALS['numBackups'] ); } else { } else { log_msg ( "+++ ERROR: Can not auto-update version for port $port as MAJOR revision differs: " . log_msg ( "ERROR: Can not auto-update version for port $port as MAJOR revision differs: " . $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'] ); $GLOBALS ['configs'] [$port] ['version'] . " to " . $GLOBALS ['version'], 2); } } } } } } Loading Loading @@ -625,15 +625,16 @@ function detect_camera(){ } } } } if ($needupdate) { if ($needupdate) { log_msg("Sensors not disabled by the application mode (10389 EEPROM):\n".str_sensors($GLOBALS['sensors']),1); log_msg("Sensors not disabled by the application mode (10389 EEPROM): ".str_sensors($GLOBALS['sensors'],1),1); update_sysfs_sensors(); update_sysfs_sensors(); } } // All eyesis cameras - disable fan control to re-use for 10359 power // All eyesis cameras - disable fan control to re-use for 10359 power if ($GLOBALS['camera_state_arr']['eyesis_power']){ // disable fan control, reuse it to control power if ($GLOBALS['camera_state_arr']['eyesis_power']){ // disable fan control, reuse it to control power $rslt=set_eyesis_power_control(); $rslt=set_eyesis_power_control(); log_msg("set_eyesis_power_control()=>".print_r($rslt,1)); log_msg("Setting sensors/multiplexers power"); log_msg("GLOBALS['camera_state_arr']=>".print_r($GLOBALS['camera_state_arr'],1)); log_msg("set_eyesis_power_control()=>".print_r($rslt,1),0); log_msg("GLOBALS['camera_state_arr']=>".print_r($GLOBALS['camera_state_arr'],1),0); } } // Set IPs of slave cameras (if any) // Set IPs of slave cameras (if any) if ($multicamera) { if ($multicamera) { Loading @@ -658,7 +659,7 @@ function detect_camera(){ } } log_msg("Continue with master camera"); log_msg("Continue with master camera"); log_msg("=== Setting FPGA and sensor power ==="); log_msg("Setting FPGA and sensor power"); if ($GLOBALS['camera_state_arr']['has_slaves']) { if ($GLOBALS['camera_state_arr']['has_slaves']) { $rslt = wait_slaves_boot ($GLOBALS['BOOT_RETRIES']); $rslt = wait_slaves_boot ($GLOBALS['BOOT_RETRIES']); Loading Loading @@ -737,8 +738,8 @@ function detect_camera(){ fclose($f); fclose($f); log_msg("Started detection for sensor port ".$port); log_msg("Started detection for sensor port ".$port); } } log_msg("System FPGA version: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_version'))); log_msg("System FPGA version: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_version')), 3); log_msg("Sensor interface type: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_sensor_interface'))); log_msg("Sensor interface type: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/fpga_sensor_interface')), 3); log_msg("All frames:\n" .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')),0); log_msg("All frames:\n" .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')),0); log_msg('Frames: '. implode(", ",$frame_nums),0); log_msg('Frames: '. implode(", ",$frame_nums),0); Loading @@ -747,7 +748,7 @@ function detect_camera(){ foreach ($GLOBALS['ports'] as $port) { foreach ($GLOBALS['ports'] as $port) { if (elphel_get_P_value ( $port, ELPHEL_SENSOR) != $sensor_code){ if (elphel_get_P_value ( $port, ELPHEL_SENSOR) != $sensor_code){ log_msg("#### Wrong/missing sensor on port ".$port.", code=".elphel_get_P_value ( $port, ELPHEL_SENSOR). log_msg("#### Wrong/missing sensor on port ".$port.", code=".elphel_get_P_value ( $port, ELPHEL_SENSOR). ' (expected '.$sensor_code.") . Driver reports errors until port is disabled at later stage ####",1); ' (expected '.$sensor_code.") . Driver reports errors until port is disabled at later stage ####",2); for ($chn =0; $chn <4; $chn++) { for ($chn =0; $chn <4; $chn++) { $GLOBALS['sensors'][$port][$chn] = 'none'; $GLOBALS['sensors'][$port][$chn] = 'none'; } } Loading Loading @@ -775,7 +776,7 @@ function detect_camera(){ } } } } if ($needupdate) update_sysfs_sensors(); if ($needupdate) update_sysfs_sensors(); log_msg("detected sensors:\n".str_sensors($GLOBALS['sensors']),1); log_msg("Detected sensors: ".str_sensors($GLOBALS['sensors'],1),3); // Collect results from slave channels that were running in parallel // Collect results from slave channels that were running in parallel $nrep =0; $nrep =0; Loading Loading @@ -838,9 +839,10 @@ function detect_camera(){ if (isset ($curl_data)){ // wait and collect responses if (isset ($curl_data)){ // wait and collect responses $enable_echo = !array_key_exists('REQUEST_METHOD',$_SERVER); $enable_echo = !array_key_exists('REQUEST_METHOD',$_SERVER); if ($enable_echo) echo "Waiting slaves to finish: "; if ($enable_echo) echo colorize("Waiting slaves to finish (number left): ",'YELLOW',0); $results = curl_multi_finish($curl_data, true, 0, $enable_echo); // Switch true -> false if errors are reported (other output damaged XML) $results = curl_multi_finish($curl_data, true, 0, $enable_echo); // Switch true -> false if errors are reported (other output damaged XML) log_msg('curl_multi returned: '.print_r($results,1)); if ($enable_echo) echo colorize(" DONE\n",'GREEN',0); log_msg('curl_multi returned: '.print_r($results,1),0); } } if ($GLOBALS['camera_state_arr']['exit_stage'] == $GLOBALS['camera_state_arr']['state']){ if ($GLOBALS['camera_state_arr']['exit_stage'] == $GLOBALS['camera_state_arr']['state']){ respond_xml($GLOBALS['camera_state_arr']['state']); respond_xml($GLOBALS['camera_state_arr']['state']); Loading @@ -854,10 +856,16 @@ function detect_camera(){ } } function str_sensors($sens_arr){ function str_sensors($sens_arr,$inline=0){ $sports=array(); $sports=array(); if ($inline) { foreach ($sens_arr as $port=>$subchn) $sports[]=implode(", ",$subchn); return '['.implode("],[",$sports).']'; } else { foreach ($sens_arr as $port=>$subchn) $sports[]=$port.': '.implode(", ",$subchn); foreach ($sens_arr as $port=>$subchn) $sports[]=$port.': '.implode(", ",$subchn); return implode("\n",$sports); return implode("\n",$sports); } } } Loading Loading @@ -906,7 +914,7 @@ function init_cameras(){ // $page) { init can only be from default page as page $urls[] = "http://" . $ip . "/autocampars.php?init_stage=SENSORS_SYNCHRONIZED&exit_stage=INITIALIZED"; $urls[] = "http://" . $ip . "/autocampars.php?init_stage=SENSORS_SYNCHRONIZED&exit_stage=INITIALIZED"; } } $curl_data = curl_multi_start ($urls); $curl_data = curl_multi_start ($urls); log_msg ($cmd . 'Started curl_multi: '.print_r($urls),0); log_msg ($cmd . 'Started curl_multi: '.print_r($urls,1),0); } } // Set most parameters in immediate mode (to protect from i2c 64-command overflow), // Set most parameters in immediate mode (to protect from i2c 64-command overflow), Loading Loading @@ -1020,7 +1028,7 @@ function init_cameras(){ // $page) { init can only be from default page as page log_msg("2.Trigger $i:\n".file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')); log_msg("2.Trigger $i:\n".file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')); } } elphel_set_P_arr ($GLOBALS['master_port'], $GLOBALS['trig_pars']); // set other parameters - they will not take effect immediately elphel_set_P_arr ($GLOBALS['master_port'], $GLOBALS['trig_pars']); // set other parameters - they will not take effect immediately log_msg("Started camera in free running mode"); log_msg("Started camera in free running mode",3); log_msg("Reached state ".$GLOBALS['camera_state_arr']['state']); log_msg("Reached state ".$GLOBALS['camera_state_arr']['state']); } else if (!array_key_exists('TRIG_CONDITION',$GLOBALS['trig_pars']) || !$GLOBALS['trig_pars']['TRIG_CONDITION']){ } else if (!array_key_exists('TRIG_CONDITION',$GLOBALS['trig_pars']) || !$GLOBALS['trig_pars']['TRIG_CONDITION']){ Loading @@ -1037,7 +1045,7 @@ function init_cameras(){ // $page) { init can only be from default page as page usleep ($GLOBALS['camera_state_arr']['max_frame_time']); usleep ($GLOBALS['camera_state_arr']['max_frame_time']); if ($trig_period){ if ($trig_period){ elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); log_msg("Started camera in periodic self-triggered mode, period = ".(0.00000001*$trig_period)." s"); log_msg("Started camera in periodic self-triggered mode, period = ".(0.00000001*$trig_period)." s",3); } else { // manually advance frames } else { // manually advance frames if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; Loading Loading @@ -1077,8 +1085,9 @@ function init_cameras(){ // $page) { init can only be from default page as page log_msg(" trig_period = $trig_period"); log_msg(" trig_period = $trig_period"); log_msg("Remaining GLOBALS[trig_pars] = ".print_r($GLOBALS['trig_pars'],1)); log_msg("Remaining GLOBALS[trig_pars] = ".print_r($GLOBALS['trig_pars'],1)); $enable_echo = !array_key_exists ('REQUEST_METHOD', $_SERVER); $enable_echo = !array_key_exists ('REQUEST_METHOD', $_SERVER); if ($enable_echo) echo "Waiting slaves to finish initialization: "; if ($enable_echo) echo colorize("Waiting slaves to finish initialization (number left): ",'YELLOW',0); $results = curl_multi_finish ($curl_data, true, 0, $enable_echo); $results = curl_multi_finish ($curl_data, true, 0, $enable_echo); if ($enable_echo) echo colorize(" DONE\n",'GREEN',0); ////$results = curl_multi_finish ($curl_data, false, 0, $enable_echo); ////$results = curl_multi_finish ($curl_data, false, 0, $enable_echo); log_msg ('curl_multi returned: ' . print_r ($results, 1)); log_msg ('curl_multi returned: ' . print_r ($results, 1)); unset ($curl_data); unset ($curl_data); Loading @@ -1091,7 +1100,7 @@ function init_cameras(){ // $page) { init can only be from default page as page } } if ($trig_period){ if ($trig_period){ elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD, $trig_period, ELPHEL_CONST_FRAME_IMMED); log_msg("Started camera in periodic mode, period = ".(0.00000001*$trig_period)." s"); log_msg("Started camera in periodic mode, period = ".(0.00000001*$trig_period)." s",3); } else { // manually advance frames } else { // manually advance frames if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ if (!$GLOBALS['camera_state_arr']['frames_skip_more'] > ELPHEL_CONST_FRAME_DEAFAULT_AHEAD){ $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; $GLOBALS['camera_state_arr']['frames_skip_more'] = ELPHEL_CONST_FRAME_DEAFAULT_AHEAD + 1; Loading Loading @@ -1196,38 +1205,7 @@ function update_sysfs_sensors() get_sysfs_sensors(); get_sysfs_sensors(); log_msg ("Updated sysfs sensor map"); log_msg ("Updated sysfs sensor map"); } } /* def colorize(string, color, bold): color=color.upper() attr = [] if color == 'RED': attr.append('31') elif color == 'GREEN': attr.append('32') elif color == 'YELLOW': attr.append('33') elif color == 'BLUE': attr.append('34') elif color == 'MAGENTA': attr.append('35') elif color == 'CYAN': attr.append('36') elif color == 'GRAY': attr.append('37') else: pass # red if bold: attr.append('1') return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) def log_msg(msg): with open ('/proc/uptime') as f: t=float(f.read().split()[0]) with open(LOGFILE,'a') as msg_file: print (colorize("[%8.2f] %s: "%(t, sys.argv[0].split('/')[-1].split('.')[0]),'YELLOW',0)+msg) print("[%8.2f] %s"%(t,msg),file=msg_file) */ function colorize($string, $color, $bold) { function colorize($string, $color, $bold) { $color = strtoupper($color); $color = strtoupper($color); $attr = array(); $attr = array(); Loading @@ -1253,23 +1231,38 @@ function get_uptime(){ function log_open(){ function log_open(){ $GLOBALS['logFile'] = fopen ( $GLOBALS['logFilePath'], "a" ); $GLOBALS['logFile'] = fopen ( $GLOBALS['logFilePath'], "a" ); } } function log_msg($msg, $any_length = -1) { /** Log message and optionally print to console */ function log_msg($msg, ///< message to print $mode = -1) ///< -1 - print only short messages, 0 - never print, 1 - always print, 2 print in bold red (error), 3 - bold white, 4 - bold yellow (warning) { // do not output log when in HTTP request mode // do not output log when in HTTP request mode $ut=get_uptime(); $ut=get_uptime(); if (($any_length != 0) && !array_key_exists ('REQUEST_METHOD', $_SERVER) && (($any_length > 0) || (strlen ($msg) < $GLOBALS['LOG_MAX_ECHO']))) { if (($mode != 0) && !array_key_exists ('REQUEST_METHOD', $_SERVER) && (($mode > 0) || (strlen ($msg) < $GLOBALS['LOG_MAX_ECHO']))) { // echo '('.date ("G:i:s").' autocampars) ' . $msg . "\n"; switch ($mode) { printf(colorize(sprintf("[%8.2f] autocampars: ",$ut),"GREEN",0).$msg."\n"); case 2: $emsg = colorize($msg,'RED',1); // bold red break; case 3: $emsg = colorize($msg,'',1); // bold white break; case 4 : $emsg = colorize($msg, 'YELLOW', 1); // bold white break; default: $emsg = $msg; } printf(colorize(sprintf("[%8.2f] autocampars: ",$ut),"GREEN",0).$emsg."\n"); } } // fwrite ($GLOBALS['logFile'], $msg . " at " . date ("F j, Y, G:i:s") . "\n"); fwrite ($GLOBALS['logFile'], sprintf("%08.2f autocampars: %s\n",$ut,$msg)); // date ("F j, Y, G:i:s") fwrite ($GLOBALS['logFile'], sprintf("%08.2f autocampars: %s\n",$ut,$msg)); // date ("F j, Y, G:i:s") } } function log_error($msg) { function log_error($msg) { log_msg ($msg, 1); log_msg ($msg, 2); log_close (); log_close (); exit (1); exit (1); } } function log_close() { function log_close() { log_msg ("Log file saved as " . $GLOBALS['logFilePath'], 1); log_msg ("Log file saved as " . $GLOBALS['logFilePath'], 3); log_msg ("----------------------------------------------", 0); log_msg ("----------------------------------------------", 0); fclose ($GLOBALS['logFile']); fclose ($GLOBALS['logFile']); unset ($GLOBALS['logFile']); // to catch errors unset ($GLOBALS['logFile']); // to catch errors Loading Loading @@ -1333,7 +1326,7 @@ function get_application_mode() { if ($xml === false) { if ($xml === false) { log_msg("10389 board not present"); log_msg("10389 board not present"); } else { } else { log_msg ( 'Application - ' . (( string ) $xml->app) . ', mode: ' . (( string ) $xml->mode) . "\n" ); log_msg ( 'Application - ' . (( string ) $xml->app) . ', mode: ' . (( string ) $xml->mode) . "\n" , 3); $GLOBALS ['camera_state_arr'] ['rev10389'] = ''.$xml->rev; $GLOBALS ['camera_state_arr'] ['rev10389'] = ''.$xml->rev; if ((( string ) $xml->app) != '') { if ((( string ) $xml->app) != '') { $GLOBALS ['camera_state_arr'] ['application'] = ''.$xml->app; $GLOBALS ['camera_state_arr'] ['application'] = ''.$xml->app; Loading Loading @@ -1533,11 +1526,11 @@ function get_remote_states($IPs){ // Wait for both slave modules to be in 'BOOT' state // Wait for both slave modules to be in 'BOOT' state function wait_slaves_boot($retries){ function wait_slaves_boot($retries){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo 'Waiting for slaves to come up: '; echo colorize('Waiting for slaves to come up: ','YELLOW',0); } } for ($retry = 0; $retry < $retries; $retry++){ for ($retry = 0; $retry < $retries; $retry++){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo "$retry "; echo colorize("$retry ",'YELLOW',1); } } $states = get_remote_states(array( $states = get_remote_states(array( $GLOBALS['camera_state_arr']['ip_top'], $GLOBALS['camera_state_arr']['ip_top'], Loading @@ -1548,14 +1541,12 @@ function wait_slaves_boot($retries){ array_key_exists('state', $states[1]) && array_key_exists('state', $states[1]) && !array_key_exists('autocampars', $states[0]) && // autocampars.php should already terminate !array_key_exists('autocampars', $states[0]) && // autocampars.php should already terminate !array_key_exists('autocampars', $states[1])){ !array_key_exists('autocampars', $states[1])){ // if (($states[0]['state']!='BOOT') || ($states[1]['state']!='BOOT')){ break; // wrong state - need system reboot TODO: Add slave reboot by master break; // wrong state - need system reboot TODO: Add slave reboot by master // } } } } } } } if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ if (!array_key_exists('REQUEST_METHOD',$_SERVER)){ echo " Done\n"; echo colorize(" Done\n",'GREEN',0); } } log_msg("In wait_slaves_boot() states = ".print_r($states,1)); log_msg("In wait_slaves_boot() states = ".print_r($states,1)); if (($states[0]['state'] == 'BOOT') || ($states[1]['state'] == 'BOOT')) return true; if (($states[0]['state'] == 'BOOT') || ($states[1]['state'] == 'BOOT')) return true; Loading Loading @@ -2365,7 +2356,7 @@ function curl_multi_start($urls) { curl_multi_exec ($curl_mh, $curl_active); curl_multi_exec ($curl_mh, $curl_active); // we wait for a bit to allow stuff TCP handshakes to complete and so forth... // we wait for a bit to allow stuff TCP handshakes to complete and so forth... usleep (10000); usleep (10000); echo "."; // echo "."; } } return array ("mh" => $curl_mh,"handles" => $aCurlHandles); return array ("mh" => $curl_mh,"handles" => $aCurlHandles); } } Loading @@ -2381,8 +2372,7 @@ function curl_multi_finish($data, $use_xml=true, $ntry=0, $echo = false) { $curl_mrc = curl_multi_exec ($curl_mh, $curl_active); $curl_mrc = curl_multi_exec ($curl_mh, $curl_active); } while ($curl_mrc == CURLM_CALL_MULTI_PERFORM ); } while ($curl_mrc == CURLM_CALL_MULTI_PERFORM ); } } // if ($echo) echo "$nrep: ($curl_active/$curl_mrc) "; if ($echo) echo colorize("$curl_active ",'YELLOW',1); if ($echo) echo "$curl_active "; $nrep++; $nrep++; if ($ntry && ($nrep > $ntry)) { if ($ntry && ($nrep > $ntry)) { break; break; Loading