2017-05-31 12:35:32 +00:00
|
|
|
/*************************************************************************/
|
|
|
|
/** Copyright. **/
|
2017-10-11 10:59:56 +00:00
|
|
|
/** FileName: List.c **/
|
2017-05-31 12:35:32 +00:00
|
|
|
/** Author: Polarix **/
|
|
|
|
/** Version: 1.0.0.0 **/
|
|
|
|
/** Description: HMI demo for list control interface. **/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
//=======================================================================//
|
|
|
|
//= Include files. =//
|
|
|
|
//=======================================================================//
|
2017-10-08 16:03:05 +00:00
|
|
|
#include "DemoProc.h"
|
2017-08-02 14:24:26 +00:00
|
|
|
#include "SGUI_List.h"
|
2017-10-08 16:03:05 +00:00
|
|
|
#include "HMI_Engine.h"
|
2017-05-31 12:35:32 +00:00
|
|
|
|
2017-06-07 13:50:51 +00:00
|
|
|
//=======================================================================//
|
|
|
|
//= User Macro definition. =//
|
|
|
|
//=======================================================================//
|
|
|
|
#define NOTICE_TEXT_BUFFER_SIZE (64)
|
|
|
|
|
2017-05-31 12:35:32 +00:00
|
|
|
//=======================================================================//
|
|
|
|
//= Static function declaration. =//
|
|
|
|
//=======================================================================//
|
2019-01-11 14:03:38 +00:00
|
|
|
static HMI_ENGINE_RESULT HMI_DemoList_Initialize(SGUI_SCR_DEV* pstIFObj);
|
|
|
|
static HMI_ENGINE_RESULT HMI_DemoList_Prepare(SGUI_SCR_DEV* pstIFObj, const void* pstParameters);
|
|
|
|
static HMI_ENGINE_RESULT HMI_DemoList_RefreshScreen(SGUI_SCR_DEV* pstIFObj, const void* pstParameters);
|
2019-01-26 15:12:10 +00:00
|
|
|
static HMI_ENGINE_RESULT HMI_DemoList_ProcessEvent(SGUI_SCR_DEV* pstIFObj, const HMI_EVENT_BASE* pstEvent);
|
2019-01-11 14:03:38 +00:00
|
|
|
static HMI_ENGINE_RESULT HMI_DemoList_PostProcess(SGUI_SCR_DEV* pstIFObj, SGUI_INT iActionResult);
|
2017-05-31 12:35:32 +00:00
|
|
|
|
|
|
|
//=======================================================================//
|
|
|
|
//= Static variable declaration. =//
|
|
|
|
//=======================================================================//
|
2019-01-11 14:03:38 +00:00
|
|
|
static SGUI_CSZSTR s_szListTitle = DEMO_LIST_TITLE;
|
2019-02-15 13:58:23 +00:00
|
|
|
static SGUI_CSZSTR s_arrszNoticeType[] = { DEMO_LIST_ITEM_NOTICE_TEXT, DEMO_LIST_ITEM_NOTICE_TIME};
|
|
|
|
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
|
|
|
|
static SGUI_CSZSTR s_arrszEnumedValue[] = { DEMO_LIST_ITEM_ENUM_VALUE1, DEMO_LIST_ITEM_ENUM_VALUE2, DEMO_LIST_ITEM_ENUM_VALUE3};
|
2019-02-02 14:04:14 +00:00
|
|
|
#endif
|
2018-08-15 14:51:24 +00:00
|
|
|
static SGUI_List_ITEM s_arrstTestListItems[] = { DEMO_LIST_ITEM_0,
|
2018-01-15 15:46:46 +00:00
|
|
|
DEMO_LIST_ITEM_1,
|
|
|
|
DEMO_LIST_ITEM_2,
|
|
|
|
DEMO_LIST_ITEM_3,
|
|
|
|
DEMO_LIST_ITEM_4,
|
|
|
|
DEMO_LIST_ITEM_5,
|
|
|
|
DEMO_LIST_ITEM_6,
|
2017-10-11 10:59:56 +00:00
|
|
|
};
|
2017-07-31 13:29:09 +00:00
|
|
|
|
2018-12-12 13:06:03 +00:00
|
|
|
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
|
2019-02-15 13:58:23 +00:00
|
|
|
static SGUI_List_ITEM s_arrstAppendListItems[] = { DEMO_LIST_ITEM_7,
|
|
|
|
DEMO_LIST_ITEM_8,
|
2018-01-15 15:46:46 +00:00
|
|
|
DEMO_LIST_ITEM_9
|
2017-10-11 10:59:56 +00:00
|
|
|
};
|
2017-09-22 14:09:36 +00:00
|
|
|
#endif
|
2017-07-31 13:29:09 +00:00
|
|
|
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_SCREEN_ACTION s_stDemoListActions = { HMI_DemoList_Initialize,
|
|
|
|
HMI_DemoList_Prepare,
|
|
|
|
HMI_DemoList_RefreshScreen,
|
|
|
|
HMI_DemoList_ProcessEvent,
|
|
|
|
HMI_DemoList_PostProcess
|
|
|
|
};
|
2017-07-31 13:29:09 +00:00
|
|
|
|
2018-08-15 14:51:24 +00:00
|
|
|
static SGUI_List_STRUCT s_stDemoListObject;
|
2017-10-11 10:59:56 +00:00
|
|
|
|
|
|
|
static char s_szNoticeTextBuffer[NOTICE_TEXT_BUFFER_SIZE] = {0x00};
|
2017-06-07 13:50:51 +00:00
|
|
|
|
2017-05-31 12:35:32 +00:00
|
|
|
//=======================================================================//
|
|
|
|
//= Global variable declaration. =//
|
|
|
|
//=======================================================================//
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_SCREEN_OBJECT g_stHMIDemo_List = { HMI_SCREEN_ID_DEMO_LIST,
|
|
|
|
&s_stDemoListActions
|
|
|
|
};
|
2017-05-31 12:35:32 +00:00
|
|
|
|
|
|
|
//=======================================================================//
|
2017-12-27 12:03:30 +00:00
|
|
|
//= Function define. =//
|
2017-05-31 12:35:32 +00:00
|
|
|
//=======================================================================//
|
2019-01-11 14:03:38 +00:00
|
|
|
HMI_ENGINE_RESULT HMI_DemoList_Initialize(SGUI_SCR_DEV* pstIFObj)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
2018-12-12 13:06:03 +00:00
|
|
|
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
|
2017-10-10 12:14:51 +00:00
|
|
|
/*----------------------------------*/
|
|
|
|
/* Variable Declaration */
|
|
|
|
/*----------------------------------*/
|
|
|
|
uint32_t i;
|
|
|
|
#endif
|
|
|
|
|
2017-05-31 12:35:32 +00:00
|
|
|
/*----------------------------------*/
|
|
|
|
/* Process */
|
|
|
|
/*----------------------------------*/
|
2017-10-08 16:03:05 +00:00
|
|
|
// Initialize list data.
|
2019-01-11 14:03:38 +00:00
|
|
|
SGUI_SystemIF_MemorySet(&s_stDemoListObject, 0x00, sizeof(SGUI_List_STRUCT));
|
2019-02-15 13:58:23 +00:00
|
|
|
// Title and font size must set before initialize list object.
|
|
|
|
s_stDemoListObject.Data.Rect.PosX = 0;
|
|
|
|
s_stDemoListObject.Data.Rect.PosY = 0;
|
|
|
|
s_stDemoListObject.Data.Rect.Width = RECT_WIDTH(pstIFObj->stSize);
|
|
|
|
s_stDemoListObject.Data.Rect.Height = RECT_HEIGHT(pstIFObj->stSize);
|
2017-10-11 10:59:56 +00:00
|
|
|
s_stDemoListObject.Data.Title = s_szListTitle;
|
|
|
|
s_stDemoListObject.FontSize = SGUI_FONT_SIZE_H12;
|
2018-12-12 13:06:03 +00:00
|
|
|
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
|
2017-10-11 10:59:56 +00:00
|
|
|
s_stDemoListObject.Data.Items = NULL;
|
|
|
|
s_stDemoListObject.Data.Count = 0;
|
2017-10-10 12:14:51 +00:00
|
|
|
// Insert list item.
|
2018-08-15 14:51:24 +00:00
|
|
|
for(i=0; i<(sizeof(s_arrstTestListItems)/sizeof(SGUI_List_ITEM)); i++)
|
2017-07-31 13:29:09 +00:00
|
|
|
{
|
2018-08-15 14:51:24 +00:00
|
|
|
SGUI_List_InsertItem(&s_stDemoListObject, &s_arrstTestListItems[i], s_stDemoListObject.Data.Count);
|
2017-07-31 13:29:09 +00:00
|
|
|
}
|
2017-10-11 10:59:56 +00:00
|
|
|
#else
|
|
|
|
s_stDemoListObject.Data.Items = s_arrstTestListItems;
|
2018-08-15 14:51:24 +00:00
|
|
|
s_stDemoListObject.Data.Count = sizeof(s_arrstTestListItems)/sizeof(SGUI_List_ITEM);
|
2019-02-15 13:58:23 +00:00
|
|
|
#endif
|
|
|
|
|
2018-01-19 15:05:38 +00:00
|
|
|
//Initialize list object.
|
2019-02-15 13:58:23 +00:00
|
|
|
SGUI_List_InitializeListData(&s_stDemoListObject);
|
2018-01-19 15:05:38 +00:00
|
|
|
|
2017-10-08 16:03:05 +00:00
|
|
|
return HMI_RET_NORMAL;
|
2017-06-02 12:33:13 +00:00
|
|
|
}
|
|
|
|
|
2019-01-11 14:03:38 +00:00
|
|
|
HMI_ENGINE_RESULT HMI_DemoList_Prepare (SGUI_SCR_DEV* pstIFObj, const void* pstParameters)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
2017-10-10 12:14:51 +00:00
|
|
|
/*----------------------------------*/
|
|
|
|
/* Process */
|
|
|
|
/*----------------------------------*/
|
2018-12-11 13:49:24 +00:00
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
2017-10-08 16:03:05 +00:00
|
|
|
return HMI_RET_NORMAL;
|
2017-05-31 12:35:32 +00:00
|
|
|
}
|
|
|
|
|
2019-01-11 14:03:38 +00:00
|
|
|
HMI_ENGINE_RESULT HMI_DemoList_RefreshScreen(SGUI_SCR_DEV* pstIFObj, const void* pstParameters)
|
2017-06-07 13:50:51 +00:00
|
|
|
{
|
2017-10-11 10:59:56 +00:00
|
|
|
/*----------------------------------*/
|
|
|
|
/* Process */
|
|
|
|
/*----------------------------------*/
|
2018-12-11 13:49:24 +00:00
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
2017-10-08 16:03:05 +00:00
|
|
|
return HMI_RET_NORMAL;
|
2017-06-07 13:50:51 +00:00
|
|
|
}
|
|
|
|
|
2019-01-26 15:12:10 +00:00
|
|
|
HMI_ENGINE_RESULT HMI_DemoList_ProcessEvent(SGUI_SCR_DEV* pstIFObj, const HMI_EVENT_BASE* pstEvent)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
|
|
|
/*----------------------------------*/
|
|
|
|
/* Variable Declaration */
|
|
|
|
/*----------------------------------*/
|
2019-02-15 13:58:23 +00:00
|
|
|
HMI_ENGINE_RESULT eProcessResult;
|
|
|
|
SGUI_UINT16 uiKeyCode;
|
|
|
|
SGUI_UINT16 uiKeyValue;
|
|
|
|
SGUI_UINT16 uiOptionCode;
|
2019-01-26 15:12:10 +00:00
|
|
|
KEY_PRESS_EVENT* pstKeyEvent;
|
2017-05-31 12:35:32 +00:00
|
|
|
|
|
|
|
/*----------------------------------*/
|
|
|
|
/* Initialize */
|
|
|
|
/*----------------------------------*/
|
2019-02-15 13:58:23 +00:00
|
|
|
eProcessResult = HMI_RET_NORMAL;
|
2019-01-26 15:12:10 +00:00
|
|
|
pstKeyEvent = (KEY_PRESS_EVENT*)pstEvent;
|
2017-05-31 12:35:32 +00:00
|
|
|
|
|
|
|
/*----------------------------------*/
|
|
|
|
/* Process */
|
|
|
|
/*----------------------------------*/
|
2019-01-26 15:12:10 +00:00
|
|
|
if(pstEvent->eType == HMI_ENGINE_EVENT_ACTION)
|
2019-02-15 13:58:23 +00:00
|
|
|
{
|
|
|
|
// Check event is valid.
|
|
|
|
if(SGUI_FALSE == HMI_EVENT_SIZE_CHK(*pstKeyEvent, KEY_PRESS_EVENT))
|
|
|
|
{
|
|
|
|
// Event data is invalid.
|
|
|
|
eProcessResult = HMI_RET_INVALID_DATA;
|
2019-01-26 15:12:10 +00:00
|
|
|
}
|
|
|
|
else if(EVENT_ID_KEY_PRESS == pstEvent->iID)
|
2019-02-15 13:58:23 +00:00
|
|
|
{
|
|
|
|
uiKeyCode = pstKeyEvent->Data.uiKeyValue;
|
|
|
|
uiKeyValue = KEY_CODE_VALUE(uiKeyCode);
|
2019-01-09 12:33:11 +00:00
|
|
|
uiOptionCode = KEY_CODE_OPT(uiKeyCode);
|
|
|
|
switch(uiKeyValue)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
case KEY_VALUE_ENTER:
|
2017-10-10 12:14:51 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
eProcessResult = HMI_RET_CONFIRM;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_ESC:
|
|
|
|
{
|
|
|
|
eProcessResult = HMI_RET_CANCEL;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_UP:
|
|
|
|
{
|
|
|
|
SGUI_List_SelectUpItem(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_DOWN:
|
|
|
|
{
|
|
|
|
SGUI_List_SelectDownItem(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_RIGHT:
|
|
|
|
{
|
|
|
|
if((uiOptionCode & KEY_OPTION_SHIFT) != 0)
|
2017-10-10 12:14:51 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
SGUI_List_SetListItemValue(pstIFObj, &s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Valid.Value, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Decimal.Value-1);
|
2017-10-10 12:14:51 +00:00
|
|
|
}
|
2019-01-09 12:33:11 +00:00
|
|
|
else
|
2017-10-10 12:14:51 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
SGUI_List_SetListItemValue(pstIFObj, &s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Valid.Value+1, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Decimal.Value);
|
2017-10-10 12:14:51 +00:00
|
|
|
}
|
2019-01-09 12:33:11 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_LEFT:
|
|
|
|
{
|
|
|
|
if((uiOptionCode & KEY_OPTION_SHIFT) != 0)
|
2017-10-10 12:14:51 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
SGUI_List_SetListItemValue(pstIFObj, &s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Valid.Value, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Decimal.Value+1);
|
2017-10-10 12:14:51 +00:00
|
|
|
}
|
2019-01-09 12:33:11 +00:00
|
|
|
else
|
2017-10-10 12:14:51 +00:00
|
|
|
{
|
2019-01-09 12:33:11 +00:00
|
|
|
SGUI_List_SetListItemValue(pstIFObj, &s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Valid.Value-1, SGUI_List_GetListItemPtr(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex)->Decimal.Value);
|
2017-10-10 12:14:51 +00:00
|
|
|
}
|
2019-01-09 12:33:11 +00:00
|
|
|
break;
|
|
|
|
}
|
2018-12-12 13:06:03 +00:00
|
|
|
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
|
2019-01-09 12:33:11 +00:00
|
|
|
case KEY_VALUE_F8:
|
|
|
|
{
|
|
|
|
SGUI_List_RemoveItem(&s_stDemoListObject, s_stDemoListObject.ControlVariable.SelectIndex);
|
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_F9: // Insert to head.
|
|
|
|
{
|
|
|
|
SGUI_List_InsertItem(&s_stDemoListObject, &s_arrstAppendListItems[0], 0);
|
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_F10: // Insert to intermediate.
|
|
|
|
{
|
|
|
|
SGUI_List_InsertItem(&s_stDemoListObject, &s_arrstAppendListItems[1], 5);
|
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case KEY_VALUE_F11: // Insert to end.
|
|
|
|
{
|
|
|
|
SGUI_List_InsertItem(&s_stDemoListObject, &s_arrstAppendListItems[2], s_stDemoListObject.Data.Count);
|
|
|
|
SGUI_List_Refresh(pstIFObj, &s_stDemoListObject);
|
|
|
|
break;
|
|
|
|
}
|
2017-09-22 14:09:36 +00:00
|
|
|
#endif
|
2019-01-09 12:33:11 +00:00
|
|
|
default:
|
|
|
|
{
|
|
|
|
break;
|
2017-10-10 12:14:51 +00:00
|
|
|
}
|
|
|
|
}
|
2017-05-31 12:35:32 +00:00
|
|
|
}
|
|
|
|
}
|
2017-10-10 12:14:51 +00:00
|
|
|
return eProcessResult;
|
2017-05-31 12:35:32 +00:00
|
|
|
}
|
|
|
|
|
2019-01-11 14:03:38 +00:00
|
|
|
HMI_ENGINE_RESULT HMI_DemoList_PostProcess(SGUI_SCR_DEV* pstIFObj, SGUI_INT iActionResult)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
|
|
|
uint32_t uiSelectListIndex;
|
2018-08-15 14:51:24 +00:00
|
|
|
SGUI_List_ITEM* pstSelectedItem;
|
2017-06-02 12:33:13 +00:00
|
|
|
int32_t iListItemParameterValue;
|
2017-05-31 12:35:32 +00:00
|
|
|
|
2017-10-08 16:03:05 +00:00
|
|
|
if(HMI_RET_CONFIRM == iActionResult)
|
2017-05-31 12:35:32 +00:00
|
|
|
{
|
2017-10-11 10:59:56 +00:00
|
|
|
uiSelectListIndex = s_stDemoListObject.ControlVariable.SelectIndex;
|
2018-08-15 14:51:24 +00:00
|
|
|
switch(SGUI_List_GetListItemPtr(&s_stDemoListObject, uiSelectListIndex)->Sign)
|
2017-06-02 12:33:13 +00:00
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
{
|
|
|
|
// Show notice.
|
2018-08-15 14:51:24 +00:00
|
|
|
pstSelectedItem = SGUI_List_GetListItemPtr(&s_stDemoListObject, uiSelectListIndex);
|
2017-06-02 12:33:13 +00:00
|
|
|
iListItemParameterValue = pstSelectedItem->Valid.Value;
|
|
|
|
if(0 == iListItemParameterValue)
|
|
|
|
{
|
2018-01-15 15:46:46 +00:00
|
|
|
sprintf(s_szNoticeTextBuffer, DEMO_LIST_NOTICE_TEXT_FMT, uiSelectListIndex);
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_Goto(HMI_SCREEN_ID_DEMO_TEXT_NOTICE, s_szNoticeTextBuffer);
|
2017-06-02 12:33:13 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_Goto(HMI_SCREEN_ID_DEMO_RTC_NOTICE, NULL);
|
2017-06-02 12:33:13 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2017-10-11 10:59:56 +00:00
|
|
|
case 5:
|
2017-06-07 13:50:51 +00:00
|
|
|
{
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_Goto(HMI_SCREEN_ID_DEMO_VARIABLE_BOX, NULL);
|
2017-06-07 13:50:51 +00:00
|
|
|
break;
|
|
|
|
}
|
2017-10-11 10:59:56 +00:00
|
|
|
case 6:
|
2017-06-07 13:50:51 +00:00
|
|
|
{
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_Goto(HMI_SCREEN_ID_DEMO_REAL_TIME_GRAPH, NULL);
|
2017-06-07 13:50:51 +00:00
|
|
|
break;
|
|
|
|
}
|
2017-06-02 12:33:13 +00:00
|
|
|
default:
|
|
|
|
{
|
2018-01-15 15:46:46 +00:00
|
|
|
sprintf(s_szNoticeTextBuffer, DEMO_LIST_NOTICE_TEXT_FMT, uiSelectListIndex);
|
2017-10-11 10:59:56 +00:00
|
|
|
HMI_Goto(HMI_SCREEN_ID_DEMO_TEXT_NOTICE, s_szNoticeTextBuffer);
|
2017-06-02 12:33:13 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-10-08 16:03:05 +00:00
|
|
|
else if(HMI_RET_CANCEL == iActionResult)
|
2017-06-02 12:33:13 +00:00
|
|
|
{
|
2017-10-10 12:14:51 +00:00
|
|
|
HMI_GoBack(NULL);
|
2017-05-31 12:35:32 +00:00
|
|
|
}
|
2017-10-08 16:03:05 +00:00
|
|
|
return HMI_RET_NORMAL;
|
2017-05-31 12:35:32 +00:00
|
|
|
}
|
|
|
|
|