// GpsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Dashboard.h"
#include "GpsDlg.h"
#include "DashboardRecipient.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define GPS_TIMER 1
#define GPS_TIMER_ELAPSE 2000

/////////////////////////////////////////////////////////////////////////////
// CGpsDlg dialog


CGpsDlg::CGpsDlg(CWnd* pParent /*=NULL*/)
	: CTestDlg(CGpsDlg::IDD, pParent, IDC_GPS_STATUS)
{
	//{{AFX_DATA_INIT(CGpsDlg)
	m_differential = FALSE;
	m_hdop = 0.0f;
	m_latitude = 0.0f;
	m_longitude = 0.0f;
	m_satellites = 0.0f;
	m_updateTime = 0.0f;
	//}}AFX_DATA_INIT

	m_gpsDriverRunning = False;
}


void CGpsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGpsDlg)
	DDX_OCBool(pDX, IDC_DIFFERENTIAL, DISPID(2), m_differential);
	DDX_OCFloat(pDX, IDC_HDOP, DISPID(7), m_hdop);
	DDX_OCFloat(pDX, IDC_LAT_INDICATOR, DISPID(7), m_latitude);
	DDX_OCFloat(pDX, IDC_LON_INDICATOR, DISPID(7), m_longitude);
	DDX_OCFloat(pDX, IDC_NUM_SATELLITES, DISPID(7), m_satellites);
	DDX_OCFloat(pDX, IDC_UPDATETIME, DISPID(7), m_updateTime);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CGpsDlg, CTestDlg)
	//{{AFX_MSG_MAP(CGpsDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGpsDlg message handlers

void CGpsDlg::initSubClassDlg()
{
	SetTimer(GPS_TIMER,GPS_TIMER_ELAPSE,0);
}

void CGpsDlg::requestUpdate()
{
	Assert(m_recipient);
	m_recipient->requestData(MMAgentRequest::Start,
		ModemMessage::tMMGps,1);

	m_gpsDriverRunning = True;
}

void CGpsDlg::stopRequests()
{
	Assert(m_recipient);
	m_recipient->requestData(MMAgentRequest::Stop,
		ModemMessage::tMMGps,1);

	resetDialog();
	m_gpsDriverRunning = False;
}

void CGpsDlg::resetDialog()
{
	UpdateData(TRUE);
	m_differential = FALSE;
	m_hdop = 0.0f;
	m_latitude = 0.0f;
	m_longitude = 0.0f;
	m_satellites = 0.0f;
	UpdateData(FALSE);
}

void CGpsDlg::setGps(double latitude, double longitude, bool differential,
		int numSatellites, double hdop, int updateTime)
{
	receiveData();
	UpdateData(TRUE);
	m_latitude = latitude;
	m_longitude = longitude;
	m_differential = differential;
	m_satellites = numSatellites;
	m_hdop = hdop;
	m_updateTime = updateTime % 86400;
	UpdateData(FALSE);
}