GPSModule.h
上传用户:fudaml
上传日期:2013-05-28
资源大小:211k
文件大小:5k
源码类别:

GPS编程

开发平台:

Visual C++

  1. /*
  2. 串口基础类库(WIN32) ver 0.1
  3. 编译器 : BC++ 5; C++ BUILDER 4, 5, 6, X; VC++ 5, 6; VC.NET;  GCC;
  4. class   _base_com : 虚基类 基本串口接口;
  5. class   _sync_com : 同步I/O 串口类;
  6. class   _asyn_com : 异步I/O 串口类;
  7. class _thread_com : 异步I/O 辅助读监视线程 可转发窗口消息 串口类(可继承虚函数on_receive用于读操作);
  8. class        _com : _thread_com 同名
  9. copyright(c) 2004.8 llbird wushaojian@21cn.com
  10. */
  11. /*
  12. Example :
  13. */
  14. #ifndef _COM_H_
  15. #define _COM_H_
  16. #ifdef DLL_API
  17. #else
  18. #define DLL_API _declspec(dllimport)
  19. #endif
  20. #pragma warning(disable: 4530)
  21. #pragma warning(disable: 4786)
  22. #pragma warning(disable: 4800)
  23. #include <cassert>
  24. #include <strstream>
  25. #include <algorithm>
  26. #include <exception>
  27. #include <iomanip>
  28. #include <fstream>
  29. using namespace std;
  30. #include <windows.h>
  31. class DLL_API GpsPoint  
  32. {
  33. public:
  34. double X, Y; //高斯投影坐标x y
  35. double B, L; //参心坐标系经 纬度
  36. double L0; //中央子午线经度
  37. public:
  38. bool BLtoXY_2();
  39. GpsPoint();
  40. bool XYtoBL();
  41. bool BLtoXY();
  42. bool SetBL( double b0, double l0 );
  43. bool SetXY( double x0, double y0 );
  44. virtual ~GpsPoint();
  45. };
  46. class DLL_API GPSParam  
  47. {
  48. private:
  49. bool m_IsOK;
  50. public:
  51. bool IsOk();
  52. bool SetParam(char str[],int length);
  53. GPSParam();
  54. bool DataTransform();
  55. GPSParam(char str[],int length=200); //length为一条指令的最大长度,<=200
  56. virtual ~GPSParam();
  57. CString Data[20];
  58. double X,Y;
  59. CString m_name;
  60. struct 
  61. {
  62. int hour;
  63. int mimute;
  64. double second;
  65. }m_time;
  66. CString m_status;
  67. double m_latitude;
  68. bool m_nsindicator;
  69. double m_longtitude;
  70. bool m_ewindicator;
  71. double m_speed;
  72. double m_cog;
  73. struct 
  74. {
  75. int day;
  76. int month;
  77. int year;
  78. }m_date;
  79. };
  80. class _base_com   //虚基类 基本串口接口
  81. {
  82. protected:
  83.  volatile int _port;  //串口号
  84.  volatile HANDLE _com_handle;//串口句柄
  85.  char _com_str[20];
  86.  DCB _dcb;     //波特率,停止位,等
  87.  COMMTIMEOUTS _co;  // 超时时间
  88.  virtual bool open_port() = 0;
  89.  void init(); //初始化
  90.                  
  91.  virtual bool setup_port();      
  92.  inline void set_com_port(int port);
  93. public:
  94.  _base_com();
  95.  virtual ~_base_com();
  96.   //设置串口参数:波特率,停止位,等 支持设置字符串 "9600, 8, n, 1"
  97.  bool set_state(char *set_str) ;
  98.   //设置内置结构串口参数:波特率,停止位
  99.  bool set_state(int BaudRate = 9600, int ByteSize = 8, int Parity = NOPARITY, int StopBits = ONESTOPBIT, char EvtChar='n' );
  100.   //打开串口 缺省 9600, 8, n, 1
  101.  inline bool open(int port);
  102.   //打开串口 缺省 baud_rate, 8, n, 1
  103.  inline bool open(int port, int baud_rate);
  104.   //打开串口
  105.  inline bool open(int port, char *set_str);
  106.  inline bool set_buf(int in, int out);
  107.  //关闭串口
  108.  inline virtual void close();
  109.  //判断串口是或打开
  110.  inline bool is_open();
  111.  //获得串口句炳
  112.  HANDLE get_handle();
  113.  operator HANDLE();
  114. };
  115. class _sync_com : public _base_com
  116. {
  117. protected:
  118.  //打开串口
  119.  virtual bool open_port();
  120.  
  121. public:
  122.  _sync_com();
  123.  //同步读
  124.  int read(char *buf, int buf_len);
  125.   //同步写
  126.  int write(char *buf, int buf_len);
  127.  //同步写
  128.  inline int write(char *buf);
  129.  
  130.  //同步写, 支持部分类型的流输出
  131.  template<typename T>
  132.  _sync_com& operator << (T x);
  133.  
  134. };
  135. class  _asyn_com : public _base_com
  136. {
  137. protected:
  138.  OVERLAPPED _ro, _wo; // 重叠I/O
  139.  virtual bool open_port();
  140.  
  141. public:
  142.  _asyn_com();
  143.  
  144.  virtual ~_asyn_com();
  145.  
  146.  //异步读
  147.  int read(char *buf, int buf_len, int time_wait = 20);
  148.   //异步写
  149.  int write(char *buf, int buf_len);
  150.  
  151.  //异步写
  152.  inline int write(char *buf);
  153.  //异步写, 支持部分类型的流输出
  154.  template<typename T>
  155.  _asyn_com& operator << (T x);
  156.  
  157. };
  158. //当接受到数据送到窗口的消息
  159. #define ON_COM_RECEIVE WM_USER + 618  //  WPARAM 端口号
  160. class _thread_com : public _asyn_com
  161. {
  162. protected:
  163.  volatile HANDLE _thread_handle; //辅助线程
  164.  volatile HANDLE _file_thread_handle; //文件辅助线程
  165.  CString m_filename; //文件名
  166.  volatile HWND _notify_hwnd; // 通知窗口
  167.  volatile long _notify_num;//接受多少字节(>_notify_num)发送通知消息
  168.  volatile bool _run_flag; //线程运行循环标志
  169.  void (*_func)(int port);
  170.  GPSParam gps; //存储临时gps返回参数
  171.  OVERLAPPED _wait_o; //WaitCommEvent use
  172.  //线程收到消息自动调用, 如窗口句柄有效, 送出消息, 包含窗口编号
  173.  virtual void on_receive();
  174.  
  175.  //打开串口,同时打开监视线程
  176.  virtual bool open_port();
  177.  
  178. public:
  179.  _thread_com();
  180.  
  181.  ~_thread_com();
  182.  
  183.  //设定发送通知, 接受字符最小值
  184.  void set_notify_num(int num);
  185.  
  186.  int get_notify_num();
  187.  //送消息的窗口句柄
  188.  inline void set_hwnd(HWND hWnd);
  189.  
  190.  inline HWND get_hwnd();
  191.  
  192.  inline void set_func(void (*f)(int));
  193.  
  194.  //关闭线程及串口
  195.  virtual void close();
  196.  
  197.  /*辅助线程控制*/
  198.  //获得线程句柄
  199.  HANDLE get_thread();
  200.  
  201.  //暂停监视线程
  202.  bool suspend();
  203.  
  204.  //恢复监视线程
  205.  bool resume();
  206.  //重建监视线程
  207.  bool restart() ;
  208.  
  209. bool Open_file(CString str);
  210. private:
  211.  //监视线程
  212.  static DWORD WINAPI com_thread(LPVOID para);
  213.  static DWORD WINAPI file_thread(LPVOID para);
  214.  
  215. };
  216. typedef _thread_com _com; //名称简化
  217. #endif //_COM_H_