📄 path_switch.c
字号:
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[2][timeid][3] == 1){ //当前时隙工作在OTB盘A口上
quotient = timeid >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = timeid & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
value = ais_reg[2][quotient] | f2rc7860_rd(quotient + 0x00A6);
value = (value >> residue) & 0x01;
if (value){
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_tu(void) large reentrant {
//OTB的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[3][timeid][3] == 1){ //当前时隙工作在OTB盘B口上
quotient = timeid >> 3; //得到该时隙所在的字节值(同timeid / 8运算)
residue = timeid & 0x07; //同timeid % 8运算
residue = 7 - residue; //得到该时隙所在的bit位
value = ais_reg[3][quotient] | f2rc7860_rd(quotient + 0x02A6);
value = (value >> residue) & 0x01;
if (value){
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 report_auto_path_switch(unsigned char path_port){
//F01上报发生自动倒换告警
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x46;
tx_buf[4] = 0x30;
tx_buf[5] = 0x31;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '0';
tx_buf[9] = '4';
switch (path_port){
case 0: tx_buf[10] = '5';
tx_buf[11] = '1';
tx_buf[12] = '0';
tx_buf[13] = '1';
break;
case 1: tx_buf[10] = '5';
tx_buf[11] = '1';
tx_buf[12] = '0';
tx_buf[13] = '2';
break;
case 3: tx_buf[10] = '4';
tx_buf[11] = '4';
tx_buf[12] = '0';
tx_buf[13] = '1';
break;
case 4: tx_buf[10] = '4';
tx_buf[11] = '4';
tx_buf[12] = '0';
tx_buf[13] = '2';
break;
default:tx_buf[10] = 'F';
tx_buf[11] = 'F';
tx_buf[12] = 'F';
tx_buf[13] = 'F';
break;
}
tx_buf[14] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
unsigned char down_file_over(void){
//C82 MCP通知MCU文件配置下载完成,MCU打开外中断
commandid = 0x00433832;
init_temp = 1;
EX0 = 1; //open INT0 interrupt
if (!GetResRdyTbl(1))
SetResRdyTbl(1);
return (0);
}
unsigned char close_int0(void){
//C83 MCP通知MCU文件配置下载开始,MCU关闭外中断
commandid = 0x00433833;
init_temp = 0;
EX0 = 0; //close INT0 interrupt
if (!GetResRdyTbl(1))
SetResRdyTbl(1);
return (0);
}
/*
unsigned char read_variable(struct cmd_para_save *read_va){
//T02读变量的值
unsigned char xdata sum;
unsigned char xdata return_value;
sum = read_va -> test_read_name;
return_value = int_sum[sum];
if (!GetResRdyTbl(41))
SetResRdyTbl(41);
return (return_value);
}
void report_variable_value(unsigned char value){
unsigned char xdata temp;
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x54;
tx_buf[4] = 0x30;
tx_buf[5] = 0x32;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '0';
tx_buf[9] = '2';
temp = value >> 4;
if (temp > 9)
tx_buf[10] = temp + 0x37;
else tx_buf[10] = temp + 0x30;
temp = value & 0x0F;
if (temp > 9)
tx_buf[11] = temp + 0x37;
else tx_buf[11] = temp + 0x30;
tx_buf[12] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
unsigned char write_variable(struct cmd_para_save *write_va){
//T03写变量值
unsigned char xdata sum;
unsigned char xdata write_value;
unsigned char xdata return_value;
commandid = 0x00543033;
sum = write_va -> test_write_name;
write_value = write_va -> test_value;
int_sum[sum] = write_value;
if (!GetResRdyTbl(1))
SetResRdyTbl(1);
return (return_value);
}
*/
void report_variable_value(){ //测试中断次数的打印程序
unsigned char xdata temp;
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x54;
tx_buf[4] = 0x30;
tx_buf[5] = 0x32;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '0';
tx_buf[9] = '4';
temp = test_reg[0] >> 4;
if (temp > 9)
tx_buf[10] = temp + 0x37;
else tx_buf[10] = temp + 0x30;
temp = test_reg[0] & 0x0F;
if (temp > 9)
tx_buf[11] = temp + 0x37;
else tx_buf[11] = temp + 0x30;
temp = test_reg[1] >> 4;
if (temp > 9)
tx_buf[12] = temp + 0x37;
else tx_buf[12] = temp + 0x30;
temp = test_reg[1] & 0x0F;
if (temp > 9)
tx_buf[13] = temp + 0x37;
else tx_buf[13] = temp + 0x30;
tx_buf[14] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
void read_port_reg(unsigned char read_port){
//T04读取1K50的寄存器值
unsigned char xdata temp;
for (temp = 0; temp <= 62; temp++){
port_reg[temp] = XBYTE[0x8C00 + temp + read_port * 0x40];
}
if (!GetResRdyTbl(42))
SetResRdyTbl(42);
}
void report_read_port(void){
//T04回复命令
unsigned char xdata temp;
unsigned char xdata reg_value;
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x54;
tx_buf[4] = 0x30;
tx_buf[5] = 0x34;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '7';
tx_buf[9] = 'E';
for (temp = 0; temp <= 62; temp++){
reg_value = port_reg[temp] >> 4;
if (reg_value > 9)
tx_buf[10 + 2 * temp] = reg_value + 0x37;
else tx_buf[10+ 2 * temp] = reg_value + 0x30;
reg_value = port_reg[temp] & 0x0F;
if (reg_value > 9)
tx_buf[11 + 2 * temp] = reg_value + 0x37;
else tx_buf[11 + 2 * temp] = reg_value + 0x30;
}
tx_buf[136] = '*';
tx_buf_pointer = 0;
while(tx_buf[tx_buf_pointer] != '*'){
SBUF = tx_buf[tx_buf_pointer];
while(tx_done == 0);
tx_done = 0;
tx_buf_pointer++;
}
SBUF = tx_buf[tx_buf_pointer]; //发送最后一个字符'*'
while(tx_done == 0);
tx_done = 0;
}
void read_ais_reg(void){
//T05读取ais寄存器的值
if (!GetResRdyTbl(43))
SetResRdyTbl(43);
}
void report_ais_reg(unsigned char read_port){
//T05回复命令
unsigned char xdata temp;
unsigned char xdata reg_value;
tx_buf[0] = '$';
tx_buf[1] = '2';
tx_buf[2] = '1';
tx_buf[3] = 0x54;
tx_buf[4] = 0x30;
tx_buf[5] = 0x35;
tx_buf[6] = '0';
tx_buf[7] = '0';
tx_buf[8] = '
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -