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

📄 protocol.h

📁 用来pdu编解码
💻 H
字号:
/**************************************************************************
文件名: protocol.h

**************************************************************************/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdint.h>
#include "define.h"

//帧头
#define F_HEAD_STR "#ZF>" 

//帧中定长字段的长度
#define F_HEAD_LENGTH 	4
#define F_ID_LENGTH 	16
#define F_SEG_LENGTH  	1
#define F_LENGTH_LENGTH 1
#define F_TYPE_LENGTH 	1
#define F_CODE_LENGTH 	1
#define F_CRC_LENGTH 	2


//帧中定长字段的起始位置,从0开始
#define F_HEAD_BEGIN 		0
#define F_ID_BEGIN 			4
#define F_SEG_BEGIN 		20
#define F_LENGTH_BEGIN 		21
#define F_TYPE_BEGIN 		22
#define F_CODE_BEGIN 		23
#define F_DATA_BEGIN 		24
//帧基本长度(固定部分的长度)
#define F_BASIC_LENGTH  	26

//type码
#define F_TYPE_COMMD 		0	//命令
#define F_TYPE_RESPOND 		1	//响应
#define F_TYPE_SURE 		2	//确认
#define F_TYPE_NOTE 		3	//指示

//code码
#define F_CODE_LOGIN 		0	//注册
#define F_CODE_CARSTATE 	1	//车辆状态
#define F_CODE_GETWORKPARA	2	//工作参数查询
#define F_CODE_SETWORKPARA	3	//工作参数设定
#define F_CODE_GETWORKSTATE	4	//工作状态(锁车)查询
#define F_CODE_SETWORKSTATE	5	//工作状态(锁车)设定
#define F_CODE_WARN			6	//报警
#define F_CODE_CLEARWARN	7	//报警解除
#define F_CODE_DETECT		255	//探询

//注册确认包数据段
#define LP_DATA_SEGMENT_PMT 0	//合法/允许	
#define LP_DATA_SEGMENT_ILG 1	//拒绝

//参数类型
//用于车辆状态指示/响应报文
#define CS_PT_SENSOR	0	//传感器
#define CS_PT_CARSTATE	1	//车辆状态
#define CS_PT_GPS		2	//GPS

//参数类型
//用于工作参数查询响应报文/工作参数设定命令报文
#define WP_PT_COMTYPE		0	//通信类型
#define WP_PT_CENTNUM		1	//中心号码
#define WP_PT_CENTIP		2	//中心IP
#define WP_PT_MSGPERIOD		3	//消息间隔
#define WP_PT_WARNPERIOD	4	//报警间隔
#define WP_PT_SENSORSBOUND	5	//传感门限
#define WP_PT_SENSORWARNEN	6	//传感报警使能
#define WP_PT_WAITCHSTATE	7	//开关状态
#define WP_PT_WAITCHWARNEN	8	//开关报警使能
#define WP_PT_RUNFIELD		9	//活动范围

//类型
//用于工作状态查询响应/工作状态设定(锁车)命令报文
#define WS_PT_NORMAL		0	//正常工作
#define WS_PT_CLASS_1_LOCK	1	//一级锁闭
#define WS_PT_CLASS_2_LOCK	2	//二级锁闭

//类型
//用于报警指示报文
#define WM_PT_CARSTATE	0	//车辆状态
#define WM_PT_SENSOR	1	//传感器
#define WM_PT_SWITCH	2	//开关量
#define WM_PT_RUNOUT	3	//运动出界


#define SENSORSNUM 		16	//传感器路数


typedef struct
{
	unsigned char type;	//帧主类型
	unsigned char code;	//帧子类型
	
	unsigned char *msg;	//生成的帧
	int msglen;				//帧长度
}TFrame;


//经度,纬度
typedef struct
{
	char latitude[15];	//纬度
	char LatiIndit;		//纬度方向指示,取值为'N','S'
	
	char Longitude[15];	//经度
	char LongiIndit;	//经度方向指示,取值为'E','W'
}TGpsPosition;

//终端基本参数,包括生产日期等
#define TM_TIMELENGTH 6 	//生产日期长度
#define TM_TYPELENGTH 4 	//型号长度
#define TM_IDLENGTH   6 	//编号长度
#define CENTERNUMLEN  13 	//中心号码长度

typedef struct
{
	char TM_Time[TM_TIMELENGTH+1];		//生产日期
	char TM_type[TM_TYPELENGTH+1];		//型号
	char TM_id[TM_IDLENGTH+1];			//编号
	
	unsigned char ComuMode;				//通信模式
										//bit0:缺省通信模式, 0->SMS;1->GPRS
										//bit1:当前通信模式, 0->SMS;1->GPRS
	
	char CenterGsmNum[CENTERNUMLEN+1];	//中心gsm号码,如8613880603857
	unsigned char CenterIP[2][4];		//中心IP地址和端口,可存储两路,
	unsigned int  CenterPort[2];	    //目前用第0路,如59.54.98.192:3689		
							
}TBasicPara;
TBasicPara BasicPara;

//终端工作参数
typedef struct
{
	int  sLoginMsgPeriod;		//终端注册消息发送周期
	int  sWarnMsgPeriod;		//终端报警消息发送周期
	int  sCarStateMsgPeriod;	//车辆状态消息发送周期	
	
	int  sClass1LockDelay_m;	//一级锁闭延时(单位:分钟)		
	
	int	 SensorsBound[SENSORSNUM];		//16路传感器报警门限
	unsigned char SensorsWarnEnabled[2];//16路传感器报警使能,第一字节高位对应第一路,依次向右排列
	
	unsigned char SwitchNomalState[2];	//16路开关量正常状态值
	unsigned char SwitchWarnEnable[2];	//16路开关量报警使能,第一字节高位对应第一路,依次向右排列
	
	//经纬度活动范围的定义
	TGpsPosition gpsPositionBound_LEFT;	//左上角
	TGpsPosition gpsPositionBound_RIGHT;//右下角
		
}TWorkPara;
TWorkPara WorkPara;

//时间标志和剩余时间
typedef struct
{
	char flag; 			//用户主程序,判定是否进行该操作,
						//0=进行,1=不进行	
	int  RemainTime;	//事件的剩余时间(分钟),用于定时器,
						//>0则减一,=0则置位do
	char TimeEnabled;	//0=禁止计时,1=允许计时						
}TEvent;

//终端状态,记录系统所处的状态[事件]
typedef struct 
{
	TEvent fSendLoginMsg;		//发送注册消息
	TEvent fSendCarStateMsg;	//发送车辆状态消息
	TEvent fSendWarnMsg;		//发送报警消息	
	
	TEvent fClass1Loack;		//一级锁闭
	TEvent fClass2Loack;		//二级锁闭
	
	char fSendSetPataMsg;		//发送参数设定消息标志,0=不发送,1=发送
	char fSendWorkState;		//发送工作状态,0=不发送,1=发送
	
	char Logined;				//终端已注册标志,0=未注册,1=已注册
	
	int	 SensorsValue[SENSORSNUM];		//16路传感器模拟量输入

	unsigned char SwitchState[2];		//16路开关量输入	
	
	TGpsPosition gpsPosition;	//当前Gps坐标
	
	char gpsInfo[80];			//gps信息,
								//格式同$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10,
	char gpsPositionAvail;		//Gps坐标有效标志,0=无效,1=有效
	
	char CarWorkState;			//车辆工作状态			  
		
}TSysState;
TSysState SysState;

void ParaInit(void);
void ParaRecover(void);
//中心命令处理函数
void centLoginConfirm(unsigned char *Data , int Datalen);
void centGetWorkState( unsigned char *Data, int Datalen);
void centGetWorkPara( unsigned char *Data, int Datalen);
void centGetCarState( unsigned char *Data, int Datalen);
void centSetWorkPara( unsigned char *Data, int Datalen);
char centFrameCheck( unsigned char *Commd, unsigned char Commdlen );
void centFrameDeal(unsigned char *Commd, unsigned char Commdlen);
void centSetWorkState( unsigned char *Data, int Datalen);
void centNoteTmlogin( unsigned char *Data , int Datalen);

//终端消息生成函数
void tmCreateMsg( TFrame *Frame);
int tmGetWorkParaMsg( unsigned char *Msg);
int tmCarStateMsg( unsigned char *Msg);
int tmLoginMsg( unsigned char *Msg);
int tmGetWorkStateMsg( unsigned char *Msg);

//
int FindeCharInStr ( char* PStr , int nSrcLength ,int cNum , char c );
int myCopy(char *source , char *dest , int beginindex ,int degits);
uint16_t cksum(char * cp,int len);

//下面和函数仅用于调试
int ctGetWorkPara(unsigned char *msg);
int ctGetWorkState(unsigned char *msg);
int ctNoteTmlogin(unsigned char *msg);
int ctLoginConfirm(unsigned char *msg);
int ctSetWorkState(unsigned char *msg);
int ctGetCarState(unsigned char *msg);

extern void RunMsgPrintf(char *info);
extern void dprintf0(char *format, ...);
extern unsigned int GetAnUint(unsigned char * data);

⌨️ 快捷键说明

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