📄 selectchannel.c
字号:
#include "includes.h"
INT8U ChannelListA[79]={77,21,67,10,54,29,50,36,51,22,2,55,78,68,11,37,30,38,31,69,
79,52,56,23,12,3,80,57,13,53,4,39,32,24,70,76,49,28,66,20,
9,44,62,8,43,75,48,65,61,19,27,26,64,47,18,60,42,74,7,17,
25,63,6,41,46,59,73,5,16,34,35,58,71,14,72,15,40,45,33};
INT8U ChannelListB[79]={10,21,29,36,50,54,67,77,2,11,22,30,37,51,55,68,78,3,12,23,
31,38,52,56,69,79,4,13,24,32,39,53,57,70,80,9,20,28,44,49,
62,66,76,8,19,27,43,48,61,65,75,7,18,26,42,47,60,64,74,6,
17,25,41,46,59,63,73,5,16,34,35,58,71,14,15,33,40,45,72};
INT8U ChannelListC[78]={155,99,145,88,132,107,128,114,129,100,133,156,146,89,115,108,116,109,147,157,
130,134,101,90,81,158,135,91,131,82,117,110,102,148,154,127,106,144,98,87,
122,140,86,121,153,126,143,139,97,105,104,142,125,96,138,120,152,85,95,103,
141,84,119,124,137,151,83,94,112,113,136,149,92,150,93,118,123,111};
INT8U ChannelListD[78]={88,99,107,114,128,132,145,155,89,100,108,115,129,133,146,156,81,90,101,109,
116,130,134,147,157,82,91,102,110,117,131,135,148,158,87,98,106,122,127,140,
144,154,86,97,105,121,126,139,143,153,85,96,104,120,125,138,142,152,84,95,
103,119,124,137,141,151,83,94,112,113,136,149,92,93,111,118,123,150};
INT8U Talking3Minutes_sign = 0; //说话时间被限制为3分钟的标志为,1表示被限制,0表示不被限制
INT8U Timer_SecondValue(void) //读取RTC计时器的秒值,之后返回秒值
{
; // return ....
}
INT8U Check_ChanelIfIdle(INT8U Channel) //检测参数所指定的那个信道,是不是空闲的。返回1表示空闲,0表示忙
{
INT8U Idle = 0;
//调用检测Rssi的函数来检测,参数所对应的信道是否空闲,返回0,1
if (Idle == 1)
{
return 1 ;
}
else
return 0 ;
}
INT8U Idle_ChannelNum(void) //此函数用于返回空闲的信道号,以及设置了一个全局变量--3分钟限制
{
INT8U Random_Seed;
INT8U Channel_Num;
INT8U Channel_BlockNum;
INT8U i;
Talking3Minutes_sign = 0 ; //将3分钟限制清零
Random_Seed = Timer_SecondValue() ; //读取秒值
Channel_Num = (Random_Seed*997+971)%79; //计算开始检测的信道号
Channel_BlockNum = (Random_Seed*997+971)%2; //从对等的两个模块里面选择一个
if(Channel_BlockNum == 0)
{
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
goto channel1;
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
goto channel1;
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
channel1 : ;
Random_Seed = Timer_SecondValue() ;
Channel_Num = (Random_Seed*997+971)%78 ;
Channel_BlockNum = (Random_Seed*997+971)%2;
if(Channel_BlockNum == 0)
{
if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
goto channel2;
else
return(ChannelListC[Channel_Num-1]);
}
else
{
return(ChannelListC[Channel_Num-1]);
}
}
else
{
return(ChannelListC[Channel_Num-1]);
}
}
else
{
return(ChannelListC[Channel_Num-1]);
}
}
else
{
if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
{
Channel_Num %= 77;
if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
goto channel2;
else
return(ChannelListD[Channel_Num-1]);
}
else
{
return(ChannelListD[Channel_Num-1]);
}
}
else
{
return(ChannelListD[Channel_Num-1]);
}
}
else
{
return(ChannelListD[Channel_Num-1]);
}
}
channel2 : ;
Random_Seed = Timer_SecondValue() ;
Channel_Num = (Random_Seed*997+971)%79 ;
Channel_BlockNum = (Random_Seed*997+971)%2;
if(Channel_BlockNum == 0)
{
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
goto channel3 ;
else
return(ChannelListA[Channel_Num-1]);
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
return(ChannelListA[Channel_Num-1]);
}
}
else
{
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
{
Channel_Num %= 78;
if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
goto channel3;
else
return(ChannelListB[Channel_Num-1]);
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
else
{
return(ChannelListB[Channel_Num-1]);
}
}
channel3 : ;
Random_Seed = Timer_SecondValue() ;
Channel_Num = (Random_Seed*997+971)%78 ;
Channel_BlockNum = (Random_Seed*997+971)%2;
if(Channel_BlockNum == 0)
{
while(1)
{
if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
{
Channel_Num %= 77 ;
i++;
}
else
{
i++;
if(i>=5)
Talking3Minutes_sign = 1 ;
return(ChannelListC[Channel_Num-1]);
}
}
}
else
{
while(1)
{
if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
{
Channel_Num %= 77 ;
i++;
}
else
{
i++;
if(i>=5)
Talking3Minutes_sign = 1 ;
return(ChannelListD[Channel_Num-1]);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -