// DataDlg.cpp : implementation file
//

#include "stdafx.h"
#include "dashboard.h"
#include "DataDlg.h"
#include "CWSafeArray.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDataDlg dialog


CDataDlg::CDataDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDataDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDataDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDataDlg)
	DDX_Control(pDX, IDC_BATTERYGRAPH, m_batterygraph);
	DDX_Control(pDX, IDC_DEPTHGRAPH, m_depthgraph);
	DDX_Control(pDX, IDC_POSGRAPH3D, m_posgraph3d);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDataDlg, CDialog)
	//{{AFX_MSG_MAP(CDataDlg)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDataDlg message handlers

void CDataDlg::setPosition(double latitude, double longitude)
{
	UpdateData(TRUE);

	COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

	m_latV.push_back(latitude);
	m_lonV.push_back(longitude);

	double *lat;
	double *lon;
	double *dep;

	lat = (double *) malloc(sizeof(double)*m_latV.size());
	lon = (double *) malloc(sizeof(double)*m_lonV.size());
	dep = (double *) malloc(sizeof(double)*m_depV.size());

	for (int i=0;i< m_latV.size(); i++){
		lat[i] = m_latV[i];
		lon[i] = m_lonV[i];
		dep[i] = m_depV[i];
	}

	CCWSafeArray	vDataX(lat, m_latV.size());
	CCWSafeArray	vDataY(lon, m_lonV.size());
	CCWSafeArray	vDataZ(dep, m_depV.size());
	m_posgraph3d.Plot3DCurve(vDataX,vDataY,vDataZ,vOptional);

	UpdateData(FALSE);
}

void CDataDlg::setAltitude(double altitude)
{
	UpdateData(TRUE);
	//m_altitude = altitude;
	UpdateData(FALSE);
}

void CDataDlg::setDepth(double depth)
{
	UpdateData(TRUE);
	
	COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	CCWSafeArray vData(&depth, 1, 1);
	m_depthgraph.ChartY(vData,vOptional,vOptional);

	m_depV.push_back(-depth);

	//m_depth= depth;
	UpdateData(FALSE);
}



void CDataDlg::setBatteryPackStatus(int number, double voltage,
	double current)
{
	UpdateData(TRUE);
/*	switch (number) {
	case (0):
		m_voltage1 = voltage;
		m_current1 = current;
		break;
	case (1):
		m_voltage2 = voltage;
		m_current2 = current;
		break;
	default:
		Assert(false);
		break;
	}
*/
	UpdateData(FALSE);
}