📄 menuprocess_dopt.c
字号:
#ifndef _MENU_PROCESS_DUBLE_OPTICAL_C_
#define _MENU_PROCESS_DUBLE_OPTICAL_C_
#include "menu.h"
#include "menuprocess.h"
#include "menudrive.h"
#if _LCD_MENU_
extern const MENU CODE_TYPE menu_head_dam[];
extern const MENU CODE_TYPE menu_head_dnm[];
extern const MENU CODE_TYPE menu_head_sam[];
extern const MENU CODE_TYPE menu_head_snm[];
#define GF34_08J 0
#define GF8_06J 1
KEY_STATUS_PROCESS xdata KeyPro;
/*空格打印初始化*/
BYTE CODE_TYPE rownull[LCD_MAX_CASE] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
BYTE CODE_TYPE *device_type[2] = {" GF34-08J+1 PDH "," GF8-06J+1 PDH "};
#if 0
BYTE MenuPopDisplay(BYTE FlashLcd)
{
BYTE nouse = FlashLcd;
return NOCHANGE_MENU;
}
#endif
BYTE key_do_nothing( void )
{
return NOCHANGE_MENU;
}
BYTE key_go_next( void )
{
return NEXT_MENU;
}
BYTE flash_time( void )
{
static BYTE xdata status = SHOW_SPACE_STATUS;
static BYTE xdata flash_time = 0;
flash_time = ( flash_time + 1 )%5;
if( flash_time )
return status;
if( status == SHOW_CHAR_STATUS )
status = SHOW_SPACE_STATUS;
else
status = SHOW_CHAR_STATUS;
return status;
}
BYTE menu_set_left( void )
{
if( gSystemInfo.set_value )
gSystemInfo.set_value = 0;
return NOCHANGE_MENU;
}
BYTE menu_set_rigth( void )
{
if( gSystemInfo.set_value == 0 )
gSystemInfo.set_value = 1;
return NOCHANGE_MENU;
}
void flash_char_status( BYTE* pbuffer, BYTE *source, BYTE flash_status, BYTE length)
{
if( flash_status == SHOW_CHAR_STATUS )
memcpy( pbuffer, source, length );
else
memcpy( pbuffer, rownull, length );
}
void get_main_menu_buffer( BYTE *pbuffer, BYTE flash_status )
{
SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;
IDBSTATUS xdata rc = OK;
BYTE *ppbuffer;
BYTE xdata flash[LCD_LAST_CASE];
memset( flash, SHOW_CHAR_STATUS, sizeof(flash) );
ppbuffer = pbuffer;
if( !(psdev->local.fiber_status[0]&FIBER_NOUSE) )
flash_char_status( ppbuffer, "M", SHOW_CHAR_STATUS, 1 );
else
flash_char_status( ppbuffer, "S", SHOW_CHAR_STATUS, 1 );
ppbuffer += 2;
switch( psdev->local.protect_mode )
{
case IDB_FIBER_MASTER:
case IDB_FIBER_SLAVE:
flash_char_status( ppbuffer, "F", SHOW_CHAR_STATUS, 1 );
break;
default:
flash_char_status( ppbuffer, "A", SHOW_CHAR_STATUS, 1 );
break;
}
ppbuffer += 2;
if( (light_fiber( psdev->local.fiber_status ) !=INVALID)
|| (light_fiber( psdev->remote.fiber_status ) !=INVALID) )
{
rc = ERROR;
flash_char_status( ppbuffer, "OPT", flash_status, 3 );
}
ppbuffer += 4;
if( (light_e1_alarm( psdev->local.e1_status ) !=INVALID)
|| (light_e1_alarm( psdev->remote.e1_status ) !=INVALID) )
{
rc = ERROR;
flash_char_status( ppbuffer, "E1", flash_status, 2 );
}
ppbuffer += 3;
if( (light_e1_loop( psdev->local.e1_status ) !=INVALID)
|| (light_e1_loop( psdev->remote.e1_status ) !=INVALID) )
{
rc = ERROR;
flash_char_status( ppbuffer, "LOOP", flash_status, 4 );
}
if( rc == OK )
{
ppbuffer = pbuffer + 7;
flash_char_status( ppbuffer, "OK!", SHOW_CHAR_STATUS, 3 );
}
LcdDisplay_length( ROW_2, CHAR_0, pbuffer, LCD_MAX_CASE );
}
BYTE MenuHeadDisplay( BYTE FlashLcd )
{
BYTE xdata buffer[LCD_MAX_CASE];
BYTE *pbuffer;
BYTE xdata flash_status= FlashLcd;
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
flash_status = flash_time( );
KeyPro.keyEnter = key_go_next;
KeyPro.keyLeft = key_go_next;
KeyPro.keyRight = key_go_next;
KeyPro.keyCanncel = key_do_nothing;
LcdDisplay_length( ROW_1, CHAR_0, psys->pdevice, LCD_MAX_CASE );
memset( buffer, 0x20, LCD_MAX_CASE );
pbuffer = buffer;
get_main_menu_buffer( pbuffer, flash_status );
return key_process_status( &KeyPro );
}
BYTE menu_1_left( void )
{
return LEFT_MENU;
}
BYTE menu_1_right( void )
{
return RIGHT_MENU;
}
BYTE menu_1_preview( void )
{
return PREVIEW_MENU;
}
BYTE menu_main_show( BYTE *pbuffer , BYTE FlashLcd )
{
KeyPro.keyEnter = key_go_next;
KeyPro.keyLeft = menu_1_left;
KeyPro.keyRight = menu_1_right;
KeyPro.keyCanncel = menu_1_preview;
if( FlashLcd == FLASH_SCREEN )
{
LcdDisplay_length( ROW_1, CHAR_0, " Main menu ", LCD_LAST_CASE );
LcdDisplay_length( ROW_2, CHAR_0, rownull, LCD_LAST_CASE );
}
else
{
LcdDisplay_length( ROW_2, CHAR_0, pbuffer, LCD_LAST_CASE );
}
return key_process_status( &KeyPro );
}
BYTE menu_1_alarm_status( BYTE FlashLcd )
{
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
if( FlashLcd == FLASH_SCREEN )
psys->set_value = 0;
return menu_main_show( " Alarm status ", FlashLcd );
}
void fiber_alarm_display( BYTE *pbuffer, BYTE alarm, BYTE flash_status )
{
BYTE length = 3;
memcpy( pbuffer, rownull, length );
switch( alarm )
{
case FIBER_LOS:
flash_char_status( pbuffer, "LOS", flash_status, length );
break;
case FIBER_LFA:
flash_char_status( pbuffer, "LFA", flash_status, length );
break;
case FIBER_E_3:
flash_char_status( pbuffer, "E-3", flash_status, length );
break;
case FIBER_E_6:
flash_char_status( pbuffer, "E-6", flash_status, length );
break;
default:
flash_char_status( pbuffer, "OK ", SHOW_CHAR_STATUS, length );
break;
}
}
BYTE menu_4_e1_alarm_show( BYTE FlashLcd )
{
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
switch( psys->e1_number )
{
case 0:
return local_e1_alarm( FlashLcd );
case 1:
return remote_e1_alarm( FlashLcd );
}
}
BYTE menu_3_alarm_show( BYTE FlashLcd )
{
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
switch( psys->set_value )
{
case 0:
return fiber_alarm_show( FlashLcd );
case 1:
return e1_alarm_show( FlashLcd );
}
}
void get_show_status( BYTE *buffer, BYTE *status, BYTE flash_status )
{
if( light_e1_alarm( buffer ) == INVALID )
*status = SHOW_CHAR_STATUS;
else
*status = flash_status;
}
BYTE menu_end_left( void )
{
if( gSystemInfo.e1_number == 1 )
gSystemInfo.e1_number = 0;
return NOCHANGE_MENU;
}
BYTE menu_end_rigth( void )
{
if( gSystemInfo.e1_number == 0 )
gSystemInfo.e1_number = 1;
return NOCHANGE_MENU;
}
BYTE e1_alarm_show( BYTE FlashLcd )
{
SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
BYTE xdata flash_status, last_status;
BYTE xdata list_char = 6;
BYTE xdata pbuffer[LCD_MAX_CASE];
flash_status = flash_time( );
KeyPro.keyEnter = key_go_next;
KeyPro.keyLeft = menu_end_left;
KeyPro.keyRight = menu_end_rigth;
KeyPro.keyCanncel = menu_1_preview;
memcpy( pbuffer, rownull, LCD_MAX_CASE );
if( FlashLcd == FLASH_SCREEN )
{
LcdDisplay_length( ROW_1, CHAR_0, rownull , LCD_MAX_CASE);
LcdDisplay_length( ROW_2, CHAR_0, rownull, LCD_MAX_CASE );
}
else
{
LcdDisplay_length( ROW_1, CHAR_0, " E1 alarm-LOS ", LCD_MAX_CASE );
get_show_status( psdev->local.e1_status, &last_status, flash_status );
flash_char_status( &pbuffer[1], "Local", last_status, 5 );
LcdDisplay_length( ROW_2, CHAR_0, pbuffer, 6 );
get_show_status( psdev->remote.e1_status, &last_status, flash_status );
flash_char_status( &pbuffer[8], "Remote", last_status, 6 );
LcdDisplay_length( ROW_2, CHAR_8, &pbuffer[8], 6 );
if( psys->e1_number == 1 )
list_char = 14;
diaplay_char( ROW_2, list_char, LCD_PRINT_TRIANGLE );
if( list_char == 6 )
LcdDisplay_length( ROW_2, CHAR_14, rownull, 1 );
else
LcdDisplay_length( ROW_2, CHAR_6, rownull, 1 );
}
return key_process_status( &KeyPro );
}
BYTE menu_2_alarm_show( BYTE FlashLcd )
{
SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
BYTE xdata buffer[2][LCD_MAX_CASE];
BYTE xdata flash_status;
BYTE xdata list_char = 8;
BYTE xdata last_status;
flash_status = flash_time( );
memcpy( &buffer[0][0], rownull, 1 );
memcpy( &buffer[1][0], rownull, 1 );
KeyPro.keyEnter = key_go_next;
KeyPro.keyLeft = menu_set_left;
KeyPro.keyRight = menu_set_rigth;
KeyPro.keyCanncel = menu_1_preview;
psys->e1_number = 0;
if( FlashLcd == FLASH_SCREEN )
{
LcdDisplay_length( ROW_1, CHAR_0, rownull , LCD_LAST_CASE);
LcdDisplay_length( ROW_2, CHAR_0, rownull, LCD_LAST_CASE );
}
else
{
memcpy( &buffer[0], " Alarm status ", LCD_LAST_CASE );
LcdDisplay_length( ROW_1, CHAR_0, &buffer[0][0], LCD_LAST_CASE );
if( (light_fiber( psdev->local.fiber_status ) == INVALID)
&& (light_fiber( psdev->remote.fiber_status ) == INVALID) )
last_status = SHOW_CHAR_STATUS;
else
last_status = flash_status;
flash_char_status( &buffer[1][0], " Optical", last_status, 8 );
LcdDisplay_length( ROW_2, CHAR_0, &buffer[1], 8 );
if( (light_e1_alarm( psdev->local.e1_status ) == INVALID)
&& (light_e1_alarm( psdev->remote.e1_status ) == INVALID) )
last_status = SHOW_CHAR_STATUS;
else
last_status = flash_status;
flash_char_status( &buffer[1][9], " E1", last_status, 3 );
LcdDisplay_length( ROW_2, CHAR_9, &buffer[1][9], 3 );
LcdDisplay_length( ROW_2, CHAR_13, rownull, 3 );
if( psys->set_value == 1 )
list_char = 12;
diaplay_char( ROW_2, list_char, LCD_PRINT_TRIANGLE );
if( list_char == 8 )
LcdDisplay_length( ROW_2, CHAR_12, rownull, 1 );
else
LcdDisplay_length( ROW_2, CHAR_8, rownull, 1 );
}
return key_process_status( &KeyPro );
}
BYTE fiber_alarm_show( BYTE FlashLcd )
{
SYSTEM_DEVICE_STATUS xdata *psdev = &gsystemStauts;
BYTE xdata buffer[2][LCD_MAX_CASE];
BYTE xdata alarm, counter;
BYTE xdata flash_status;
flash_status = flash_time( );
KeyPro.keyEnter = key_do_nothing;
KeyPro.keyLeft = key_do_nothing;
KeyPro.keyRight = key_do_nothing;
KeyPro.keyCanncel = menu_1_preview;
if( FlashLcd == FLASH_SCREEN )
{
LcdDisplay_length( ROW_1, CHAR_0, rownull , LCD_LAST_CASE);
LcdDisplay_length( ROW_2, CHAR_0, rownull, LCD_LAST_CASE );
}
else
{
memcpy( &buffer[0], "L O:M- S- ", LCD_LAST_CASE );
for( counter=0; counter<2; counter++ )
{
alarm = get_local_fiber_alarm( counter );
fiber_alarm_display( &buffer[0][6+6*counter], alarm, flash_status );
}
if( check_remote_status() == ALARM )
{
memcpy( &buffer[1], "R O: ", LCD_LAST_CASE );
flash_char_status( &buffer[1][6], "unknown", flash_status, 7 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -