Esempio n. 1
0
VOS_VOID CSD_DL_ProcDataTask(VOS_VOID)
{
    VOS_UINT32                         *pulDownLinkSem;

    pulDownLinkSem = CSD_GetDownLinkDataSem();

    for ( ; ; )
    {

        /* 获取下行取数据信号量 */
        if (VOS_OK != VOS_SmP( *pulDownLinkSem, 0 ))
        {
            CSD_NORMAL_LOG(ACPU_PID_CSD,
                "CSD_DL_ProcDataTask:: VOS_SmP pulDownLinkSem then continue !");


#ifdef __PC_UT__
            break;
#else
            continue;
#endif
        }

        /*获取当前是否挂断电话*/
        if (AT_CSD_CALL_STATE_ON != CSD_GetCallState())
        {
            /*释放数据*/
            CSD_DL_ClearData();
#if 0
            /*使能中断*/
            DICC_EnableIsr(ACPU_PID_CSD,
                           DICC_SERVICE_TYPE_CSD_DATA,
                           DICC_CPU_ID_ACPU);
#endif

            CSD_ERROR_LOG(ACPU_PID_CSD,
                          "CSD_DL_ProcDataTask:: AT_CSD_CALL_STATE_OFF Receive ISR");


#ifdef __PC_UT__
            break;
#else
            continue;
#endif

        }

        CSD_DL_SendData();
#if 0
        /* 使能中断 */
        DICC_EnableIsr(ACPU_PID_CSD,
                       DICC_SERVICE_TYPE_CSD_DATA,
                       DICC_CPU_ID_ACPU);
#endif
#ifdef __PC_UT__
            break;
#endif
    }
}
Esempio n. 2
0
VOS_UINT32 CSD_InitSem(VOS_VOID)
{
    VOS_UINT32                          ulRslt;
    VOS_UINT32                         *pULDataSem;
    VOS_UINT32                         *pDLDataSem;

    pDLDataSem  = CSD_GetDownLinkDataSem();
    pULDataSem  = CSD_GetUpLinkDataSem();

    /* 初始下行信号量 */
    ulRslt      = VOS_SmBCreate("ulDldataSem",
                                CSD_SEMAPHORE_INIT_CNT,
                                VOS_SEMA4_FIFO,
                                pDLDataSem);

    if (VOS_OK != ulRslt)
    {
        VOS_SmDelete(*pDLDataSem);
        CSD_ERROR_LOG(ACPU_PID_CSD,
                      "CSD_InitSem:: VOS_SmBCreate pDLDataSem fail");

        return VOS_ERR;
    }

    /* 初始上行信号量 */
    ulRslt      = VOS_SmBCreate("ulUldataSem",
                                CSD_SEMAPHORE_INIT_CNT,
                                VOS_SEMA4_FIFO,
                                pULDataSem);

    if (VOS_OK != ulRslt)
    {
        VOS_SmDelete(*pULDataSem);
        CSD_ERROR_LOG(ACPU_PID_CSD,
                      "CSD_InitSem:: VOS_SmBCreate pULDataSem fail");

        return VOS_ERR;
    }

    return VOS_OK;
}
VOS_UINT32 CSD_UL_PidInit(enum VOS_INIT_PHASE_DEFINE ip)
{

    VOS_UINT32                          ulRslt;

    switch ( ip )
    {
        case   VOS_IP_LOAD_CONFIG:

            /*DICC通道初始化*/
            ulRslt = CSD_InitDicc();

            if (VOS_OK != ulRslt)
            {
                CSD_ERROR_LOG(ACPU_PID_CSD, "CSD_UL_PidInit::CSD_InitDicc FAIL");

                return VOS_ERR;
            }

            /*全局变量初始化*/
            ulRslt = CSD_InitCtx();

            break;

        case   VOS_IP_FARMALLOC:
        case   VOS_IP_INITIAL:
        case   VOS_IP_ENROLLMENT:
        case   VOS_IP_LOAD_DATA:
        case   VOS_IP_FETCH_DATA:
        case   VOS_IP_STARTUP:
        case   VOS_IP_RIVAL:
        case   VOS_IP_KICKOFF:
        case   VOS_IP_STANDBY:
        case   VOS_IP_BROADCAST_STATE:
        case   VOS_IP_RESTART:
        case   VOS_IP_BUTT:
            break;
    }

    return VOS_OK;
}
Esempio n. 4
0
VOS_VOID CSD_DL_SendData(VOS_VOID)
{
    IMM_ZC_STRU                        *pstCsdDLMem;
    CST_CSD_DATA_IND_STRU               stDLData;
    VOS_UINT32                          ulDICCNodeCnt;
    VOS_UINT32                          ulRslt;
    VOS_CHAR                           *ImmZcData;


    for ( ; ; )
    {
        /*获取DICC通道发送来数据的个数*/
        ulDICCNodeCnt = DICC_GetChannelCurrDataCnt(ACPU_PID_CSD,
                                                   DICC_CHAN_ID_DL_CSD_DATA_CHAN,
                                                   DICC_CPU_ID_ACPU);

        if ( DICC_INVALID_VALUE == ulDICCNodeCnt )
        {
            CSD_ERROR_LOG1(ACPU_PID_CSD,
                           "CSD_DL_SendData :: DICC_GetChannelCurrDataCnt is Wrong",
                           ulDICCNodeCnt);
            break;
        }

        if (0 != ulDICCNodeCnt )
        {
           /*从DICC通道中移出数据*/
            ulRslt      = DICC_RemoveChannelData(ACPU_PID_CSD,
                                                 DICC_CHAN_ID_DL_CSD_DATA_CHAN,
                                                 (VOS_UINT8 *)(&stDLData),
                                                 DICC_CPU_ID_ACPU);

            if (DICC_OK != ulRslt)
            {
                CSD_ERROR_LOG1(ACPU_PID_CSD,
                              "CSD_DL_SendData:: enMsgId Illage",
                              ulRslt);
                break;
            }

            if (VOS_NULL_PTR == stDLData.pGarbage)
            {
                CSD_ERROR_LOG(ACPU_PID_CSD,
                              "CSD_DL_SendData:: stDLData.pGarbage Is Null");
                break;
            }

            CSD_DBG_DL_RECV_PKT_NUM(1);

            /*申请sk_buffer内存*/
            pstCsdDLMem = IMM_ZcStaticAlloc(stDLData.usLen);

            if (VOS_NULL_PTR == pstCsdDLMem)
            {
                CSD_ERROR_LOG1(ACPU_PID_CSD,
                              "CSD_DL_SendData:: pstCsdDLMem Is Null IMM_ZcStaticAlloc Fail",
                              pstCsdDLMem);

                /*通知cCpu释放TTFmem*/
                IMM_RemoteFreeTtfMem(stDLData.pGarbage);

                /*此处用continue可能导致死循环*/
                break;

            }

            /*此步骤不能少用来偏移数据尾指针*/
            /* Modified by l60609 for AP适配项目 ,2012-08-31 Begin */
            ImmZcData = (VOS_CHAR *)IMM_ZcPut(pstCsdDLMem, stDLData.usLen);
            /* Modified by l60609 for AP适配项目 ,2012-08-31 End */

            PS_MEM_CPY(ImmZcData, (VOS_UINT8 *)TTF_PHY_TO_VIRT((VOS_UINT32)stDLData.pucData), stDLData.usLen);

            /*发送数据到驱动,第一个参数为pppid目前不使用,由于失败AT会释放内存,
            所以此处不需要另行释放a核内存*/
            ulRslt      = AT_SendCsdZcDataToModem(CSD_UL_GetAtClientIndex(), pstCsdDLMem);

            if (VOS_OK != ulRslt)
            {
                CSD_DBG_DL_SEND_FAIL_NUM(1);

                CSD_ERROR_LOG(ACPU_PID_CSD,
                              "CSD_DL_SendData:: AT_SendZcDataToModem  Fail");

                /*通知cCpu释放TTFmem*/
                IMM_RemoteFreeTtfMem(stDLData.pGarbage);

                /*此处用continue可能导致死循环*/
                break;
            }
            CSD_DBG_DL_SEND_PKT_NUM(1);

            /*通知cCpu释放TTFmem*/
            IMM_RemoteFreeTtfMem(stDLData.pGarbage);

        }
        else
        {

            /*通道内数据发送完*/
            CSD_NORMAL_LOG1(ACPU_PID_CSD,
                            "CSD_DL_SendData Queue is Null",
                            ulDICCNodeCnt);

            break;
        }

        CSD_NORMAL_LOG1(ACPU_PID_CSD,
                        "CSD_DL_SendData Done",
                        ulDICCNodeCnt);

    }

}
VOS_UINT32 CSD_FidInit (enum VOS_INIT_PHASE_DEFINE  enInitPhase)
{
    VOS_UINT32 ulReturnCode;

    switch ( enInitPhase )
    {
        case   VOS_IP_LOAD_CONFIG:

            /*初始化上行下行信号量*/
           ulReturnCode = CSD_InitSem();

            if (VOS_OK != ulReturnCode)
            {
                CSD_ERROR_LOG(ACPU_PID_CSD, "CSD_FidInit::CSD_InitSem FAIL");

                return VOS_ERR;
            }

            ulReturnCode = VOS_RegisterPIDInfo(ACPU_PID_CSD,
                                              (Init_Fun_Type) CSD_UL_PidInit,
                                              (Msg_Fun_Type) CSD_UL_ProcMsg);
            if ( VOS_OK != ulReturnCode )
            {
                CSD_ERROR_LOG(ACPU_PID_CSD,
                              "CSD_FidInit::VOS_RegisterPIDInfo ACPU_PID_CSD FAIL");

                return VOS_ERR;
            }


            /* 上行自处理任务注册 */
            ulReturnCode  = VOS_RegisterSelfTask(ACPU_FID_CSD,
                                                 (VOS_TASK_ENTRY_TYPE)CSD_UL_ProcDataTask,
                                                 VOS_PRIORITY_P5,
                                                 CSD_UL_DATA_TASK_STACK_SIZE);
            if ( VOS_NULL_BYTE == ulReturnCode )
            {
                CSD_ERROR_LOG(ACPU_PID_CSD,
                              "CSD_FidInit, ERROR, Fail regist CSD_UL_ProcDataTask");

                return VOS_ERR;
            }

            /* 下行自处理任务注册 */
            ulReturnCode  = VOS_RegisterSelfTask(ACPU_FID_CSD,
                                                 (VOS_TASK_ENTRY_TYPE)CSD_DL_ProcDataTask,
                                                 VOS_PRIORITY_P5,
                                                 CSD_DL_DATA_TASK_STACK_SIZE);
            if ( VOS_NULL_BYTE == ulReturnCode )
            {
                CSD_ERROR_LOG(ACPU_PID_CSD,
                              "CSD_FidInit, ERROR, Fail regist CSD_DL_ProcDataTask");

                return VOS_ERR;
            }


            /* 任务优先级 */
            ulReturnCode = VOS_RegisterMsgTaskPrio(ACPU_FID_CSD, VOS_PRIORITY_P3);
            if( VOS_OK != ulReturnCode )
            {
                return VOS_ERR;
            }

            break;

        case   VOS_IP_FARMALLOC:
        case   VOS_IP_INITIAL:
        case   VOS_IP_ENROLLMENT:
        case   VOS_IP_LOAD_DATA:
        case   VOS_IP_FETCH_DATA:
        case   VOS_IP_STARTUP:
        case   VOS_IP_RIVAL:
        case   VOS_IP_KICKOFF:
        case   VOS_IP_STANDBY:
        case   VOS_IP_BROADCAST_STATE:
        case   VOS_IP_RESTART:
        case   VOS_IP_BUTT:
            break;

    }

    return VOS_OK;
}