📄 mmipins.c
字号:
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);
data->editor_handle = edt_create(data->pin_edt_win,&data->editpinAttr,0,0);
data->kbd_handle = kbd_create(data->pin_edt_win,KEY_ALL|KEY_MAKE,(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);
// + KGT 19.7.2000
//mfwFree((U8 *)data,(sizeof(T_pin_edt)));;
FREE_MEMORY((void *)data,(sizeof(T_pin_edt)));;
// - KGT 19.7.2000
}
}
}
/*******************************************************************************
$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
game_Line line;
if ( event EQ MfwWinVisible )
{
dspl_ClearAll();
#if (MAIN_LCD_SIZE==3)//jhxu720
drawSolidRectangle(11,26,107,76, 1,0x5ac7ff,0x4E9C87);
#elif ( MAIN_LCD_SIZE==4 )
drawSolidRectangle(11,26,107,76, 1,0x5ac7ff,0x4E9C87);
#elif ( MAIN_LCD_SIZE==2 )
drawSolidRectangle(10, FIRST_LINE-2, 92, THIRD_LINE+1 , 1, 0x5ac7ff, 0x4E9C87);
#endif
//2004-04-06 Sunny add end
//dspl_Clear(6,30,120,141); //clear text of TxtPleaseWait
//begin of xsf add 2003.04.10
if ( ((pin_data->pin_retries EQ 1) ||(pin_data->pin_retries EQ 2)) && (pin_data->display_id1 == TxtEnterPin1) )
{
//2004-04-06 Sunny modify
ALIGNED_PROMPT(CENTER,FOURTH_LINE, DSPL_TXTATTR_TRANSPARENT, pin_data->display_id2);
ALIGNED_PROMPT(CENTER,FIRST_LINE, DSPL_TXTATTR_TRANSPARENT, pin_data->display_id1);
}
//end of xsf add 2003.04.10
else
ALIGNED_PROMPT(CENTER,FIRST_LINE, DSPL_TXTATTR_TRANSPARENT, pin_data->display_id1);
//2004-04-06 Sunny remove
// drawSolidRectangle(14,70,105,88, 1,0x5ac7ff,0x4E9C87);
if ( edt_data->editor_index NEQ 0 )
{
memset(edt_data->pin_dspl, '\0', MAX_PIN+1);
memset(edt_data->pin_dspl, '*', edt_data->editor_index);
//2004-04-06 Sunny remove
//dspl_colorTextOut(16, 72, DSPL_TXTATTR_TRANSPARENT, edt_data->pin_dspl,0 );
#if (MAIN_LCD_SIZE==3)//jhxu720
dspl_colorTextOut(16, 54, DSPL_TXTATTR_TRANSPARENT, edt_data->pin_dspl,0 );
#elif ( MAIN_LCD_SIZE==4 )
dspl_colorTextOut(16, 54, DSPL_TXTATTR_TRANSPARENT, edt_data->pin_dspl,0 );
#elif ( MAIN_LCD_SIZE==2)
dspl_colorTextOut(16, SECOND_LINE, DSPL_TXTATTR_TRANSPARENT, edt_data->pin_dspl,0 );
#endif
//2004-04-06 Sunny add end
check_pins(win, edt_data);
}
else if ( edt_data->editor_index EQ 0 )
{
displaySoftKeys('\0','\0');
}
//2004-04-06 Sunny remove
/*line.x1=14;
line.y1=70;
line.x2=14;
line.y2=88;
line.color=0x5ac7ff;
DrawLine(line);
line.x1=16+8*edt_data->editor_index;
line.y1=86;
line.x2=22+8*edt_data->editor_index;
line.y2=86;*/
#if (MAIN_LCD_SIZE==3)//jhxu720
line.x1=16+8*edt_data->editor_index;
line.y1=66;
line.x2=22+8*edt_data->editor_index;
line.y2=66;
#elif ( MAIN_LCD_SIZE==4 )
line.x1=16+8*edt_data->editor_index;
line.y1=66;
line.x2=22+8*edt_data->editor_index;
line.y2=66;
#elif ( MAIN_LCD_SIZE==2 )
line.x1=16+6*edt_data->editor_index;
line.y1=THIRD_LINE;
line.x2=22+6*edt_data->editor_index;
line.y2=THIRD_LINE;
#endif
//2004-04-06 Sunny add end
line.color=0x00008b ; // 深蓝色 darkblue 00008b
DrawLine(line); //draw cursor line
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_EVENT("MmiPins:pin_edt_kbd_cb");
if ( !(event & KEY_MAKE) )
return MFW_EVENT_CONSUMED;
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) )
{
//xsf 2003.02.20 edtChar(edt_data->editor_handle,'*'); /* hide security code */
// edtChar(edt_data->editor_handle,ecRight);
}
else
{
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]); /* not hide emergency call */
// edtChar(edt_data->editor_handle,ecRight);
}
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;
}
winShow(edt_data->pin_edt_win);
break;
//case KCD_HASH:
case KCD_LEFT:
case KCD_OK: //xsf add KCD_OK=KCD_LEFT 2003.02.19
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;
//begin of xsf add 2002.08.21
case INPUT_PIN1: /* finish of PIN entering */
//begin of xsf add for making emergency call in pin enter window 2003.05.06
if ( edt_data->emergency_call )
{
emerg_pin(edt_data); /* start emergency call */
timer = FALSE;
break;
}
//end of xsf add for making emergency call in pin enter window 2003.05.06
if ( (strlen((char*)edt_data->pin) >= MIN_PIN) && !(edt_data->gsm_state) )
{
clear_edit_array(edt_data); /* clear editor array */
timer = FALSE;
strncpy((char*)edt_data->old_pin,(char*)edt_data->pin,MAX_PIN);
strncpy((char*)pin_data->old_pin, (char*)edt_data->old_pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win);
SEND_EVENT(pin_data->pin_win,PIN1_END,0,pin_data);
}
else
{
if ( kc->code EQ KCD_HASH && !(edt_data->gsm_state) ) /* could become gsm */
{
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
check_pins(win,edt_data);
if ( edt_data->gsm_state )
pin_data->gsm_state = edt_data->gsm_state;
}
else if ( kc->code EQ KCD_HASH && (edt_data->gsm_state) ) /* finish gsm string */
{
timer = FALSE;
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
if ( edt_data->pin_case_edit EQ INPUT_PIN1 )
pin_data->pin_case = PIN1_REQ_OLD;
gsm_sec_execute_set(win,edt_data); /* execute gsm string */
}
}
break;
case INPUT_PUK1:
//begin of xsf add for making emergency call in pin enter window 2003.05.06
if ( edt_data->emergency_call )
{
emerg_pin(edt_data); /* start emergency call */
timer = FALSE;
break;
}
//end of xsf add for making emergency call in pin enter window 2003.05.06
if ( (strlen((char*)edt_data->pin) EQ MAX_PIN) && !(edt_data->gsm_state) ) /* finish of PUK entering */
{
TRACE_EVENT("clear softkey 13");
clear_edit_array (edt_data); /* clear editor array */
timer = FALSE;
strncpy((char*)edt_data->puk,(char*)edt_data->pin,MAX_PIN);/* store puk */
strncpy((char*)pin_data->puk, (char*)edt_data->puk,MAX_PIN);
if ( pin_data->pin_case EQ INPUT_PUK1 )
{
dspl_ClearAll();
pin_edt_destroy(edt_data->pin_edt_win);
SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN,0,pin_data);/* entering new pin1 start*/
}
}
else
{
if ( kc->code EQ KCD_HASH && !(edt_data->gsm_state) )/* could become gsm */
{
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
check_pins(win,edt_data);
if ( edt_data->gsm_state )
pin_data->gsm_state = edt_data->gsm_state;
}
else if ( kc->code EQ KCD_HASH && (edt_data->gsm_state) )/* finish gsm string */
{
timer = FALSE;
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
gsm_sec_execute_set(win,edt_data); /* execute gsm string */
}
}
break;
case INPUT_NEW_PIN:
/* finish of new PIN entering */
if ( (strlen((char*)edt_data->pin) >= MIN_PIN) && !(edt_data->gsm_state) )
{
clear_edit_array (edt_data); /* clear editor array */
timer = FALSE;
strncpy((char*)edt_data->new_pin, (char*)edt_data->pin,MAX_PIN); /* store new pin */
strncpy((char*)pin_data->new_pin, (char*)edt_data->new_pin,MAX_PIN);
pin_edt_destroy(edt_data->pin_edt_win); /* entering new pin1 again*/
SEND_EVENT(pin_data->pin_win,INPUT_NEW_PIN_AGAIN,0,pin_data);
}
else
{
if ( kc->code EQ KCD_HASH && !(edt_data->gsm_state) ) /* could become gsm */
{
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
check_pins(win,edt_data);
if ( edt_data->gsm_state )
pin_data->gsm_state = edt_data->gsm_state;
}
else if ( kc->code EQ KCD_HASH && (edt_data->gsm_state) )/* finish gsm string */
{
timer = FALSE;
edt_data->pin[edt_data->editor_index] = HASH;
edtChar(edt_data->editor_handle,edt_data->pin[edt_data->editor_index]);
edt_data->editor_index++;
if ( edt_data->pin_case_edit EQ INPUT_NEW_PIN )
pin_data->pin_case = PIN1_REQ_OLD;
gsm_sec_execute_set(win,edt_data); /* execute gsm string */
}
}
break;
case INPUT_NEW_PIN_AGAIN: /* finish of new PIN confirm */
if ( (strlen((char*)edt_data
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -