Sailor Moon
2013-01-12, 20:45:41
Hallo zusammen,
ich entwickle gerade eine erweiterte Version eines Bildschirmtestprogramms vglb. dem UDACT (http://www.ugra.de/ugra-display-analysis-and-certification-tool.phtml) bzw. der derzeit von PRAD verwendeten Lösung. Um nicht generell auf herstellerseitige SDKs zur Sondenansteuerung angewiesen zu sein, sollen die Messdaten via Argyll - Spotread (http://argyllcms.com/doc/spotread.html) an das Programm übermittelt werden. Das Tool von Graeme Gill basiert auf eigenen Treibern.
Spotread ist kommandozeilenbasiert und liefert in einem sehr simplen Ablauf die notwendigen Daten. Der Aufruf via Processbuilder oder weiter gekapselt durch Apache Commons Exec (http://commons.apache.org/exec/) und das Auslesen der ersten Ausgaben gelingen auch wunderbar, aber ich scheitere an der Übergabe nachfolgender Befehle ("Press... to...") an das Programm (via OutputStream). Gleichzeitig ist der in einem eigenen Thread laufende "Ausleser" (InputStreamReader) nach Erreichen der ersten "Benutzereingabe-Warteposition" auch nicht mehr "ready".
Ich habe da jetzt schon eine Weile experimentiert, aber mir fehlt da auch die absolute Erfahrung, außerdem müssen weitere Teile des Programm fertiggeschrieben werden, und ich habe aktuell auch beruflich viel zu tun. Daher möchte ich diesen Teil gerne auslagern.
Gesucht ist eine Java-Klasse, die mit Spotread kommuniziert und die XYZ-Normfarbwerte der Messung als float[3] Array zurückliefert. Denkbar wäre also:
public interface Spotread {
public void init(String command) throws SpotreadException;
public boolean connection();
public void calibrate() throws SpotreadException;
public boolean ready();
public void triggerMeasurement() throws SpotreadException;
public float[/*3*/] getTriStimulus() throws SpotreadException;
public void quit();
}
Mit init(String command) würde Spotread über das übergebene Kommando (z.B. "/lib/spotread.exe -d -y l") aufgerufen.
connection liefert true zurück, wenn Spotread läuft
calibrate() bestätigt die erste Benutzereingabe ("needs a calibration before continuing...hit any key to coninue...")
ready() liefert true zurück, wenn die Kalibration funktioniert hat ("Calibration complete")
triggerMeasurement() führt eine Messung durch ("...any other key to take a reading"); die XYZ-Normfarbwerte werden auf der Konsole ausgegeben und können ausgelesen werden ("Result is XYZ:..."); Spotread kann beliebig viele Messungen ausführen, die aktuelle Messung sollte intern gespeichert und über
public float[/*3*/] getTriStimulus() ausgeben werden. Danach würde von mir wieder triggerMeasurement() ausgeführt etc.
public void quit(); beendet spotread ("Hit ESC or Q to exit") und damit auch die Java-Verbindung zum Programm.
Die Exception Klasse nimmt ggf. Ausnahmen auf. Das ist aber erstmal nicht entscheidend. Mir reicht auch eine Lösung ohne Exception-Handling, zumal Argylls Spotreas auch recht straigtforward ist.
Anbei mal die Kommandozeilenausgabe von Spotread zur besseren Veranschaulichung.
http://foto.arcor-online.net/palb/alben/69/1896769/3230626631306465.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3964373661383934.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3366613564646561.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3862363032376630.jpg
Eigentlich müsste das möglich sein. Kenntnisse in Farbmetrik, Messtechnik etc. sind nicht erforderlich (der für die jweilige Sonde notwendige Aufrufparameter kommt vom Programm), es geht nur um das Auslesen der Ausgaben und das Weiterleiten von Kommandos. Der Quellcode von Spotread (falls da etwas haken sollte) ist offen. Messgerät kann zu Testzwecken zur Verfügung gestellt werden.
Ich will hier keine LowCost-Lösung forcieren, d.h. die Problemlösung wäre mir schon etwas wert. Bezgl. des Stundensatzes bzw. Pauschalpreis bin ich flexibel (erwarte da keine "Studenten-/ Schülerpreise"), da bitte ich um entsprechende Kontaktaufnahme bzw. weitere Abklärung von Details.
ich entwickle gerade eine erweiterte Version eines Bildschirmtestprogramms vglb. dem UDACT (http://www.ugra.de/ugra-display-analysis-and-certification-tool.phtml) bzw. der derzeit von PRAD verwendeten Lösung. Um nicht generell auf herstellerseitige SDKs zur Sondenansteuerung angewiesen zu sein, sollen die Messdaten via Argyll - Spotread (http://argyllcms.com/doc/spotread.html) an das Programm übermittelt werden. Das Tool von Graeme Gill basiert auf eigenen Treibern.
Spotread ist kommandozeilenbasiert und liefert in einem sehr simplen Ablauf die notwendigen Daten. Der Aufruf via Processbuilder oder weiter gekapselt durch Apache Commons Exec (http://commons.apache.org/exec/) und das Auslesen der ersten Ausgaben gelingen auch wunderbar, aber ich scheitere an der Übergabe nachfolgender Befehle ("Press... to...") an das Programm (via OutputStream). Gleichzeitig ist der in einem eigenen Thread laufende "Ausleser" (InputStreamReader) nach Erreichen der ersten "Benutzereingabe-Warteposition" auch nicht mehr "ready".
Ich habe da jetzt schon eine Weile experimentiert, aber mir fehlt da auch die absolute Erfahrung, außerdem müssen weitere Teile des Programm fertiggeschrieben werden, und ich habe aktuell auch beruflich viel zu tun. Daher möchte ich diesen Teil gerne auslagern.
Gesucht ist eine Java-Klasse, die mit Spotread kommuniziert und die XYZ-Normfarbwerte der Messung als float[3] Array zurückliefert. Denkbar wäre also:
public interface Spotread {
public void init(String command) throws SpotreadException;
public boolean connection();
public void calibrate() throws SpotreadException;
public boolean ready();
public void triggerMeasurement() throws SpotreadException;
public float[/*3*/] getTriStimulus() throws SpotreadException;
public void quit();
}
Mit init(String command) würde Spotread über das übergebene Kommando (z.B. "/lib/spotread.exe -d -y l") aufgerufen.
connection liefert true zurück, wenn Spotread läuft
calibrate() bestätigt die erste Benutzereingabe ("needs a calibration before continuing...hit any key to coninue...")
ready() liefert true zurück, wenn die Kalibration funktioniert hat ("Calibration complete")
triggerMeasurement() führt eine Messung durch ("...any other key to take a reading"); die XYZ-Normfarbwerte werden auf der Konsole ausgegeben und können ausgelesen werden ("Result is XYZ:..."); Spotread kann beliebig viele Messungen ausführen, die aktuelle Messung sollte intern gespeichert und über
public float[/*3*/] getTriStimulus() ausgeben werden. Danach würde von mir wieder triggerMeasurement() ausgeführt etc.
public void quit(); beendet spotread ("Hit ESC or Q to exit") und damit auch die Java-Verbindung zum Programm.
Die Exception Klasse nimmt ggf. Ausnahmen auf. Das ist aber erstmal nicht entscheidend. Mir reicht auch eine Lösung ohne Exception-Handling, zumal Argylls Spotreas auch recht straigtforward ist.
Anbei mal die Kommandozeilenausgabe von Spotread zur besseren Veranschaulichung.
http://foto.arcor-online.net/palb/alben/69/1896769/3230626631306465.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3964373661383934.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3366613564646561.jpg
http://foto.arcor-online.net/palb/alben/69/1896769/3862363032376630.jpg
Eigentlich müsste das möglich sein. Kenntnisse in Farbmetrik, Messtechnik etc. sind nicht erforderlich (der für die jweilige Sonde notwendige Aufrufparameter kommt vom Programm), es geht nur um das Auslesen der Ausgaben und das Weiterleiten von Kommandos. Der Quellcode von Spotread (falls da etwas haken sollte) ist offen. Messgerät kann zu Testzwecken zur Verfügung gestellt werden.
Ich will hier keine LowCost-Lösung forcieren, d.h. die Problemlösung wäre mir schon etwas wert. Bezgl. des Stundensatzes bzw. Pauschalpreis bin ich flexibel (erwarte da keine "Studenten-/ Schülerpreise"), da bitte ich um entsprechende Kontaktaufnahme bzw. weitere Abklärung von Details.