📄 protocol.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 + -