📄 tcpip_chuli_task.c
字号:
#include "all.h"
void Reply_TCPIP_SET_OK(uchar Fun) ;
void Reply_TCPIP_Set_False(uchar Fun) ;
void Reply_TCPIP_QueRen();
uchar TCPIP_IS_CS_OK() ;
void DaBao_TCPIP_And_Send(uchar fun,char *Bufff,uint Lenn) ;
bit Is_Tcp_Or_Key_B; //TCP能运行或 KEY 能运行之任务,1能运行
//两者只能一个能运行
uchar Second_WoSou; //握手秒标志
uchar Second_wucnt;
uchar Net_oK_FLAG_0_Cnt=0;
uint Re_XinTcp_JingLei_cnt=0; //重新发新警情计数器
code uchar RestTcp[12]={0xA1,0X25,0X06,0X01,'8','8','8','8','8',0XFF};
void TcpIp_CHULI_Taskqq(void) _task_ TcpIp_CHULI { // 警情处理任务
xdata uchar ttt,ii;
uchar Faaa[2];
os_wait2(K_SIG, 0);
while(1) {
os_wait2(K_TMO,2);
Dog_TcpIp_CHULI_cnt=0; //看门狗计数器
// 通知TCPIP 有新警情================================================
// 通知TCPIP 有新警情================================================
// 通知TCPIP 有新警情================================================
if( Re_XinTcp_JingLei_cnt!=0) { // 保证16 秒重新发一次, 重新发新警情计数器
Re_XinTcp_JingLei_cnt--;
if( Re_XinTcp_JingLei_cnt>RE_Fa_Jing_TCPIP4000)
Re_XinTcp_JingLei_cnt=RE_Fa_Jing_TCPIP4000;
}
if( XinTcp_JingLei_Byte!=0&& Re_XinTcp_JingLei_cnt==0) { // 通知TCPIP 有新警情
// XinTcp_JingLei_Byte =0; // 通知屏显示
// while(KEY_TX_Right_B==0 ) os_wait2(K_TMO,2);
//KEY_TX_Right_B=0; //得到信号灯
//上传警情命令54
// 注:数据长度:7 (1 bytes)
// 数据:6Byte 年月日时分秒 + 1Byte的警情字节
GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
DaBao_TCPIP_And_Send(54,(uchar *)&struct_JingQing_Current_True.Jing_time[0], 7);
// os_wait2(K_TMO,200);
//KEY_TX_Right_B=1; //放信号灯
Re_XinTcp_JingLei_cnt=RE_Fa_Jing_TCPIP4000; // 保证16 秒重新发一次, 重新发新警情计数器
ii=0;
while(1) { //wait 1.5s
os_wait2(K_TMO,5);
if(++ii>150) {
break;
}
if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B) {
GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
if(TCPIP_IS_CS_OK()==1&&GPRS_RX_Buff[0]==1&&GPRS_RX_Buff[2]==54) { //
//收到应答ok
Re_XinTcp_JingLei_cnt=0; //重新发新警情计数器
XinTcp_JingLei_Byte =0; // 通知屏显示
break;
}
}
}
}
//=====以上是报警时主动发警情 ======================
//如不成功则过16秒再重新发一次
//=====以上是报警时主动发警情 ======================
//=====以上是报警时主动发警情 ======================
//= ===//以下是对TCPIP的设查的处理===============================
if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B) {
//以下是对TCPIP的设查的处理
while(Is_Tcp_Or_Key_B==0) {
os_wait2(K_TMO,2);
Dog_TcpIp_CHULI_cnt=0; //看门狗计数器
}
Is_Tcp_Or_Key_B=0;
Attand_TCPIP();
Is_Tcp_Or_Key_B=1;
GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
}
//===========================================================
//===============以下是握手时间到则握手================
if( Second_WoSou == 0xff ) { //握手秒标志
Second_WoSou = 0;
if(++Second_wucnt>26) {
Second_wucnt=0;
//握手
Faaa[0]=0xaa;
Faaa[1]=0xaa;
GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
DaBao_TCPIP_And_Send(56,Faaa, 2); //发握手命令
ttt=0;
while(1) { // 1.5秒
os_wait2(K_TMO,5);
if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B) {
if(TCPIP_IS_CS_OK()==1) {
if(GPRS_RX_Buff[0]==1) { //&&GPRS_RX_Buff[2]==56)
Para_all_True.Net_oK_FLAG=1;
Net_oK_FLAG_0_Cnt=0;
break;
}
}
}
if(++ttt>150) { //时限到
if(++Net_oK_FLAG_0_Cnt>=2) {
Net_oK_FLAG_0_Cnt=0;
Para_all_True.Net_oK_FLAG=0;
// 以下是连续两次握手不成功,进行重新连接
MoveByte(GPRS_TX_Buff, RestTcp, 12);
//FA_TCPIP_Buff();
GPRS_TX_Len=10; //GPRS_TX_Buff[3]+6;
GPRS_TX_cnt=0;
GPRS_TX_Len--;
SBUF0=GPRS_TX_Buff[0];
//===============================================
}
break;
}
}
}
}
//===============以上是握手时间到则握手================
}
}
/**********************************************************************
**函数原型: void Atttand_TonCen()
**入口参数:
**出口参数: 无
**返 回 值: 无
**说 明: 对TCPIP的设查的处理
************************************************************************/
// 对TCPIP的设查的处理
data uchar *MPPo1,*MPPo2;
void Attand_TCPIP( ) {
// uchar i;
uchar Mbufrem;
uchar ii,Len,num,startn;
XinKey_b=0;
if(TCPIP_IS_CS_OK()==0) return ; // Reply_TCPIP_Set_False(); &&GPRS_RX_Buff[0]!=0x0a
if(GPRS_RX_Buff[0]==0x02) return; //02 不需要回答
//os_wait2(K_TMO, 5);
//Reply_TCPIP_QueRen();
os_wait2(K_TMO, 100);
switch(GPRS_RX_Buff[0]) {
case 3:
//系统进行一次布防
BuFang_Once() ;
Reply_TCPIP_SET_OK(3);
os_wait2(K_TMO, 250);
break;
case 4:
//系统进行一次在家布防
ZaiJia_BuFang_Once() ;
Reply_TCPIP_SET_OK(4);
os_wait2(K_TMO, 250);
break;
case 5:
//系统进行一次撤防
CeFang_Once() ;
Reply_TCPIP_SET_OK(5);
os_wait2(K_TMO, 250);
break;
case 6: //06 时间设置 (暂不用下传)
Reply_TCPIP_SET_OK(6);
break;
case 7: //07 IP地址设置
for(ii=0;ii<4;ii++) {
Para_all_True.IP[ii]=GPRS_RX_Buff[2+ii]; //
}
Para_all_True.IP_Port=GPRS_RX_Buff[2+ii];
Para_all_True.IP_Port<<=8;
Para_all_True.IP_Port|=(uint)GPRS_RX_Buff[2+ii+1];
Para_all_True.Change_Flag=1;
Reply_TCPIP_SET_OK(7);
break;
case 8: //08 登录网络(登录厂家服务器)
//要不要断网命令??????????
break;
case 9: //09 报警电话设置
num=GPRS_RX_Buff[2]; //1234
Len=GPRS_RX_Buff[3];
if(Len>15||num==0||num>5)
Reply_TCPIP_Set_False(9);
else {
for(ii=0;ii<(Len+1);ii++) {
Para_all_True.Phone_1To6[num-1][ii]=GPRS_RX_Buff[3+ii]; // ascii 码
}
Para_all_True.Phone_1To6[num-1][ii]='\0'; // ascii 码
Para_all_True.Phone_1To6[num-1][0]=GPRS_RX_Buff[3]; //长度 不是 ascii 码
Para_all_True.Change_Flag=1;
Reply_TCPIP_SET_OK(9);
}
break;
case 10: //10 密码修改
GPRS_RX_Buff[2+6]=0; //123456
for(ii=0;ii<6;ii++) {
if( GPRS_RX_Buff[2+ii]<'0'||GPRS_RX_Buff[2+ii]>'9') {
break;
}
}
if(ii==6) {
strcpy( &Para_all_True.Mima[0], &GPRS_RX_Buff[2]);
Para_all_True.Change_Flag=1;
Reply_TCPIP_SET_OK(10);
}
else {
Reply_TCPIP_Set_False(10);
}
break;
//其实11 12 36 都 是一样的
case 11: //11 地震仪自检
En_zijian_B=1;
ii=0;
while(En_zijian_B) { // 2.5 秒
os_wait2(K_TMO,5);
if(ii++>250) {
break;
}
}
DaBao_TCPIP_And_Send(11, &Para_all_True.DiZhenYi_status[0],2);
break;
case 12: //12 防震床自检
En_zijian_B=1;
ii=0;
while(En_zijian_B) { // 2.5 秒
os_wait2(K_TMO,5);
if(ii++>250) {
break;
}
}
DaBao_TCPIP_And_Send(12, &Para_all_True.ChuangTi_status[0],3);
break;
case 13://13 自检间隔设置 0:则不自检
Para_all_True.ZiJian_Time=GPRS_RX_Buff[2];
Para_all_True.Change_Flag=1;
Reply_TCPIP_SET_OK(13);
break;
case 14: //14 无线防区对码功能
break;
case 15:
//有线防区(1-4)对应的字节内容为1:对应的防区为常开防区
// 0:对应的防区为常闭防区
if(GPRS_RX_Buff[2]>1||GPRS_RX_Buff[3]>1||GPRS_RX_Buff[4]>1||GPRS_RX_Buff[5]>1)
Reply_JTX_0x24_Set_False();
else {
Para_all_True.FangQu_is_1or0[0]=GPRS_RX_Buff[2]; //防区1
Para_all_True.FangQu_is_1or0[1]=GPRS_RX_Buff[3]; //防区2
Para_all_True.FangQu_is_1or0[2]=GPRS_RX_Buff[4]; //防区3
Para_all_True.FangQu_is_1or0[3]=GPRS_RX_Buff[5]; //防区4
Para_all_True.Change_Flag=1 ; //
Reply_TCPIP_SET_OK(15);
}
break;
case 16: //查询有线防区的输入状态
DaBao_TCPIP_And_Send(16, &Para_all_True.FangQu_is_1or0[0],4);
break;
case 17: //17 布防延时时间设置
Para_all_True.BuFang_Delay_Time=GPRS_RX_Buff[2];
Para_all_True.Change_Flag=1 ; //
Reply_TCPIP_SET_OK(17);
break;
case 18: // 18 振铃次数设置2-9
if( GPRS_RX_Buff[2]<2||GPRS_RX_Buff[2]>9) {
Reply_TCPIP_Set_False(18);
}
else {
Para_all_True.ZhenLingCiShu_Time=GPRS_RX_Buff[2];
Para_all_True.Change_Flag=1 ; //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -