www.pudn.com > GPS ToolKit Pro.rar > GTKTestPanelDlg.cpp
// GTKTestPanelDlg.cpp : implementation file // #include "stdafx.h" #include "GTKTestPanel.h" #include "GTKTestPanelDlg.h" #include "comdef.h" #include#include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define NUM_SNR_BARS 12 using namespace std; ///////////////////////////////////////////////////////////////////////////// // CGTKTestPanelDlg dialog CGTKTestPanelDlg::CGTKTestPanelDlg(CWnd* pParent /*=NULL*/) : CDialog(CGTKTestPanelDlg::IDD, pParent) { //{{AFX_DATA_INIT(CGTKTestPanelDlg) m_degLabel = _T(""); m_minLabel = _T(""); m_secLabel = _T(""); m_altitude = _T(""); m_lat = _T(""); m_lon = _T(""); m_speed = _T(""); m_fixStatus = _T(""); m_fixQuality = _T(""); m_fixDateTime = _T(""); m_DGPSRefStation = _T(""); m_geoidHeight = _T(""); m_numSatellites = _T(""); m_timeSinceLastDGPSUpdate = _T(""); m_trueCourse = _T(""); m_magVar = _T(""); m_strOpMode = _T(""); m_strHDOP = _T(""); m_strPDOP = _T(""); m_strVDOP = _T(""); m_origWptID = _T(""); m_destWptID = _T(""); m_arrivedAtDest = _T(""); m_destWptLat = _T(""); m_destWptLon = _T(""); m_rangeToDest = _T(""); m_trueBearingToDest = _T(""); m_destClosingVelocity = _T(""); m_crossTrackError = _T(""); m_origToDestTrueBearing = _T(""); m_origToDestMagBearing = _T(""); m_routeName = _T(""); m_txtFileName = _T(""); m_dblTimeScale = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CGTKTestPanelDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGTKTestPanelDlg) DDX_Control(pDX, IDC_BUTTON_CLOSE, m_cmdClose); DDX_Control(pDX, IDC_BUTTON_OPEN, m_cmdOpen); DDX_Control(pDX, IDC_BUTTON_OPENFILE, m_cmdOpenFile); DDX_Control(pDX, IDC_EDIT_TIMESCALE, m_editTimeScale); DDX_Control(pDX, IDC_EDIT_FILENAME, m_editFileName); DDX_Control(pDX, IDC_COMBO_ALTUNITS, m_comboAltUnits); DDX_Control(pDX, IDC_COMBO_SPEEDUNITS, m_comboSpeedUnits); DDX_Control(pDX, IDC_COMBO_LATLONFORMAT, m_comboLatLonFormat); DDX_Control(pDX, IDC_COMBO_DISTUNITS, m_comboDistUnits); DDX_Control(pDX, IDC_LISTVIEW_ROUTE, m_routeWptList); DDX_Control(pDX, IDC_STATIC_SATPICTURE, m_satPicture); DDX_Control(pDX, IDC_LIST_RAWDATA, m_rawDataListBox); DDX_Control(pDX, IDC_COMBO_BAUD, m_baudRateCombo); DDX_Control(pDX, IDC_COMBO_PORT, m_portNameCombo); DDX_Text(pDX, IDC_EDIT_DEGLABEL, m_degLabel); DDX_Text(pDX, IDC_EDIT_MINLABEL, m_minLabel); DDX_Text(pDX, IDC_EDIT_SECLABEL, m_secLabel); DDX_Text(pDX, IDC_EDIT_ALT, m_altitude); DDX_Text(pDX, IDC_EDIT_LAT, m_lat); DDX_Text(pDX, IDC_EDIT_LON, m_lon); DDX_Text(pDX, IDC_EDIT_SPEED, m_speed); DDX_Text(pDX, IDC_EDIT_FIXSTATUS, m_fixStatus); DDX_Text(pDX, IDC_EDIT_FIXQUALITY, m_fixQuality); DDX_Text(pDX, IDC_EDIT_DATETIME, m_fixDateTime); DDX_Text(pDX, IDC_EDIT_DGPSREFSTATION, m_DGPSRefStation); DDX_Text(pDX, IDC_EDIT_GEOIDHEIGHT, m_geoidHeight); DDX_Text(pDX, IDC_EDIT_NUMSATELLITES, m_numSatellites); DDX_Text(pDX, IDC_EDIT_TIMESINCEDGPSUPDATE, m_timeSinceLastDGPSUpdate); DDX_Text(pDX, IDC_EDIT_TRUECOURSE, m_trueCourse); DDX_Text(pDX, IDC_EDIT_MAGVAR, m_magVar); DDX_Text(pDX, IDC_EDIT_OPMODE, m_strOpMode); DDX_Text(pDX, IDC_EDIT_HDOP, m_strHDOP); DDX_Text(pDX, IDC_EDIT_PDOP, m_strPDOP); DDX_Text(pDX, IDC_EDIT_VDOP, m_strVDOP); DDX_Text(pDX, IDC_EDIT_ORIGINWPT, m_origWptID); DDX_Text(pDX, IDC_EDIT_DESTWPT, m_destWptID); DDX_Text(pDX, IDC_EDIT_ARRIVED, m_arrivedAtDest); DDX_Text(pDX, IDC_EDIT_DESTWPTLAT, m_destWptLat); DDX_Text(pDX, IDC_EDIT_DESTWPTLON, m_destWptLon); DDX_Text(pDX, IDC_EDIT_RANGETODEST, m_rangeToDest); DDX_Text(pDX, IDC_EDIT_TRUEBEARINGTODEST, m_trueBearingToDest); DDX_Text(pDX, IDC_EDIT_DESTCLOSINGVELOCITY, m_destClosingVelocity); DDX_Text(pDX, IDC_EDIT_CROSSTRACKERROR, m_crossTrackError); DDX_Text(pDX, IDC_EDIT_ORIGTODESTTRUEBEARING, m_origToDestTrueBearing); DDX_Text(pDX, IDC_EDIT_ORIGTODESTMAGBEARING, m_origToDestMagBearing); DDX_Text(pDX, IDC_EDITROUTENAME, m_routeName); DDX_Text(pDX, IDC_EDIT_FILENAME, m_txtFileName); DDX_Text(pDX, IDC_EDIT_TIMESCALE, m_dblTimeScale); DDX_Control(pDX, IDC_GPSTOOLKIT, m_myGPSToolKit); //}}AFX_DATA_MAP DDX_Control(pDX, IDC_SNRBAR, m_snrBar[0]); DDX_Control(pDX, IDC_SNRBAR2, m_snrBar[1]); DDX_Control(pDX, IDC_SNRBAR3, m_snrBar[2]); DDX_Control(pDX, IDC_SNRBAR4, m_snrBar[3]); DDX_Control(pDX, IDC_SNRBAR5, m_snrBar[4]); DDX_Control(pDX, IDC_SNRBAR6, m_snrBar[5]); DDX_Control(pDX, IDC_SNRBAR7, m_snrBar[6]); DDX_Control(pDX, IDC_SNRBAR8, m_snrBar[7]); DDX_Control(pDX, IDC_SNRBAR9, m_snrBar[8]); DDX_Control(pDX, IDC_SNRBAR10, m_snrBar[9]); DDX_Control(pDX, IDC_SNRBAR11, m_snrBar[10]); DDX_Control(pDX, IDC_SNRBAR12, m_snrBar[11]); DDX_Control(pDX, IDC_SNRBARPRN, m_snrBarPrn[0]); DDX_Control(pDX, IDC_SNRBARPRN2, m_snrBarPrn[1]); DDX_Control(pDX, IDC_SNRBARPRN3, m_snrBarPrn[2]); DDX_Control(pDX, IDC_SNRBARPRN4, m_snrBarPrn[3]); DDX_Control(pDX, IDC_SNRBARPRN5, m_snrBarPrn[4]); DDX_Control(pDX, IDC_SNRBARPRN6, m_snrBarPrn[5]); DDX_Control(pDX, IDC_SNRBARPRN7, m_snrBarPrn[6]); DDX_Control(pDX, IDC_SNRBARPRN8, m_snrBarPrn[7]); DDX_Control(pDX, IDC_SNRBARPRN9, m_snrBarPrn[8]); DDX_Control(pDX, IDC_SNRBARPRN10, m_snrBarPrn[9]); DDX_Control(pDX, IDC_SNRBARPRN11, m_snrBarPrn[10]); DDX_Control(pDX, IDC_SNRBARPRN12, m_snrBarPrn[11]); } BEGIN_MESSAGE_MAP(CGTKTestPanelDlg, CDialog) //{{AFX_MSG_MAP(CGTKTestPanelDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen) ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose) ON_EN_CHANGE(IDC_EDIT_DEGLABEL, OnChangeEditDeglabel) ON_EN_CHANGE(IDC_EDIT_MINLABEL, OnChangeEditMinlabel) ON_EN_CHANGE(IDC_EDIT_SECLABEL, OnChangeEditSeclabel) ON_CBN_SELCHANGE(IDC_COMBO_BAUD, OnSelchangeComboBaud) ON_CBN_SELCHANGE(IDC_COMBO_ALTUNITS, OnSelchangeComboAltunits) ON_CBN_SELCHANGE(IDC_COMBO_SPEEDUNITS, OnSelchangeComboSpeedunits) ON_BN_CLICKED(IDC_RADIO_DEG, OnRadioDeg) ON_BN_CLICKED(IDC_RADIO_DEGMIN, OnRadioDegmin) ON_BN_CLICKED(IDC_RADIO_DEGMINSEC, OnRadioDegminsec) ON_CBN_SELCHANGE(IDC_COMBO_DISTUNITS, OnSelchangeComboDistunits) ON_CBN_SELCHANGE(IDC_COMBO_LATLONFORMAT, OnSelchangeComboLatlonformat) ON_BN_CLICKED(IDC_BUTTON_OPENFILE, OnButtonOpenfile) //}}AFX_MSG_MAP END_MESSAGE_MAP() BEGIN_EVENTSINK_MAP(CGTKTestPanelDlg, CDialog) //{{AFX_EVENTSINK_MAP(CGTKTestPanelDlg) ON_EVENT(CGTKTestPanelDlg, IDC_GPSTOOLKIT, 3 /* FixUpdate */, OnFixUpdateGpstoolkit, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) ON_EVENT(CGTKTestPanelDlg, IDC_GPSTOOLKIT, 1 /* RawDataReceived */, OnRawDataReceivedGpstoolkit, VTS_VARIANT VTS_VARIANT) ON_EVENT(CGTKTestPanelDlg, IDC_GPSTOOLKIT, 5 /* SatelliteUpdate */, OnSatelliteUpdateGpstoolkit, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) ON_EVENT(CGTKTestPanelDlg, IDC_GPSTOOLKIT, 4 /* NavUpdate */, OnNavUpdateGpstoolkit, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT) ON_EVENT(CGTKTestPanelDlg, IDC_GPSTOOLKIT, 7 /* FileComplete */, OnFileCompleteGpstoolkit, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() ///////////////////////////////////////////////////////////////////////////// // CGTKTestPanelDlg message handlers BOOL CGTKTestPanelDlg::OnInitDialog() { _variant_t workVariant; CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here //Initialize UI m_portNameCombo.SetCurSel(0); // COM1 m_baudRateCombo.SetCurSel(0); // 4800 m_dblTimeScale = 1.; // Set degree label edit box workVariant = m_myGPSToolKit.GetDegLabel(); m_degLabel = (char *)(_bstr_t)workVariant; // Set minute label edit box workVariant = m_myGPSToolKit.GetMinLabel(); m_minLabel = (char *)(_bstr_t)workVariant; // Set second label edit box workVariant = m_myGPSToolKit.GetSecLabel(); m_secLabel = (char *)(_bstr_t)workVariant; // Set alt units combo workVariant = m_myGPSToolKit.GetAltitudeUnits(); m_comboAltUnits.SetCurSel((short)workVariant); switch((short)workVariant) { case 0: m_altUnitsLabel = "m"; break; case 1: m_altUnitsLabel = "ft"; break; } // Set speed units combo workVariant = m_myGPSToolKit.GetSpeedUnits(); m_comboSpeedUnits.SetCurSel((short)workVariant); switch((short)workVariant) { case 0: m_speedUnitsLabel = "mph"; break; case 1: m_speedUnitsLabel = "kph"; break; case 2: m_speedUnitsLabel = "knots"; break; } // Set dist units combo workVariant = m_myGPSToolKit.GetDistUnits(); m_comboDistUnits.SetCurSel((short)workVariant); switch((short)workVariant) { case 0: m_distUnitsLabel = "m"; break; case 1: m_distUnitsLabel = "ft"; break; case 2: m_distUnitsLabel = "miles"; break; case 3: m_distUnitsLabel = "nm"; } // Set lat/lon format combo workVariant = m_myGPSToolKit.GetLatLonFormat(); m_comboLatLonFormat.SetCurSel((short)workVariant); // Add columns to route wpt listview m_routeWptList.InsertColumn(0, "Wpt", LVCFMT_LEFT, 51); m_routeWptList.InsertColumn(1, "Lat", LVCFMT_LEFT, 70); m_routeWptList.InsertColumn(2, "Lon", LVCFMT_LEFT, 70); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CGTKTestPanelDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CGTKTestPanelDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CGTKTestPanelDlg::OnButtonOpen() { CString strComboBox; m_portNameCombo.GetWindowText(strComboBox); _variant_t vtComPort((LPCSTR)strComboBox); m_myGPSToolKit.Open(vtComPort); // Disable controls m_portNameCombo.EnableWindow(FALSE); m_editFileName.EnableWindow(FALSE); m_editTimeScale.EnableWindow(FALSE); m_cmdOpen.EnableWindow(FALSE); m_cmdOpenFile.EnableWindow(FALSE); UpdateData(FALSE); } void CGTKTestPanelDlg::OnButtonClose() { m_myGPSToolKit.Close(); // Enable controls m_portNameCombo.EnableWindow(TRUE); m_editFileName.EnableWindow(TRUE); m_editTimeScale.EnableWindow(TRUE); m_cmdOpen.EnableWindow(TRUE); m_cmdOpenFile.EnableWindow(TRUE); UpdateData(FALSE); } void CGTKTestPanelDlg::OnChangeEditDeglabel() { UpdateData(TRUE); _variant_t vtDegLabel(m_degLabel); m_myGPSToolKit.SetDegLabel(vtDegLabel); } void CGTKTestPanelDlg::OnChangeEditMinlabel() { UpdateData(TRUE); _variant_t vtMinLabel(m_minLabel); m_myGPSToolKit.SetMinLabel(vtMinLabel); } void CGTKTestPanelDlg::OnChangeEditSeclabel() { UpdateData(TRUE); _variant_t vtSecLabel(m_secLabel); m_myGPSToolKit.SetSecLabel(vtSecLabel); } void CGTKTestPanelDlg::OnSelchangeComboBaud() { UpdateData(TRUE); CString strComboBox; m_baudRateCombo.GetWindowText(strComboBox); _variant_t vtBaudRate(strComboBox); m_myGPSToolKit.SetBaudRate(vtBaudRate); } void CGTKTestPanelDlg::OnSelchangeComboAltunits() { UpdateData(TRUE); _variant_t vtAltUnits((short)m_comboAltUnits.GetCurSel()); m_myGPSToolKit.SetAltitudeUnits(vtAltUnits); switch((short)vtAltUnits) { case 0: m_altUnitsLabel = "m"; break; case 1: m_altUnitsLabel = "ft"; break; } } void CGTKTestPanelDlg::OnSelchangeComboSpeedunits() { UpdateData(TRUE); _variant_t vtSpeedUnits((short)m_comboSpeedUnits.GetCurSel()); m_myGPSToolKit.SetSpeedUnits(vtSpeedUnits); switch((short)vtSpeedUnits) { case 0: m_speedUnitsLabel = "mph"; break; case 1: m_speedUnitsLabel = "kph"; break; case 2: m_speedUnitsLabel = "knots"; break; } } void CGTKTestPanelDlg::OnFixUpdateGpstoolkit(const VARIANT FAR& FixGood, const VARIANT FAR& FixDateTime, const VARIANT FAR& Latitude, const VARIANT FAR& Longitude, const VARIANT FAR& Altitude, const VARIANT FAR& Speed, const VARIANT FAR& TrueCourse) { _bstr_t workBSTR_T; _variant_t workVT; // Latitude and Longitude workBSTR_T = Latitude; m_lat = (BSTR)workBSTR_T; workBSTR_T = Longitude; m_lon = (BSTR)workBSTR_T; // Altitude if(Altitude.vt == VT_EMPTY) { m_altitude = ""; } else { workVT = Altitude; char altStr[80]; sprintf(altStr, "%.1lf", (double)workVT); m_altitude = CString(altStr) + " " + m_altUnitsLabel; } // Speed if(Speed.vt == VT_EMPTY) { m_speed = ""; } else { workVT = Speed; char speedStr[80]; sprintf(speedStr, "%.1lf", (double)workVT); m_speed = CString(speedStr) + " " + m_speedUnitsLabel; } // True course workBSTR_T = TrueCourse; m_trueCourse = (BSTR)workBSTR_T; // Mag variation workBSTR_T = m_myGPSToolKit.GetMagVariation(); m_magVar = (BSTR)workBSTR_T; // Fix date and time COleDateTime workDateTime(FixDateTime); m_fixDateTime = workDateTime.Format(); // Fix status workVT = FixGood; if((bool)workVT) { m_fixStatus = "Valid"; } else { m_fixStatus = "Invalid"; } // Fix quality workVT = m_myGPSToolKit.GetFixQuality(); switch((short)workVT) { case 0: m_fixQuality = "Invalid Fix"; break; case 1: m_fixQuality = "GPS Fix"; break; case 2: m_fixQuality = "DGPS Fix"; break; default: char fixQualityNum[10]; itoa((short)workVT, fixQualityNum, 10); m_fixQuality = "Other ("; m_fixQuality += fixQualityNum; m_fixQuality += ")"; } // Num satellites workBSTR_T = m_myGPSToolKit.GetNumSatellitesInFix(); m_numSatellites = (BSTR)workBSTR_T; // Geoid height above WGS84 ellipsoid workVT = m_myGPSToolKit.GetGeoidHeightAboveWGS84Ellipsoid(); if(workVT.vt == VT_EMPTY) { m_geoidHeight = ""; } else { char geoidHeightStr[80]; sprintf(geoidHeightStr, "%.1lf", (double)workVT); m_geoidHeight = CString(geoidHeightStr) + " " + m_altUnitsLabel; } // DGPS ref station ID workBSTR_T = m_myGPSToolKit.GetDGPSRefStationID(); m_DGPSRefStation = (BSTR)workBSTR_T; // Time since last DGPS update workBSTR_T = m_myGPSToolKit.GetTimeSinceLastDGPSUpdate(); m_timeSinceLastDGPSUpdate = (BSTR)workBSTR_T; UpdateData(FALSE); } void CGTKTestPanelDlg::OnRawDataReceivedGpstoolkit(const VARIANT FAR& RawData, const VARIANT FAR& NumBytesRead) { // Convert the variant string to a CString _bstr_t btRawData(RawData); CString rawDataString((BSTR)btRawData); // Add to Raw Data list box m_rawDataListBox.AddString(rawDataString); m_rawDataListBox.SetCurSel(m_rawDataListBox.GetCount() - 1); } void CGTKTestPanelDlg::OnRadioDeg() { UpdateData(TRUE); _variant_t workVT((short)0); m_myGPSToolKit.SetLatLonFormat(workVT); } void CGTKTestPanelDlg::OnRadioDegmin() { UpdateData(TRUE); _variant_t workVT((short)1); m_myGPSToolKit.SetLatLonFormat(workVT); } void CGTKTestPanelDlg::OnRadioDegminsec() { UpdateData(TRUE); _variant_t workVT((short)2); m_myGPSToolKit.SetLatLonFormat(workVT); } void CGTKTestPanelDlg::OnSatelliteUpdateGpstoolkit(const VARIANT FAR& AutomaticOperation, const VARIANT FAR& OperationMode, const VARIANT FAR& NumSatellitesInView, const VARIANT FAR& HDOP, const VARIANT FAR& PDOP, const VARIANT FAR& VDOP, const VARIANT FAR& FixSatellitePRNs, const VARIANT FAR& SatelliteInViewPRNs) { vector vecFixSatellitePRNs, vecSatelliteInViewPRNs, vecAz, vecEl, vecSNR; // unpack SAFEARRAY data and repackage as STL vector long arrayUBound; VARIANT variantData; // Fix satellites SAFEARRAY *psa = FixSatellitePRNs.parray; SafeArrayGetUBound(psa, 1, &arrayUBound); for(long i = 0; i <= arrayUBound; i++) { SafeArrayGetElement(psa, &i, &variantData); vecFixSatellitePRNs.push_back(variantData.iVal); } // Satellites in view psa = SatelliteInViewPRNs.parray; SafeArrayGetUBound(psa, 1, &arrayUBound); _variant_t vtAz, vtEl, vtSnr; for(i = 0; i <= arrayUBound; i++) { SafeArrayGetElement(psa, &i, &variantData); vecSatelliteInViewPRNs.push_back(variantData.iVal); m_snrBarPrn[i].m_prn = variantData.iVal; // Determine if this is a fix satellite or just a satellite in view m_snrBarPrn[i].bIsFixSat = false; for(short j = 0; j < vecFixSatellitePRNs.size(); j++) { if(vecFixSatellitePRNs[j] == vecSatelliteInViewPRNs[i]) { m_snrBarPrn[i].bIsFixSat = true; break; } } m_myGPSToolKit.GetSatelliteInfo(_variant_t(vecSatelliteInViewPRNs[i]), &vtAz, &vtEl, &vtSnr); vecAz.push_back((short)vtAz); vecEl.push_back((short)vtEl); vecSNR.push_back((short)vtSnr); } m_satPicture.DrawSatellites(vecFixSatellitePRNs, vecSatelliteInViewPRNs, vecAz, vecEl); for(i = 0; i < NUM_SNR_BARS; i++) { m_snrBarPrn[i].DrawSnrBarPRN(); m_snrBar[i].SetPos(vecSNR[i]); } // Clear unused SNR bars and PRNs for(i = vecSatelliteInViewPRNs.size(); i < NUM_SNR_BARS; i++) { m_snrBarPrn[i].m_prn = -1; m_snrBarPrn[i].DrawSnrBarPRN(); m_snrBar[i].SetPos(0); } // Display HDOP, PDOP, VDOP, and operation mode _variant_t vtAutoMode(AutomaticOperation); _variant_t vtOpMode(OperationMode); _variant_t vtHDOP(HDOP); _variant_t vtPDOP(PDOP); _variant_t vtVDOP(VDOP); CString strAutoMode, strOpMode, seperator; // Operation mode if(vtAutoMode.vt == VT_EMPTY) { strAutoMode = ""; } else if((bool)vtAutoMode) { strAutoMode = "Auto"; } else { strAutoMode = "Manual"; } switch((short)vtOpMode) { case 1: strOpMode = "Fix NA"; break; case 2: strOpMode = "2D"; break; case 3: strOpMode = "3D"; break; default: strOpMode = ""; } if(strAutoMode == "" && strOpMode == "") { seperator = ""; } else { seperator = " / "; } m_strOpMode = strAutoMode + seperator + strOpMode; char lpszWork[80]; // HDOP if(vtHDOP.vt != VT_EMPTY) { sprintf(lpszWork, "%.1lf", (double)vtHDOP); m_strHDOP = CString(lpszWork); } // PDOP if(vtPDOP.vt != VT_EMPTY) { sprintf(lpszWork, "%.1lf", (double)vtPDOP); m_strPDOP = CString(lpszWork); } // VDOP if(vtVDOP.vt != VT_EMPTY) { sprintf(lpszWork, "%.1lf", (double)vtVDOP); m_strVDOP = CString(lpszWork); } UpdateData(FALSE); } void CGTKTestPanelDlg::OnSelchangeComboDistunits() { UpdateData(TRUE); _variant_t vtDistUnits((short)m_comboDistUnits.GetCurSel()); m_myGPSToolKit.SetDistUnits(vtDistUnits); switch((short)vtDistUnits) { case 0: m_distUnitsLabel = "m"; break; case 1: m_distUnitsLabel = "ft"; break; case 2: m_distUnitsLabel = "miles"; break; case 3: m_distUnitsLabel = "nm"; } } void CGTKTestPanelDlg::OnSelchangeComboLatlonformat() { UpdateData(TRUE); _variant_t vtLatLonFormat((short)m_comboLatLonFormat.GetCurSel()); m_myGPSToolKit.SetLatLonFormat(vtLatLonFormat); } void CGTKTestPanelDlg::OnNavUpdateGpstoolkit(const VARIANT FAR& OriginWptID, const VARIANT FAR& DestWptID, const VARIANT FAR& DestWptLatitude, const VARIANT FAR& DestWptLongitude, const VARIANT FAR& TrueBearingToDest, const VARIANT FAR& RangeToDest, const VARIANT FAR& CrossTrackError, const VARIANT FAR& DestClosingVelocity, const VARIANT FAR& DestArrivalAlarm, const VARIANT FAR& RouteName, const VARIANT FAR& WptsInRoute) { _bstr_t workBSTR_T; _variant_t workVT; // WPT IDs (names) workBSTR_T = OriginWptID; m_origWptID = (BSTR)workBSTR_T; workBSTR_T = DestWptID; m_destWptID = (BSTR)workBSTR_T; // Arrival flag workVT = DestArrivalAlarm; if(workVT.vt == VT_EMPTY) { m_arrivedAtDest = ""; } else if((bool)workVT) { m_arrivedAtDest = "True"; } else { m_arrivedAtDest = "False"; } // Dest Latitude and Longitude workBSTR_T = DestWptLatitude; m_destWptLat = (BSTR)workBSTR_T; workBSTR_T = DestWptLongitude; m_destWptLon = (BSTR)workBSTR_T; // Range to Dest if(RangeToDest.vt == VT_EMPTY) { m_rangeToDest = ""; } else { workVT = RangeToDest; char rangeStr[80]; sprintf(rangeStr, "%.2lf", (double)workVT); m_rangeToDest = CString(rangeStr) + " " + m_distUnitsLabel; } // True Bearing to Dest workBSTR_T = TrueBearingToDest; m_trueBearingToDest = (BSTR)workBSTR_T; // Closing Velocity if(DestClosingVelocity.vt == VT_EMPTY) { m_destClosingVelocity = ""; } else { workVT = DestClosingVelocity; char closingVelStr[80]; sprintf(closingVelStr, "%.1lf", (double)workVT); m_destClosingVelocity = CString(closingVelStr) + " " + m_speedUnitsLabel; } // Cross Track Error workBSTR_T = CrossTrackError; m_crossTrackError = (BSTR)workBSTR_T; // Orig to Dest Bearings workBSTR_T = m_myGPSToolKit.GetOrigToDestTrueBearing(); m_origToDestTrueBearing = (BSTR)workBSTR_T; workBSTR_T = m_myGPSToolKit.GetOrigToDestMagBearing(); m_origToDestMagBearing = (BSTR)workBSTR_T; // Route name workBSTR_T = RouteName; m_routeName = (BSTR)workBSTR_T; // Route Box // unpack SAFEARRAY data CString strWptName; long arrayUBound; VARIANT variantData; _variant_t wptLat, wptLon; SAFEARRAY *psa = WptsInRoute.parray; SafeArrayGetUBound(psa, 1, &arrayUBound); for(long i = 0; i <= arrayUBound; i++) { SafeArrayGetElement(psa, &i, &variantData); m_myGPSToolKit.GetWptLocation(variantData, &wptLat, &wptLon); strWptName = (LPCSTR)(_bstr_t)variantData; if(i < m_routeWptList.GetItemCount()) { m_routeWptList.SetItemText(i, 0, strWptName); } else { m_routeWptList.InsertItem(i, strWptName); } m_routeWptList.SetItemText(i, 1, (LPCSTR)(_bstr_t)wptLat); m_routeWptList.SetItemText(i, 2, (LPCSTR)(_bstr_t)wptLon); } while(m_routeWptList.GetItemCount() > arrayUBound + 1) { m_routeWptList.DeleteItem(m_routeWptList.GetItemCount()-1); } UpdateData(FALSE); } void CGTKTestPanelDlg::OnButtonOpenfile() { UpdateData(TRUE); CString strButtonCaption; m_cmdOpenFile.GetWindowText(strButtonCaption); if(strButtonCaption == "Open File") { _variant_t vtFileName(m_txtFileName); _variant_t vtTimeScale(m_dblTimeScale); m_myGPSToolKit.OpenFile(vtFileName, vtTimeScale); // Disable controls m_portNameCombo.EnableWindow(FALSE); m_baudRateCombo.EnableWindow(FALSE); m_editFileName.EnableWindow(FALSE); m_editTimeScale.EnableWindow(FALSE); m_cmdOpen.EnableWindow(FALSE); m_cmdClose.EnableWindow(FALSE); m_cmdOpenFile.SetWindowText("Cancel"); } else { m_myGPSToolKit.Close(); // Enable controls m_portNameCombo.EnableWindow(TRUE); m_baudRateCombo.EnableWindow(TRUE); m_editFileName.EnableWindow(TRUE); m_editTimeScale.EnableWindow(TRUE); m_cmdOpen.EnableWindow(TRUE); m_cmdClose.EnableWindow(TRUE); m_cmdOpenFile.SetWindowText("Open File"); } UpdateData(FALSE); } void CGTKTestPanelDlg::OnFileCompleteGpstoolkit() { // Enable controls m_portNameCombo.EnableWindow(TRUE); m_baudRateCombo.EnableWindow(TRUE); m_editFileName.EnableWindow(TRUE); m_editTimeScale.EnableWindow(TRUE); m_cmdOpen.EnableWindow(TRUE); m_cmdClose.EnableWindow(TRUE); m_cmdOpenFile.SetWindowText("Open File"); }