⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmipins.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -