⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprsstruct.h

📁 GPRS协议解析示例。该示例演示里使用GPRS控件实现客户端程序向车载GPS终端发送点名、监听等指令
💻 H
字号:

#ifndef _GPRS_STRUCT_
#define _GPRS_STRUCT_

/////////////////////////////////////////////////////////////////////////////
// 车台发往控制中心的信息格式

//非压缩定位信息
typedef struct tagUNPRESSORIENT{
	
	DWORD vehicle_ID;	//车台ID号码
	
	//日期时间	
	WORD year;	
	BYTE month;
	BYTE day;
	BYTE hour;
	BYTE minute;
	BYTE second;

	double latitudenet;		//纬度,表示定位数据的纬度,以度为单位,范围为-90度到+90度	
	double longitudenet;	//经度,表示定位数据的经度,以度为单位,范围为-90度到+90度
    BYTE speed;				//速度,表示GPS天线的运行速度,表示范围0~255,单位千米/小时
	BYTE direction;			//方向,表示GPS天线的运行方向,以正北方为0度,顺时针增加,单位为2度,数值范围0~180
	WORD status;			//状态位,用来传递车台的状态信息或者OEM板是否已经定位等
    BYTE interval;			//时间间隔,单位为秒
}UNPRESSORIENT,*LPUNPRESSORIENT;

//压缩定位信息
typedef struct tagPRESSORIENT{
	
	DWORD vehicle_ID;//车台ID号码

	//日期时间
	WORD year;
	BYTE month;
	BYTE day;
	BYTE hour;
	BYTE minute;
	BYTE second;

	double latitudenet[10];	//纬度,表示定位数据的纬度,以度为单位,范围为-90度到+90度
	double longitudenet[10];//经度,表示定位数据的经度,以度为单位,范围为-90度到+90度
    BYTE speed[10];			//速度,表示GPS天线的运行速度,表示范围0~255,单位千米/小时
	BYTE direction[10];		//方向,表示GPS天线的运行方向,以正北方为0度,顺时针增加,单位为2度,数值范围0~180
    WORD status[10];		//状态位,用来传递车台的状态信息或者OEM板是否已经定位等
    BYTE interval;			//时间间隔,单位为秒
}PRESSORIENT,*LPPRESSORIENT;

//上传的短消息
typedef struct tagUPSHORTMESSAGE{
	DWORD vehicle_ID;		//车台ID号码
	BYTE len;				//短消息长度
	BYTE message[255];		//短消息内容
}UPSHORTMESSAGE,*LPUPSHORTMESSAGE;

//收到正确命令的确认信息
typedef struct tagVERIFYMESSAGE{
	DWORD vehicle_ID;		//车台ID号码
	BYTE len;				//确认信息长度
    BYTE message[255];		//确认信息内容
}VERIFYMESSAGE,*LPVERIFYMESSAGE;

//收到错误命令发送的消息
typedef struct tagWRONGMESSAGE{
	DWORD vehicle_ID;		//车台ID号码
	BYTE wrong_number;		//错误信息码
}WRONGMESSAGE,*LPWRONGMESSAGE;

//测试网络连接状态
typedef struct tagTESTWORK{
	DWORD vehicle_ID;		//车台ID号码
}TESTWORK,*LPTESTWORK;

//围栏报警信息
typedef struct tagRAILALARM{
	DWORD vehicle_ID;		//车台ID号码
	BYTE railnum;			//报警围栏号
	BYTE alarmstatus;		//报警状态
//	BYTE roadnum;			//线路号
}RAILALARM,*LPRAILALARM;

//车台向中心要围栏的位置信息
typedef struct tagRAILPOSITION{
	DWORD vehicle_ID;		//车台ID号码
	BYTE framenum;			//帧数
	BYTE frameNO;			//帧号
}RAILPOSITION,*LPRAILPOSITION;

//紧急报警
typedef struct tagURGENTALARM{
	DWORD vehicle_ID;		//车台ID号码
	BYTE  alarmtype;		//报警类型
}URGENTALARM,*LPURGENTALARM;

//点名定位信息
typedef struct tagCALLINGORIENT{
	
	DWORD vehicle_ID;		//车台ID号码

	//日期时间
	WORD year;
	BYTE month;
	BYTE day;
	BYTE hour;
	BYTE minute;
	BYTE second;
	
	double latitudenet;		//纬度,表示定位数据的纬度,以度为单位,范围为-90度到+90度
	double longitudenet;	//经度,表示定位数据的经度,以度为单位,范围为-90度到+90度
    BYTE speed;				//速度,表示GPS天线的运行速度,表示范围0~255,单位千米/小时
	BYTE direction;			//方向,表示GPS天线的运行方向,以正北方为0度,顺时针增加,单位为2度,数值范围0~180
	WORD status;			//状态位,用来传递车台的状态信息或者OEM板是否已经定位等
	BYTE interval;			//时间间隔,单位为秒
}CALLINGORIENT,*LPCALLINGORIENT;

//请求设置运行方向信息
typedef struct tagREQUESTDRIECTION{
	DWORD vehicle_ID;	//车台ID号码
}REQUESTDRIECTION,*LPREQUESTDRIECTION;

//盲区补偿数据包
typedef struct tagBLINDCOMPENSATE{
	DWORD vehicle_ID;	//车台ID号码

	//日期时间
	WORD year;
	BYTE month;
	BYTE day;
	BYTE hour;
	BYTE minute;
	BYTE second;

	double latitudenet[10];	//纬度,表示定位数据的纬度,以度为单位,范围为-90度到+90度
	double longitudenet[10];//经度,表示定位数据的经度,以度为单位,范围为-90度到+90度
    BYTE speed[10];			//速度,表示GPS天线的运行速度,表示范围0~255,单位千米/小时
	BYTE direction[10];		//方向,表示GPS天线的运行方向,以正北方为0度,顺时针增加,单位为2度,数值范围0~180
	WORD status[10];		//状态位,用来传递车台的状态信息或者OEM板是否已经定位等
	BYTE interval;			//时间间隔,单位为秒
}BLINDCOMPENSATE,*LPBLINDCOMPENSATE;

/////////////////////////////////////////////////////////////////////////////
//        控制中心发往车台的信息格式

//定位数据上传时间间隔和网络测试包最大发送次数
typedef struct tagORIENTUPINTERVAL{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	interval;		//上传时间间隔,表示1至60秒的时间间隔长度,单位为秒
	BYTE	testmax;		//网络测试包最大发送次数
	BYTE	redialnum;		//掉线后重拨次数
	BYTE	redialwait;		//再次重拨等待时间,单位为分钟
}ORIENTUPINTERVAL,*LPORIENTUPINTERVAL;

//设置指示灯的状态
typedef struct  tagINDICATELIGHTSTATUS{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	status;			//指示灯状态值
}INDICATELIGHTSTATUS,*LPINDICATELIGHTSTATUS;

//下发短消息格式
typedef struct  tagDOWNSMESSAGE{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	len;			//短消息长度
	BYTE	message[100];	//短消息内容
}DOWNSMESSAGE,*LPDOWNSMESSAGE;

//修改固定短消息
typedef struct  tagSMESSAGECONTENT{
	bool	ifrevised;		//是否修改
	BYTE	content[28];	//短消息修改内容
	BYTE    len;			//消息长度
}SMESSAGECONTENT,*LPSMESSAGECONTENT;

typedef struct  tagREVISEFIXEDSMESSAGE{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	groupnum;		//组号
	SMESSAGECONTENT	shortmessagegroup[5];	//要修改的固定短消息
}REVISEFIXEDSMESSAGE,*LPREVISEFIXEDSMESSAGE;

//设置IP地址
typedef struct  tagIPADDRESS{
	DWORD	vehicle_ID;		//车台ID号码
	DWORD	ipaddress;	    //IP地址
}IPADDRESS,*LPIPADDRESS;

//设置车台ID号码
typedef struct  tagVEHICLEID{
	DWORD	vehicle_ID;		//老车台ID号码
	DWORD	newvehicle_ID;	//新车台ID号码
}VEHICLEID,*LPVEHICLEID;

//中心向车台下发电子围栏位置数据
typedef struct  tagDOWNRAILPOSITION{
	DWORD	vehicle_ID;			//车台ID号码
	BYTE	railnum;			//围栏个数
	DWORD	alarmstatus;		//报警状态
	BYTE	busno;				//公交线路号,4bit
	BYTE	frameno;			//帧号,4bit
	DWORD	llatitude[15];		//左上角纬度,单位为毫秒,数值范围-324,000,000至324,000,000
	DWORD	llongitude[15];		//左上角经度,单位为毫秒,数值范围-324,000,000至324,000,000
	DWORD	rlatitude[15];		//右上角纬度,单位为毫秒,数值范围-324,000,000至324,000,000
	DWORD	rlongitude[15];		//右上角经度,单位为毫秒,数值范围-324,000,000至324,000,000
}DOWNRAILPOSITION,*LPDOWNRAILPOSITION;

//设置允许通话号码
typedef struct  tagPHONENUMBER{
	BYTE	num[14];			//电话号码
	UINT	len;				//电话号码长度
}PHONENUMBER,*LPPHONENUMBER;

typedef struct  tagPERMITPHONENUMBER{
	DWORD	vehicle_ID;				//车台ID号码
	PHONENUMBER		phonenum[15];	//电话号码
	BYTE    num;					//电话号码个数
	BYTE	restrictstatus[2];		//通话限制状态
	BYTE	groupnum;				//组号
}PERMITPHONENUMBER,*LPPERMITPHONENUMBER;

//点名
typedef struct  tagCALLING{
	DWORD	vehicle_ID;				//车台ID号码
}CALLING,*LPCALLING;

//要求车台执行监听动作
typedef struct  tagREQUESTMONITOR{
	DWORD	vehicle_ID;				//车台ID号码
	BYTE	monitornum[11];			//监听号码
}REQUESTMONITOR,*LPREQUESTMONITOR;

//设置超速报警门限
typedef struct  tagOVERSPEEDALARMBOUND{
	DWORD	vehicle_ID;			//车台ID号码
	BYTE	boundvalue;			//报警门限值,单位为公里/小时
	BYTE	alarmstatus;		//报警状态
}OVERSPEEDALARMBOUND,*LPOVERSPEEDALARMBOUND;

//设置车辆运行方向
typedef struct  tagMOVINGDIRECTION{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	direction;		//上下行标志
	BYTE	controlmode;	//控制方式
//	BYTE	busno;			//公交线路号
}MOVINGDIRECTION,*LPMOVINGDIRECTION;

//设置自动报站控制方式
typedef struct  tagAUTOREPORTCONTROL{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	controlmode;	//自动报站控制方式
}AUTOREPORTCONTROL,*LPAUTOREPORTCONTROL;

//设置语音播报信息
typedef struct	tagVOICEREPORT{
	DWORD	vehicle_ID;			//车台ID号码
	BYTE	voicecontent[100];	//语音播报内容
	BYTE    len;				//播报内容长度
}VOICEREPORT,*LPVOICEREPORT;

//中心下发的确认信息
typedef struct tagCENTERVERIFY{
	DWORD	vehicle_ID;		//车台ID号码
	BYTE	content[12];	//下发的确认信息内容
}CENTERVERIFY,*LPCENTERVERIFY;

//透明传输


//****将自定义结构转换为变体类型的宏****//

//datatobechange是一个自定义结构的指针型变量
#ifndef TRANSE_TO_VARIANT
#define TRANSE_TO_VARIANT(datatobechange)							\
	long lengthofA = sizeof(*datatobechange);						\
	HRESULT hr;														\
	SAFEARRAYBOUND rgsabound[1];									\
	rgsabound[0].lLbound = 0;										\
	rgsabound[0].cElements = lengthofA;								\
	SAFEARRAY FAR* pMySafeArray;									\
	pMySafeArray = SafeArrayCreate(VT_UI1, 1, rgsabound);			\
	BYTE* pData;													\
	hr = SafeArrayAccessData( pMySafeArray, (void**)&pData);		\
	memcpy(pData, datatobechange, rgsabound[0].cElements);			\
	SafeArrayUnaccessData(pMySafeArray);							\
	VARIANT myVariant;												\
	myVariant.parray = pMySafeArray;								\
	myVariant.vt = VT_ARRAY|VT_UI1									\

#endif
#ifndef DELETE_VARIANT
//************释放变体空间的宏*************//

#define DELETE_VARIANT hr = SafeArrayDestroy(pMySafeArray)

#endif

#ifndef GETDATA_IN_VARIANT
//***********取得变体中数据的宏************//

//sourcedata是变体指针类型
//aimdata是自定义结构指针型变量
//该宏将变体类型中的数据赋给自定义的结构

#define GETDATA_IN_VARIANT(sourcedata,aimdata)						\
	HRESULT hr;														\
	hr = SafeArrayAccessData(sourcedata->parray,(void**)&aimdata);	\
	SafeArrayUnaccessData(sourcedata->parray)						\

#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -