GPS.h
上传用户:zhqmouse
上传日期:2022-05-26
资源大小:47k
文件大小:2k
源码类别:

GPS编程

开发平台:

Visual C++

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