// AhrsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Dashboard.h"
#include "AhrsDlg.h"
#include "DashboardRecipient.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define AHRS_TIMER 1
#define AHRS_TIMER_ELAPSE 2000

/////////////////////////////////////////////////////////////////////////////
// CAhrsDlg dialog


CAhrsDlg::CAhrsDlg(CWnd* pParent /*=NULL*/)
	: CTestDlg(CAhrsDlg::IDD, pParent,IDC_AHRS_STATUS)
{
	//{{AFX_DATA_INIT(CAhrsDlg)
	m_pitchIndicator = 0.0f;
	m_pitchRateIndicator = 0.0f;
	m_rollIndicator = 0.0f;
	m_rollRateIndicator = 0.0f;
	m_yawIndicator = 0.0f;
	m_yawRateIndicator = 0.0f;
	m_CalStatColor = 0;
	//}}AFX_DATA_INIT
}


void CAhrsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAhrsDlg)
	DDX_Control(pDX, IDC_ATTITUDE, m_attitude);
	DDX_Control(pDX, IDC_COMPASS, m_yaw);
	DDX_OCFloat(pDX, IDC_PITCH_INDICATOR, DISPID(7), m_pitchIndicator);
	DDX_OCFloat(pDX, IDC_PITCHRATE_INDICATOR, DISPID(7), m_pitchRateIndicator);
	DDX_OCFloat(pDX, IDC_ROLL_INDICATOR, DISPID(7), m_rollIndicator);
	DDX_OCFloat(pDX, IDC_ROLLRATE_INDICATOR, DISPID(7), m_rollRateIndicator);
	DDX_OCFloat(pDX, IDC_YAW_INDICATOR, DISPID(7), m_yawIndicator);
	DDX_OCFloat(pDX, IDC_YAWRATE_INDICATOR, DISPID(7), m_yawRateIndicator);
	DDX_OCInt(pDX, IDC_CALSTATUS, DISPID(5), m_CalStatColor);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAhrsDlg, CTestDlg)
	//{{AFX_MSG_MAP(CAhrsDlg)
	ON_WM_CANCELMODE()
	ON_BN_CLICKED(IDC_CALIBRATE, OnCalibrate)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAhrsDlg message handlers

void CAhrsDlg::initSubClassDlg()
{
	SetTimer(AHRS_TIMER,AHRS_TIMER_ELAPSE,0);
}

void CAhrsDlg::resetDialog()
{
	UpdateData(TRUE);
	m_pitchIndicator = 0.0f;
	m_pitchRateIndicator = 0.0f;
	m_rollIndicator = 0.0f;
	m_rollRateIndicator = 0.0f;
	m_yawIndicator = 0.0f;
	m_yawRateIndicator = 0.0f;
	m_CalStatColor = 0;
	UpdateData(FALSE);
}


void CAhrsDlg::requestUpdate()
{
	Assert(m_recipient);
	m_recipient->requestData(MMAgentRequest::Start,
		ModemMessage::tMMAhrs,1);
}

void CAhrsDlg::stopRequests()
{
	Assert(m_recipient);
	m_recipient->requestData(MMAgentRequest::Stop,
		ModemMessage::tMMAhrs,-1);
	resetDialog();
}

void CAhrsDlg::setAttitude(double roll, double pitch, double yaw, double rollRate,
		double pitchRate, double yawRate)
{
	receiveData();
	UpdateData(TRUE);
	m_attitude.SetRoll(roll);
	m_attitude.SetPitch(pitch);
	m_yaw.SetHeading(yaw);
	m_rollIndicator = roll;
	m_pitchIndicator = pitch;
	m_yawIndicator = yaw;
	m_rollRateIndicator = rollRate;
	m_pitchRateIndicator = pitchRate;
	m_yawRateIndicator = yawRate;
	UpdateData(FALSE);
}


void CAhrsDlg::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
}

void CAhrsDlg::OnCalibrate() 
{

	m_recipient->setString("calibrateAhrs");
}
