📄 protocol.c.bak
字号:
//设置当前工作状态
SysState.CarWorkState = Data[0];
switch (SysState.CarWorkState)
{
case WS_PT_CLASS_1_LOCK:
SysState.fClass1Loack.RemainTime = WorkPara.sClass1LockDelay_m;
SysState.fClass1Loack.flag = 0;
SysState.fClass1Loack.TimeEnabled = 1;
break;
case WS_PT_CLASS_2_LOCK:
SysState.fClass2Loack.flag = 1;
break;
}
//返回车辆状态消息
SysState.fSendWorkState = 1;
}
//**************************************************************************
//函数:tmLoginMsg
//功能: 生成终端注册消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmLoginMsg( unsigned char *Msg)
{
unsigned char *pMsg = Msg;
sprintf(pMsg , BasicPara.TM_Time);//生产日期
pMsg +=TM_TIMELENGTH;
sprintf(pMsg , BasicPara.TM_type);//型号
pMsg +=TM_TYPELENGTH;
sprintf(pMsg , BasicPara.TM_id);//编号
pMsg +=TM_IDLENGTH;
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成车辆状态消息
//输出:Msg=消息
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmCarStateMsg( unsigned char *Msg)
{
int len;
unsigned char *pMsg = Msg;
*pMsg++ = CS_PT_SENSOR;
for(len=0; len < SENSORSNUM; len++)
{
*pMsg++ = SysState.SensorsValue[len] / 256;
*pMsg++ = SysState.SensorsValue[len] % 256;
}
*pMsg++ = CS_PT_CARSTATE;
*pMsg++ = SysState.SwitchState[0];
*pMsg++ = SysState.SwitchState[1];
*pMsg++ = CS_PT_GPS;
sprintf((char*)pMsg, SysState.gpsInfo);//gps信息
pMsg +=strlen(SysState.gpsInfo);
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成工作参数查询/设置响应消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmGetWorkParaMsg( unsigned char *Msg)
{
int kk;
unsigned char *pMsg = Msg;
*pMsg++ = WP_PT_COMTYPE;
*pMsg++ = BasicPara.ComuMode;//通信模式
//中心gsm号码
*pMsg++ = WP_PT_CENTNUM;
sprintf( pMsg, BasicPara.CenterGsmNum );
pMsg += CENTERNUMLEN;
//中心IP和port
*pMsg++ = WP_PT_CENTIP;
*pMsg++ = BasicPara.CenterIP[0][0];
*pMsg++ = BasicPara.CenterIP[0][1];
*pMsg++ = BasicPara.CenterIP[0][2];
*pMsg++ = BasicPara.CenterIP[0][3];
*pMsg++ = BasicPara.CenterPort[0]/ 256;
*pMsg++ = BasicPara.CenterPort[0]% 256;
//终端注册消息发送间隔时间
*pMsg++ = WP_PT_MSGPERIOD;
*pMsg++ = WorkPara.sLoginMsgPeriod / 256;
*pMsg++ = WorkPara.sLoginMsgPeriod % 256;
//终端报警消息发送间隔时间
*pMsg++ = WP_PT_WARNPERIOD;
*pMsg++ = WorkPara.sWarnMsgPeriod / 256;
*pMsg++ = WorkPara.sWarnMsgPeriod % 256;
//16路传感器报警门限
*pMsg++ = WP_PT_SENSORSBOUND;
for(kk=0; kk < SENSORSNUM; kk++)
{
*pMsg++ = WorkPara.SensorsBound[kk] / 256;
*pMsg++ = WorkPara.SensorsBound[kk] % 256;
}
//传感器报警使能
*pMsg++ = WP_PT_SENSORWARNEN;
*pMsg++ = WorkPara.SensorsWarnEnabled[0];
*pMsg++ = WorkPara.SensorsWarnEnabled[1];
//开关量正常状态
*pMsg++ = WP_PT_WAITCHSTATE;
*pMsg++ = WorkPara.SwitchNomalState[0];
*pMsg++ = WorkPara.SwitchNomalState[1];
//开关量报警使能
*pMsg++ = WP_PT_WAITCHWARNEN;
*pMsg++ = WorkPara.SwitchWarnEnable[0];
*pMsg++ = WorkPara.SwitchWarnEnable[1];
//活动范围
//......
return (abs(Msg - pMsg));
}
//**************************************************************************
//函数:tmCarStateMsg
//功能: 生成工作状态查询/设置响应消息
//输出:Msg=消息,Msgtype=消息类型
//返回:0=消息无效,>0=消息长度
//**************************************************************************
int tmGetWorkStateMsg( unsigned char *Msg)
{
*Msg = SysState.CarWorkState;
return 1;
}
//**************************************************************************
//函数:tmCreateMsg
//功能: 生成消息/指示
//输入:主功能码和子功能码
//输出:消息
//返回:0=消息无效,>0=消息长度
//**************************************************************************
void tmCreateMsg( TFrame *Frame)
{
unsigned char *pMsg = Frame->msg;
uint16_t ck;
//添加帧头
myCopy( F_HEAD_STR, pMsg, 0, F_HEAD_LENGTH);
pMsg += F_HEAD_LENGTH;
Frame->msglen = F_HEAD_LENGTH;
//添加ID
myCopy( BasicPara.TM_Time, pMsg, 0, TM_TIMELENGTH);
pMsg += TM_TIMELENGTH;
Frame->msglen += TM_TIMELENGTH;
myCopy( BasicPara.TM_type, pMsg, 0, TM_TYPELENGTH);
pMsg += TM_TYPELENGTH;
Frame->msglen += TM_TYPELENGTH;
myCopy( BasicPara.TM_id, pMsg, 0, TM_IDLENGTH);
pMsg += TM_IDLENGTH;
Frame->msglen += TM_IDLENGTH;
//添加分段
*pMsg++ = '0';
Frame->msglen++;
//添加帧长
*pMsg++ = '0';
Frame->msglen++;
//添加帧主类型
*pMsg++ = Frame->type;
Frame->msglen++;
//添加帧子类型
*pMsg++ = Frame->code;
Frame->msglen++;
//添加数据段
switch (Frame->type)
{
case F_TYPE_RESPOND:
switch(Frame->code)
{
//注册消息
case F_CODE_LOGIN:
Frame->msglen +=tmLoginMsg(pMsg);
break;
//车辆状态消息
case F_CODE_CARSTATE:
Frame->msglen +=tmCarStateMsg(pMsg);
break;
//工作参数查询响应消息
case F_CODE_GETWORKPARA:
Frame->msglen +=tmGetWorkParaMsg(pMsg);
break;
//工作参数设定响应消息
case F_CODE_SETWORKPARA:
Frame->msglen +=tmGetWorkParaMsg(pMsg);
break;
//工作状态查询响应消息
case F_CODE_GETWORKSTATE:
Frame->msglen +=tmGetWorkStateMsg(pMsg);
break;
//工作状态设定响应消息
case F_CODE_SETWORKSTATE:
Frame->msglen +=tmGetWorkStateMsg(pMsg);
break;
}
break;
case F_TYPE_NOTE:break;
}
//计算校验和
ck = cksum(Frame->msg, Frame->msglen);
Frame->msg[Frame->msglen++] = ck / 256;
Frame->msg[Frame->msglen++] = ck % 256;
Frame->msg[Frame->msglen] = Frame->msglen;
}
//**************************************************************************
//从source的beginindex开始拷贝degits字节到dest
//输入:source=源字符串;beginindex=起始位置(从0开始算)
// dest=目标字符串; degits=请求字节数
//返回:实际拷贝的字节数
//dest以'\0'结束
//**************************************************************************
int myCopy(char *source , char *dest , int beginindex ,int degits)
{
int n ;
int len ;
len = strlen(source) ;
if (degits>=(len-beginindex))
{
for(n=beginindex;n<len;n++)
*(dest++)=source[n];
*dest='\0';
return (len-beginindex) ;
}else
{
for(n=beginindex;n<(degits+beginindex);n++)
*(dest++)=source[n];
*dest='\0';
return degits ;
}
}
//***************************************************************************
//寻找字符c在PStr中第Num次出现的位置
//返回: =-1 不存在
// >-1 c在PStr中第Num次出现的位置
//**************************************************************************
int FindeCharInStr ( char* PStr , int nSrcLength ,int cNum , char c )
{
int i ,FindeCharInStr = -1 ;
for(i = 0 ; i<nSrcLength;i++ , PStr++)
{
if (*PStr==c)
{
cNum-- ;
if (cNum < 1 )
{
FindeCharInStr = i ;
break ;
}
}
}
return FindeCharInStr ;
}
//void main(void)
//{
//////////////////////////////////////////////////////////////////////////////
//
// ParaInit();
//
// centSimunator("ctGetCarState");
// tmEventProcess();
// centSimunator("ctSetWorkPara");
// tmEventProcess();
// centSimunator("ctSetWorkState");
// tmEventProcess();
// centSimunator("ctNoteTmlogin");
// tmEventProcess();
// centSimunator("ctGetWorkState");
// tmEventProcess();
// centSimunator("ctGetWorkPara");
//
// tmEventProcess();
//}
int ctSetWorkPara(unsigned char *msg)
{
unsigned char *pcmd=msg;
int jj;
//设置工作参数
*pcmd++ = '#';
*pcmd++ = 'Z';
*pcmd++ = 'F';
*pcmd++ = '>';
*pcmd++ = '0';
*pcmd++ = '7';
*pcmd++ = '0';
*pcmd++ = '6';
*pcmd++ = '1';
*pcmd++ = '4';
*pcmd++ = '0';
*pcmd++ = '0';
*pcmd++ = '0';
*pcmd++ = '1';
*pcmd++ = '0';
*pcmd++ = '0';
*pcmd++ = '0';
*pcmd++ = '1';
*pcmd++ = '0';
*pcmd++ = '1';
//分段
*pcmd++ = '0';
//帧长
*pcmd++ = 'F';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_SETWORKPARA;
*pcmd++ = WP_PT_COMTYPE;
*pcmd++ = 1;//通信模式
*pcmd++ = WP_PT_CENTNUM;
myCopy( BasicPara.CenterGsmNum, pcmd ,0 ,CENTERNUMLEN);
pcmd += CENTERNUMLEN;
*pcmd++ = WP_PT_CENTIP;
//中心IP和端口
*pcmd++ = 192;
*pcmd++ = 168;
*pcmd++ = 2;
*pcmd++ = 3;
*pcmd++ = 3689/256;
*pcmd++ = 3689%256;
//终端消息发送间隔时间
*pcmd++ = WP_PT_MSGPERIOD;
*pcmd++ = 1;
*pcmd++ = 1;
//终端报警消息发送间隔时间
*pcmd++ = WP_PT_WARNPERIOD;
*pcmd++ = 1;
*pcmd++ = 2;
//16路传感器报警门限
*pcmd++ = WP_PT_SENSORSBOUND;
for(jj=0; jj < 16; jj++)
{
*pcmd++ = 1;
*pcmd++ = jj;
}
//传感器报警使能
*pcmd++ = WP_PT_SENSORWARNEN;
*pcmd++ = 1;
*pcmd++ = 2;
//开关量正常状态值
*pcmd++ = WP_PT_WAITCHSTATE;
*pcmd++ = 0xff;
*pcmd++ = 0;
//开关量报警使能
*pcmd++ = WP_PT_WAITCHWARNEN;
*pcmd++ = 0;
*pcmd++ = 0xff;
msg[F_LENGTH_BEGIN] = 71+26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -