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

📄 autoredialattempt.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    memset((PS8) cm_p->redial_info.RedialNum, 0, MAX_NUMBER);
    pfnUnicodeStrcpy((PS8) cm_p->redial_info.RedialNum, (PS8) GetOutgoingNumber());
}


/*****************************************************************************
 * FUNCTION
 *  IsRedialSet
 * DESCRIPTION
 *  This function checks if the redial flag is set
 * PARAMETERS
 *  void
 *  TRUE(?)     [OUT]       /FALSE
 * RETURNS
 *  pBOOL
 *****************************************************************************/
pBOOL IsRedialSet(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (GetOutgoingCallOrigin() == CM_CALL_MO_STK)
    {
        return SATCallRedialStatus();
    }
    return AutoRedialOnOffStatus();
}


/*****************************************************************************
 * FUNCTION
 *  IsRedialNeeded
 * DESCRIPTION
 *  This function checks if the error cause needs
 *  to redial
 * PARAMETERS
 *  response        [IN]        
 *  TRUE(?)         [OUT]       /FALSE
 * RETURNS
 *  pBOOL
 *****************************************************************************/
pBOOL IsRedialNeeded(U16 response)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    pBOOL result = FALSE;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    MMI_TRACE((MMI_TRACE_G5_CM, MMI_CM_FUNC_IsRedialNeeded));

    if ((GetTotalCallCount() == 0) || ((GetTotalCallCount() == 1) && (GetCurrentState() == CM_OUTGOING_STATE)))
    {
        switch (response)
        {
            case ERR_USER_BUSY:
            case ERR_NO_USER_RESPONDING:
            case ERR_DEST_OUT_OF_ORDER:
            case ERR_NO_ANSWER_ON_ALERT:
            case ERR_NO_CIRCUIT_CHANNEL_AVAIL:
            case ERR_TEMPORARY_FAILURE:
            case ERR_SWITCH_EQUIPMENT_CONGESTION:
            case ERR_REQUESTED_CKT_CHANEL_NOT_AVIL:
            case ERR_RESOURCE_UNAVAIL_UNSPECIFIED:
                SetMaxAttempts(10);
                result = TRUE;
                break;

            case ERR_UNASSIGNED_NUM:
            case ERR_NO_ROUTE_TO_DESTINATION:
            case ERR_NUMBER_CHANGED:
            case ERR_INVALID_NUMBER_FORMAT:
            case ERR_NETWORK_OUT_OF_ORDER:
                SetMaxAttempts(1);
                result = TRUE;
                break;

            default:
                break;
        }
    }
    if (result == FALSE)
    {
        ResetRedialAttempts();
        return FALSE;
    }
    return TRUE;
}


/*****************************************************************************
 * FUNCTION
 *  CheckRedialOrShowError
 * DESCRIPTION
 *  Checks if number must be redialed or error
 *  must be shown
 * PARAMETERS
 *  response        [IN]        
 *  Number(?)       [IN]        To show on screen
 * RETURNS
 *  void
 *****************************************************************************/
void CheckRedialOrShowError(U16 response)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    pBOOL result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    MMI_TRACE((MMI_TRACE_G5_CM, MMI_CM_FUNC_CheckRedialOrShowError));

    result = CalculateSetBackOff();
    ShowCallManagementErrorMessage(response);
    if (result == TRUE)
    SetCurrentState(GetPreviousState());
    return;
}


/*****************************************************************************
 * FUNCTION
 *  ShowRedialScreen
 * DESCRIPTION
 *  Timer callback after notification time expires
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void ShowRedialScreen(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    StopTimer(CM_NOTIFYDURATION_TIMER);
    cm_p->redial_info.ErrRedialScreen = FALSE;
    EntryScrShowUserTimeToRedial();
}


/*****************************************************************************
 * FUNCTION
 *  CalculateSetBackOff
 * DESCRIPTION
 *  Calculates attempt value and resets timer for redial
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
pBOOL CalculateSetBackOff(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    pBOOL minFlag = FALSE;
    U8 timer, dispTimer;
    S8 temp[10], temp2[20];

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    MMI_TRACE((MMI_TRACE_G5_CM, MMI_CM_FUNC_CalculateSetBackOff));

    cm_p->redial_info.CurrentAttempt++;

    /* exceed redial attempt */
    if (cm_p->redial_info.CurrentAttempt > cm_p->redial_info.MaxAttempts)
    {
        ResetRedialAttempts();
        return FALSE;
    }
    switch (cm_p->redial_info.CurrentAttempt)
    {
        case 1:
            timer = 7;
            dispTimer = 5;
            break;

        case 2:
        case 3:
        case 4:
            timer = 65;
            dispTimer = 1;
            minFlag = TRUE;
            break;
        default:
            timer = 190;
            dispTimer = 3;
            minFlag = TRUE;
            break;
    }

    memset(gRedialMsgTemp, 0, sizeof(gRedialMsgTemp));
    pfnUnicodeStrcpy((PS8) gRedialMsgTemp, GetString(STR_CM_REDIAL));

    sprintf((PS8) temp, "\n%d \0", cm_p->redial_info.CurrentAttempt);
    AnsiiToUnicodeString((PS8) temp2, (PS8) temp);
    pfnUnicodeStrcat((PS8) gRedialMsgTemp, (PS8) temp2);

    pfnUnicodeStrcat((PS8) gRedialMsgTemp, GetString(STR_CM_REDIAL_TIMES));
    pfnUnicodeStrcat((PS8) gRedialMsgTemp, GetString(STR_CM_REDIAL_NEXT_ATTEMPT));

    sprintf((PS8) temp, "\n%d \0", dispTimer);
    AnsiiToUnicodeString((PS8) temp2, (PS8) temp);
    pfnUnicodeStrcat((PS8) gRedialMsgTemp, (PS8) temp2);

    if (minFlag == FALSE)
    {
        pfnUnicodeStrcat((PS8) gRedialMsgTemp, GetString(STR_CM_REDIAL_SEC));
    }
    else
    {
        pfnUnicodeStrcat((PS8) gRedialMsgTemp, GetString(STR_CM_REDIAL_MIN));
    }

    cm_p->redial_info.RedialTimer = TRUE;
    StartTimer(CM_REDIAL_TIMER, (timer * 1000), (FuncPtr) RedailAttemptNoArg);
    return TRUE;
}


/*****************************************************************************
 * FUNCTION
 *  RedailAttemptNoArg
 * DESCRIPTION
 *  Call back handler for timer expiry
 * PARAMETERS
 *  info        [?]         
 *  flag(?)     [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void RedailAttemptNoArg(void *info)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 index;
    S8 TempMsgStruct[MAX_NUMBER];
    PHB_CM_INTERFACE *temp;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    StopTimer(CM_REDIAL_TIMER);
    cm_p->redial_info.RedialTimer = FALSE;

    if (IsScreenPresent(SCR1001_CM_OUTGOINGCALLSCREEN) == TRUE)
    {
        DeleteNScrId(SCR1001_CM_OUTGOINGCALLSCREEN);
    }
    DeleteScreenIfPresent(CM_SCR_RDL_TIME);
    if (IsScreenPresent(CM_SCR_MARKER) == FALSE)
    {
        AddMarkerToHistory();
    }

    SetPreviousState(CM_IDLE_STATE);
    SetCurrentState(CM_OUTGOING_STATE);

    temp = GetCMPhoneBookStruct();
    if (temp->dialInList != MMI_PHB_NONE)
    {
        cm_p->redial_info.DialFromPhb = temp->dialInList;
    }

    index = GetFirstFreeIndex();

    AddNewCallInfo(
        (U8*) cm_p->redial_info.RedialNum,
        (CALL_STATE) GetCurrentState(),
        CM_IDLE_STATE,
        CM_CALL_MO,
        (CM_CALL_HANDLE) (index + 1),
        CM_VOICE_CALL);

    UnicodeToAnsii(TempMsgStruct, (PS8) cm_p->redial_info.RedialNum);
    MakePsInitiateCall((PU8) TempMsgStruct, (void*)OutgoingCallConnected);

    return;
}


/*****************************************************************************
 * FUNCTION
 *  GetCurrentAttempt
 * DESCRIPTION
 *  To get flag to show redial screen
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
U8 GetCurrentAttempt(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    return cm_p->redial_info.CurrentAttempt;
}

⌨️ 快捷键说明

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