📄 path_switch.c
字号:
outport = path_switch_array[tport][temp][1];
value = path_switch_function(2,temp,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(2,temp,1);
break;
case 1: value = path_switch_function(2,temp,0);
break;
case 2: value = path_switch_function(2,temp,3);
break;
case 3: value = path_switch_function(2,temp,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[tport][temp][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[2][temp][3] = 1;
}
}
}
}
}
init_recover[2] = 0;
}
SetExtRdyTbl(15); //改写2M盘的AIS速率
}
if ((f2rc7860_rd(F2Ia0_b) & 0xD0 | f2rc7860_rd(F2Ia2_b) & 0xE0 | f2rc7860_rd(F2Ia3_b) & 0x80) == 0){ //MCB B口全0
f2rc7860_wr(F2Intmask_ts0to7_b,0x00);
f2rc7860_wr(F2Intmask_ts8to15_b,0x00);
f2rc7860_wr(F2Intmask_ts16to23_b,0x00);
f2rc7860_wr(F2Intmask_ts24to31_b,0x00);
f2rc7860_wr(F2Intmask_ts32to39_b,0x00);
f2rc7860_wr(F2Intmask_ts40to47_b,0x00);
f2rc7860_wr(F2Intmask_ts48to55_b,0x00);
f2rc7860_wr(F2Intmask_ts56to62_b,0x00);
if (init_recover[2] & init_recover[3]){
for (temp = 0; temp <= 62; temp++){
if (path_switch_state[temp] == 2){ //如果处于自动倒换状态
for (tport = 0; tport <= 3; tport++){ //轮循查找哪个光口的备用光口是OTB光口2
if (path_switch_array[tport][temp][0] == 3){
outport = path_switch_array[tport][temp][1];
value = path_switch_function(3,temp,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(3,temp,1);
break;
case 1: value = path_switch_function(3,temp,0);
break;
case 2: value = path_switch_function(3,temp,3);
break;
case 3: value = path_switch_function(3,temp,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[tport][temp][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[3][temp][3] = 1;
}
}
}
}
}
init_recover[3] = 0;
}
SetExtRdyTbl(15); //改写2M盘的AIS速率
}
}
}
/*****************************************************************************************************/
void path_switch_mcba(void) large reentrant {
//MCB的A口自动倒换函数
volatile unsigned char timeid;
volatile unsigned char inport;
volatile unsigned char outport;
volatile unsigned char value;
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[0][timeid][3] == 1){ //如果该光口处于连接状态
inport = path_switch_array[0][timeid][0]; //得到保护的备用光口
outport = path_switch_array[0][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[0][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 0;
}
void path_switch_mcbb(void) large reentrant {
//MCB的B口自动倒换函数
volatile unsigned char timeid;
volatile unsigned char inport;
volatile unsigned char outport;
volatile unsigned char value;
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[1][timeid][3] == 1){ //如果该光口处于连接状态
inport = path_switch_array[1][timeid][0]; //得到保护的备用光口
outport = path_switch_array[1][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[1][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 1;
}
void path_switch_otba(void) large reentrant {
//OTB的A口自动倒换函数
volatile unsigned char timeid;
volatile unsigned char inport;
volatile unsigned char outport;
volatile unsigned char value;
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[2][timeid][3] == 1){ //如果该光口处于连接状态
inport = path_switch_array[2][timeid][0]; //得到保护的备用光口
outport = path_switch_array[2][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[2][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 2;
}
void path_switch_otbb(void) large reentrant {
//OTB的B口自动倒换函数
volatile unsigned char timeid; //时隙号
volatile unsigned char inport;
volatile unsigned char outport;
volatile unsigned char value;
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[3][timeid][3] == 1){ //如果该光口处于连接状态
inport = path_switch_array[3][timeid][0]; //得到保护的备用光口
outport = path_switch_array[3][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[3][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 3;
}
void path_switch_mcba_tu(void) large reentrant {
//MCB的A口TU自动倒换函数
//volatile unsigned char xdata value1; //记录TU-LOP值
//volatile unsigned char xdata value2; //记录TU-AIS值
volatile unsigned char xdata value;
volatile unsigned char xdata timeid; //时隙号
volatile unsigned char xdata inport;
volatile unsigned char xdata outport;
volatile unsigned char xdata quotient; //除8的商值
volatile unsigned char xdata residue; //除8的余数值
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[0][timeid][3] == 1){ //当前时隙工作在A口上
quotient = timeid >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = timeid & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
value = ais_reg[0][quotient] | XBYTE[quotient + 0x88A6];
value = (value >> residue) & 0x01;
if (value){
inport = path_switch_array[0][timeid][0]; //得到保护的备用光口
outport = path_switch_array[0][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
// test_reg[4] += 1;
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[0][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 0;
// for (timeid = 0; timeid <= 7; timeid++){
// test_reg[8 + timeid] = XBYTE[timeid + 0x88A6];
// test_reg[16 + timeid] = XBYTE[timeid + 0x8AA6];
// }
}
void path_switch_mcbb_tu(void) large reentrant {
//MCB的B口TU自动倒换函数
//unsigned char xdata value1; //记录TU-LOP值
//unsigned char xdata value2; //记录TU-AIS值
unsigned char xdata value;
unsigned char xdata timeid; //时隙号
unsigned char xdata inport;
unsigned char xdata outport;
unsigned char xdata quotient; //除8的商值
unsigned char xdata residue; //除8的余数值
for (timeid = 0; timeid <= 62; timeid++){
if (path_switch_state[timeid] == 2){ //如果处于自动倒换状态
if (path_switch_array[1][timeid][3] == 1){ //当前时隙工作在B口上
quotient = timeid >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = timeid & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
value = ais_reg[1][quotient] | XBYTE[quotient + 0x8AA6];
value = (value >> residue) & 0x01;
if (value){
inport = path_switch_array[1][timeid][0]; //得到保护的备用光口
outport = path_switch_array[1][timeid][1]; //得到被保护的光口
value = path_switch_function(inport,timeid,outport); //进行该时隙的通道倒换
// test_reg[7] += 1;
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(inport,timeid,1);
break;
case 1: value = path_switch_function(inport,timeid,0);
break;
case 2: value = path_switch_function(inport,timeid,3);
break;
case 3: value = path_switch_function(inport,timeid,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[1][timeid][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[inport][timeid][3] = 1;
SetResRdyTbl(28);
}
}
}
}
}
// SetResRdyTbl(28);
auto_path_port = 1;
// for (timeid = 0; timeid <= 7; timeid++){
// test_reg[8 + timeid] = XBYTE[timeid + 0x88A6];
// test_reg[16 + timeid] = XBYTE[timeid + 0x8AA6];
// }
}
void path_switch_otba_tu(void) large reentrant {
//OTB的A口TU自动倒换函数
//unsigned char xdata value1; //记录TU-LOP值
//unsigned char xdata value2; //记录TU-AIS值
unsigned char xdata value;
unsigned char xdata timeid; //时隙号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -