📄 pggmrp.c
字号:
/*
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
* All rights reserved.
*
* This software is copyrighted by and is the sole property of
* VIA Networking Technologies, Inc. This software may only be used
* in accordance with the corresponding license agreement. Any unauthorized
* use, duplication, transmission, distribution, or disclosure of this
* software is expressly forbidden.
*
* This software is provided by VIA Networking Technologies, Inc. "as is"
* and any express or implied warranties, including, but not limited to, the
* implied warranties of merchantability and fitness for a particular purpose
* are disclaimed. In no event shall VIA Networking Technologies, Inc.
* be liable for any direct, indirect, incidental, special, exemplary, or
* consequential damages.
*
*
* File: pggmrp.c
*
* Purpose: GMRP module UI definitions
*
* Author: Freeya Lin
*
* Date: Feb 24, 2004
*
* Functions:
*
* Revision History:
*
*/
#include "eng_act.h"
#include "allpages.h"
#include "pigencfg.h"
#include "cfgstr.h"
#include "gen_act.h"
#include "pimsg.h"
#include "key.h"
#include "str.h"
#include "tty.h"
#include "eng_io.h"
#include "piportmp.h"
#include "pggmrp.h"
#include "pigmrpmd.h"
#include "pigmrpgp.h"
#define GMRP_DUMMY_STR_NUM 10
#define GMRP_POS_COL_OFFSET 27
UINT8 g_byGMRPTotalPageNum;
UINT8 g_byGMRPLineNumPerPage;
static UINT16 s_u16Fid;
static void s_vUpdateGrpNumPerPage(void);
// assign fix label
SFixLabel aSFixLabelGMRPCfg[] = {
{{2,31}, g_strProvGMRP, 0},
{{3,31}, "=", 26},
{{4,2}, "GMRP Mode :", 0},
{{24,2}, g_strHelpMsg, 0},
{{6,2}, "GMRP Entry List :", 0},
{{7,2}, "MAC ----- Fid MAC ----- Fid MAC ----- Fid", 0},
{{8,2}, "-", 76},
};
// assign var item
SItemListbox SIListboxGMRPMode = {
&g_UCfgBuf.SPageCfg_GMRP.byMode,
0, 7, 0,
g_aszEnDisCfg, 2
};
SItemString SIStrGrpGMRPMacAddr = {
(char*)g_UCfgBuf.SPageCfg_GMRP.astrGrpMacList,
MAC_STRING_LEN
};
SItemNum SIDecGrpGMRPFid = {
(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.awValidGrpFidList[0],
2, 5, 2
};
// all items
SVarLabel aSVarLabelGMRPGrpFidList[] = {
{{9,21}, &SIDecGrpGMRPFid, "", ITEM_DECNUM, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, GMRP_POS_COL_OFFSET}
};
SItem aSItemGMRPGrpList[] = {
{{4,14}, &SIListboxGMRPMode, g_strChgModeMsg, ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
{{9,2}, &SIStrGrpGMRPMacAddr, g_strEditGrpMsg, ITEM_STRING, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_EDITPAGE, ROW_NUM_IN_3_FIELD, GMRP_POS_COL_OFFSET}
};
// action
SActItem aSActionGMRPMode[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAGMRP_bEditGMRPMode},
};
SActItem aSActionGMRPGrpList[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAGMRP_bEditGMRPMode},
{{22, 32}, g_strActionAdd, PAGMRP_bAddGMRPMode},
{{22, 42}, g_strActionDel, PAGMRP_bDelGMRPMode},
{{22, 55}, "<NextPage>", PAGMRP_bNextPage}
};
// assign page
SPage g_SPageGMRPMode = {
aSFixLabelGMRPCfg, 4,
NULL, 0,
aSItemGMRPGrpList, 1,
aSActionGMRPMode, 2,
PAGMRP_bLoadGMRPMode
};
SPage g_SPageGMRPGrpList = {
aSFixLabelGMRPCfg, 7,
aSVarLabelGMRPGrpFidList, 1,
aSItemGMRPGrpList, 2,
aSActionGMRPGrpList, 5,
PAGMRP_bLoadGMRPMode
};
// assign fix label
char strTitleGMRPAdd[] = "Add ";
char strTitleGMRPEdit[] = "Edit";
char strTitleGMRP[] = "a Multicast Entry";
SFixLabel aSFixLabelGMRPGrpAdd[] = {
{{2,27}, strTitleGMRPAdd, 0},
{{2,31}, strTitleGMRP, 0},
{{3,27}, "=", 21},
{{4,13}, "FID :", 0},
{{5,13}, "MAC Address :", 0},
{{6,13}, "HiPriDmac :", 0},
{{7,13}, "HiPriSmac :", 0},
{{9,13}, "Entry Member :", 0},
{{10,13}, "-", 53},
{{24,2}, g_strHelpMsg, 0}
};
SFixLabel aSFixLabelGMRPGrpEdit[] = {
{{2,27}, strTitleGMRPEdit, 0},
{{2,32}, strTitleGMRP, 0},
{{3,27}, "=", 22},
{{4,13}, "FID :", 0},
{{5,13}, "MAC Address :", 0},
{{6,13}, "HiPriDmac :", 0},
{{7,13}, "HiPriSmac :", 0},
{{9,13}, "Entry Member :", 0},
{{10,13}, "-", 53},
{{24,2}, g_strHelpMsg, 0}
};
char astrInputMacStrBuff[GMRP_DUMMY_STR_NUM*(MAC_STRING_LEN+1)];
// assign var label
SItemString SIStrGMRPMacConf = {
(char*)astrInputMacStrBuff,
MAC_STRING_LEN
};
SItemNum SIDecNumGMRPFid = {
(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.u16Fid,
2, 4, 0
};
SItemListbox aSIListboxGMRPGrp[] = {
{(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.bHiPriDmac, 0, 0, 0, g_aszEnDisCfg, 2},
{(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.bHiPriSmac, 0, 0, 0, g_aszEnDisCfg, 2},
{(PUINT8)&g_UCfgBuf.SPageCfg_GMRP.SCurGrp.abyMbrMsk, 0, 0, 1, g_aszMbrNotCfg, 2}
};
SVarLabel aSVarLabelGMRPGrp[] = {
{{ 5,27}, &SIStrGMRPMacConf, "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 4,27}, &SIDecNumGMRPFid, "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{11,13}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_NONE, ROW_NUM_IN_3_FIELD, 20}
};
SItem aSItemGMRPGrp[] = {
{{ 4,27}, &SIDecNumGMRPFid, "", ITEM_DECNUM, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 5,27}, &SIStrGMRPMacConf, "", ITEM_STRING, REPEAT_TYPE_NONE, LINK_TYPE_NONE},
{{ 6,27}, aSIListboxGMRPGrp, "", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
{{ 7,27}, aSIListboxGMRPGrp+1, "", ITEM_LISTBOX, REPEAT_TYPE_NONE, LINK_TYPE_LISTBOX},
{{11,20}, aSIListboxGMRPGrp+2, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_SINGLE, LINK_TYPE_NONE, ROW_NUM_IN_3_FIELD, 20}
};
// action
SActItem aSActionGMRPGrpEdit[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PAGMRP_bSaveGMRPGrpEdit}
};
// assign page
SPage g_SPageGMRPGrpEdit = {
aSFixLabelGMRPGrpEdit, 10,
aSVarLabelGMRPGrp, 3,
aSItemGMRPGrp+2, 3,
aSActionGMRPGrpEdit, 3,
PAGMRP_bLoadGMRPGrpEdit
};
//// add a gmrp entry
SActItem aSActionGMRPGrpAdd[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PAGMRP_bSaveGMRPGrpAdd},
};
SPage g_SPageGMRPGrpAdd = {
aSFixLabelGMRPGrpAdd, 10,
aSVarLabelGMRPGrp+2, 1,
aSItemGMRPGrp, 5,
aSActionGMRPGrpAdd, 3,
PAGMRP_bLoadGMRPGrpAdd
};
SPage g_SPageGMRPGrpAddNoFid = {
aSFixLabelGMRPGrpAdd, 10,
aSVarLabelGMRPGrp+1, 2,
aSItemGMRPGrp+1, 4,
aSActionGMRPGrpAdd, 3,
PAGMRP_bLoadGMRPGrpAdd
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageGMRP (&g_UCfgBuf.SPageCfg_GMRP)
#define g_byGMRPMode (g_UCfgBuf.SPageCfg_GMRP.byMode)
#define g_wGMRPValidEntryNum (g_UCfgBuf.SPageCfg_GMRP.wValidEntryNum)
#define g_pSGMRPCurGrp (&g_UCfgBuf.SPageCfg_GMRP.SCurGrp)
UINT8 s_abyGMRPModePageId[] = {PAGE_PROV_GMRP_MODE_DIS, PAGE_PROV_GMRP_LIST};
BOOL PAGMRP_bNextPage(void)
{
g_byMultiPageNo ++;
g_byMultiPageNo %= g_byGMRPTotalPageNum;
return RELOAD_PAGE; // reload cfg and print whole page
}
static void s_vUpdateGrpNumPerPage(void)
{
g_byGMRPLineNumPerPage = ((80/GMRP_POS_COL_OFFSET + ((80%GMRP_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
if (g_wGMRPValidEntryNum) {
if (g_wGMRPValidEntryNum % g_byGMRPLineNumPerPage) {
g_byGMRPTotalPageNum = ((g_wGMRPValidEntryNum / g_byGMRPLineNumPerPage) + 1);
g_wTotalLineNum = ((g_byMultiPageNo < (g_byGMRPTotalPageNum-1)) ? g_byGMRPLineNumPerPage : (g_wGMRPValidEntryNum % g_byGMRPLineNumPerPage));
}
else {
g_byGMRPTotalPageNum = (g_wGMRPValidEntryNum / g_byGMRPLineNumPerPage);
g_wTotalLineNum = g_byGMRPLineNumPerPage;
}
}
else { //grp num = 0
g_byGMRPTotalPageNum = 1;
g_wTotalLineNum = 0;
}
}
BOOL PAGMRP_bChangeModePage(void)
{
if (g_byCurPageID != s_abyGMRPModePageId[g_byGMRPMode])
{
// confirm and set gmrp mode
char cKey = ENGcPrintMessage("Change mode will clear original GMRP setting! Continue? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
PIGMRP_vSetGMRPMode(g_pSPageGMRP);
PIMSG_vPutMsgThenPause(OP_OK);
g_byCurPageID = s_abyGMRPModePageId[g_byGMRPMode];
g_bDataDirty = 0;
if (g_byGMRPMode) //gmrp enable
s_vUpdateGrpNumPerPage();
}
// restore to current gmrp mode in HW
PIGMRP_vGetGMRPMode(&g_byGMRPMode);
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAGMRP_bLoadGMRPMode(void)
{
PIGMRP_vInitPage(g_pSPageGMRP);
if (g_byGMRPMode) //enable
{
g_byCurPageID = s_abyGMRPModePageId[g_byGMRPMode]; // it may not be reloaded and reprinted
s_vUpdateGrpNumPerPage();
}
return DONT_RELOAD_PAGE;
}
BOOL PAGMRP_bEditGMRPMode(void)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
// deal with dynamic page
if (PAGMRP_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
// deal with LINK_TYPE_EDITPAGE
else if (g_byCurKey == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
if (g_byCurPageID == PAGE_PROV_GMRP_LIST)
g_byCurPageID = PAGE_PROV_GMRP_EDIT;
return RELOAD_PAGE; // reload cfg and print whole page
}
return DONT_RELOAD_PAGE;
}
BOOL PAGMRP_bAddGMRPMode(void)
{
UINT8 byVlanMode;
if (g_byCurPageID == PAGE_PROV_GMRP_LIST) {
PIVLAN_vGetVlanMode(&byVlanMode);
s_u16Fid = 0;
if ((byVlanMode == VLAN_MODE_8021Q) || (byVlanMode == VLAN_MODE_PROTOBASE) )
g_byCurPageID = PAGE_PROV_GMRP_ADD;
else { //disable or portbased vlan
if (byVlanMode == VLAN_MODE_PORTBASE)
s_u16Fid = PORTBASE_VLAN_FID;
g_byCurPageID = PAGE_PROV_GMRP_ADD_NOFID;
}
}
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PAGMRP_bDelGMRPMode(void)
{
UINT8 u8OldTmp;
// continue if nothing to del
if (g_wTotalLineNum)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
if (PAGMRP_bChangeModePage())
ENGvPrintPage(); // in this page, changing page may not reload config, just re-print page only
else if (g_byCurKey == MK_ENTER && g_SCurItem.f2LinkType == LINK_TYPE_EDITPAGE)
{
char cKey = ENGcPrintMessage("Continue deleting? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
UINT8 byRes;
ENGcPrintMessage("Deleting...", PRINT_THEN_RETURN);
STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, g_pSPageGMRP->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)*(MAC_STRING_LEN+1));
g_pSGMRPCurGrp->u16Fid = g_pSPageGMRP->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)];
byRes = PIGMRP_byDelGrp(g_pSPageGMRP);
PIMSG_vPutExtMsgThenPause( byRes, UINT16_MAX, PUT_MSG_WITH_PORT_NAME );
//for deleting all grps in this page, so we must go back to previous page automatically
u8OldTmp = g_byGMRPTotalPageNum;
s_vUpdateGrpNumPerPage();
if (u8OldTmp != g_byGMRPTotalPageNum) {
g_byMultiPageNo --;
g_byMultiPageNo %= g_byGMRPTotalPageNum;
}
ENGvPrintPage(); // just reprint
}
}
}
return DONT_RELOAD_PAGE;
}
// gmrp entry edit
// load config
BOOL PAGMRP_bLoadGMRPGrpEdit(void)
{
UINT8 byErrCode;
//load ui mac string to current grp mac string
STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, g_pSPageGMRP->astrGrpMacList+(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)*(MAC_STRING_LEN+1));
g_pSGMRPCurGrp->u16Fid = g_pSPageGMRP->awValidGrpFidList[(g_wCurLineID+g_byMultiPageNo*g_byGMRPLineNumPerPage)];
byErrCode = PIGMRP_byGetGrp(g_pSPageGMRP);
//load current grp mac string to ui string array[0]
STR_iStrcpy(astrInputMacStrBuff, g_pSGMRPCurGrp->azMacAddr);
if (byErrCode != OP_OK)
{
PIMSG_vPutMsgThenPause(byErrCode);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
static UINT8 s_bySaveGMRPGrpMsg(UINT8 byErrCode)
{
PIMSG_vPutMsgThenPause(byErrCode);
if (byErrCode == OP_OK)
{
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAGMRP_bSaveGMRPGrpEdit(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
byErrCode = PIGMRP_byEditGrp(g_pSPageGMRP);
return s_bySaveGMRPGrpMsg(byErrCode);
}
// gmrp entry add
// load config
BOOL PAGMRP_bLoadGMRPGrpAdd(void)
{
STR_pvMemset(g_pSGMRPCurGrp, 0, sizeof(SGmrpEntryPage));
STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, "0:0:0:0:0:0");
//load current grp mac string to ui string array[0]
STR_iStrcpy(astrInputMacStrBuff, g_pSGMRPCurGrp->azMacAddr);
g_pSGMRPCurGrp->u16Fid = s_u16Fid;
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
BOOL PAGMRP_bSaveGMRPGrpAdd(void)
{
UINT8 byErrCode;
PIMSG_vPutSavingMsg();
//load ui string array[0] to current grp mac string
STR_iStrcpy(g_pSGMRPCurGrp->azMacAddr, astrInputMacStrBuff);
byErrCode = PIGMRP_byInsGrp(g_pSPageGMRP);
return s_bySaveGMRPGrpMsg(byErrCode);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -