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

📄 protocol.c

📁 用来pdu编解码
💻 C
📖 第 1 页 / 共 3 页
字号:
}
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(&para[WP_WARNPERD_ADDR-WORK_PARA_ADDR]);
	WorkPara.sClass1LockDelay_m = GetAnUint(&para[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 + -