📄 smi_ui.c
字号:
&keyboardType);
ui_data->state = UI_IDLE;
ui_data->powerOn = FALSE;
ui_data->inputMode = INP_MOD_NONE;
ui_data->inputSeq = INP_SEQ_NONE;
ui_data->timerMod = TIMER_MOD_NONE;
ui_data->ringerOn = FALSE;
ui_data->waitingOn = FALSE;
ui_data->nibtOn = FALSE;
ui_data->sliderActive = FALSE;
ui_data->inSubmenu = FALSE;
ui_data->menuMode = MEN_MOD_NONE;
ui_data->sendDTMF = FALSE;
ui_data->keyBeep = FALSE;
ui_data->backlightOn = FALSE;
ui_data->shiftOn = FALSE;
ui_data->lastShiftedKey = NULL_TERM;
ui_data->lastKeyIdx = 0xff;
ui_data->lastKeyRep = 0;
ui_data->keypadMode = 0;
oldState = UI_IDLE;
ui_data->lastDialedNumber[0] = NULL_TERM;
/*
*-----------------------------------------------------------------
* cleanup the states in the keytable
*-----------------------------------------------------------------
*/
i=0;
while (keyTable[i].keypadCode NEQ NULL_TERM)
keyTable[i++].pressed = FALSE;
/*
*-----------------------------------------------------------------
* initialize window manager, slider, menu and input modules
*-----------------------------------------------------------------
*/
wm_init ();
men_init ();
inp_init ();
sld_init ();
/*
*-----------------------------------------------------------------
* create output areas, screen size will be taken into account
*-----------------------------------------------------------------
*/
if (screensize_y EQ 4)
{
areaCaller = wm_createArea ( 0, 3, 14, 1);
areaProvider = wm_createArea ( 0, 0, 14, 1);
areaUser = wm_createArea ( 0, 2, 14, 1);
areaState = wm_createArea ( 0, 1, 8, 1);
areaService = wm_createArea ( 8, 1, SRVC_WIDTH_L, 1);
areaFS = wm_createArea (14, 2, 2, 1);
areaBAT = wm_createArea (14, 0, 2, 1);
areaMenu = wm_createArea ( 0, 0, MENU_WIDTH_L, 4);
areaSubMenu = wm_createArea ( 0, 0, 12, 4);
areaSlider = wm_createArea ( 0, 1, 10, 1);
areaHook = wm_createArea (15, 3, 1, 1);
areaShift = wm_createArea (14, 3, 1, 1);
areaUniversal = wm_createArea ( 0, 0, 16, 4);
}
else if (screensize_y EQ 2)
{
areaCaller = -1;
areaProvider = wm_createArea ( 0, 0, 8, 1);
areaUser = wm_createArea ( 0, 1, 10, 1);
areaState = wm_createArea ( 8, 0, 8, 1);
areaService = wm_createArea (10, 1, SRVC_WIDTH_S, 1);
areaFS = wm_createArea (12, 1, 1, 1);
areaBAT = wm_createArea (14, 1, 1, 1);
areaMenu = wm_createArea ( 0, 0, MENU_WIDTH_S, 2);
areaSubMenu = wm_createArea ( 0, 0, 12, 2);
areaSlider = wm_createArea ( 0, 0, 10, 1);
areaHook = wm_createArea (13, 1, 1, 1);
areaShift = wm_createArea (15, 1, 1, 1);
areaUniversal = wm_createArea ( 0, 0, 16, 2);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_topArea |
+--------------------------------------------------------------------+
PURPOSE : This function is used to top an area.
*/
LOCAL void ui_topArea (USHORT aHandle)
{
if (ui_data->timerMod EQ TIMER_MOD_NONE)
wm_topArea (aHandle);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_areaServiceWrite |
+--------------------------------------------------------------------+
PURPOSE : This function is used to write text to the service area
with right alignment.
*/
LOCAL void ui_areaServiceWrite (CHAR* text)
{
UBYTE areaWidth = (screensize_y < 4 ? SRVC_WIDTH_S : SRVC_WIDTH_L);
UBYTE textLen = strlen (text);
UBYTE column;
if (textLen > 0)
{
column = (textLen >= areaWidth ? 0 : areaWidth - textLen);
wm_clearArea (areaService);
wm_areaWrite (areaService, 0, column, text);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_startNewInput |
+--------------------------------------------------------------------+
PURPOSE : This function is used to stop the actual input and start
a new one.
*/
LOCAL void ui_startNewInput (USHORT aHandle,
UBYTE row,
UBYTE col,
CHAR* prompt,
UBYTE length,
UBYTE type,
T_INP_MOD inputMode,
CHAR* value,
BOOL show)
{
/*
*-----------------------------------------------------------------
* stop the actual input
*-----------------------------------------------------------------
*/
inp_stopInput (aHandle);
wm_clearArea (aHandle);
/*
*-----------------------------------------------------------------
* set a default input string and start a new input
*-----------------------------------------------------------------
*/
inp_startInput (aHandle, row, col, prompt, length, type);
if (value NEQ NULL)
inp_setInput (aHandle, value);
ui_data->state = UI_INPUT;
ui_data->inputMode = inputMode;
/*
*-----------------------------------------------------------------
* bring the input area on top
*-----------------------------------------------------------------
*/
if (show)
{
ui_topArea (aHandle);
wm_showArea (aHandle);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_stopMenu |
+--------------------------------------------------------------------+
PURPOSE : This function is used to interrupt a given menu.
*/
LOCAL void ui_stopMenu (void)
{
/*
*-----------------------------------------------------------------
* close the submenu
*-----------------------------------------------------------------
*/
if (ui_data->inSubmenu)
{
men_stopMenu (areaSubMenu);
wm_hideArea (areaSubMenu);
ui_data->inSubmenu = FALSE;
}
/*
*-----------------------------------------------------------------
* close the menu
*-----------------------------------------------------------------
*/
men_stopMenu (areaMenu);
wm_hideArea (areaMenu);
ui_data->menuMode = MEN_MOD_NONE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_changeVolume |
+--------------------------------------------------------------------+
PURPOSE : This function is used to increment or decrement the
volume.
*/
LOCAL void ui_changeVolume (BOOL inc)
{
if (!ui_data->sliderActive)
{
sld_startSlider (areaSlider, 0, 255, csf_getVolume (VT_AUDIO_OUT));
ui_data->sliderActive = TRUE;
ui_topArea (areaSlider);
wm_showArea (areaSlider);
}
#if defined (NEW_FRAME)
if (t_slider_running NEQ FALSE)
{
TIMERSTOP (SMI_TSLIDER)
t_slider_running = FALSE;
}
#else
if (t_slider_handle NEQ VSI_ERROR)
{
TIMERSTOP (t_slider_handle)
}
#endif
#if defined (NEW_FRAME)
TIMERSTART (TSLIDER_VALUE, SMI_TSLIDER);
t_slider_running = TRUE;
#else
TIMERSTART (TSLIDER_VALUE, t_slider_handle);
#endif
if (inc)
sld_upSlider (areaSlider);
else
sld_downSlider (areaSlider);
csf_setVolume (VT_AUDIO_OUT,
(UBYTE)sld_getSliderValue (areaSlider));
csf_setVolume (VT_AUDIO_IN,
(UBYTE)sld_getSliderValue (areaSlider));
aca_signal (ACA_SIG_VOLUME, sld_getSliderValue (areaSlider));
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_UI |
| STATE : code ROUTINE : ui_signal |
+--------------------------------------------------------------------+
PURPOSE : Process the UI_SIG_xxx signals that are send by PSA or IO
*/
GLOBAL void ui_signal (UBYTE sigCode, ...)
{
va_list varpars;
CHAR buf[25];
sprintf (buf, "UI-Signal: %d", sigCode);
TRACE_EVENT (buf);
switch (sigCode)
{
/*
*---------------------------------------------------------------
* process signal UI_SIG_ENTER_PIN
*---------------------------------------------------------------
*/
case UI_SIG_ENTER_PIN:
ui_startNewInput (areaUser,
0,
0,
"PIN: ",
MAX_PIN_LEN,
IT_NUMERIC | IT_ECHO | IT_HIDDEN,
INP_MOD_PIN,
NULL,
TRUE);
ui_data->inputSeq = INP_SEQ_NONE;
break;
/*
*---------------------------------------------------------------
* process signal UI_SIG_ENTER_PUK
*---------------------------------------------------------------
*/
case UI_SIG_ENTER_PUK:
/*
*-------------------------------------------------------------
* forget anything about entered PINs and PUKs
*-------------------------------------------------------------
*/
memset (puk, NULL_TERM, MAX_PUK_LEN + 1);
memset (pin, NULL_TERM, MAX_PIN_LEN + 1);
ui_startNewInput (areaUser,
0,
0,
"PUK: ",
MAX_PUK_LEN,
IT_NUMERIC | IT_ECHO | IT_HIDDEN,
INP_MOD_PUK,
NULL,
TRUE);
ui_data->inputSeq = INP_SEQ_NONE;
break;
/*
*---------------------------------------------------------------
* process signal UI_SIG_SIM_NOT_INSERT
*---------------------------------------------------------------
*/
case UI_SIG_SIM_NOT_INSERT:
ui_data->normalService = FALSE;
wm_areaWrite (areaState, 0, 0, lng_getText (TXT_SIM_NOT_INSERT));
ui_topArea (areaState);
wm_showArea (areaState);
wm_clearArea (areaProvider);
ui_startNewInput (areaUser,
0,
0,
">",
MAX_INPUT_SIZE - 10,
IT_NUMERIC | IT_ECHO,
INP_MOD_DIAL,
NULL,
TRUE);
ui_data->inputSeq = INP_SEQ_NONE;
break;
/*
*---------------------------------------------------------------
* process signal UI_SIG_SIM_WRONG
*---------------------------------------------------------------
*/
case UI_SIG_SIM_WRONG:
ui_data->normalService = FALSE;
wm_areaWrite (areaState, 0, 0, lng_getText (TXT_SIM_WRONG));
ui_topArea (areaState);
wm_showArea (areaState);
wm_clearArea (areaProvider);
ui_startNewInput (areaUser,
0,
0,
">",
MAX_INPUT_SIZE - 10,
IT_NUMERIC | IT_ECHO,
INP_MOD_DIAL,
NULL,
TRUE);
ui_data->inputSeq = INP_SEQ_NONE;
break;
/*
*---------------------------------------------------------------
* process signal UI_SIG_POWER_UP
*---------------------------------------------------------------
*/
case UI_SIG_POWER_UP:
{
UBYTE row = 0;
UBYTE column = 1;
ui_init ();
/*
*-----------------------------------------------------------
* build up the screen the first time
*-----------------------------------------------------------
*/
ui_backlight (TRUE);
ui_startFSDisplay ();
ui_startBATDisplay ();
wm_areaWrite (areaHook, 0, 0, "_");
wm_showArea (areaProvider);
wm_showArea (areaService);
wm_showArea (areaUser);
wm_showArea (areaBAT);
wm_showArea (areaFS);
wm_showArea (areaState);
wm_showArea (areaShift);
if (screensize_y EQ 4)
wm_showArea (areaCaller);
wm_showArea (areaHook);
ui_data->powerOn = TRUE;
/*
*-----------------------------------------------------------
* enable input before camp on a network
*-----------------------------------------------------------
*/
ui_startNewInput (areaUser,
0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -