package eclipse.controller.app;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import eclipse.controller.acqui.DataAcquisition;
import eclipse.controller.acqui.DesencapsulatorE8Serial;
import eclipse.controller.acqui.handlers.SimpleSerialHandler;
import eclipse.controller.acqui.handlers.TCPHandler;
import eclipse.controller.util.TelemetrySettings;
import eclipse.model.xml.ProtocolLoader;
import eclipse.model.xml.ProtocolValidator;
import eclipse.model.xml8.ProtocolLoaderV8;
import eclipse.model.xml8.ProtocolValidatorV8;
import eclipse.view.gui.DesktopManager;
/**
* Eclipse Telemetry, Start Point, Where you can find the main of this application. This application,
* receive data from solar car and show them in different windows.
*
* This telemetry is used for Eclipse solar car 8.
*
* All this app is Interface based. For further version just add new version of file (every class and package with 8)
*
* ETS, École de technologie supérieure.
*
* @author Marco
*
*/
public class EclipseTelemetry {
private static ThreadGen threadGenInstance;
private static final String SETTINGS_FILE = "telemetrySettings.properties";
private static DataAcquisition dataAcqui;
static Logger logger = Logger.getLogger("main");
public static void main(String[] args) {
//init threadGen
threadGenInstance = ThreadGen.getInstance();
//Initialisation
initApp();
logger.debug("App started");
}
/**r
* Initialise all information and thread for this app
* XML, Acquisition, gui, persistance, etc
*/
private static void initApp(){
//==============================Logger configuration========================================
PropertyConfigurator.configure("log4j.configuration");
logger.info("App initializing..");
// =============================Load global settings========================================
logger.info("Loading global telemetry settings..");
TelemetrySettings.getInstance().load(SETTINGS_FILE);
//===================================Load XML===============================================
logger.debug("XML verification");
// Load needed settings for init
String protocolSchema = TelemetrySettings.getInstance().getSetting("XML_PROTOCOL_SCHEMA");
String protocolXML = TelemetrySettings.getInstance().getSetting("XML_PROTOCOL_FILE");
// Create ProtocolValidator using ProtocolValidatorV7
ProtocolValidator protocolValidator;
// Making sure nothing goes wrong in the init.
try {
protocolValidator = new ProtocolValidatorV8(protocolXML, protocolSchema);
// Validate and load protocol into data structure using ProtocolLoaderV7
if (protocolValidator.xmlIsValid()) {
ProtocolLoader protocolLoader = new ProtocolLoaderV8(protocolXML);
protocolLoader.load();
}
else {
logger.error("Initialization failure. XML validation eror. Exiting.");
abort();
}
} catch (Exception e) {
logger.error("Initialization failure. " + e.getMessage() + ". Exiting.");
abort();
}
//=================================Acquisition============================================
dataAcqui = DataAcquisition.getInstance();
if((TelemetrySettings.getInstance().getSetting("HANDLER_TYPE")).equals("TCP_HANDLER"))
{
dataAcqui.Ititalize(new TCPHandler(),new DesencapsulatorE8Serial());
}
else
{
dataAcqui.Ititalize(new SimpleSerialHandler(),new DesencapsulatorE8Serial());
}
threadGenInstance.addThread(dataAcqui);
//==================================STUB==================================================
//threadGenInstance.addThread(new TESTER());
//=================================MATLAB===============================================
threadGenInstance.addThread(new MatLab());
//=================================ERROR===============================================
threadGenInstance.addThread(new ErrorFinder());
//=================================Start Gui===============================================
threadGenInstance.addThread(DesktopManager.getIstance());
//==========================Start the ThreadGenerator=======================================
threadGenInstance.startThread();
}
/**
* Application killer, whit error log4j
*/
public static void abort() {
logger.debug("App abort. X button pressed!!!");
System.exit(1);
}
}