⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menuprocess_dopt.c

📁 pdh控制程序
💻 C
📖 第 1 页 / 共 4 页
字号:
#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 + -