Closedown

This commit is contained in:
voulot_d
2017-01-13 17:07:47 +01:00
parent 09c5eae216
commit 69745c884b
3 changed files with 111 additions and 116 deletions

View File

@@ -469,9 +469,8 @@ public class ScreenPanel extends Panel {
}
}
Thread tcomboScreen;
Thread tcomboFilter;
Thread devicesInitTask;
void setCamera(String cameraName) throws IOException, InterruptedException {
System.out.println("Setting camera: " + cameraName + " [" + (buttonCamtool.isSelected() ? "camtool" : "direct") + "]");
//renderer.removeOverlay(errorOverlay);
@@ -480,8 +479,6 @@ public class ScreenPanel extends Panel {
buttonGrabBackground.setEnabled(false);
checkBackground.setEnabled(false);
spinnerThreshold.setEnabled(false);
comboScreen.setModel(new DefaultComboBoxModel());
comboFilter.setModel(new DefaultComboBoxModel());
checkThreshold.setEnabled(false);
@@ -496,126 +493,79 @@ public class ScreenPanel extends Panel {
renderer.removeOverlays(userOv);
renderer.clear();
renderer.resetZoom();
if ((tcomboScreen!=null) && (tcomboScreen.isAlive())){
tcomboScreen.interrupt();
}
if ((tcomboFilter!=null) && (tcomboFilter.isAlive())){
tcomboFilter.interrupt();
}
boolean changed = !String.valueOf(cameraName).equals(this.cameraName);
this.cameraName = cameraName;
if (screen != null) {
screen.close();
screen = null;
}
if (filter != null) {
filter.close();
filter = null;
}
//Parallelizing initialization
tcomboScreen = new Thread(() -> {
try {
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
screen.initialize();
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (String pos : screen.getPositions()) {
model.addElement(pos);
}
comboScreen.setModel(model);
comboScreen.setSelectedItem(screen.read());
} catch (Exception ex) {
comboScreen.setModel(new DefaultComboBoxModel());
System.err.println(ex.getMessage());
if (changed){
if ( (devicesInitTask!=null) && (devicesInitTask.isAlive())){
devicesInitTask.interrupt();
}
if (screen != null) {
screen.close();
screen = null;
}
comboScreen.setEnabled(screen != null);
valueScreen.setDevice(screen);
});
tcomboScreen.start();
tcomboFilter = new Thread(() -> {
try {
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
filter.initialize();
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (String pos : filter.getPositions()) {
model.addElement(pos);
}
comboFilter.setModel(model);
comboFilter.setSelectedItem(filter.read());
} catch (Exception ex) {
System.err.println(ex.getMessage());
if (filter != null) {
filter.close();
filter = null;
}
comboFilter.setEnabled(filter != null);
valueFilter.setDevice(filter);
});
tcomboFilter.start();
}
}
try {
Path configFile = Paths.get(configFolder, cameraName + ".json");
cameraConfigJson = configFile.toFile().exists() ? new String(Files.readAllBytes(configFile)) : null;
if ((cameraConfigJson == null) && (buttonDirect.isSelected())) {
throw new Exception("Cannot open camera config file: " + configFile.toFile());
}
boolean changed = !String.valueOf(cameraName).equals(this.cameraName);
this.cameraName = cameraName;
try {
if (buttonCamtool.isSelected()) {
//camera = new Camtool("CurrentCamera", "gfa-lc6-64:8080");
camera = new Camtool("CurrentCamera");
camera.getConfig().flipHorizontally = false;
camera.getConfig().flipVertically = false;
camera.getConfig().rotation = 0.0;
camera.getConfig().roiX = 0;
camera.getConfig().roiY = 0;
camera.getConfig().roiWidth = -1;
camera.getConfig().roiHeight = -1;
} else {
camera = new PsiCamera("CurrentCamera", cameraName);
config = (CameraConfig) JsonSerializer.decode(cameraConfigJson, CameraConfig.class);
camera.getConfig().flipHorizontally = config.getMirrorX();
camera.getConfig().flipVertically = config.getMirrorY();
//camera.getConfig().rotation = config.getRotate();
//camera.getConfig().rotationCrop = true;
switch (config.getRotate()) {
case 1:
camera.getConfig().rotation = 270;
break;
case 2:
camera.getConfig().rotation = 180;
break;
case 3:
camera.getConfig().rotation = 90;
break;
}
camera.getConfig().rotationCrop = false;
camera.getConfig().roiX = config.getRoiEnable() ? config.getRoi().get(0) : 0;
camera.getConfig().roiY = config.getRoiEnable() ? config.getRoi().get(1) : 0;
camera.getConfig().roiWidth = config.getRoiEnable() ? config.getRoi().get(2) : -1;
camera.getConfig().roiHeight = config.getRoiEnable() ? config.getRoi().get(3) : -1;
try {
camera.getConfig().spatialCalOffsetX = config.getCalOffsetX();
camera.getConfig().spatialCalOffsetY = config.getCalOffsetY();
camera.getConfig().spatialCalScaleX = -config.getScaleX();
camera.getConfig().spatialCalScaleY = -config.getScaleY();
} catch (Exception ex) {
camera.getConfig().spatialCalOffsetX = Double.NaN;
camera.getConfig().spatialCalOffsetY = Double.NaN;
camera.getConfig().spatialCalScaleX = Double.NaN;
camera.getConfig().spatialCalScaleY = Double.NaN;
}
}
if (buttonCamtool.isSelected()) {
//camera = new Camtool("CurrentCamera", "gfa-lc6-64:8080");
camera = new Camtool("CurrentCamera");
camera.getConfig().flipHorizontally = false;
camera.getConfig().flipVertically = false;
camera.getConfig().rotation = 0.0;
camera.getConfig().roiX = 0;
camera.getConfig().roiY = 0;
camera.getConfig().roiWidth = -1;
camera.getConfig().roiHeight = -1;
} else {
camera = new PsiCamera("CurrentCamera", cameraName);
config = (CameraConfig) JsonSerializer.decode(cameraConfigJson, CameraConfig.class);
camera.getConfig().flipHorizontally = config.getMirrorX();
camera.getConfig().flipVertically = config.getMirrorY();
//camera.getConfig().rotation = config.getRotate();
//camera.getConfig().rotationCrop = true;
switch (config.getRotate()) {
case 1:
camera.getConfig().rotation = 270;
break;
case 2:
camera.getConfig().rotation = 180;
break;
case 3:
camera.getConfig().rotation = 90;
break;
}
camera.getConfig().rotationCrop = false;
camera.getConfig().roiX = config.getRoiEnable() ? config.getRoi().get(0) : 0;
camera.getConfig().roiY = config.getRoiEnable() ? config.getRoi().get(1) : 0;
camera.getConfig().roiWidth = config.getRoiEnable() ? config.getRoi().get(2) : -1;
camera.getConfig().roiHeight = config.getRoiEnable() ? config.getRoi().get(3) : -1;
try {
camera.getConfig().spatialCalOffsetX = config.getCalOffsetX();
camera.getConfig().spatialCalOffsetY = config.getCalOffsetY();
camera.getConfig().spatialCalScaleX = -config.getScaleX();
camera.getConfig().spatialCalScaleY = -config.getScaleY();
} catch (Exception ex) {
camera.getConfig().spatialCalOffsetX = Double.NaN;
camera.getConfig().spatialCalOffsetY = Double.NaN;
camera.getConfig().spatialCalScaleX = Double.NaN;
camera.getConfig().spatialCalScaleY = Double.NaN;
}
} catch (Exception ex) {
config = null;
showException(ex);
}
camera.initialize();
camera.assertInitialized();
System.out.println("Camera initialization OK");
if (camera instanceof Camtool) {
//Managing no background exception. Can be done in a better way?
checkBackground.setEnabled(true);
@@ -688,7 +638,12 @@ public class ScreenPanel extends Panel {
public void onError(Object o, Exception excptn) {
}
});
} catch (Exception ex) {
ex.printStackTrace();
showException(ex);
renderer.clearOverlays();
//TODO: Find better way to manage no background exception
if (ex.getMessage().toLowerCase().contains("no background image")) {
checkBackground.setSelected(true);
@@ -704,10 +659,51 @@ public class ScreenPanel extends Panel {
} finally {
checkReticle();
onTimer();
}
}
if (changed){
comboScreen.setModel(new DefaultComboBoxModel());
comboFilter.setModel(new DefaultComboBoxModel());
//Parallelizing initialization
devicesInitTask = new Thread(() -> {
try {
screen = new DiscretePositioner("CurrentScreen", cameraName + ":SET_SCREEN1_POS", cameraName + ":GET_SCREEN1_POS");
screen.initialize();
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (String pos : screen.getPositions()) {
model.addElement(pos);
}
comboScreen.setModel(model);
comboScreen.setSelectedItem(screen.read());
} catch (Exception ex) {
comboScreen.setModel(new DefaultComboBoxModel());
System.err.println(ex.getMessage());
screen = null;
}
comboScreen.setEnabled(screen != null);
valueScreen.setDevice(screen);
try {
filter = new DiscretePositioner("CurrentFilter", cameraName + ":SET_FILTER", cameraName + ":GET_FILTER");
filter.initialize();
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (String pos : filter.getPositions()) {
model.addElement(pos);
}
comboFilter.setModel(model);
comboFilter.setSelectedItem(filter.read());
} catch (Exception ex) {
System.err.println(ex.getMessage());
filter = null;
}
comboFilter.setEnabled(filter != null);
valueFilter.setDevice(filter);
});
devicesInitTask.start();
}
//tcomboScreen.join();
//tcomboFilter.join();
}