rfserver.c
来自「MCS51的实现无线接收发送(315M或433M)源程序代码。」· C语言 代码 · 共 579 行 · 第 1/2 页
C
579 行
if(CmpString(RfRecvDataBuf+1+IDSERIALLEN,AmuData[i],IDSERIALLEN)==STR_EQUAL) break;
}
if(i==AmuNum)
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"不是我的成员");
#endif
return;
}
#if DEBUG_RFSERVER
//MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
#endif
Data=(INT8U *)(RfRecvDataBuf+1+IDSERIALLEN+IDSERIALLEN);
switch(*Data)
{
case 0x81:
if(*(Data+1)==0x40)
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"报警触发应答");
#endif
AmuData[i][4]=1;
}
else
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"查询状况应答");
#endif
AmuData[i][4]=0;
}
#if DEBUG_RFSERVER
//MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
#endif
break;
case 0xc0:
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"收到SOSS报警应答");
#endif
break;
}
}
}
//=========================================================
void HdlRfData(void)
{
INT8U Temp;
#if DEBUG_RFSERVER
//MDebugStrLF((INT8UC *)"HdlRfData()");
//MDebugExMemHex(Int0RecvBuf,Int0WrIndex);
//Int0RdIndex=Int0WrIndex=0;
#endif
RfRecvDataLen=0;
while(Int0RdIndex!=Int0WrIndex)
{
RfRecvDataBuf[RfRecvDataLen++]=Int0RecvBuf[Int0RdIndex];
if(++Int0RdIndex>=INT0RECVBUFSIZE) Int0RdIndex=0;
}
#if DEBUG_RFSERVER
//MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
#endif
if((RfRecvDataBuf[0]!=FLAG1)||(RfRecvDataBuf[RfRecvDataLen-1]!=FLAG2))
{
#if DEBUG_RFSERVER
//MDebugStrLF((INT8UC *)"帧出错");
//MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
#endif
return;
}
Temp=GetChkSum(RfRecvDataBuf+1,RfRecvDataLen-3);
if(RfRecvDataBuf[RfRecvDataLen-2]!=Temp)
{
#if DEBUG_RFSERVER
//MDebugStrLF((INT8UC *)"校验和出错");
//MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
#endif
return;
}
HdlRfFrame();
}
//=========================================================
void HdlUartData(void)
{
INT8U i,j,Temp;
#if DEBUG_RFSERVER
//MDebugStrLF((INT8UC *)"HdlUartData()");
//MDebugExMemHex(UartRecvBuf,UartWrIndex);
#endif
Temp=RdRom(ADDR_IDENTITY);
if(Temp==HOST)
{
if(UartRecvBuf[0]!=0x7f)
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"帧出错");
MDebugExMemHex(UartRecvBuf,UartWrIndex);
#endif
return;
}
if(UartRecvBuf[1]!=UartWrIndex-2)
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"长度出错");
MDebugExMemHex(UartRecvBuf,UartWrIndex);
#endif
return;
}
if(UartRecvBuf[UartWrIndex-1]!=GetChkSum(UartRecvBuf+1,UartWrIndex-2))
{
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"校验和出错");
MDebugExMemHex(UartRecvBuf,UartWrIndex);
MDebugPara("校验和=",GetChkSum(UartRecvBuf+1,UartWrIndex-2));
#endif
return;
}
Temp=UartRecvBuf[3];
switch(UartRecvBuf[2])
{
case 0x01:
#if DEBUG_RFSERVER
MDebugPara("增加AMU=",Temp);
#endif
UartSendLen=0;
UartSendBuf[UartSendLen++]=0X7F;
UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
UartSendBuf[UartSendLen++]=0X81;
UartSendBuf[UartSendLen++]=Temp;
for(i=0;i<Temp;i++)
{
#if DEBUG_RFSERVER
//MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
#endif
MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
UartSendLen+=IDSERIALLEN;
for(j=0;j<AmuNum;j++)
{
if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
}
if(j==AmuNum)
{
UartSendBuf[UartSendLen++]=0x01;
MovXX(AmuData[AmuNum],UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
AmuData[AmuNum][4]=0x03; //通讯失败
AmuNum++;
}
else UartSendBuf[UartSendLen++]=0x02;
}
UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
#if DEBUG_RFSERVER
MDebugExMemHex(UartSendBuf,UartSendLen);
#endif
PostToUartSendQ(0);
#if DEBUG_RFSERVER
MDebugPara("AmuNum:",AmuNum);
MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
#endif
break;
case 0x02:
#if DEBUG_RFSERVER
MDebugPara("取消AMU=",Temp);
#endif
UartSendLen=0;
UartSendBuf[UartSendLen++]=0X7F;
UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
UartSendBuf[UartSendLen++]=0X82;
UartSendBuf[UartSendLen++]=Temp;
for(i=0;i<Temp;i++)
{
#if DEBUG_RFSERVER
//MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
#endif
MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
UartSendLen+=IDSERIALLEN;
for(j=0;j<AmuNum;j++)
{
if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
}
if(j==AmuNum) UartSendBuf[UartSendLen++]=0x02;
else
{
UartSendBuf[UartSendLen++]=0x01;
MovXX(AmuData[j],AmuData[j+1],(AmuNum-1)*IDSERIALLEN);
AmuNum--;
}
}
UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
#if DEBUG_RFSERVER
MDebugExMemHex(UartSendBuf,UartSendLen);
#endif
PostToUartSendQ(0);
#if DEBUG_RFSERVER
MDebugPara("AmuNum:",AmuNum);
MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
#endif
break;
case 0x03:
#if DEBUG_RFSERVER
MDebugPara("查询AMU=",Temp);
#endif
UartSendLen=0;
UartSendBuf[UartSendLen++]=0X7F;
UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
UartSendBuf[UartSendLen++]=0X83;
UartSendBuf[UartSendLen++]=Temp;
for(i=0;i<Temp;i++)
{
#if DEBUG_RFSERVER
//MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
#endif
MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
UartSendLen+=IDSERIALLEN;
for(j=0;j<AmuNum;j++)
{
if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
}
if(j==AmuNum) UartSendBuf[UartSendLen++]=0x02; //处于自由工作状态
else UartSendBuf[UartSendLen++]=AmuData[j][4];
}
UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
#if DEBUG_RFSERVER
MDebugExMemHex(UartSendBuf,UartSendLen);
#endif
PostToUartSendQ(0);
break;
case 0x04:
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"触发报警");
#endif
Status=0x40;
UartSendLen=0;
UartSendBuf[UartSendLen++]=0X7F;
UartSendBuf[UartSendLen++]=2;
UartSendBuf[UartSendLen++]=0X84;
UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
#if DEBUG_RFSERVER
MDebugExMemHex(UartSendBuf,UartSendLen);
#endif
PostToUartSendQ(0);
break;
case 0x05:
#if DEBUG_RFSERVER
MDebugStrLF((INT8UC *)"取消报警");
#endif
Status=0x00;
UartSendLen=0;
UartSendBuf[UartSendLen++]=0X7F;
UartSendBuf[UartSendLen++]=2;
UartSendBuf[UartSendLen++]=0X85;
UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
#if DEBUG_RFSERVER
MDebugExMemHex(UartSendBuf,UartSendLen);
#endif
PostToUartSendQ(0);
break;
}
}
else if(Temp==AMU)
{
}
else if(Temp==SOSS)
{
}
}
//=========================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?