/********************************************************************************
* FaceTrackNoIR		This program is a private project of some enthusiastic		*
*					gamers from Holland, who don't like to pay much for			*
*					head-tracking.												*
*																				*
* Copyright (C) 2012	Wim Vriend (Developing)									*
*						Ron Hendriks (Researching and Testing)					*
* Homepage:			http://facetracknoir.sourceforge.net/home/default.htm		*
*																				*
* Copyright (C) 2012	FuraX49 (HAT Tracker plugins)	    	     			*
* Homepage:			http://hatire.sourceforge.net								*
*																				*
* This program is free software; you can redistribute it and/or modify it		*
* under the terms of the GNU General Public License as published by the			*
* Free Software Foundation; either version 3 of the License, or (at your		*
* option) any later version.													*
*																				*
* This program is distributed in the hope that it will be useful, but			*
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY	*
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for	*
* more details.																	*
*																				*
* You should have received a copy of the GNU General Public License along		*
* with this program; if not, see .				*
*																				*
********************************************************************************/
#include 
#include 
#include 
#include "ftnoir_tracker_hat_settings.h"
#ifdef OPENTRACK_API
#include "opentrack/options.hpp"
#endif
void TrackerSettings::load_ini()
{
#ifdef OPENTRACK_API
    QSettings settings(OPENTRACK_ORG);	// Registry settings (in HK_USER)
#else
    QSettings settings("opentrack");	// Registry settings (in HK_USER)
#endif
#ifdef OPENTRACK_API
    QString currentFile = settings.value( OPENTRACK_CONFIG_FILENAME_KEY, QCoreApplication::applicationDirPath() + OPENTRACK_DEFAULT_CONFIG_PATH ).toString();
#else
	QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
#endif
	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file)
	iniFile.beginGroup( "HAT" );
    SerialPortName=iniFile.value ( "PortName" ).toString();
	EnableRoll = iniFile.value( "EnableRoll", 1 ).toBool();
	EnablePitch = iniFile.value( "EnablePitch", 1 ).toBool();
	EnableYaw = iniFile.value( "EnableYaw", 1 ).toBool();
	EnableX = iniFile.value( "EnableX", 0 ).toBool();
	EnableY = iniFile.value( "EnableY", 0 ).toBool();
	EnableZ = iniFile.value( "EnableZ", 0 ).toBool();
	EnableLogging = iniFile.value( "EnableLogging", 0).toBool();
	
	InvertRoll = iniFile.value( "InvertRoll", 1 ).toBool();
	InvertPitch = iniFile.value( "InvertPitch", 1 ).toBool();
	InvertYaw = iniFile.value( "InvertYaw", 1 ).toBool();
	InvertX = iniFile.value( "InvertX", 0 ).toBool();
	InvertY = iniFile.value( "InvertY", 0 ).toBool();
	InvertZ = iniFile.value( "InvertZ", 0 ).toBool();
	RollAxe=iniFile.value("RollAxe",1).toInt();
	PitchAxe=iniFile.value("PitchAxe",2).toInt();
	YawAxe=iniFile.value("YawAxe",0).toInt();
	XAxe=iniFile.value("XAxe",1).toInt();
	YAxe=iniFile.value("YAxe",2).toInt();
	ZAxe=iniFile.value("ZAxe",0).toInt();
    CmdStart=iniFile.value ( "CmdStart").toString();
    CmdStop=iniFile.value ( "CmdStop" ).toString();
    CmdInit=iniFile.value ( "CmdInit" ).toString();
    CmdReset=iniFile.value ( "CmdReset" ).toString();
    CmdCenter=iniFile.value ( "CmdCenter" ).toString();
    CmdZero=iniFile.value ( "CmdZero" ).toString();
	DelayInit=iniFile.value("DelayInit",0).toInt();
	DelayStart=iniFile.value("DelayStart",0).toInt();
	DelaySeq=iniFile.value("DelaySeq",0).toInt();
#ifdef OPENTRACK_API
    FPSArduino=iniFile.value("FPSArduino",30).toInt();
#endif
	BigEndian=iniFile.value("BigEndian",0).toBool();
	pBaudRate=static_cast(iniFile.value("BaudRate",QSerialPort::Baud115200).toInt());
	pDataBits=static_cast(iniFile.value("DataBits",QSerialPort::Data8).toInt());
	pParity=static_cast(iniFile.value("Parity",QSerialPort::NoParity).toInt());
	pStopBits=static_cast(iniFile.value("StopBits",QSerialPort::OneStop).toInt());
	pFlowControl=static_cast(iniFile.value("FlowControl",QSerialPort::HardwareControl).toInt());
	iniFile.endGroup();
}
void TrackerSettings::save_ini() const
{
#ifdef OPENTRACK_API
    QSettings settings(OPENTRACK_ORG);	// Registry settings (in HK_USER)
#else
    QSettings settings("opentrack");	// Registry settings (in HK_USER)
#endif
#ifdef OPENTRACK_API
    QString currentFile = settings.value( OPENTRACK_CONFIG_FILENAME_KEY, QCoreApplication::applicationDirPath() + OPENTRACK_DEFAULT_CONFIG_PATH ).toString();
#else
	QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
#endif
	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file)
	iniFile.beginGroup ( "HAT" );
	iniFile.setValue ( "PortName",SerialPortName );
    iniFile.setValue( "EnableRoll", EnableRoll );
	iniFile.setValue( "EnablePitch", EnablePitch );
	iniFile.setValue( "EnableYaw", EnableYaw );
	iniFile.setValue( "EnableX", EnableX );
	iniFile.setValue( "EnableY", EnableY );
	iniFile.setValue( "EnableZ", EnableZ );
	iniFile.setValue( "EnableLogging", EnableLogging );
    iniFile.setValue( "InvertRoll", InvertRoll );
	iniFile.setValue( "InvertPitch", InvertPitch );
	iniFile.setValue( "InvertYaw", InvertYaw );
	iniFile.setValue( "InvertX", InvertX );
	iniFile.setValue( "InvertY", InvertY );
	iniFile.setValue( "InvertZ", InvertZ );
	iniFile.setValue ( "RollAxe", RollAxe );
	iniFile.setValue ( "PitchAxe", PitchAxe );
	iniFile.setValue ( "YawAxe",YawAxe );
	iniFile.setValue ( "XAxe", XAxe );
	iniFile.setValue ( "YAxe", YAxe );
	iniFile.setValue ( "ZAxe", ZAxe );
	iniFile.setValue ( "CmdStart",CmdStart.toLatin1());
	iniFile.setValue ( "CmdStop",CmdStop.toLatin1());
	iniFile.setValue ( "CmdInit",CmdInit.toLatin1());
	iniFile.setValue ( "CmdReset",CmdReset.toLatin1());
	iniFile.setValue ( "CmdCenter",CmdCenter.toLatin1() );
	iniFile.setValue ( "CmdZero",CmdZero.toLatin1() );
	iniFile.setValue ( "DelayInit",DelayInit);
	iniFile.setValue ( "DelayStart",DelayStart);
	iniFile.setValue ( "DelaySeq",DelaySeq);
#ifdef OPENTRACK_API
    iniFile.setValue ( "FPSArduino", FPSArduino );
#endif
    iniFile.setValue("BigEndian",BigEndian);
	iniFile.setValue("BaudRate",pBaudRate);
	iniFile.setValue("DataBits",pDataBits);
	iniFile.setValue("Parity",pParity);
	iniFile.setValue("StopBits",pStopBits);
	iniFile.setValue("FlowControl",pFlowControl);
	iniFile.endGroup();
}