// SenTPDlg.cpp : Implementation file
//

#include "stdafx.h"
#include "RemoteTest.h"
#include "SenTPDlg.h"
#include "Cpcinfo.h"
#include "RemoteTestDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSenTPDlg  dialog


CSenTPDlg::CSenTPDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSenTPDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSenTPDlg)
	//}}AFX_DATA_INIT
}


void CSenTPDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSenTPDlg)
	DDX_Control(pDX, IDC_EDIT_SENTP, m_sentpEdit);
	DDX_Control(pDX, IDC_COMBO_RATE, m_rateCombo);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSenTPDlg, CDialog)
	//{{AFX_MSG_MAP(CSenTPDlg)
	ON_BN_CLICKED(IDC_BTN_START, OnBtnStart)
	ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
	ON_BN_CLICKED(IDC_BTN_SET, OnBtnSet)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BTN_GET_SKIPRATE, OnBtnGetSkiprate)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSenTPDlg message handlers

void CSenTPDlg::OnBtnStart() 
{
	((CRemoteTestDlg*)AfxGetMainWnd())->SensorTransferStart();
}

void CSenTPDlg::OnBtnStop() 
{
	((CRemoteTestDlg*)AfxGetMainWnd())->SensorTransferStop();
}

void CSenTPDlg::OnBtnSet() 
{
	int	sel = m_rateCombo.GetCurSel() + 1;	// Skip rate value
	((CRemoteTestDlg*)AfxGetMainWnd())->SensorSetSkipRate( sel );
}

void CSenTPDlg::SetSensorValue(unsigned long numOfData, SensorRec *sensorRecAry)
{
	CString str2 = "--------------------------------------\r\n";
	CString str;
	CString	strSensor;
	UINT	i;

	if ( m_sentpEdit.GetLineCount() > 500 ) {
		int	ix = m_sentpEdit.LineIndex(100);
		m_sentpEdit.SetSel(0,ix,TRUE);
		m_sentpEdit.ReplaceSel("");
	}
	for ( i = 0; i < numOfData; i++ ) {
		GetSensorString( sensorRecAry[i].sensorID, strSensor );
		long	lValue = ( long )sensorRecAry[i].value;
		if ( ( sensorRecAry[i].sensorID == HeadTilt ) ||
			( sensorRecAry[i].sensorID == HeadTilt2 ) ||
			( sensorRecAry[i].sensorID == HeadPan ) ) {
			lValue = ( long )( ( float )lValue / 3141592.0f * 180.0f );
		}

		if ( ( i % 2 ) || ( i == numOfData - 1 ) ) {
			str.Format("%s : %d\r\n", strSensor, lValue );
		}
		else {
			str.Format("%s : %d, ", strSensor, lValue );
			int		nLen = str.GetLength();
			for ( int j = 0; j < 28 - nLen; j++ ) {
				str += " ";
			}
		}
		str2 += str;
	}

	m_sentpEdit.SetSel( m_sentpEdit.GetWindowTextLength(),
							m_sentpEdit.GetWindowTextLength() );
	m_sentpEdit.ReplaceSel(str2,FALSE);
	m_sentpEdit.UpdateWindow();
}

void CSenTPDlg::GetSensorString( int sensorID, CString &strSensor )
{
	switch ( sensorID ) {
	case Acc1 :
		strSensor = "Acc1";
		break;

	case Acc2 :
		strSensor = "Acc2";
		break;

	case Acc3 :
		strSensor = "Acc3";
		break;

	case HeadTilt :
		strSensor = "HeadTilt";
		break;

	case HeadPan :
		strSensor = "HeadPan";
		break;

	case HeadRoll :
		strSensor = "HeadRoll";
		break;

	case Head1 :
		strSensor = "Head1";
		break;

	case Head2 :
		strSensor = "Head2";
		break;

	case Chin :
		strSensor = "Chin";
		break;

	case PSD :
		strSensor = "PSD";
		break;

	case LFJ1 :
		strSensor = "LFJ1";
		break;

	case LFJ2 :
		strSensor = "LFJ2";
		break;

	case LFJ3 :
		strSensor = "LFJ3";
		break;

	case LFSW :
		strSensor = "LFSW";
		break;

	case LRJ1 :
		strSensor = "LRJ1";
		break;

	case LRJ2 :
		strSensor = "LRJ2";
		break;

	case LRJ3 :
		strSensor = "LRJ3";
		break;

	case LRSW :
		strSensor = "LRSW";
		break;

	case RFJ1 :
		strSensor = "RFJ1";
		break;

	case RFJ2 :
		strSensor = "RFJ2";
		break;

	case RFJ3 :
		strSensor = "RFJ3";
		break;

	case RFSW :
		strSensor = "RFSW";
		break;

	case RRJ1 :
		strSensor = "RRJ1";
		break;

	case RRJ2 :
		strSensor = "RRJ2";
		break;

	case RRJ3 :
		strSensor = "RRJ3";
		break;

	case RRSW :
		strSensor = "RRSW";
		break;

	case BackSW :
		strSensor = "BackSW";
		break;

	case LEar :
		strSensor = "LEar";
		break;

	case REar :
		strSensor = "REar";
		break;

	case Mouth :
		strSensor = "Mouth";
		break;

	case Tail1 :
		strSensor = "Tail1";
		break;

	case Tail2 :
		strSensor = "Tail2";
		break;

	case Temp :
		strSensor = "Temp";
		break;

	case MultiSW1 :
		strSensor = "MultiSW1";
		break;

	case MultiSW2 :
		strSensor = "MultiSW2";
		break;

	case MultiSW3 :
		strSensor = "MultiSW3";
		break;

	case PSDWithXY :
		strSensor = "PSDWithXY";
		break;

	case HeadTilt2:
		strSensor = "HeadTilt2";
		break;

	case BackSW2:
		strSensor = "BackSW2";
		break;

	case BackSW3:
		strSensor = "BackSW3";
		break;

	case PSDWithXY_FN:
		strSensor = "PSDWithXY_FN";
		break;

	case PSDWithXY_N:
		strSensor = "PSDWithXY_N";
		break;

	case PSDWithXY_F:
		strSensor = "PSDWithXY_F";
		break;

	}
}

void CSenTPDlg::OnDestroy() 
{
	CDialog::OnDestroy();
}

void CSenTPDlg::OnBtnGetSkiprate() 
{
	CString strMsg;
	strMsg.Format(_T("Skip rate:%d"), ((CRemoteTestDlg*)AfxGetMainWnd())->SensorGetSkipRate());
	AfxMessageBox(strMsg);
}
