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

📄 mmiaoc.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/*******************************************************************************

 $Function:    	aoc_change_limit

 $Description:	
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/


int aoc_change_limit (MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND win = mfw_parent(mfw_header());

    TRACE_FUNCTION("aoc_charge_rate")

    // create new dynamic dialog for the AOC
    SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_LIMIT_CHANGE, 0, 0);


    return 0;
}


/*******************************************************************************

 $Function:    	aoc_cancel_limit

 $Description:	
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/


int aoc_cancel_limit (MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND win = mfw_parent(mfw_header());

    TRACE_FUNCTION("aoc_charge_rate")

    // create new dynamic dialog for the AOC
    SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_LIMIT_CANCEL, 0, 0);


    return 0;
}


/*******************************************************************************

 $Function:    	aoc_reset_charge

 $Description:	Resets the charge counter for all calls
            
 $Returns:		

 $Arguments:	
 
*******************************************************************************/


int aoc_reset_charge (MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND win = mfw_parent(mfw_header());

    TRACE_FUNCTION("aoc_charge_rate")

    switch( service_check_pin_for_aoc () )
    {
    case MFW_SIM_PIN2_REQ:
        // create new dynamic dialog for the AOC
        SEND_EVENT (service_Init (win), PIN_REQUEST_FOR_RESET_CHARGE, 0, 0);
        break;

    case MFW_SIM_PIN_REQ:
    case MFW_SIM_NO_PIN:
        //pin 1 or no pin required, open now the editor for entering the currency
        SEND_EVENT (service_Init (win), SERVICES_RESET_CHARGE, 0, 0);

        break;
    }

    return 0;
}






/*******************************************************************************

 $Function:    	service_Init

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
T_MFW_HND service_Init (T_MFW_HND parent_window)
{
    return(service_create (parent_window));
}


/*******************************************************************************

 $Function:    	service_Exit

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void service_Exit (T_MFW_HND own_window)
{

    T_MFW_WIN   * win_data     = ((T_MFW_HDR *)own_window)->data;
    T_SERVICES     * data         = (T_SERVICES *)win_data->user;

    service_destroy (data->service_win);
}

/*******************************************************************************

 $Function:    	service_create

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
T_MFW_HND service_create (T_MFW_HND parent_window)
{
    T_SERVICES *  data = (T_SERVICES *)ALLOC_MEMORY (sizeof (T_SERVICES));
    T_MFW_WIN   * win;


    TRACE_FUNCTION ("service_create()");

    data->service_win = win_create (parent_window, 0, 0, (T_MFW_CB)service_win_cb);

    if( data->service_win EQ 0 )
        return 0;

    /*
     * Create window handler
     */
    data->mmi_control.dialog =  (T_DIALOG_FUNC)service;
    data->mmi_control.data   = data;
    win                      = ((T_MFW_HDR *)data->service_win)->data;
    win->user                = (void *) data;

    data->edt_win            =NULL;


    winShow(data->service_win);
    /*
     * return window handle
     */
    return data->service_win;
}

/*******************************************************************************

 $Function:    	service_destroy

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void service_destroy (T_MFW_HND own_window)
{
    T_MFW_WIN   * win;
    T_SERVICES * data;

    TRACE_FUNCTION ("service_destroy()");

    if( own_window )
    {
        win  = ((T_MFW_HDR *)own_window)->data;
        data = (T_SERVICES *)win->user;

        if( data )
        {

            /* 2003/12/04 sunsj modify for new editor mode */
            if( data->edt_win )
            {
                if( data->Identifier == SERVICES_ENTER_CURRENCY )
                {
                    text_input_destroy(data->edt_win);
                }
                else
                {
                    editor_destroy(data->edt_win);
                }
            }
            /*
             * Delete WIN handler
             */
            win_delete (data->service_win);
            data->service_win = 0;

            FREE_MEMORY ((void *)data, sizeof (T_SERVICES));

        }
    }
}
/*******************************************************************************

 $Function:    	service_win_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static int service_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    /*
     * Top Window has no output
     */
    return 1;
}

