📄 pgvlan.c
字号:
aSItemVlanGrp_P, 2,
aSActionVlanGrpAdd, 3,
PAVLAN_bLoadVlanGrpAdd
};
SPage g_SPageVlanGrpAdd_Q = {
aSFixLabelVlanGrpAdd_Q, 8,
aSVarLabelVlanGrp+2, 2,
aSItemVlanGrp_Q, 2,
aSActionVlanGrpAdd, 3,
PAVLAN_bLoadVlanGrpAdd
};
SPage g_SPageVlanGrpAdd_PRV = {
aSFixLabelVlanGrpAdd_PRV, 9,
aSVarLabelVlanGrp+2, 2,
aSItemVlanGrp_PRV, 3,
aSActionVlanGrpAdd, 3,
PAVLAN_bLoadVlanGrpAdd
};
////
//// 8021Q ingress filter
////
// assign fix label
char str8021QTitle[] = "Port NonMember Untagged";
SFixLabel aSFixLabel8021Q[] = {
{{2,26}, g_strAdvVlanCfg, 0},
{{3,26}, "=", 28},
{{5, 9}, "802.1Q Ingress Filter :"},
{{7, 9}, str8021QTitle, 0},
{{7,45}, str8021QTitle, 0},
{{8, 9}, "-", 27},
{{8,45}, "-", 27},
{{24,2}, g_strHelpMsg, 0}
};
// assign var label
SVarLabel aSVarLabel8021Q[] = {
{{9,9}, &g_SIListboxLogPortName, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};
// assign var item
SItemListbox aSIListboxVlan8021QIF[] = {
{(PUINT8)g_pSVlanIngrFlt, 0, 0, 2, g_aszTagDropFwd, 2},
{(PUINT8)g_pSVlanIngrFlt, 1, 1, 2, g_aszTagDropFwd, 2},
};
//SItemListbox SIListboxVlan8021QIF2 = {
// g_pSVlanIngrFlt,
// 1, 1, 2,
// g_aszTagDropFwd, 2
//};
SItem aSItemVlan8021Q[] = {
{{9,17}, aSIListboxVlan8021QIF, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36},
{{9,28}, aSIListboxVlan8021QIF+1, "", ITEM_LISTBOX, REPEAT_TYPE_RECT_MULTI, LINK_TYPE_NONE, ROW_NUM_IN_2_FIELD, 36}
};
// action
SActItem aSActionVlan8021Q[] = {
{{22, 12}, g_strActionQuit, PAACT_bQuit},
{{22, 22}, g_strActionEdit, PAACT_bEdit},
{{22, 32}, g_strActionSave, PAVLAN_bSaveVlan8021Q},
};
// assign page
SPage g_SPageVlan8021Q = {
aSFixLabel8021Q, 8,
aSVarLabel8021Q, 1,
aSItemVlan8021Q, 2,
aSActionVlan8021Q, 3,
PAVLAN_bLoadVlan8021Q
};
/////////////////////////////////////////////////////////////////////////////////////
#define g_pSPageVlan (&g_UCfgBuf.SPageCfg_Vlan)
#define g_byVlanMode (g_UCfgBuf.SPageCfg_Vlan.byVlanMode)
#define g_wValidEntryNum (g_UCfgBuf.SPageCfg_Vlan.wValidEntryNum)
#define g_pSCurGrp (&g_UCfgBuf.SPageCfg_Vlan.SCurGrp)
#define g_awValidGrpIdList (g_UCfgBuf.SPageCfg_Vlan.awValidGrpIdList)
UINT8 s_abyVlanModePageId[] = {PAGE_VLAN_MODE_DIS, PAGE_VLAN_LIST_P, PAGE_VLAN_LIST_Q, PAGE_VLAN_LIST_PRV};
BOOL PAVLAN_bNextPage(void)
{
g_byMultiPageNo ++;
g_byMultiPageNo %= g_byVlanTotalPageNum;
return RELOAD_PAGE; // reload cfg and print whole page
}
static void s_vUpdateGrpNumPerPage(void)
{
g_byVlanLineNumPerPage = ((80/VLAN_POS_COL_OFFSET + ((80%VLAN_POS_COL_OFFSET) ? 1 : 0))*ROW_NUM_IN_3_FIELD);
if (g_wValidEntryNum) {
if (g_wValidEntryNum % g_byVlanLineNumPerPage) {
g_byVlanTotalPageNum = ((g_wValidEntryNum / g_byVlanLineNumPerPage) + 1);
g_wTotalLineNum = ((g_byMultiPageNo < (g_byVlanTotalPageNum-1)) ? g_byVlanLineNumPerPage : (g_wValidEntryNum % g_byVlanLineNumPerPage));
}
else {
g_byVlanTotalPageNum = (g_wValidEntryNum / g_byVlanLineNumPerPage);
g_wTotalLineNum = g_byVlanLineNumPerPage;
}
}
else { //grp num = 0
g_byVlanTotalPageNum = 1;
g_wTotalLineNum = 0;
}
}
BOOL PAVLAN_bChangeModePage(void)
{
if (g_byCurPageID != s_abyVlanModePageId[g_byVlanMode])
{
// confirm and set vlan mode
char cKey;
cKey = ENGcPrintMessage("Change mode will clear original VLAN setting and reboot! Continue? [y/N]", PRINT_THEN_PAUSE);
if (cKey == 'y' || cKey == 'Y')
{
ENGcPrintMessage("Changing mode...", PRINT_THEN_RETURN);
PIVLAN_vSetVlanMode(g_pSPageVlan);
// PATCH A7: when change vlan mode, must reboot
SWSYS_vBoardShutdown();
SWSYS_vBoardReboot();
}
// restore to current vlan mode in HW
PIVLAN_vGetVlanMode(&g_byVlanMode);
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bLoadVlanMode(void)
{
PIVLAN_vInitPage(g_pSPageVlan);
if (g_byVlanMode != VLAN_MODE_DISABLE)
{
g_byCurPageID = s_abyVlanModePageId[g_byVlanMode]; // it may not be reloaded and reprinted
s_vUpdateGrpNumPerPage();
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bEditVlanMode(void)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
// deal with dynamic page
if (PAVLAN_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_VLAN_LIST_P)
g_byCurPageID = PAGE_VLAN_EDIT_P;
else if (g_byCurPageID == PAGE_VLAN_LIST_PRV)
{
if (!(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage)) //default grp
g_byCurPageID = PAGE_VLAN_EDIT_PRVDFT;
else
g_byCurPageID = PAGE_VLAN_EDIT_PRV;
}
else //802.1Q
g_byCurPageID = PAGE_VLAN_EDIT_Q;
return RELOAD_PAGE; // reload cfg and print whole page
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bAddVlanMode(void)
{
if (g_byCurPageID == PAGE_VLAN_LIST_P)
g_byCurPageID = PAGE_VLAN_ADD_P;
else if (g_byCurPageID == PAGE_VLAN_LIST_PRV)
g_byCurPageID = PAGE_VLAN_ADD_PRV;
else
g_byCurPageID = PAGE_VLAN_ADD_Q;
return RELOAD_PAGE; // reload cfg and print whole page
}
BOOL PAVLAN_bDelVlanMode(void)
{
UINT8 u8OldTmp;
// continue if nothing to del
if (g_wTotalLineNum)
{
if (PAACT_bEdit())
return RELOAD_PAGE;
if (PAVLAN_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;
UINT16 wFailVid;
ENGcPrintMessage("Deleting...", PRINT_THEN_RETURN);
g_pSCurGrp->u16Vid = g_awValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage)];
byRes = PIVLAN_byDelGrp(g_pSPageVlan, &wFailVid);
PIMSG_vPutExtMsgThenPause( byRes, wFailVid, PUT_MSG_WITH_PORT_NAME );
//for deleting all grps in this page, so we must go back to previous page automatically
u8OldTmp = g_byVlanTotalPageNum;
s_vUpdateGrpNumPerPage();
if (u8OldTmp != g_byVlanTotalPageNum) {
g_byMultiPageNo --;
g_byMultiPageNo %= g_byVlanTotalPageNum;
}
ENGvPrintPage(); // just reprint
}
}
}
return DONT_RELOAD_PAGE;
}
// vlan group edit
// load config
BOOL PAVLAN_bLoadVlanGrpEdit(void)
{
UINT8 byErrCode;
g_pSCurGrp->u16Vid = g_awValidGrpIdList[(g_wCurLineID+g_byMultiPageNo*g_byVlanLineNumPerPage)];
byErrCode = PIVLAN_byGetGrp(g_pSPageVlan);
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_bySaveVlanGrpMsg(UINT8 byErrCode, UINT16 wFailVid)
{
if (byErrCode == VLAN_OP_UNTAG_BELONG_OTHER_GRP)
PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_NUM);
else if (byErrCode == VLAN_OP_FOUND_ISO_PORT)
PIMSG_vPutExtMsgThenPause(byErrCode, wFailVid, PUT_MSG_WITH_PORT_NAME);
else
PIMSG_vPutMsgThenPause(byErrCode);
if (byErrCode == OP_OK || byErrCode == VLAN_OP_FOUND_ISO_PORT)
{
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
return DONT_RELOAD_PAGE;
}
BOOL PAVLAN_bSaveVlanGrpEdit(void)
{
UINT8 byErrCode;
UINT16 wFailVid;
PIMSG_vPutSavingMsg();
byErrCode = PIVLAN_byEditGrp(g_pSPageVlan, &wFailVid);
return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}
// vlan group add
// load config
BOOL PAVLAN_bLoadVlanGrpAdd(void)
{
STR_pvMemset(g_pSCurGrp, 0, sizeof(SVlanGrp));
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
// save config
BOOL PAVLAN_bSaveVlanGrpAdd(void)
{
UINT8 byErrCode;
UINT16 wFailVid;
PIMSG_vPutSavingMsg();
byErrCode = PIVLAN_byInsGrp(g_pSPageVlan, &wFailVid);
return s_bySaveVlanGrpMsg(byErrCode, wFailVid);
}
//// 802.1Q rule
BOOL PAVLAN_bLoadVlan8021Q(void)
{
UINT8 byVlanMode;
PIVLAN_vGetVlanMode(&byVlanMode);
if (byVlanMode == VLAN_MODE_8021Q)
{
PIVLNFLT_vInitPage(g_pSVlanIngrFlt);
g_wTotalLineNum = g_byLogIdNum;
return DONT_RELOAD_PAGE;
}
else
{
PIMSG_vPutMsgThenPause(VLAN_OP_NOT_8021Q_MODE);
g_byCurPageID = g_abyPreviousPageID[g_byCurPageID]; // jump to previous page
return RELOAD_PAGE;
}
}
BOOL PAVLAN_bSaveVlan8021Q(void)
{
PIMSG_vPutSavingMsg();
PIVLNFLT_vSavePage(g_pSVlanIngrFlt);
PIMSG_vPutMsgThenPause(OP_OK);
g_bDataDirty = 0;
return DONT_RELOAD_PAGE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -