亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gps.cpp

?? 本系統為公交車輛調度系統
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/////////////////////////////////////////////////////////////////////////////////////////////
//GPS.cpp
/////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////  .h文件  //////////////////////////////////
#include "stdafx.h"
#include "gps.h"
#include "serport.h"
#include "resource.h"
#include "nmea.h"
#include "math.h"
#include "gpssetup.h"



//////////////////////////////////  宏定義 //////////////////////////
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif


////////////////////////////////// 本地變量 /////////////////////////////////////
class GPSHandle
{
public:
  GPSHandle();
  ~GPSHandle();

  GPSPOSITION  m_Position;    //實際數據
  CEvent*      m_pKillEvent;  //信號線程推出事件
  CEvent*      m_pStartEvent; //后臺線程開始事件
  GPSDEVINFO   m_DevInfo;     //使用的通信端口設置
  BOOL         m_bRunning;    //后臺線程是否運行
  CWinThread*  m_pThread;     //指向后臺線程的指針
};


BOOL GetGpsDevice(DWORD dwDevice, LPGPSDEVINFO lpGpsDevInfo);
BOOL SetGpsDevice(DWORD dwDevice, LPCGPSDEVINFO lpGpsDevInfo, BOOL bCheckDefault = TRUE);
BOOL SetGpsNumDevices(DWORD dwDevices);
UINT GpsMonitorThead(LPVOID pParam);


////////////////////////////////// 執行 /////////////////////////////

GPSHandle::GPSHandle()
{
  ZeroMemory(&m_Position, sizeof(GPSPOSITION));
  m_pKillEvent = new CEvent(FALSE, TRUE);
  m_pStartEvent = new CEvent(FALSE, TRUE);
  m_pThread = NULL;
}


GPSHandle::~GPSHandle()
{
  delete m_pStartEvent;
  m_pStartEvent = NULL;

  delete m_pKillEvent;
  m_pKillEvent = NULL;
} 

BOOL GetGpsDevice(DWORD dwDevice, LPGPSDEVINFO lpGpsDevInfo)
{
  BOOL bSuccess = FALSE;
  HKEY hKey;

  CString sValueKey;
  sValueKey.Format(_T("SOFTWARE\\PJ Naughter\\GPS32\\%d"), dwDevice);

  LONG nError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sValueKey, 0, KEY_ALL_ACCESS, &hKey);
  if (nError == ERROR_SUCCESS) 
  {
    DWORD dwType;
    DWORD dwSize;

    RegQueryValueEx(hKey, _T("DeviceName"), 0, &dwType, NULL, &dwSize);
    TCHAR* pszName = new TCHAR[dwSize / sizeof(TCHAR)];
    RegQueryValueEx(hKey, _T("DeviceName"), 0, &dwType, (LPBYTE) pszName, &dwSize);
    _tcscpy(lpGpsDevInfo->szDeviceName, pszName);
    delete [] pszName;

    RegQueryValueEx(hKey, _T("DefaultReceiver"), 0, &dwType, (LPBYTE) &lpGpsDevInfo->bDefaultReceiver, &dwSize);

    RegQueryValueEx(hKey, _T("Port"), 0, &dwType, (LPBYTE) &lpGpsDevInfo->wCommPort, &dwSize);

    RegQueryValueEx(hKey, _T("BaudRate"), 0, &dwType, (LPBYTE) &lpGpsDevInfo->dwCommBaudRate, &dwSize);

    RegQueryValueEx(hKey, _T("DataBits"), 0, &dwType, (LPBYTE) &lpGpsDevInfo->wCommDataBits, &dwSize);

    RegQueryValueEx(hKey, _T("StopBits"), 0, &dwType, (LPBYTE) &lpGpsDevInfo->wCommStopBits, &dwSize);

    bSuccess = TRUE;

    RegCloseKey(hKey);
  }
	else
	{
	  TRACE(_T("GetGpsDevice, Failed to open a registry key, Error was: %d\n"), nError);
	}

  return bSuccess;
}


BOOL GpsSetNumDevices(DWORD dwDevices)
{
  BOOL bSuccess = FALSE;
  HKEY hKey;
  DWORD dwDisposition;

  LONG nError = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\PJ Naughter\\GPS32"), 0, _T(""),
                               REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
  if (nError == ERROR_SUCCESS) 
  {
    RegSetValueEx(hKey, _T("NumberOfDevices"), 0, REG_DWORD, (CONST BYTE*) &dwDevices, sizeof(DWORD));
    
    RegCloseKey(hKey);

    bSuccess = TRUE;
  }
	else
	{
    TRACE(_T("GpsSetNumDevices, Failed in call to create a registry key, Error was: %d\n"), nError);
	}

  return bSuccess;
}

BOOL SetGpsDevice(DWORD dwDevice, LPCGPSDEVINFO lpDevice, BOOL bCheckDefault)
{
  if (bCheckDefault && lpDevice->bDefaultReceiver)
  {
    //將所有設備設為缺省
    for (DWORD i=0; i<GpsGetNumDevices(); i++)
    {
      GPSDEVINFO devInfo;
      GetGpsDevice(i, &devInfo);
      devInfo.bDefaultReceiver = FALSE; 
      SetGpsDevice(i, &devInfo, FALSE);
    }
  }

  BOOL bSuccess = FALSE;
  HKEY hKey;
  DWORD dwDisposition;
  CString sValueKey;
  sValueKey.Format(_T("SOFTWARE\\PJ Naughter\\GPS32\\%d"), dwDevice);
	LONG nError = RegCreateKeyEx(HKEY_LOCAL_MACHINE, sValueKey, 0, _T(""), REG_OPTION_NON_VOLATILE,
                               KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
  if (nError == ERROR_SUCCESS) 
  {
    RegSetValueEx(hKey, _T("DeviceName"), 0, REG_SZ, (CONST BYTE*) lpDevice->szDeviceName, _tcslen(lpDevice->szDeviceName));

    RegSetValueEx(hKey, _T("DefaultReceiver"), 0, REG_DWORD, (CONST BYTE*) &lpDevice->bDefaultReceiver, sizeof(BOOL));

    DWORD dwData = lpDevice->wCommPort;
    RegSetValueEx(hKey, _T("Port"), 0, REG_DWORD, (CONST BYTE*) &dwData, sizeof(DWORD));

    RegSetValueEx(hKey, _T("BaudRate"), 0, REG_DWORD, (CONST BYTE*) &lpDevice->dwCommBaudRate, sizeof(DWORD));

    dwData = lpDevice->wCommDataBits;
    RegSetValueEx(hKey, _T("DataBits"), 0, REG_DWORD, (CONST BYTE*) &dwData, sizeof(DWORD));

    dwData = lpDevice->wCommStopBits;
    RegSetValueEx(hKey, _T("StopBits"), 0, REG_DWORD, (CONST BYTE*) &dwData, sizeof(DWORD));

    RegCloseKey(hKey);

    bSuccess = TRUE;
  }
	else
	{
    TRACE(_T("SetGPSDevice, Failed in call to create a registry key, Error was: %d\n"), nError);
	}

  //確認至少有一個設備是缺省的
  if (bCheckDefault && !lpDevice->bDefaultReceiver)
  {
    DWORD dwDevices = GpsGetNumDevices();
    GPSDEVINFO* pGpsDevInfo = new GPSDEVINFO[dwDevices];
    dwDevices = GpsEnumDevices(pGpsDevInfo, dwDevices);
    BOOL bFound = FALSE;
    for (DWORD i=0; i<dwDevices && !bFound; i++)
    {
      if (pGpsDevInfo[i].bDefaultReceiver)
        bFound = TRUE;
    }
    delete [] pGpsDevInfo;

    if (!bFound)
    {
      TRACE(_T("SetGpsDevice, Found no device with default receiver attribute\n"));
      TRACE(_T("  making first device the default\n"));

      GPSDEVINFO devInfo;
      GetGpsDevice(0, &devInfo);
      devInfo.bDefaultReceiver = TRUE; 
      SetGpsDevice(0, &devInfo, FALSE);
    }
  }

  return bSuccess;
}


BOOL GpsSetDevice(LPCTSTR lpszEntry, LPCGPSDEVINFO lpGpsDevInfo)
{
  //通過通信入口名尋找設備
  DWORD dwDevices = GpsGetNumDevices();
  GPSDEVINFO* pGpsDevInfo = new GPSDEVINFO[dwDevices];
  dwDevices = GpsEnumDevices(pGpsDevInfo, dwDevices);
  BOOL bFound = FALSE;
  for (DWORD i=0; i<dwDevices && !bFound; i++)
  {
    if (_tcsicmp(lpszEntry, pGpsDevInfo[i].szDeviceName) == 0)
      bFound = TRUE;
  }
  delete [] pGpsDevInfo;

  if (!bFound)
  {
    TRACE(_T("GpsSetDevice, Failed to find GpsEntry for %s\n"), lpszEntry);
    return FALSE;
  }

  return SetGpsDevice(i-1, lpGpsDevInfo);
}


BOOL GpsShowControlPanel()
{
#ifdef _DEBUG
  #ifdef _UNICODE
  	UINT nExec = ::WinExec("GPS100UD.EXE", SW_SHOW);
  #else
		UINT nExec = ::WinExec("GPS100D.EXE", SW_SHOW);
  #endif
#else
  #ifdef _UNICODE
  	UINT nExec = ::WinExec("GPS100U.EXE", SW_SHOW);
  #else
		UINT nExec = ::WinExec("GPS100.EXE", SW_SHOW);
	#endif
#endif
  if (nExec <= 31)
	  TRACE(_T("GpsShowControlPanel, Failed in call to WinExec GPS executable, WinExec returns: %d"), nExec);
  
	return (nExec > 31);
}


BOOL GpsCreateEntry(HWND hWnd)
{
  BOOL bSuccess = FALSE;

  CWnd* pParent = CWnd::FromHandle(hWnd);

	CInstallPropertySheet propSheet(IDS_GPS_SETUP, pParent);
  propSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
	int nResponse = propSheet.DoModal();

  if (nResponse == ID_WIZFINISH)
  {
    DWORD dwDevices = GpsGetNumDevices();

    GPSDEVINFO GpsInfo;
    _tcscpy(GpsInfo.szDeviceName, propSheet.m_Page3.m_sName); 
    GpsInfo.bDefaultReceiver = (propSheet.m_Page3.m_nMakeDefault == 0);
    GpsInfo.wCommPort = (WORD) propSheet.m_Page2.m_dwPort;
    GpsInfo.dwCommBaudRate = propSheet.m_Page2.m_dwBaudRate;
    GpsInfo.wCommDataBits = 8; 
    GpsInfo.wCommParity = GpsParityNone;
    GpsInfo.wCommStopBits = GpsStopBits1;

    bSuccess = SetGpsDevice(dwDevices, &GpsInfo);

    //逐一增加設備數
    GpsSetNumDevices(dwDevices + 1);
  }

  return bSuccess;
}


DWORD GpsGetNumDevices()
{
  DWORD dwDevices = 0;
  DWORD dwType;
  DWORD dwSize = sizeof(DWORD);
  HKEY hKey;

  LONG nError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\PJ Naughter\\GPS32"),
                             0, KEY_ALL_ACCESS, &hKey);
  if (nError == ERROR_SUCCESS) 
  {
    RegQueryValueEx(hKey, _T("NumberOfDevices"), 0, &dwType, (LPBYTE) &dwDevices, &dwSize);
    RegCloseKey(hKey);
  }
	else
	{
    TRACE(_T("GpsGetNumDevices, Failed in call to open the registry, Error was: %d\n"), nError);
	}


  return dwDevices;
}


DWORD GpsEnumDevices(LPGPSDEVINFO lpRasDevInfo, DWORD dwRequestedDevices)
{
  DWORD dwDevicesToRetreive = min(GpsGetNumDevices(), dwRequestedDevices);

  for (DWORD i=0; i<dwDevicesToRetreive; i++)
    GetGpsDevice(i, &lpRasDevInfo[i]);

  return dwDevicesToRetreive;
}


BOOL GpsDeleteEntry(LPCTSTR lpszEntry)
{
//通過通信入口名尋找設備
  DWORD dwDevices = GpsGetNumDevices();
  GPSDEVINFO* pGpsDevInfo = new GPSDEVINFO[dwDevices];
  dwDevices = GpsEnumDevices(pGpsDevInfo, dwDevices);
  BOOL bFound = FALSE;
  for (DWORD i=0; i<dwDevices && !bFound; i++)
  {
    if (_tcsicmp(lpszEntry, pGpsDevInfo[i].szDeviceName) == 0)
      bFound = TRUE;
  }
  delete [] pGpsDevInfo;

  if (!bFound)
  {
    TRACE(_T("GpsDeleteEntry, Failed to find GpsEntry for %s\n"), lpszEntry);
    return FALSE;
  }
  GPSDEVINFO devInfo;
  for (DWORD j=i; j<dwDevices; j++)
  {
    GetGpsDevice(j, &devInfo);
    SetGpsDevice(j-1, &devInfo);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲综合在线| 一级做a爱片久久| 国产自产高清不卡| 欧美视频三区在线播放| 色综合咪咪久久| 最新国产精品久久精品| 99精品视频在线免费观看| 中文字幕一区日韩精品欧美| gogo大胆日本视频一区| 亚洲激情中文1区| 欧美日韩国产综合草草| 日本女人一区二区三区| 日韩一区二区三区免费看| 久久精品噜噜噜成人88aⅴ| 久久先锋影音av鲁色资源网| 国产99精品视频| 亚洲三级视频在线观看| 欧美日韩激情一区| 久久99久国产精品黄毛片色诱| 精品国产不卡一区二区三区| 大桥未久av一区二区三区中文| 亚洲欧洲成人自拍| 欧美日韩国产在线观看| 国产一区日韩二区欧美三区| 国产精品乱人伦一区二区| 91成人国产精品| 奇米四色…亚洲| 国产精品美日韩| 欧美日韩精品一区二区天天拍小说| 免费高清成人在线| 国产精品天天摸av网| 欧美专区日韩专区| 精品一区二区久久久| 久久久久久亚洲综合| 国产成人精品免费| 欧美激情一区二区三区全黄| 欧美体内she精视频| 国精产品一区一区三区mba视频| 亚洲丝袜制服诱惑| 欧美一级二级在线观看| 94色蜜桃网一区二区三区| 日本aⅴ亚洲精品中文乱码| 欧美激情一区二区在线| 日韩一区二区免费在线电影| 成人毛片在线观看| 三级久久三级久久| 自拍偷拍亚洲激情| 欧美成人精品3d动漫h| 91在线精品秘密一区二区| 精品综合久久久久久8888| 亚洲男同1069视频| 久久蜜桃香蕉精品一区二区三区| 青青草一区二区三区| 国产精品热久久久久夜色精品三区| 制服丝袜一区二区三区| eeuss国产一区二区三区| 蜜桃av一区二区三区电影| 国产精品美女久久久久高潮| 91 com成人网| 欧美性大战久久| 97久久精品人人澡人人爽| 国产资源在线一区| 日本欧美韩国一区三区| 亚洲国产成人av好男人在线观看| 国产亚洲短视频| 欧美放荡的少妇| 91麻豆自制传媒国产之光| 国产成人精品免费| 国产乱子伦一区二区三区国色天香 | 日韩欧美自拍偷拍| 色婷婷av一区二区三区之一色屋| 国产制服丝袜一区| 国产精品国产三级国产aⅴ原创 | 久久se精品一区精品二区| 亚洲欧美日韩国产综合| 国产精品热久久久久夜色精品三区| 欧美成人乱码一区二区三区| 欧美一区二区私人影院日本| 欧美日韩和欧美的一区二区| 色老头久久综合| 97久久精品人人澡人人爽| 成人动漫在线一区| 国产不卡视频一区| 国产精品一区二区黑丝| 国产精品77777| 蜜桃精品在线观看| 国产麻豆91精品| 国产精品一区二区三区网站| 在线观看一区不卡| 欧美日韩国产一二三| 欧美系列在线观看| 欧美日韩一区在线观看| 欧美日韩1234| 91精品国产综合久久精品麻豆| 欧美一级日韩免费不卡| 日韩午夜精品视频| 久久婷婷久久一区二区三区| 国产人成亚洲第一网站在线播放| 国产欧美一区二区三区沐欲 | 午夜精品一区二区三区电影天堂| 亚洲另类色综合网站| 亚洲一区二区在线视频| 日日摸夜夜添夜夜添精品视频| 日本成人超碰在线观看| 加勒比av一区二区| 成人性生交大片免费看中文 | 国产美女主播视频一区| 国产精品主播直播| 91色porny| 欧美日韩视频专区在线播放| 欧美美女一区二区| 欧美三级中文字幕在线观看| 日韩欧美一区在线观看| 欧美精品一区二区在线观看| 亚洲国产激情av| 一区二区三区四区激情| 丝袜亚洲另类欧美| 国产剧情一区在线| 成人av手机在线观看| 色欧美乱欧美15图片| 欧美一区中文字幕| 亚洲国产精品黑人久久久| 亚洲第一综合色| 国产精品自产自拍| 欧美日韩一区二区三区在线| 精品国产在天天线2019| 亚洲精品视频一区| 久久99精品国产麻豆婷婷| 懂色av一区二区三区免费观看 | 久久精品人人做人人爽97| 中文成人综合网| 欧美一区二区三区不卡| 精品国产sm最大网站| 国产精品热久久久久夜色精品三区| 亚洲在线一区二区三区| 韩国午夜理伦三级不卡影院| 色激情天天射综合网| 日韩精品一区二区三区视频在线观看| 制服.丝袜.亚洲.中文.综合| 日韩欧美精品在线| 欧美—级在线免费片| 亚洲a一区二区| 高清av一区二区| 欧美一区二区福利在线| 亚洲人成7777| 国产福利电影一区二区三区| 欧美日韩另类一区| 国产精品久久久99| 国内精品免费在线观看| 欧美剧在线免费观看网站| 精品欧美一区二区三区精品久久| 成人欧美一区二区三区1314| 狠狠色丁香婷综合久久| 欧美日韩视频在线观看一区二区三区| 国产欧美视频一区二区三区| 日韩精品国产欧美| 欧美亚洲一区二区在线| 中文字幕日本乱码精品影院| 国产一区二区视频在线| 欧美成人video| 日韩vs国产vs欧美| 欧美裸体一区二区三区| 国产精品国产三级国产有无不卡| 亚洲v日本v欧美v久久精品| 99久久精品一区| 国产亚洲污的网站| 蜜桃av噜噜一区二区三区小说| 91免费观看在线| 国产精品久久久久久久蜜臀 | 亚洲综合视频在线观看| 成人97人人超碰人人99| 国产精品每日更新| 粉嫩久久99精品久久久久久夜| www久久精品| 国产一区二区在线看| 久久久久久亚洲综合影院红桃| 国产在线精品不卡| 久久久久久久电影| 精品亚洲成av人在线观看| 欧美mv日韩mv国产网站| 精品一区二区三区久久| 亚洲视频中文字幕| 26uuu久久综合| 狠狠色狠狠色综合系列| 欧美激情一二三区| 国产98色在线|日韩| 国产精品三级av| www.久久精品| 亚洲欧美另类久久久精品2019| 色婷婷精品大视频在线蜜桃视频| 亚洲精品国产品国语在线app| 在线中文字幕一区| 五月婷婷久久丁香| 欧美男人的天堂一二区| 精品在线免费观看| 久久九九影视网| 色妞www精品视频| 亚洲精品网站在线观看| 欧美人与禽zozo性伦| 国产一区二区h|