Commit ddf0c9ca authored by Andrey Filippov's avatar Andrey Filippov
Browse files

updating for Boson640

parent 1a7baa9c
Loading
Loading
Loading
Loading
+42 −29
Original line number Diff line number Diff line
@@ -976,11 +976,19 @@ function detect_camera(){
		        
		        break;
		    }

		    if ($GLOBALS['camera_state_arr']['is_boson640']){
		        log_msg('Temporary Lepton 3.5 code');
		        foreach ($GLOBALS['ports'] as $port) {
		            if ($port==$GLOBALS['master_port']){
		        log_msg('Temporary Boson640 code');
		        foreach ($GLOBALS['ports'] as $port) { // only for detected ports
		            /*
		            if ($port==$GLOBALS['master_port']){ // no need to setup single-frame mode for Boson
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                log_msg('ELPHEL_TRIG_MASTER: '.$GLOBALS['master_port']);
		                elphel_set_P_value ( $port, ELPHEL_TRIG_MASTER, $GLOBALS['master_port'], ELPHEL_CONST_FRAME_IMMED);
		                elphel_set_P_value ( $port, ELPHEL_TRIG_PERIOD,                       0, ELPHEL_CONST_FRAME_IMMED);
		                elphel_set_P_value ( $port, ELPHEL_TRIG_BITLENGTH,                    0, ELPHEL_CONST_FRAME_IMMED);
@@ -989,32 +997,27 @@ function detect_camera(){
		                elphel_set_P_value ( $port, ELPHEL_TRIG_OUT,                    0x00000, ELPHEL_CONST_FRAME_IMMED);
		                elphel_set_P_value ( $port, ELPHEL_TRIG_CONDITION,              0x00000, ELPHEL_CONST_FRAME_IMMED);
		            }
		            elphel_set_P_value     ( $port, ELPHEL_TRIG_DELAY,                        0, ELPHEL_CONST_FRAME_IMMED);
		            */
		            //elphel_set_P_value     ( $port, ELPHEL_TRIG_DELAY,                        0, ELPHEL_CONST_FRAME_IMMED);
		            // Wait for fully booted of each sensor - they should be booted in parallel
		            for ($i = 0; $i < 1000; $i++){
		                elphel_skip_frames($port,1); // increase to 5-10 at a time?
		                // will just trigger pgm_limit_fps and ELPHEL_BOOTED update
		                elphel_set_P_value ( $port, ELPHEL_BAYER, 0x00, 0, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC );
		                if (elphel_get_P_value ( $port, ELPHEL_BOOTED) > 0){
		                    log_msg("Break: Sensor port ".$port." booted, frame = ".elphel_get_frame($port).", frames16: "
		                        .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')).", i=".$i);
		                    break;
		                }
		        usleep ($GLOBALS['camera_state_arr']['max_frame_time']); // > 1 frame, so all channels will get trigger parameters
		        /*
		         * Mo snapshot mode in Lepton
		         foreach ($GLOBALS['ports'] as $port) {
		         elphel_set_P_value ( $port, ELPHEL_TRIG, ELPHEL_CONST_TRIGMODE_SNAPSHOT, ELPHEL_CONST_FRAME_IMMED);
		            }
		            log_msg("Sensor port ".$port." booted, frame = ".elphel_get_frame($port).", frames16: ".trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')));
		            log_msg("Sensor port ".$port." ELPHEL_BOOTED = ".elphel_get_P_value ( $port, ELPHEL_BOOTED).", frame = ".elphel_get_frame($port));
		            elphel_skip_frames($port,16); // Let it initialize?
		            log_msg("Sensor port ".$port." Skipped 16 frames, frame = ".elphel_get_frame($port));
		            
		         elphel_set_P_value ( $GLOBALS['master_port'], ELPHEL_TRIG_PERIOD,  1, ELPHEL_CONST_FRAME_IMMED, ELPHEL_CONST_FRAMEPAIR_FORCE_NEWPROC);
		         
		         usleep ($GLOBALS['camera_state_arr']['max_frame_time']);
		         */
		        //Check that now all frame parameters are the same?
		        // reset sequencers
		        log_msg("Before reset sequencers:\n"          .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')));
		        /*
		         for ($port=0; $port < 4; $port++){
		         $f = fopen ( $GLOBALS['sysfs_frame_seq'].$port, 'w' ); fwrite($f,'0',1); fclose ( $f );
		         $f = fopen ( $GLOBALS['sysfs_i2c_seq'].$port, 'w' );   fwrite($f,'3',1); fclose ( $f ); // reset+run (copy frame number from frame_seq)
		         if (!in_array($port, $GLOBALS['ports'])) {
		         log_msg("Disabling sensor port  ".$port);
		         $f = fopen ( $GLOBALS['sysfs_chn_en'].$port, 'w' );    fwrite($f,'0',1); fclose ( $f ); // disable sensor channel
		        }
		         }
		         */
		        usleep ($GLOBALS['camera_state_arr']['max_frame_time']); // > 1 frame, so all channels will get trigger parameters
		        log_msg("Before reset sequencers:\n"          .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')));
		        log_msg("After reset sequencers (not reset for Lepton):\n"          .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')));
		        // ======= First trigger, frame # = 1 ========.
		        /*
@@ -1024,6 +1027,7 @@ function detect_camera(){
		         log_msg("After single trigger:\n"          .trim(file_get_contents('/sys/devices/soc0/elphel393-framepars@0/all_frames')));
		         //echo "9. frames:\n"; for ($ii=0;$ii<4;$ii++) $frame_nums[$ii]=elphel_get_frame($ii); print_r($frame_nums);
		         */
		        log_msg("1.Sensor port ".$port." ELPHEL_BOOTED = ".elphel_get_P_value ( $port, ELPHEL_BOOTED).", frame = ".elphel_get_frame($port));
		        $GLOBALS['camera_state_arr']['state'] ='SENSORS_SYNCHRONIZED';
		        write_php_ini ($GLOBALS['camera_state_arr'], $GLOBALS['camera_state_path'] );
		        log_msg('Frames: '. implode(", ",$frame_nums));
@@ -1040,8 +1044,7 @@ function detect_camera(){
		            respond_xml($GLOBALS['camera_state_arr']['state']);
		        }
		        if ($GLOBALS['STOP_AFTER'][$GLOBALS['camera_state_arr']['state']]) break; // will break anyway
		        
		        
		        log_msg("2.Sensor port ".$port." ELPHEL_BOOTED = ".elphel_get_P_value ( $port, ELPHEL_BOOTED).", frame = ".elphel_get_frame($port));
		        break;
		    }
		    
@@ -1109,6 +1112,7 @@ function detect_camera(){
		default:
				log_msg("camera_state=".$GLOBALS['camera_state_arr']['state']);
	}
	log_msg("3.Sensor port ".$port." ELPHEL_BOOTED = ".elphel_get_P_value ( $port, ELPHEL_BOOTED).", frame = ".elphel_get_frame($port));
	log_msg("ports:". implode(", ",$GLOBALS['ports']));

}
@@ -1574,6 +1578,8 @@ function log_error($msg) {
function log_close() {
	log_msg ("Log file saved as " . $GLOBALS['logFilePath'], 3);
	log_msg ("----------------------------------------------", 0);
	log_msg("!.Sensor port ".$port." ELPHEL_BOOTED = ".elphel_get_P_value ( $port, ELPHEL_BOOTED).", frame = ".elphel_get_frame($port));
	
	fclose ($GLOBALS['logFile']);
	unset ($GLOBALS['logFile']); // to catch errors
}
@@ -3053,12 +3059,19 @@ function createDefaultConfig($version, $port, $multisensor = false, $eyesis_mode
	    $BITS =  16;
	    $OVERSIZE = 1;
	    $WOI_HEIGHT = 120; // w/o telemetry
	} elseif ($boson640) {
	    $COLOR = 15; // raw
	    $BITS =  16;
	    $OVERSIZE = 1;
	    $WOI_HEIGHT = 512; // w/o telemetry
	} else {
        $COLOR =  0;
        $BITS =   8;
        $OVERSIZE = 0;
        $WOI_HEIGHT = 10000;
	}
	log_msg("boson640=".$boson640.", COLOR=".$COLOR.", BITS=".$BITS);
	
    //old:
    //$SENSOR_PHASE =  $multisensor ? 0x55 : 0x15;
    //new: