GPS通信协议问题公司要求现在写一个GPS的通信协议,要求有包头包尾之类的,我没写过,我之前写过做过工控,写过串口通信协议,感觉那个似乎比较简单,GPS的牵扯太多,有没有大神愿意指教?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/16 12:47:26
GPS通信协议问题公司要求现在写一个GPS的通信协议,要求有包头包尾之类的,我没写过,我之前写过做过工控,写过串口通信协议,感觉那个似乎比较简单,GPS的牵扯太多,有没有大神愿意指教?
GPS通信协议问题
公司要求现在写一个GPS的通信协议,要求有包头包尾之类的,我没写过,我之前写过做过工控,写过串口通信协议,感觉那个似乎比较简单,GPS的牵扯太多,有没有大神愿意指教?
GPS通信协议问题公司要求现在写一个GPS的通信协议,要求有包头包尾之类的,我没写过,我之前写过做过工控,写过串口通信协议,感觉那个似乎比较简单,GPS的牵扯太多,有没有大神愿意指教?
//////////////////////////////////////////////////////////////////////////
// GpsContor.h: interface for the CGpsContor class.
//////////////////////////////////////////////////////////////////////////
#if !defined _GPSCONTOR_H_
#define _GPSCONTOR_H_
#include "GpsDevice.h"
class CGpsControl
{
public:
CGpsControl();
~CGpsControl();
GPS_POSITION* GetAllData();
GPSData* GetUnFiltedData();
void SetMessageWnd( HWND hWnd );
BOOL Config(int nComID/*串口号*/,
int nBaudRate/*波特率*/,
int nByteSize/*字节大小*/);
BOOL PowerReset();
BOOL Create();
void Destroy();
void SetNewHandle(HANDLE hNewHandle);
private:
HWND m_hWnd;
BOOL m_bCreate;
DWORD m_hThreadId;
HANDLE m_hThread;
CGpsDevice m_gpsDevice;
};
#endif
//////////////////////////////////////////////////////////////////////////
// FileName: Gpsapi.h
//////////////////////////////////////////////////////////////////////////
#pragma once
#ifdef GPSAPI_EXPORTS
#define GPSAPI_API __declspec(dllexport)
#else
#define GPSAPI_API __declspec(dllimport)
#endif
#define GPS_MAX_SATELLITES 12 //最大可见卫星数
#define GPS_MAX_FRIENDLY_NAME 64 //保留
#define GPS_MAX_PREFIX_NAME 16 //保留
#pragma pack(push, 1)
//定位质量
typedef enum {
GPS_FIX_QUALITY_UNKNOWN = 0,
GPS_FIX_QUALITY_GPS,
GPS_FIX_QUALITY_DGPS
} GPS_FIX_QUALITY;
//定位类型
typedef enum {
GPS_FIX_UNKNOWN = 0,
GPS_FIX_2D,
GPS_FIX_3D
} GPS_FIX_TYPE;
//定位选择
typedef enum {
GPS_FIX_SELECTION_UNKNOWN = 0,
GPS_FIX_SELECTION_AUTO,
GPS_FIX_SELECTION_MANUAL
} GPS_FIX_SELECTION;
//设备驱动信息(保留未用)
typedef struct _GPS_DEVICE {
DWORD dwVersion;
DWORD dwSize;
DWORD dwServiceState;
DWORD dwDeviceState;
FILETIME ftLastDataReceived;
WCHAR szGPSDriverPrefix[GPS_MAX_PREFIX_NAME];
WCHAR szGPSMultiplexPrefix[GPS_MAX_PREFIX_NAME];
WCHAR szGPSFriendlyName[GPS_MAX_FRIENDLY_NAME];
} *PGPS_DEVICE, GPS_DEVICE;
typedef struct _GPS_POSITION {
DWORD dwVersion; // 版本号(默认0)
DWORD dwSize; // 默认0
DWORD dwValidFields; // 默认0
DWORD dwFlags; // 默认0
SYSTEMTIME stUTCTime; // 卫星时间(UTC时间)
double dblLatitude; // 纬度
double dblLongitude; // 经度
float flSpeed; // 速度
float flHeading; // 方向
double dblMagneticVariation; // 默认0
float flAltitudeWRTSeaLevel; // 海拔高度
float flAltitudeWRTEllipsoid; // 默认0
GPS_FIX_QUALITY FixQuality; // 定位质量
GPS_FIX_TYPE FixType; // 定位类型
GPS_FIX_SELECTION SelectionType; // 选择类型
float flPositionDilutionOfPrecision; // 位置经度因子
float flHorizontalDilutionOfPrecision; // 水平经度因子
float flVerticalDilutionOfPrecision; // 垂直经度因子
DWORD dwSatelliteCount; // 定位卫星数
DWORD rgdwSatellitesUsedPRNs[GPS_MAX_SATELLITES]; // 保留
DWORD dwSatellitesInView; // 可见卫星数
DWORD rgdwSatellitesInViewPRNs[GPS_MAX_SATELLITES]; // 卫星编号
DWORD rgdwSatellitesInViewElevation[GPS_MAX_SATELLITES]; //卫星仰角
DWORD rgdwSatellitesInViewAzimuth[GPS_MAX_SATELLITES]; // 卫星方位角
DWORD rgdwSatellitesInViewSignalToNoiseRatio[GPS_MAX_SATELLITES]; //卫星信噪比
} GPS_POSITION, *PGPS_POSITION;
#pragma pack(pop)
/**
* 函数:打开GPS(此处把要打开连接的虚串口号,波特率等写在程序里, 当前函数的其中三个参数都作为保留参数以兼容mobile标准接口)
* @param [HANDLE] hNewLocationData 信号量句柄(NULL或通过CreateEvent创建的信号量, 如果不为NULL时, 当有GPS新数据时,则使此新号量有值)
* @param [HANDLE] hDeviceStateChange 保留参数(NULL)
* @param [WCHAR] *szDeviceName 保留参数(NULL)
* @param [DWORD] dwFlags 保留参数(0)
* @return HANDLE
*/
GPSAPI_API HANDLE GPSOpenDevice(HANDLE hNewLocationData,HANDLE hDeviceStateChange, const WCHAR* szDeviceName,DWORD dwFlags);
/**
* 函数:关闭GPS
* @param [HANDLE] hGpsHandle GPS设备句柄
* @return DWORD
*/
GPSAPI_API DWORD GPSCloseDevice(HANDLE hGPSDevice);
/**
* 函数: 取得数据信息
* @param [HANDLE] hGPSDevice GPS设备句柄
* @param [GPS_POSITION] pGPSPosition 数据信息结构指针
* @param [DOWRD] dwMaximumAge 保留参数
* @param [DWORD] dwFlags 保留参数
* @return DWORD
*/
GPSAPI_API DWORD GPSGetPosition(HANDLE hGPSDevice,GPS_POSITION *pGPSPosition,DWORD dwMaximumAge,DWORD dwFlags);
/**保留接口函数
* 函数: 获得设备状态信息
* @param [GPS_DEVICE] *pGPSDevice 设备驱动状态结构指针
* @return DWORD
*/
GPSAPI_API DWORD GPSGetDeviceState(GPS_DEVICE *pGPSDevice);
/**针对现有的硬件缺陷增加的手动复位接口
* 函数: 复位
* @param [HANDLE] hGPSDevice GPS设备句柄
* @return DWORD
*/
GPSAPI_API BOOL GPSResetDevice(HANDLE hGPSDevice);
%%来自于网络,尊重版权、、
收到的资料串列,根据通信协议进行资料的Parser...
GPS Protocal也就是NMEA (National Marine Electronics Association ),因为这些资料Post在上面非常的多,关於GPS的句子在此给您几个网址查询参考~
http://vancouver-webpages.com/pub/peter/nmeafaq.txt
http...
全部展开
收到的资料串列,根据通信协议进行资料的Parser...
GPS Protocal也就是NMEA (National Marine Electronics Association ),因为这些资料Post在上面非常的多,关於GPS的句子在此给您几个网址查询参考~
http://vancouver-webpages.com/pub/peter/nmeafaq.txt
http://home.mira.net/~gnb/gps/nmea.html
关於GPS NMEA 软体工具与技术资料工具可以参考 :
http://www.mobile01.com/topicdetail.php?f=130&t=15422
收起
什么GPS的通信协议?
标准GPS输出的数据,是有规定协议的,不是我们可以更改的。
你意思是要自己研发生产一款GPS芯片嘛?如果不是,而是用现有的GPS模块,那就不要想改变GPS模块输出数据的协议了。这点你应该清楚的。
像很多通用模块,包括的通信接口协议有IIC、USART。
你是不是想用一块控制器和GPS模块通信啊?
所以,还是请你...
全部展开
什么GPS的通信协议?
标准GPS输出的数据,是有规定协议的,不是我们可以更改的。
你意思是要自己研发生产一款GPS芯片嘛?如果不是,而是用现有的GPS模块,那就不要想改变GPS模块输出数据的协议了。这点你应该清楚的。
像很多通用模块,包括的通信接口协议有IIC、USART。
你是不是想用一块控制器和GPS模块通信啊?
所以,还是请你说明白,你所指的通信协议,具体是指什么?
收起