Commit 10f1f014 authored by Andrey Filippov's avatar Andrey Filippov

made focusing work for both 5Mpix and 14Mpix, provided config files in resources

parent b04837e7
......@@ -1691,7 +1691,7 @@ public class MatchSimulatedPattern {
floatPixels = (float[]) fht1.getPixels();
for (i = 0; i < floatPixels.length; i++)
pixels[i] = floatPixels[i];
// show pixels here?
int[][] max2OnSpectrum = findFirst2MaxOnSpectrum(fft_complex, // complex, top half, starting from 0,0
1, // skip +- from (0,0) and previous max - add parameter to dialog?
0.5); // 0.5 - 30deg. orthogonality of 2 vectors - 1.0 - perpendicular, 0.0 - parallel
......
package com.elphel.imagej.calibration.hardware;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
......@@ -15,8 +16,10 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.io.IOUtils;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
//import org.xml.sax.SAXParseException;
import com.elphel.imagej.calibration.MatchSimulatedPattern;
import com.elphel.imagej.calibration.UVLEDandLasers;
......@@ -98,6 +101,7 @@ public class CamerasInterface{
public boolean reportTiming=false;
public int cameraBootTimeSeconds=100;
public int connectionTimeoutMilliseconds=3000;
public boolean is_10398 = false;
private void printTiming(String title){
if (this.reportTiming) {
......@@ -169,6 +173,10 @@ public class CamerasInterface{
return ((channelNumber>=0)&& (channelNumber<this.channelMap.length))?this.channelMap[channelNumber][2]:-1;
}
public boolean is14Mpix() {
return this.is_10398;
}
// not used anywhere
public int getChannel (int subCam, int subChn){
return getChannel (subCam, subChn, 0); // for compatibility with 353
......@@ -621,18 +629,47 @@ public class CamerasInterface{
}
}
public String getSerialNumber(int chn, int EEPROM_chn){
String [] ser_mod = getSerialNumberModel(chn, EEPROM_chn);
if ((ser_mod==null) || (ser_mod.length < 1)) return null;
return ser_mod[0];
}
public String getModelNumber(int chn, int EEPROM_chn){
String [] ser_mod = getSerialNumberModel(chn, EEPROM_chn);
if ((ser_mod==null) || (ser_mod.length < 2)) return null;
return ser_mod[1];
}
public String [] getSerialNumberModel(int chn, int EEPROM_chn){
int colon_index = this.cameraIPs[chn].indexOf(":");
int sensor_port = Integer.parseInt(this.cameraIPs[chn].substring(colon_index+1)) - this.imgsrvPort;
String ip=this.cameraIPs[chn].substring(0, colon_index);
// String url="http://"+this.cameraIPs[chn]+"/i2c.php?cmd=fromEEPROM0&EEPROM_chn="+EEPROM_chn;
// String url="http://"+this.cameraIPs[chn]+"/i2c.php?cmd=fromEEPROM0&EEPROM_chn="+EEPROM_chn;
// ip = "192.168.0.236";
String url="http://"+ip+"/i2c.php?cmd=fromEEPROM" + sensor_port+ "&EEPROM_chn="+EEPROM_chn;
Document dom=null;
String serial=null;
String model=null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream in = new URL( url ).openStream();
byte[] bytes = new byte[0];
try {
bytes = IOUtils.toByteArray(in);
} finally {
IOUtils.closeQuietly(in); // always gets here
}
for (byte b:bytes) {
if (b < 0) {
String msg="Sensor EEPROM is not initialized. Use bootblock393 to initialize it. Will throw now";
IJ.showMessage("Error",msg);
System.out.println(msg);
throw new IllegalArgumentException ("SAX error");
// return null;
}
}
dom = db.parse(url);
if (!dom.getDocumentElement().getNodeName().equals("board")) {
String msg="Root element: expected 'board', got \"" + dom.getDocumentElement().getNodeName()+"\"";
......@@ -651,6 +688,13 @@ public class CamerasInterface{
if (serial.startsWith("\"")){
serial=serial.substring(1, serial.length()-1);
}
model=(dom.getDocumentElement().getElementsByTagName("model").item(0).getChildNodes().item(0)).getNodeValue();
if (model !=null){
if (model.startsWith("\"")){
model=model.substring(1, model.length()-1);
}
}
} catch(MalformedURLException e){
String msg="Please check the URL:" + e.toString();
IJ.showMessage("Error",msg);
......@@ -666,8 +710,11 @@ public class CamerasInterface{
}catch(SAXException se) {
se.printStackTrace();
throw new IllegalArgumentException ("SAX error");
// }catch (SAXParseException spe) {
}
return serial;
this.is_10398 = "10398".equals(model);
return new String[] {serial, model};
}
public double getSensorTemperature(int chn, int EEPROM_chn){
......@@ -899,7 +946,7 @@ public class CamerasInterface{
return setupCameraAcquisition(Double.NaN);
}
public boolean setupCameraAcquisition(final double exposureScale){
final boolean mp14 = true;// FIXME: Modified for 14Mpix
// final boolean mp14 = is14Mpix();
final int ipLength=this.resetURLs.length;
final boolean [] results=new boolean[ipLength];
for (int chn=0;chn<ipLength;chn++) results[chn]=(this.sensorPresent[chn]!=null);
......@@ -918,23 +965,27 @@ public class CamerasInterface{
}
startAndJoin(threads);
if (Double.isNaN(exposureScale)){ // full init
// int nRepeat=this.setupTriggerMode?4:1;
int nRepeat=this.setupTriggerMode?4:2; // FIXME: Modified for 14Mpix
int nRepeat=this.setupTriggerMode?4:1;
int sleep_ms = 1000;
if (is14Mpix()) {
nRepeat=this.setupTriggerMode?4:2; // FIXME: Modified for 14Mpix
sleep_ms = 2000;
}
if (this.nc393) nRepeat++; // is it needed?
for (int i=0;i<nRepeat;i++){
if (this.debugLevel>0) System.out.println((i+1)+" of "+nRepeat+": Triggering cameras to give parameters a chance to propagate");
trigger();
try
{
Thread.sleep( 2000 ); // ms // FIXME: Modified for 14Mpix
Thread.sleep( sleep_ms ); // ms // FIXME: Modified for 14Mpix
}
catch ( InterruptedException e )
{
System.out.println( "awakened prematurely" );
}
}
} else if (mp14) {
} else if (is14Mpix()) {
try
{
Thread.sleep( 2000 ); // ms // FIXME: Modified for 14Mpix
......@@ -1402,7 +1453,6 @@ public class CamerasInterface{
public ImagePlus [] getImages(final boolean [] acquire, boolean resetAndTrigger, final boolean show){
final boolean dual_trig = false;
final boolean [] acquireIPs=selectIPs(acquire);
if (this.debugLevel>2) {
System.out.println("getImages(...) 2");
......@@ -1410,20 +1460,16 @@ public class CamerasInterface{
}
if (resetAndTrigger) {
if (is14Mpix()) {
try { // FIXME: Make conditional for 14MPix
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
resetCameras();
trigger();
if (dual_trig) {
timestampIPs(acquireIPs); // ignoring results, just wait
resetCameras();
// trigger();
jp4_Instances[0].readDummyURL("http://192.168.0.236/parsedit.php?immediate&TRIG_PERIOD=1*0");
}
}
final double [] timestamps= timestampIPs(acquireIPs);
if (this.debugLevel>2) System.out.println("getImages(): this.imagesIP.length=" + this.imagesIP.length);
......@@ -1621,12 +1667,14 @@ public class CamerasInterface{
if (debugLevel>2) System.out.println(String.format("this.laserPointers.setLasers (0x%x)", sequence[nSeqNum]));
}
resetIPs(selectIPs(lasersIPs)); // flush buffer
if (is14Mpix()) {
try { // FIXME: Make conditional for 14MPix
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
trigger(); // trigger cameras
ipIndexAtomic.set(0);
final int fnSeqNum=nSeqNum;
......
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