GPS.h
上传用户:wty58716
上传日期:2022-06-16
资源大小:3084k
文件大小:2k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*-----------------------------------------
  2. * Copyright (c) 2008 Eric Wong
  3. * 本版紧供读者参考,不得用于任何商业行为
  4. *
  5. * 文件名称: GPS.h
  6. * 文件标识: 
  7. * 摘要:用于封装GPS通讯协议
  8. *
  9. * 当前版本: 1.0
  10. * 作者: 汪兵 Eric Wong
  11. * 完成日期: 2008年1月29日
  12. *
  13. * 取代版本:
  14. * 原作者: 
  15. * 完成日期: 
  16. ----------------------------------------*/
  17. #pragma once
  18. #include "CESeries.h"
  19. //定义GPS数据接收显示
  20. #define WM_GPS_RECV_BUF WM_USER + 101
  21. //定义GPS状态改变消息
  22. #define WM_GPS_STATE_CHANGE_MESSAGE WM_USER + 102
  23. //定义收到正确的GPS位置信息
  24. #define WM_GPS_RECV_VALID_LONGLAT WM_USER + 103
  25. //定义GPS设备状态常量
  26. enum GPSDEV_STATE
  27. {
  28. GPS_VALID_DATA = 0,   //获取有效数据
  29. GPS_INVALID_DATA,//获取无效数据
  30. GPS_DEV_NOTOPENED,  //GPS串口未打开
  31. GPS_DEV_OPENED, //GPS串口已打开
  32. GPS_NODATA//GPS未收到数据
  33. };
  34. //GPS数据结构
  35. typedef struct _GPSData
  36. {
  37. char date[11] ; //Gps数据日期
  38. char time[9] ;  //Gps数据时间
  39. char latitude_type[2]; //纬度类型,北纬,南纬
  40. char latitude[10] ; //纬度值
  41. char longitude_type[2]; //经度类型,东经,西经
  42. char longitude[11] ;//经度值
  43. char speed[6];//速度
  44. char starNum; //卫星数目
  45. }GPSData,*PGPSData;
  46. class CGPS
  47. {
  48. public:
  49. CGPS(void);
  50. ~CGPS(void);
  51. public:
  52. //打开GPS设备
  53. BOOL Open(    CWnd *pWnd , /*拥有者窗口句柄*/
  54.   UINT portNo = 1, /*串口号*/
  55.   UINT baud = 9600, /*波特率*/
  56.   UINT parity = NOPARITY, /*奇偶校验*/
  57.   UINT databits = 8, /*数据位*/
  58.   UINT stopbits = 0 );
  59. //关闭GPS设备
  60. void Close();
  61. //获取GPS设备状态
  62. GPSDEV_STATE GetGpsState();
  63. //得到当前GPS数据
  64. GPSData GetCurGpsData();
  65. private:
  66. //在缓冲区中查找子字符串
  67. int Pos(LPCSTR subString , CByteArray * pArray,int iPos);
  68. //判断是否存在有效GPS数据
  69. BOOL HaveValidGPSData(CByteArray * pArray,/*分析的缓冲区队列*/
  70. CString &outStr);
  71. //解析GPS数据
  72. PGPSData AnalyseGpsData(CString &aRecvStr);
  73. private:
  74. //串口接收数据回调函数
  75. static void CALLBACK GpsOnSeriesRead(void* pOwner,BYTE* buf,DWORD dwBufLen);
  76. private:
  77. //GPS数据检测线程函数
  78. static DWORD WINAPI GpsCheckThreadFunc(LPVOID lparam);
  79. private:
  80. GPSDEV_STATE m_gpsDev_State; //GPS当前设备状态
  81. GPSData  m_gpsCurData;       // GPS当前数据
  82. GPSData m_gpsLastData; //GPS上一次数据
  83. CCESeries m_ceSeries;        //GPS串口通讯类
  84. CByteArray  m_aRecvBuf  ;   //接收缓冲区
  85. CWnd *m_pWnd; //存储主窗体句柄
  86. HANDLE m_hThreadQuitEvent; //线程退出事件
  87. HANDLE m_hGpsThread; //GPS检测线程句柄
  88. DWORD m_dwGpsThreadID; //GPS检测线程标识
  89. };