/*******************************************************************************

 $Function:    	service_dialog_cb

 $Description:	
 
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void service_dialog_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
{

    char buf [40];

    TRACE_FUNCTION ("service_dialog_cb()");

    switch( reason )
    {
    case INFO_KCD_LEFT:
        /* no break; */
    case INFO_TIMEOUT:
        /* no break; */
    case INFO_KCD_HUP:
        /* no break; */
    case INFO_KCD_RIGHT:
        /* no break; */
    case INFO_KCD_CLEAR:

        sprintf(buf, "identifier: %d", identifier); 
        TRACE_EVENT(buf);

        if( identifier EQ SERVICES_OUT_OF_RANGE )
        {
            TRACE_EVENT ("SERVICES_OUT_OF_RANGE");
            SEND_EVENT (win, SERVICES_ONE_UNIT, 0, 0);
        }
        else
        {
            TRACE_EVENT (" destroy ");

            service_Exit(win);
        }
        break;
    }
}

/*******************************************************************************

 $Function:    	service_editor_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/

static void service_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason)
{
    T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
    T_SERVICES    * data     = (T_SERVICES *)win_data->user;


    UBYTE PWD, i;
    int result;


    char buf[60];


    TRACE_FUNCTION ("service_editor_cb()");

    switch( reason )
    {
    case INFO_KCD_LEFT:
        switch( Identifier )
        {
        case SERVICES_ENTER_CURRENCY:
            TRACE_EVENT ("SERVICES_ENTER_CURRENCY");
            TRACE_EVENT ("pressed left");


            // clear old current currency before overwrite it
            memset(data->aocInfo.cur, 0x80, sizeof(data->aocInfo.cur));

            if( strlen(data->edt_Buf) NEQ 0 )
            {
                memcpy(data->aocInfo.cur, data->edt_Buf, MAX_ENTER_CURRENCY);                        
            }

            //termination from ASCII to GSM default
            for( i=0; i< MAX_ENTER_CURRENCY-1; i++ )
            {
                if( data->aocInfo.cur[i] EQ '\0' )
                    data->aocInfo.cur[i] = 0x80;
            }


            // open the next editor for entering the price per unit
            SEND_EVENT (win, SERVICES_ONE_UNIT, 0, 0);
            break;

        case SERVICES_ONE_UNIT:
            TRACE_EVENT ("SERVICES_ONE_UNIT");
            TRACE_EVENT ("pressed left");

            // clear old current ppu before overwrite it
            memset(data->aocInfo.ppu, '\0', sizeof(data->aocInfo.ppu));

            if( strlen(data->edt_Buf) NEQ 0 )
            {
                memcpy(data->aocInfo.ppu, data->edt_Buf, strlen(data->edt_Buf));
            }


            // Password not necessary, Pin2 scenario done 
            PWD='\0';

            // write cur and ppu in AOC 
            result = cm_set_aoc_value(CM_AOC_PUCT, &data->aocInfo, &PWD);

            /*
             sprintf(buf, "%s", data->aocInfo.ppu); 
             TRACE_EVENT(buf);
             sprintf(buf, "%s", data->aocInfo.cur); 
             TRACE_EVENT(buf);
             sprintf(buf, "%d", result); 
             TRACE_EVENT(buf);	
             */
            if( data->edt_win )
            {
                editor_destroy(data->edt_win);
                data->edt_win=NULL;
            }
            if( result EQ CM_OK )
            {
                SEND_EVENT (win, SERVICES_RATE_CHANGED, 0, 0);
            }
            else
            {
                SEND_EVENT (win, SERVICES_OUT_OF_RANGE, 0, 0);
            }

            break;

        case SERVICES_LIMIT_CHANGE:

            // string => long

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -