📄 path_switch.c
字号:
// value = 2;
// }
// break;
case 2: value = f2rc7860_rd(quotient + 0x00A6);
value = (value >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 1;
value = 0;
}
else{
value = 2;
}
break;
case 3: value = f2rc7860_rd(quotient + 0x02A6);
value = (value >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 1;
value = 0;
}
else{
value = 2;
}
break;
default: value = 2;
break;
}
if ((value == 0) & (outport < 4)){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
// case 0: value = path_switch_function(1,temp,1);
// break;
case 1: value = PTUN(0,temp) = 1;
// path_switch_function(1,temp,0);
break;
case 2: value = PTUN(3,temp) = 1;
// path_switch_function(1,temp,3);
break;
case 3: value = PTUN(2,temp) = 1;
// path_switch_function(1,temp,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[tport][temp][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[1][temp][3] = 1;
}
}
}
}
}
}
init_recover[1] = 0;
}
// if (init_recover[1] == 2){
// init_recover[1] = 1;
// }
// SetExtRdyTbl(15); //改写2M盘的AIS速率
}
if(start_flg[0] == 0){
if ((f2rc7860_rd(F2Ia0_a) & 0xD0 | f2rc7860_rd(F2Ia2_a) & 0xE0 | f2rc7860_rd(F2Ia3_a) & 0x80) == 0){ //OTB A口全0
if (init_recover[2] == 1){
for (temp = 0; temp <= 62; temp++){
if (path_switch_state[temp] == 2){ //如果处于自动倒换状态
for (tport = 0; tport <= 3; tport++){ //轮循查找哪个光口的备用光口是OTB光口1
if (tport != 2){
if (path_switch_array[tport][temp][0] == 2){
quotient = temp >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = temp & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
outport = path_switch_array[tport][temp][1];
// value = path_switch_function(2,temp,outport); //进行该时隙的通道倒换
switch(tport){
case 0: valueid = (quotient + 0x88A6);
value = ((*valueid) >> residue) & 0x01; //如果该时隙出现AIS
if (value != 0){ //该时隙不能倒换
PTUN(outport,temp) = 2;
value = 0;
}
else{
value = 2;
}
break;
case 1: valueid = (quotient + 0x8AA6);
value = ((*valueid) >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 2;
value = 0;
}
else{
value = 2;
}
break;
// case 2: value = f2rc7860_rd(quotient + 0x00A6);
// value = (value >> residue) & 0x01;
// if (value != 0){
// PTUN(outport,temp) = 2;
// value = 0;
// }
// else{
// value = 2;
// }
// break;
case 3: value = f2rc7860_rd(quotient + 0x02A6);
value = (value >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 2;
value = 0;
}
else{
value = 2;
}
break;
default: value = 2;
break;
}
if ((value == 0) & (outport < 4)){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = PTUN(1,temp) = 2;
// path_switch_function(2,temp,1);
break;
case 1: value = PTUN(0,temp) = 2;
// path_switch_function(2,temp,0);
break;
case 2: value = PTUN(3,temp) = 2;
// 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;
}
// if (init_recover[2] == 2){
// init_recover[2] = 1;
// }
// SetExtRdyTbl(15); //改写2M盘的AIS速率
}
if ((f2rc7860_rd(F2Ia0_b) & 0xD0 | f2rc7860_rd(F2Ia2_b) & 0xE0 | f2rc7860_rd(F2Ia3_b) & 0x80) == 0){ //MCB B口全0
if (init_recover[3] == 1){
for (temp = 0; temp <= 62; temp++){
if (path_switch_state[temp] == 2){ //如果处于自动倒换状态
for (tport = 0; tport <= 2; tport++){ //轮循查找哪个光口的备用光口是OTB光口2
if (path_switch_array[tport][temp][0] == 3){
quotient = temp >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = temp & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
outport = path_switch_array[tport][temp][1];
// value = path_switch_function(3,temp,outport); //进行该时隙的通道倒换
switch(tport){
case 0: valueid = (quotient + 0x88A6);
value = ((*valueid) >> residue) & 0x01; //如果该时隙出现AIS
if (value != 0){ //该时隙不能倒换
PTUN(outport,temp) = 3;
value = 0;
}
else{
value = 2;
}
break;
case 1: valueid = (quotient + 0x8AA6);
value = ((*valueid) >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 3;
value = 0;
}
else{
value = 2;
}
break;
case 2: value = f2rc7860_rd(quotient + 0x00A6);
value = (value >> residue) & 0x01;
if (value != 0){
PTUN(outport,temp) = 3;
value = 0;
}
else{
value = 2;
}
break;
// case 3: value = f2rc7860_rd(quotient + 0x02A6);
// value = (value >> residue) & 0x01;
// if (value != 0){
// PTUN(outport,temp) = 3;
// value = 0;
// }
// else{
// value = 2;
// }
// break;
default: value = 2;
break;
}
if ((value == 0) & (outport < 4)){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = PTUN(1,temp) = 3;
// path_switch_function(3,temp,1);
break;
case 1: value = PTUN(0,temp) = 3;
// path_switch_function(3,temp,0);
break;
// case 2: value = path_switch_function(3,temp,3);
// break;
case 3: value = PTUN(2,temp) = 3;
// 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;
}
// if (init_recover[3] == 2){
// init_recover[3] = 1;
// }
// SetExtRdyTbl(15); //改写2M盘的AIS速率
}
}
}
/***************************************************************************************************
void path_switch_recover(void){
//每秒查询是否信号恢复,进行通道倒换函数
unsigned char xdata temp;
unsigned char xdata tport;
unsigned char xdata outport;
unsigned char xdata value;
if (((Ia0_a & 0xD0) | (Ia2_a & 0xE0) | (Ia3_a & 0x80)) == 0){ //MCB A口全0
Intmask_ts0to7_a = Tu12ais_0to7_a;
Intmask_ts8to15_a = Tu12ais_8to15_a;
Intmask_ts16to23_a = Tu12ais_16to23_a;
Intmask_ts24to31_a = Tu12ais_24to31_a;
Intmask_ts32to39_a = Tu12ais_32to39_a;
Intmask_ts40to47_a = Tu12ais_40to47_a;
Intmask_ts48to55_a = Tu12ais_48to55_a;
Intmask_ts56to62_a = Tu12ais_56to62_a;
if (init_recover[0] & init_recover[1]){
for (temp = 0; temp <= 62; temp++){
if (path_switch_state[temp] == 2){ //如果处于自动倒换状态
for (tport = 0; tport <= 3; tport++){ //轮循查找哪个光口的备用光口是MCB光口1
if (path_switch_array[tport][temp][0] == 0){
outport = path_switch_array[tport][temp][1];
value = path_switch_function(0,temp,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(0,temp,1);
break;
case 1: value = path_switch_function(0,temp,0);
break;
case 2: value = path_switch_function(0,temp,3);
break;
case 3: value = path_switch_function(0,temp,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[tport][temp][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[0][temp][3] = 1;
}
}
}
}
}
init_recover[0] = 0;
}
SetExtRdyTbl(15); //改写2M盘的AIS速率
}
if ((Ia0_b & 0xD0 | Ia2_b & 0xE0 | Ia3_b & 0x80) == 0){ //MCB B口全0
Intmask_ts0to7_b = Tu12lop_0to7_b;
Intmask_ts8to15_b = Tu12lop_8to15_b;
Intmask_ts16to23_b = Tu12lop_16to23_b;
Intmask_ts24to31_b = Tu12lop_24to31_b;
Intmask_ts32to39_b = Tu12lop_32to39_b;
Intmask_ts40to47_b = Tu12lop_40to47_b;
Intmask_ts48to55_b = Tu12lop_48to55_b;
Intmask_ts56to62_b = Tu12lop_56to62_b;
if (init_recover[0] & init_recover[1]){
for (temp = 0; temp <= 62; temp++){
if (path_switch_state[temp] == 2){ //如果处于自动倒换状态
for (tport = 0; tport <= 3; tport++){ //轮循查找哪个光口的备用光口是MCB光口2
if (path_switch_array[tport][temp][0] == 1){
outport = path_switch_array[tport][temp][1];
value = path_switch_function(1,temp,outport); //进行该时隙的通道倒换
if (outport < 4){ //光口处于时隙的保换倒换状态
switch (outport){ //对光口进行并发配置
case 0: value = path_switch_function(1,temp,1);
break;
case 1: value = path_switch_function(1,temp,0);
break;
case 2: value = path_switch_function(1,temp,3);
break;
case 3: value = path_switch_function(1,temp,2);
break;
default:break;
}
}
if (value == 0){ //如果倒换成功
path_switch_array[tport][temp][3] = 0; //倒换成功改写当前时隙所用端口
path_switch_array[1][temp][3] = 1;
}
}
}
}
}
init_recover[1] = 0;
}
SetExtRdyTbl(15); //改写2M盘的AIS速率
}
if(start_flg[0] == 0){
if ((f2rc7860_rd(F2Ia0_a) & 0xD0 | f2rc7860_rd(F2Ia2_a) & 0xE0 | f2rc7860_rd(F2Ia3_a) & 0x80) == 0){ //OTB A口全0
f2rc7860_wr(F2Intmask_ts0to7_a,0x00);
f2rc7860_wr(F2Intmask_ts8to15_a,0x00);
f2rc7860_wr(F2Intmask_ts16to23_a,0x00);
f2rc7860_wr(F2Intmask_ts24to31_a,0x00);
f2rc7860_wr(F2Intmask_ts32to39_a,0x00);
f2rc7860_wr(F2Intmask_ts40to47_a,0x00);
f2rc7860_wr(F2Intmask_ts48to55_a,0x00);
f2rc7860_wr(F2Intmask_ts56to62_a,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光口1
if (path_switch_array[tport][temp][0] == 2){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -