亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲精品五月天| 国产成人aaaa| 婷婷综合在线观看| 亚洲最大成人综合| 亚洲精品成人在线| 最新高清无码专区| 亚洲精品少妇30p| 亚洲狼人国产精品| 亚洲va欧美va人人爽| 亚洲午夜羞羞片| 亚洲国产sm捆绑调教视频| 亚洲第一主播视频| 天堂成人国产精品一区| 亚洲国产aⅴ天堂久久| 天天av天天翘天天综合网| 亚洲高清视频中文字幕| 亚洲国产va精品久久久不卡综合| 午夜欧美大尺度福利影院在线看| 日韩黄色免费网站| 狠狠色丁香九九婷婷综合五月| 成人av免费网站| 成人高清免费观看| 色播五月激情综合网| 欧美性一二三区| 91精品国产综合久久蜜臀| 精品88久久久久88久久久| 久久综合九色综合欧美亚洲| 国产精品欧美精品| 一区二区三区欧美| 欧美a级一区二区| 国产一二精品视频| 成人app网站| 欧美吻胸吃奶大尺度电影| 69堂国产成人免费视频| 久久久久一区二区三区四区| 亚洲欧洲精品一区二区精品久久久| 亚洲人成精品久久久久久| 亚洲国产精品久久人人爱蜜臀| 理论电影国产精品| 成人免费黄色大片| 精品视频资源站| 欧美电影免费观看高清完整版在| 国产亚洲一区字幕| 亚洲一区在线电影| 国产一区二区福利| 欧美中文字幕一二三区视频| 精品人在线二区三区| 中文字幕在线观看不卡视频| 亚洲成人午夜影院| 国产福利91精品| 欧美亚洲图片小说| 久久久久久久国产精品影院| 一区二区高清在线| 国产剧情一区在线| 欧美日韩免费在线视频| 国产日韩亚洲欧美综合| 亚洲电影中文字幕在线观看| 国产成人亚洲精品狼色在线| 欧美在线你懂得| 欧美激情资源网| 蜜臀av一级做a爰片久久| 99精品一区二区三区| 日韩欧美成人午夜| 亚洲国产成人91porn| 成人高清av在线| 日韩精品最新网址| 亚洲资源在线观看| av电影在线观看一区| 久久一留热品黄| 亚洲sss视频在线视频| av在线一区二区三区| 精品国产一区二区国模嫣然| 亚洲伊人伊色伊影伊综合网| 岛国av在线一区| 欧美不卡一区二区| 日韩国产精品久久久久久亚洲| 色素色在线综合| 国产精品久久久久久久岛一牛影视| 麻豆精品视频在线观看视频| 在线亚洲免费视频| 亚洲视频在线一区| 夫妻av一区二区| 精品成人一区二区| 蜜桃视频免费观看一区| 欧美亚洲高清一区| 亚洲男女毛片无遮挡| 成人一道本在线| 国产日韩欧美综合一区| 国产精品99久久久| 国产亚洲精久久久久久| 美国欧美日韩国产在线播放| 91.com在线观看| 午夜精品福利久久久| 欧美系列一区二区| 亚洲综合一区二区| 在线精品国精品国产尤物884a| 国产精品久久久久精k8| 不卡的av中国片| 国产精品视频九色porn| 国产精品91xxx| 欧美激情一区二区在线| 国产精品一区二区黑丝| 久久一区二区三区四区| 韩国欧美国产一区| 国产午夜精品美女毛片视频| 国产精品自在欧美一区| 久久久亚洲午夜电影| 国产美女在线观看一区| 国产区在线观看成人精品| 国产成人av资源| 国产精品久久久久久久久免费樱桃 | 最新高清无码专区| 99久久精品国产一区| 最近中文字幕一区二区三区| 91视频免费播放| 亚洲综合色在线| 在线精品视频一区二区| 午夜电影一区二区| 日韩欧美中文字幕公布| 经典三级一区二区| 午夜伦欧美伦电影理论片| 欧美亚洲一区二区在线观看| 日韩精品午夜视频| 精品国产免费视频| 国产91精品露脸国语对白| 中文字幕不卡一区| 日本乱码高清不卡字幕| 亚洲第一久久影院| 欧美成人三级在线| 高清日韩电视剧大全免费| 最新国产精品久久精品| 欧美丝袜自拍制服另类| 日本免费新一区视频| 国产亚洲欧美日韩在线一区| 99久久国产免费看| 日韩电影在线免费| 国产午夜精品久久久久久久| 色偷偷成人一区二区三区91| 日本免费新一区视频| 亚洲国产激情av| 欧美色倩网站大全免费| 国产综合色在线视频区| 亚洲欧美综合网| 91精品在线观看入口| 国产成人在线视频网站| 亚洲精品国产无套在线观| 欧美一级片在线观看| 成人激情免费电影网址| 婷婷中文字幕综合| 国产网站一区二区三区| 欧洲人成人精品| 国产很黄免费观看久久| 亚洲一区二区三区四区五区黄| 欧美mv日韩mv国产网站| 99久久99久久综合| 美女视频黄 久久| 亚洲品质自拍视频网站| 欧美精品一区二区不卡| 欧洲中文字幕精品| 国产99久久精品| 日韩一区精品视频| 亚洲欧洲日产国码二区| 日韩精品在线看片z| 在线看不卡av| 成人午夜精品在线| 免费一级欧美片在线观看| 亚洲天堂2014| 久久久五月婷婷| 91精品久久久久久久99蜜桃 | 欧美妇女性影城| 北条麻妃国产九九精品视频| 日韩av在线发布| 亚洲乱码国产乱码精品精的特点 | 欧美日韩亚洲综合一区二区三区| 国产呦萝稀缺另类资源| 亚洲观看高清完整版在线观看| 欧美国产欧美综合| 精品国产免费视频| 91精品国产综合久久国产大片| 91在线观看免费视频| 国产传媒一区在线| 久久不见久久见免费视频1| 亚洲午夜电影网| 亚洲精选视频在线| 国产精品欧美一区喷水| 日韩欧美一区二区不卡| 欧美日韩1234| 色婷婷综合久久久中文一区二区| 国产91丝袜在线观看| 久久爱另类一区二区小说| 秋霞电影网一区二区| 亚洲午夜免费福利视频| 亚洲欧美日韩在线不卡| 国产精品免费久久| 国产日韩欧美综合一区| 久久久久久久网| 久久久精品黄色| 久久精品一二三| 久久精品一区蜜桃臀影院| 精品国产91洋老外米糕|