/*****************************************************************************
 Function Name  : IMSA_TimerMsgDistr()
 Description    : TIMER消息分发函数
 Input          : VOS_VOID *pRcvMsg
 Output         : VOS_VOID
 Return Value   : VOS_VOID

 History        :
      1.sunbing 49683      2013-06-20  Draft Enact
*****************************************************************************/
VOS_VOID IMSA_TimerMsgDistr(const REL_TIMER_MSG *pRcvMsg )
{
    IMSA_TIMER_ID_ENUM_UINT16           enTimerName;
    VOS_UINT32                          i           = IMSA_NULL;
    IMSA_TIMER_EVT_FUNC                 pTimerEvtFunc  = VOS_NULL_PTR;
    IMSA_CONTROL_MANAGER_STRU           *pstControlManager;


    enTimerName = (VOS_UINT16)PS_GET_REL_TIMER_NAME(pRcvMsg);
    pstControlManager = IMSA_GetControlManagerAddress();

    /* 关机过程中,除开关机定时器超时,其他的都不处理 */
    if((IMSA_STATUS_STOPING == pstControlManager->enImsaStatus)
        && (TI_IMSA_START_OR_STOP != enTimerName))
    {
        IMSA_WARN_LOG("IMSA_TimerMsgDistr: Status is Stoping!");
        return;
    }

    /* 在事件处理表中查找处理函数 */
    for ( i = 0; i < g_ulImsaTimerEvtFuncTblSize; i++ )
    {
        /*lint -e960*/
        if ( enTimerName == g_astImsaTimerEvtFuncTbl[i].ulEvtId )
        {
            /* 事件ID匹配 */
            pTimerEvtFunc = g_astImsaTimerEvtFuncTbl[i].pTimerEvtFunc;
            break;
        }
        /*lint +e960*/
    }

    /* 如果处理函数存在则调用 */
    if ( VOS_NULL_PTR != pTimerEvtFunc )
    {
        (*pTimerEvtFunc)(pRcvMsg);
    }
    else
    {
        /*lint -e961*/
        IMSA_ERR_LOG1("IMSA_TimerMsgDistr: Unexpected event received! <enTimerName>",
            enTimerName);
        /*lint +e961*/

    }

    return;

}
示例#2
0
/*****************************************************************************
 Function Name  : IMSA_GetIntraMsgBuffAddr
 Discription    : 获取发送内部消息的地址
                  发送内部消息的过程为:
                    1.申请内部消息地址,
                    2.填充内部消息内容
                    3.发送内部消息
 Input          : 消息长度:该长度含义同DOPRA申请消息时的长度,即不包括
                    消息头 VOS_MSG_HEADER的长度
 Output         : None
 Return         : 消息地址
 History:
       1.sunbing 49683      2013-06-25  Draft Enact
*****************************************************************************/
VOS_VOID *IMSA_GetIntraMsgBuffAddr( VOS_UINT32 ulBuffSize )
{
    IMSA_INTRA_MSG_QUEUE_STRU          *pstIntraMsgQueue;
    VOS_UINT8                          *pucMsgBuff;
    IMSA_INTRA_MSG                     *pstIntraMsgHead;

    if ( (0 == ulBuffSize) || (IMSA_INTRA_MSG_MAX_SIZE < ulBuffSize ) )
    {
        /* 打印错误信息 */
        /*lint -e961*/
        IMSA_ERR_LOG1("IMSA_GetIntraMsgBuffAddr: Size error, ", ulBuffSize);
        /*lint +e961*/

        return VOS_NULL_PTR;
    }

    /* 获取队列地址 */
    pstIntraMsgQueue = IMSA_GetIntraMsgQueueAddress();

    /* 验证是否队列满,留出一个消息不使用,避免正在处理的消息空间被分配出去 */
    if ( ((pstIntraMsgQueue->usTail + 1 + 1) % IMSA_INTRA_MSG_MAX_NUM) != pstIntraMsgQueue->usHeader )
    {
        pucMsgBuff = pstIntraMsgQueue->aucMsgBuff[pstIntraMsgQueue->usTail];

        /* 将申请的缓冲区清0 */
        IMSA_MEM_SET(pucMsgBuff, 0, IMSA_INTRA_MSG_MAX_SIZE);

        /*lint -e826*/
        pstIntraMsgHead                = (IMSA_INTRA_MSG *)pucMsgBuff;
        /*lint -e826*/

        /* 填写内部消息消息头中的长度域,需要减去OSA消息头长度 */
        pstIntraMsgHead->ulLength      = ulBuffSize - 20;

        return (VOS_VOID *)pucMsgBuff;
    }
    else
    {
        /* 打印错误信息 */
        IMSA_ERR_LOG("IMSA_GetIntraMsgBuffAddr: Queue full!");

        return VOS_NULL_PTR;
    }

}
/*****************************************************************************
 Function Name  : IMSA_TimerMsgDistr()
 Description    : TIMER消息分发函数
 Input          : VOS_VOID *pRcvMsg
 Output         : VOS_VOID
 Return Value   : VOS_VOID

 History        :
      1.sunbing 49683      2013-06-20  Draft Enact
*****************************************************************************/
VOS_VOID IMSA_TimerMsgDistr(const REL_TIMER_MSG *pRcvMsg )
{
    IMSA_TIMER_ID_ENUM_UINT16           enTimerName;
    VOS_UINT32                          i           = IMSA_NULL;
    IMSA_TIMER_EVT_FUNC                 pTimerEvtFunc  = VOS_NULL_PTR;

    enTimerName = (VOS_UINT16)PS_GET_REL_TIMER_NAME(pRcvMsg);

    /* 在事件处理表中查找处理函数 */
    for ( i = 0; i < g_ulImsaTimerEvtFuncTblSize; i++ )
    {
        /*lint -e960*/
        if ( enTimerName == g_astImsaTimerEvtFuncTbl[i].ulEvtId )
        {
            /* 事件ID匹配 */
            pTimerEvtFunc = g_astImsaTimerEvtFuncTbl[i].pTimerEvtFunc;
            break;
        }
        /*lint +e960*/
    }

    /* 如果处理函数存在则调用 */
    if ( VOS_NULL_PTR != pTimerEvtFunc )
    {
        (*pTimerEvtFunc)(pRcvMsg);
    }
    else
    {
        /*lint -e961*/
        IMSA_ERR_LOG1("IMSA_TimerMsgDistr: Unexpected event received! <enTimerName>",
            enTimerName);
        /*lint +e961*/

    }

    return;

}