📄 mmipins.c
字号:
/*******************************************************************************
$Function: main_call_edit
$Description: help function for editor dialog
$Returns: void
$Arguments: window, window handler event
*******************************************************************************/
static void main_call_edit(T_MFW_HND win,USHORT event)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_pin * pin_data = (T_pin *)win_data->user; // pin main data
T_MFW_HND pin_edt_win;
pin_edt_win = pin_edt_create(pin_data->pin_win);
if(pin_edt_win)
{
SEND_EVENT(pin_edt_win,event,0,pin_data);
}
}
/*******************************************************************************
$Function: pin_edt_create
$Description: Creation of an instance for the PIN Editor dialog.
Type of dialog : SINGLE_DYNAMIC
$Returns: void
$Arguments: parent window
*******************************************************************************/
T_MFW_HND pin_edt_create (T_MFW_HND parent_window)
{
T_pin_edt * data = (T_pin_edt *)ALLOC_MEMORY (sizeof (T_pin_edt));
T_MFW_WIN * win;
data->pin_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)pin_edt_win_cb);
TRACE_FUNCTION("pin_edt_create");
if (data->pin_edt_win EQ 0)
return 0;
/*
* Create window handler
*/
pin_edit_windows = data->pin_edt_win;
data->mmi_control.dialog = (T_DIALOG_FUNC)pin_editor;
data->mmi_control.data = data;
data->parent_win = parent_window;
win = ((T_MFW_HDR *)data->pin_edt_win)->data;
win->user = (void *) data;
/*
* Create any other handler
*/
data->tim_out_handle = tim_create(data->pin_edt_win,TIMEOUT,(T_MFW_CB)pin_edt_tim_out_cb);
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
data->editor = ATB_edit_Create(&data->editorPinAttr,0);
#else /* NEW_EDITOR */
data->editor_handle = edt_create(data->pin_edt_win,&data->editpinAttr,0,0);
#endif /* NEW_EDITOR */
data->kbd_handle = kbd_create(data->pin_edt_win,KEY_ALL,(T_MFW_CB)pin_edt_kbd_cb);
data->kbd_long_handle = kbd_create(data->pin_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)pin_edt_kbd_long_cb);
/*
* return window handle
*/
return data->pin_edt_win;
}
/*******************************************************************************
$Function: pin_edt_destroy
$Description: Destroy the pin editor dialog.
$Returns: void
$Arguments: window
*******************************************************************************/
void pin_edt_destroy (T_MFW_HND own_window)
{
T_pin_edt * data ;
T_MFW_WIN * win;
if (own_window)
{
TRACE_FUNCTION("pin_edt_destroy");
win = ((T_MFW_HDR *)own_window)->data;
data = (T_pin_edt *)win->user;
if(data)
{
/*
* Delete WIN Handler and children handler
*/
pin_edit_windows = 0;
win_delete (data->pin_edt_win);
FREE_MEMORY((void *)data,(sizeof(T_pin_edt)));;
}
}
}
/*******************************************************************************
$Function: pin_edt_win_cb
$Description: Callback function for editor windows
$Returns: Status int
$Arguments: window handle event, window
*******************************************************************************/
static int pin_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win)
{
T_pin_edt *edt_data = (T_pin_edt *)win->user;//pin edt data
T_MFW_WIN *win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
T_pin *pin_data = (T_pin *)win_pin->user; // pin main data
TRACE_EVENT_P1("pin_edt_win_cb: %d", event);
if (event EQ MfwWinVisible)
{
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_Show(edt_data->editor);
/* ED_UPDATE_TRIVIAL only updates text, not title */
if (edt_data->editor->update!=ED_UPDATE_TRIVIAL)
{
/* Set the colour for drawing title */
resources_setTitleColour(COLOUR_EDITOR);
PROMPT(0,0,0,pin_data->display_id1);
dspl_Clear(0,0, SCREEN_SIZE_X-1, edt_data->editor->attr->win_size.py-1);
}
edt_data->editor->update = ED_UPDATE_DEFAULT;
#else /* NEW_EDITOR */
pin_icons();
PROMPT(INFO_TEXT_X,INFO_TEXT_Y,0,pin_data->display_id1);
#endif /* NEW_EDITOR */
return 1;
}
return 0;
}
/*******************************************************************************
$Function: pin_edt_kbd_cb
$Description: Callback function for keyboard
$Returns: Status int
$Arguments: window handle event, keyborad control block
*******************************************************************************/
static int pin_edt_kbd_cb (T_MFW_EVENT event,T_MFW_KBD * kc)
{
T_MFW_HND win = mfw_parent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_pin_edt * edt_data = (T_pin_edt *)win_data->user;//pin edt data
T_MFW_WIN * win_pin =((T_MFW_HDR *)edt_data->parent_win)->data;
T_pin * pin_data = (T_pin *)win_pin->user; // pin main data
T_sim_rem * sim_rem_data = (T_sim_rem *)win_pin->user; //sim_rem data possible too
char timer = TRUE;
timStop(edt_data->tim_out_handle);/* stop entering timer */
TRACE_FUNCTION("MmiPins:pin_edt_kbd_cb");
switch(kc->code)
{
case KCD_0:
case KCD_1:
case KCD_2:
case KCD_3:
case KCD_4:
case KCD_5:
case KCD_6:
case KCD_7:
case KCD_8:
case KCD_9:
case KCD_STAR:
if(edt_data->editor_index < MAX_DIG)
{
if(kc->code EQ KCD_STAR)
edt_data->pin[edt_data->editor_index] = STAR;
else
edt_data->pin[edt_data->editor_index] = '0' + kc->code;
if((edt_data->pin_case_edit NEQ CARD_REJECTED) AND (edt_data->pin_case_edit NEQ INSERT_CARD))
{
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_AsciiChar(edt_data->editor, '*', TRUE);
#else /* NEW_EDITOR */
edtChar(edt_data->editor_handle,'*'); /* hide security code */
#endif /* NEW_EDITOR */
}
else
{
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_AsciiChar(edt_data->editor, edt_data->pin[edt_data->editor_index], TRUE);
#else /* NEW_EDITOR */
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]); /* not hide emergency call */
#endif /* NEW_EDITOR */
}
edt_data->editor_index++;
check_pins(win, edt_data); /* digits check depends on status pin_case */
if(edt_data->gsm_state)
pin_data->gsm_state = edt_data->gsm_state;
}
break;
case KCD_HASH:
case KCD_LEFT:
switch(edt_data->pin_case_edit)
{
case INSERT_CARD:
case CARD_REJECTED:
if(edt_data->emergency_call)
{
emerg_pin(edt_data); /* start emergency call */
timer = FALSE;
}
else
{
clear_edit_array (edt_data);
memset(edt_data->pin,'\0', sizeof(edt_data->pin));/* initial string */
edt_data->editor_index = 0;
}
break;
case SIM_PLOCK:
timer = FALSE;
strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
SEND_EVENT(pin_data->pin_win,SIM_PLOCK,0,pin_data);//check P unlock code
break;
case SIM_NLOCK:
strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
timer = FALSE;
SEND_EVENT(pin_data->pin_win,SIM_NLOCK,0,pin_data);
break;
case SIM_SPLOCK:
strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
timer = FALSE;
SEND_EVENT(pin_data->pin_win,SIM_SPLOCK,0,pin_data);
break;
case SIM_NSLOCK:
strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
timer = FALSE;
SEND_EVENT(pin_data->pin_win,SIM_NSLOCK,0,pin_data);
break;
case SIM_CLOCK:
strncpy((char*)pin_data->pin,(char*)edt_data->pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
timer = FALSE;
SEND_EVENT(pin_data->pin_win,SIM_CLOCK,0,pin_data);
break;
default:
break;
}
break;
case KCD_HUP:
case KCD_RIGHT:
if(edt_data->editor_index EQ 0)
;
else
edt_data->editor_index--;
edt_data->pin[edt_data->editor_index] = '\0';
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_DeleteLeft(edt_data->editor);/* delete character */
#else /* NEW_EDITOR */
edtChar(edt_data->editor_handle,ecBack);/* delete character */
if(strlen((char*)edt_data->pin) < MIN_PIN)
{
TRACE_FUNCTION("clear softknr 4");
pin_rectClear( &edt_data->editpinAttr.win );
}
#endif /* NEW_EDITOR */
edt_data->emergency_call = FALSE;
if(edt_data->pin_case_edit EQ INPUT_PUK1) /* special case ?? */
winShow(edt_data->pin_edt_win);
else
check_pins(win,edt_data); /* check remain for emergency call */
break;
default:
break;
}
if (timer)
tim_start(edt_data->tim_out_handle);/* start timer for entering */
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: check_pins
$Description: check pins input string
$Returns: none
$Arguments: window, pin editor attributes
*******************************************************************************/
static void check_pins (T_MFW_HND win, void * edt_pin)
{
T_pin_edt * edt_data = (T_pin_edt *)edt_pin;
TRACE_FUNCTION("MmiPins:check_pins");
if(strlen((char*)edt_data->pin)NEQ 0)
{
softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
if (strlen((char*)edt_data->pin) > FIRST_DIGIT) /* for every character */
{
if(strlen((char*)edt_data->pin) >= 3)
{
TRACE_FUNCTION("Softkeys:nr 1");
softKeys_displayId(TxtSoftOK,TxtDelete,0, COLOUR_EDITOR_XX);
}
else
softKeys_displayId(TxtNull,TxtDelete,0, COLOUR_EDITOR_XX);
gsm_test(win,edt_data); /* test if GSM string or not*/
}
TRACE_FUNCTION("Check Length of PIN");
if (strlen((char*)edt_data->pin) EQ (MIN_PIN - 1) || strlen((char*)edt_data->pin) EQ (MIN_PIN -2))
{
TRACE_FUNCTION("cm_check_emergency() TRACE PINS 2");
if(cm_check_emergency((U8*)edt_data->pin))/* test emergency call*/
{
TRACE_FUNCTION("MmiPins:check_pins:emercall");
edt_data->emergency_call = TRUE;
softKeys_displayId(TxtSoftCall,TxtNull,0, COLOUR_EDITOR_XX);
}
else
{
if((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD))
{ /* delete all digits */
clear_edit_array (edt_data); /* clear editor array */
memset(edt_data->pin, '\0', sizeof(edt_data->pin));/* initial string */
edt_data->editor_index = 0;
}
edt_data->emergency_call = FALSE;
}
}
if ((strlen((char*)edt_data->pin) >= MIN_PIN) && (strlen((char*)edt_data->pin) < (MAX_PIN + 1)))
{
if(((edt_data->pin_case_edit EQ CARD_REJECTED) OR (edt_data->pin_case_edit EQ INSERT_CARD)) && !(edt_data->gsm_state))
{
if(edt_data->editor_index EQ 0)
;
else
edt_data->editor_index--; /* only emergency calls, 3 digits */
edt_data->pin[edt_data->editor_index] = '\0';
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
ATB_edit_DeleteLeft(edt_data->editor);
#else /* NEW_EDITOR */
edtChar(edt_data->editor_handle,ecBack);
#endif /* NEW_EDITOR */
}
else
{
TRACE_FUNCTION("clear softknr 5");
if(((edt_data->pin_case_edit EQ INPUT_PUK1) ||(edt_data->pin_case_edit EQ INPUT_PUK2)) && !(edt_data->gsm_state))
{ /* PUK 1/2 (not by gsm string) max. 8 digits */
if(strlen((char*)edt_data->pin) >= MAX_PIN)
{
TRACE_FUNCTION("Softkeys:nr 2");
}
}
else if((edt_data->pin_case_edit EQ SIM_CLOCK) ||
(edt_data->pin_case_edit EQ SIM_NLOCK) ||
(edt_data->pin_case_edit EQ SIM_NSLOCK) ||
(edt_data->pin_case_edit EQ SIM_SPLOCK))
{ /* sim lock code max. 8 digits exept PLOCK */
if(strlen((char*)edt_data->pin) >= MAX_PIN)
{
TRACE_FUNCTION("Softkeys:nr 3");
}
}
else if (edt_data->pin_case_edit EQ SIM_PLOCK)
{ /* sim lock PLOCK code max. 6 digits */
if(strlen((char*)edt_data->pin) >= NUM_OF_PLOCK)
{
TRACE_FUNCTION("Softkeys:nr 4");
}
}
else
{
if(!(edt_data->gsm_state)) /* usual way for PIN 4 digits */
{
TRACE_FUNCTION("softkey 5");
}
else
{
TRACE_FUNCTION("clear softkey 6");
pin_skClear( );
// dspl_Clear( PIN_EDIT_2 ); /* clear button */
}
}
edt_data->emergency_call = FALSE;
}
}
if((strlen((char*)edt_data->pin) > MAX_PIN) && !(edt_data->gsm_state)) /* >8 digits not allowed */
{
if(edt_data->editor_index EQ 0)
;
else
edt_data->editor_index--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -