📄 protocol.c
字号:
}
int ctSetWorkState(unsigned char *msg)
{
unsigned char *pcmd=msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_SETWORKSTATE;
*pcmd++ = WS_PT_CLASS_2_LOCK;
msg[F_LENGTH_BEGIN] = 1+26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
int ctLoginConfirm(unsigned char *msg)
{
unsigned char *pcmd=msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_SURE;
//code
*pcmd++ = F_CODE_LOGIN;
*pcmd++ = 0;
msg[F_LENGTH_BEGIN] = 1+26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
int ctNoteTmlogin(unsigned char *msg)
{
unsigned char *pcmd=msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_LOGIN;
msg[F_LENGTH_BEGIN] = 26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
int ctGetWorkState(unsigned char *msg)
{
unsigned char *pcmd=msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_GETWORKSTATE;
msg[F_LENGTH_BEGIN] = 26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
int ctGetWorkPara(unsigned char *msg)
{
unsigned char *pcmd=msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_GETWORKPARA;
msg[F_LENGTH_BEGIN] = 26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
int ctGetCarState(unsigned char *msg)
{
unsigned char *pcmd = msg;
*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++ = '0';
//type
*pcmd++ = F_TYPE_COMMD;
//code
*pcmd++ = F_CODE_CARSTATE;
msg[F_LENGTH_BEGIN] = 26;
// centFrameDeal(cmd , cmd[F_LENGTH_BEGIN] );
return msg[F_LENGTH_BEGIN];
}
//**************************************************************************
//函数:ParaInit
//功能: 系统参数初始化
//**************************************************************************
void ParaInit(void)
{
unsigned char para[80];
//读取所有的基本参数
Myeeprom_read_block((void *)para, (void *)BP_TM_TIME_ADDR, 79);
myCopy(para, BasicPara.TM_Time, BP_TM_TIME_ADDR-BASIC_PARA_ADDR, TM_TIMELENGTH);
myCopy(para, BasicPara.TM_type, BP_TM_TYPE_ADDR-BASIC_PARA_ADDR, TM_TYPELENGTH);
myCopy(para, BasicPara.TM_id, BP_TM_ID_ADDR-BASIC_PARA_ADDR, TM_IDLENGTH);
// dprintf0("%s%s%s", BasicPara.TM_Time, BasicPara.TM_type, BasicPara.TM_id);
//下面这两句的顺序不能颠倒
myCopy(para, (char*)&BasicPara.ComuMode, BP_TM_COMMOD_ADDR-BASIC_PARA_ADDR, 1);
myCopy(para, BasicPara.CenterGsmNum, BP_TM_CNTNUM_ADDR-BASIC_PARA_ADDR, CENTERNUMLEN);
// dprintf0("%s", BasicPara.CenterGsmNum);
myCopy(para, BasicPara.CenterIP[0], BP_TM_CNTIP1_ADDR-BASIC_PARA_ADDR, 4);
myCopy(para, (char*)&BasicPara.CenterPort[0], BP_TM_CNTPOT1_ADDR-BASIC_PARA_ADDR, 2);
// dprintf0("%d.%d.%d.%d:%d",
// BasicPara.CenterIP[0][0],
// BasicPara.CenterIP[0][1],
// BasicPara.CenterIP[0][2],
// BasicPara.CenterIP[0][3],
// BasicPara.CenterPort[0]);
//读取所有的工作参数
Myeeprom_read_block((void *)para, (void *)WORK_PARA_ADDR, 79);
WorkPara.sWarnMsgPeriod = GetAnUint(¶[WP_WARNPERD_ADDR-WORK_PARA_ADDR]);
WorkPara.sClass1LockDelay_m = GetAnUint(¶[WP_LOCK1DELAY_ADDR-WORK_PARA_ADDR]);
// dprintf0("%d.%d.%d",
// WorkPara.sLoginMsgPeriod,
// WorkPara.sWarnMsgPeriod,
// WorkPara.sClass1LockDelay_m);
myCopy(para, (char*)WorkPara.SensorsBound, WP_SENSORBOUND_ADDR-WORK_PARA_ADDR, 32);
// for(kk=0;kk<16;kk++)dprintf0("%d:%d ", kk, WorkPara.SensorsBound[kk]);
WorkPara.SensorsWarnEnabled[0] = para[WP_SENSORWARNEN_ADDR-WORK_PARA_ADDR];
WorkPara.SensorsWarnEnabled[1] = para[WP_SENSORWARNEN_ADDR-WORK_PARA_ADDR+1];
WorkPara.SwitchNomalState[0] = para[WP_SWITCHNMSTATE_ADDR-WORK_PARA_ADDR];
WorkPara.SwitchNomalState[1] = para[WP_SWITCHNMSTATE_ADDR-WORK_PARA_ADDR+1];
WorkPara.SwitchWarnEnable[0] = para[WP_SWITCHWARNEN_ADDR-WORK_PARA_ADDR];
WorkPara.SwitchWarnEnable[1] = para[WP_SWITCHWARNEN_ADDR-WORK_PARA_ADDR+1];
// dprintf0("%d.%d.%d.%d.%d.%d",
// WorkPara.SensorsWarnEnabled[0], WorkPara.SensorsWarnEnabled[1],
// WorkPara.SwitchNomalState[0], WorkPara.SwitchNomalState[1],
// WorkPara.SwitchWarnEnable[0], WorkPara.SwitchWarnEnable[1]);
}
//**************************************************************************
//函数:ParaRecover
//功能: 恢复系统参数为默认值
//**************************************************************************
void ParaRecover(void)
{
int kk;
sprintf(BasicPara.TM_Time, "xxxxxx"); //生产日期
Myeeprom_write_block( (void *)BasicPara.TM_Time, (void *)BP_TM_TIME_ADDR, 6);
sprintf(BasicPara.TM_type, "xxxx"); //型号
Myeeprom_write_block( (void *)BasicPara.TM_type, (void *)BP_TM_TYPE_ADDR, 4);
sprintf(BasicPara.TM_id, "xxxxxx"); //编号
Myeeprom_write_block( (void *)BasicPara.TM_id, (void *)BP_TM_ID_ADDR, 6);
BasicPara.ComuMode = 1; //通信模式
Myeeprom_write_block( (void *)&BasicPara.ComuMode, (void *)BP_TM_COMMOD_ADDR, 1);
sprintf(BasicPara.CenterGsmNum, "86xxxxxxxxxxx"); //中心gsm号码
Myeeprom_write_block( (void *)BasicPara.CenterGsmNum, (void *)BP_TM_CNTNUM_ADDR, 13);
//中心IP地址和端口
BasicPara.CenterIP[0][0] = 255;
BasicPara.CenterIP[0][1] = 255;
BasicPara.CenterIP[0][2] = 255;
BasicPara.CenterIP[0][3] = 255;
Myeeprom_write_block( (void *)BasicPara.CenterIP[0], (void *)BP_TM_CNTIP1_ADDR, 4);
BasicPara.CenterPort[0] = 0;
Myeeprom_write_block( (void *)&BasicPara.CenterPort[0], (void *)BP_TM_CNTPOT1_ADDR, 2);
//终端注册消息发送间隔时间
WorkPara.sLoginMsgPeriod = 255;
Myeeprom_write_block( (void *)&WorkPara.sLoginMsgPeriod, (void *)WP_LOGINPERD_ADDR, 2);
//终端报警消息发送间隔时间
WorkPara.sWarnMsgPeriod = 256;
Myeeprom_write_block( (void *)&WorkPara.sWarnMsgPeriod, (void *)WP_WARNPERD_ADDR, 2);
//16路传感器报警门限
for(kk=0; kk < SENSORSNUM; kk++)
{
WorkPara.SensorsBound[kk] = 0;
}
Myeeprom_write_block( (void *)WorkPara.SensorsBound, (void *)WP_SENSORBOUND_ADDR, 32);
//传感器报警使能
WorkPara.SensorsWarnEnabled[0] = 0;
WorkPara.SensorsWarnEnabled[1] = 0;
Myeeprom_write_block( (void *)WorkPara.SensorsWarnEnabled, (void *)WP_SENSORWARNEN_ADDR, 2);
//开关量正常状态
WorkPara.SwitchNomalState[0] = 0;
WorkPara.SwitchNomalState[1] = 0;
Myeeprom_write_block( (void *)WorkPara.SwitchNomalState, (void *)WP_SWITCHNMSTATE_ADDR, 2);
//开关量报警使能
WorkPara.SwitchWarnEnable[0] = 0;
WorkPara.SwitchWarnEnable[1] = 0;
Myeeprom_write_block( (void *)WorkPara.SwitchWarnEnable, (void *)WP_SWITCHWARNEN_ADDR, 2);
}
//**************************************************************************
//函数:cksum
//功能: 计算字符串的校验和
//输入:cp=字符串,len=字符串长度
//返回:无
//**************************************************************************
uint16_t cksum(char * cp,int len)
{
int index;
uint32_t sum;
char tmp[2];
uint16_t retval;
sum = 0;
index = 0;
while(index < len - 1)
{
sum += *(uint16_t*)(cp + index);
index += 2;
}
if(len & 1){
tmp[0] = cp[len-1];
tmp[1] = 0;
sum += *(uint16_t*)tmp;
}
/* add back carry outs from top 16 bits to low 16 bits */
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
retval = (uint16_t)sum;
return( ~retval );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -