Example #1
0
Int32 System_ipcNotifyDeInit()
{
    Int32 status;
    UInt32 i, procId;

    Vps_printf(" %d: SYSTEM: IPC Notify de-init in progress !!!\n",
               Utils_getCurTimeInMsec());

    i = 0;

    while (gSystem_ipcEnableProcId[i] != SYSTEM_PROC_MAX)
    {
        procId = gSystem_ipcEnableProcId[i];
        if ((procId != System_getSelfProcId()) && (procId != SYSTEM_PROC_INVALID))
        {
            status = Notify_unregisterEvent(procId,
                                            SYSTEM_IPC_NOTIFY_LINE_ID,
                                            SYSTEM_IPC_NOTIFY_EVENT_ID,
                                            System_ipcNotifyHandler, NULL);

            UTILS_assert(status == Notify_S_SUCCESS);
        }
        i++;
    }

    Vps_printf(" %d: SYSTEM: IPC Notify de-init DONE !!!\n", Utils_getCurTimeInMsec());

    return status;
}
Example #2
0
Void System_ipcNotifyHandler(UInt16 procId, UInt16 lineId,
                             UInt32 eventId, UArg arg, UInt32 payload)
{
    UInt32 linkId, linkProcId;
    Utils_TskHndl *pTsk;

    if (lineId != SYSTEM_IPC_NOTIFY_LINE_ID)
        return;

    if (eventId != SYSTEM_IPC_NOTIFY_EVENT_ID)
        return;

    linkProcId = SYSTEM_GET_PROC_ID(payload);
    linkId = SYSTEM_GET_LINK_ID(payload);

    if (linkId >= SYSTEM_LINK_ID_MAX)
        return;

    UTILS_assert(System_getSelfProcId() == linkProcId);

    if (gSystem_ipcObj.notifyCb[linkId])
    {
        pTsk = System_getLinkTskHndl(linkId);

        gSystem_ipcObj.notifyCb[linkId] (pTsk);
    }
}
Example #3
0
Int32 System_ipcMsgQDelete()
{
    UInt32 i;
    UInt32 procId;
    Int32 status;

    i=0;

    while(gSystem_ipcMsgQEnableProcId[i]!=SYSTEM_PROC_MAX)
    {
        procId = gSystem_ipcMsgQEnableProcId[i];

        if(procId==System_getSelfProcId())
        {
            /* delete MsgQ */

            status = MessageQ_delete(&gSystem_ipcObj.selfMsgQ);
            UTILS_assert(status==0);

            status = MessageQ_delete(&gSystem_ipcObj.selfAckMsgQ);
            UTILS_assert(status==0);
        }
        else
        {
            status = MessageQ_close(&gSystem_ipcObj.remoteProcMsgQ[procId]);
            UTILS_assert(status==0);

            /* no need to close ack msgq */
        }
        i++;
    }
    return OSA_SOK;
}
Int32 IpcFramesInLink_init()
{
    Int32 status;
    System_LinkObj linkObj;
    UInt32 ipcFramesInId;
    IpcFramesInLink_Obj *pObj;
    char tskName[32];
    UInt32 procId = System_getSelfProcId();

   // UTILS_COMPILETIME_ASSERT(offsetof(SystemIpcFrames_ListElem, frameBuf) == 0);
    UTILS_COMPILETIME_ASSERT(offsetof(SystemIpcFrames_ListElem, frameBuf) == 0);
    UTILS_COMPILETIME_ASSERT(offsetof(VIDFrame_Buf, reserved) == 0);
    UTILS_COMPILETIME_ASSERT(sizeof(((SystemIpcFrames_ListElem *) 0)->frameBuf.reserved) ==
                             sizeof(ListMP_Elem));
    for (ipcFramesInId = 0; ipcFramesInId < IPC_FRAMES_IN_LINK_OBJ_MAX; ipcFramesInId++)
    {
        pObj = &gIpcFramesInLink_obj[ipcFramesInId];

        memset(pObj, 0, sizeof(*pObj));

        pObj->tskId =
            SYSTEM_MAKE_LINK_ID(procId,
                                SYSTEM_LINK_ID_IPC_FRAMES_IN_0) + ipcFramesInId;

        pObj->state = IPC_FRAMES_IN_LINK_STATE_INACTIVE;
        linkObj.pTsk = &pObj->tsk;
        linkObj.linkGetFullFrames = NULL;
        linkObj.linkPutEmptyFrames = NULL;
        linkObj.linkGetFullFrames = IpcFramesInLink_getFullFrames;
        linkObj.linkPutEmptyFrames = IpcFramesInLink_putEmptyFrames;
        linkObj.getLinkInfo = IpcFramesInLink_getLinkInfo;

        System_registerLink(pObj->tskId, &linkObj);

        UTILS_SNPRINTF(tskName, "IPC_FRAMES_IN%d", ipcFramesInId);

        System_ipcRegisterNotifyCb(pObj->tskId, IpcFramesInLink_notifyCb);

        status = Utils_tskCreate(&pObj->tsk,
                                 IpcFramesInLink_tskMain,
                                 IPC_LINK_TSK_PRI,
                                 gIpcFramesInLink_tskStack[ipcFramesInId],
                                 IPC_LINK_TSK_STACK_SIZE, pObj, tskName);
        UTILS_assert(status == FVID2_SOK);
    }

    return status;
}
Example #5
0
Int32 System_ipcNotifyInit()
{
    UInt32 procId, i;
    Int32 status;

    memset(gSystem_ipcObj.notifyCb, 0, sizeof(gSystem_ipcObj.notifyCb));

    i = 0;
    while (gSystem_ipcEnableProcId[i] != SYSTEM_PROC_MAX)
    {
        procId = gSystem_ipcEnableProcId[i];
        if ((procId != System_getSelfProcId()) && (procId != SYSTEM_PROC_INVALID))
        {
            Vps_printf
                (" %d: SYSTEM: Notify register to [%s] line %d, event %d ... \n",
                 Utils_getCurTimeInMsec(), MultiProc_getName(procId),
                 SYSTEM_IPC_NOTIFY_LINE_ID, SYSTEM_IPC_NOTIFY_EVENT_ID);

            if (Notify_intLineRegistered(procId, SYSTEM_IPC_NOTIFY_LINE_ID) ==
                FALSE)
            {
                UTILS_assert(0);
            }
            if (Notify_eventAvailable
                (procId, SYSTEM_IPC_NOTIFY_LINE_ID,
                 SYSTEM_IPC_NOTIFY_EVENT_ID) == FALSE)
            {
                UTILS_assert(0);
            }

            status = Notify_registerEvent(procId,
                                          SYSTEM_IPC_NOTIFY_LINE_ID,
                                          SYSTEM_IPC_NOTIFY_EVENT_ID,
                                          System_ipcNotifyHandler, NULL);

            UTILS_assert(status == Notify_S_SUCCESS);
        }
        i++;
    }

    return status;
}
Example #6
0
Int32 IpcOutM3Link_init()
{
    Int32 status;
    System_LinkObj linkObj;
    UInt32 ipcOutM3Id;
    IpcOutM3Link_Obj *pObj;
    char tskName[32];
    UInt32 procId = System_getSelfProcId();

    for (ipcOutM3Id = 0; ipcOutM3Id < IPC_OUT_M3_LINK_OBJ_MAX; ipcOutM3Id++)
    {
        pObj = &gIpcOutM3Link_obj[ipcOutM3Id];

        memset(pObj, 0, sizeof(*pObj));

        pObj->tskId =
            SYSTEM_MAKE_LINK_ID(procId,
                                SYSTEM_LINK_ID_IPC_OUT_M3_0) + ipcOutM3Id;

        linkObj.pTsk = &pObj->tsk;
        linkObj.linkGetFullFrames = NULL;
        linkObj.linkPutEmptyFrames = NULL;
        linkObj.getLinkInfo = IpcOutM3Link_getLinkInfo;

        System_registerLink(pObj->tskId, &linkObj);

        sprintf(tskName, "IPC_OUT_M3%d", ipcOutM3Id);

        System_ipcRegisterNotifyCb(pObj->tskId, IpcOutM3Link_notifyCb);

        IpcOutM3Link_initListMP(pObj);

        status = Utils_tskCreate(&pObj->tsk,
                                 IpcOutM3Link_tskMain,
                                 IPC_LINK_TSK_PRI,
                                 gIpcOutM3Link_tskStack[ipcOutM3Id],
                                 IPC_LINK_TSK_STACK_SIZE, pObj, tskName);
        UTILS_assert(status == FVID2_SOK);
    }

    return status;
}
Example #7
0
Int32 System_sendLinkCmd(UInt32 linkId, UInt32 cmd)
{
    Int32  status;
    UInt32 procId;

    procId = SYSTEM_GET_PROC_ID(linkId);

    UTILS_assert(  procId < SYSTEM_PROC_MAX);

    if(procId!=System_getSelfProcId())
    {
        status = System_ipcMsgQSendMsg(linkId, cmd, NULL, 0, FALSE, OSA_TIMEOUT_FOREVER);
    }
    else
    {
        status = System_sendLinkCmd_local(linkId, cmd);
    }

    return status;
}
Example #8
0
Int32 System_linkGetInfo(UInt32 linkId, System_LinkInfo * info)
{
    Int32  status;
    UInt32 procId;

    procId = SYSTEM_GET_PROC_ID(linkId);

    UTILS_assert(  procId < SYSTEM_PROC_MAX);

    if(procId!=System_getSelfProcId())
    {
        status = System_ipcMsgQSendMsg(linkId, SYSTEM_CMD_GET_INFO, info, sizeof(*info), TRUE, OSA_TIMEOUT_FOREVER);
    }
    else
    {
        status = System_linkGetInfo_local(linkId, info);
    }

    return status;
}
Example #9
0
Int32 NullSrcLink_init()
{
    Int32 status;
    System_LinkObj linkObj;
    UInt32 nullSrcId;
    NullSrcLink_Obj *pObj;
    char tskName[32];
    UInt32 procId = System_getSelfProcId();

    for (nullSrcId = 0; nullSrcId < NULL_SRC_LINK_OBJ_MAX; nullSrcId++)
    {
        pObj = &gNullSrcLink_obj[nullSrcId];

        memset(pObj, 0, sizeof(*pObj));

        pObj->tskId =
            SYSTEM_MAKE_LINK_ID(procId, SYSTEM_LINK_ID_NULL_SRC_0) + nullSrcId;

        linkObj.pTsk = &pObj->tsk;
        linkObj.linkGetFullFrames = NullSrcLink_getFullFrames;
        linkObj.linkPutEmptyFrames = NullSrcLink_putEmptyFrames;
        linkObj.getLinkInfo = NullSrcLink_getInfo;

        System_registerLink(pObj->tskId, &linkObj);

        sprintf(tskName, "NULL_SRC%d", nullSrcId);

        status = Utils_tskCreate(&pObj->tsk,
                                 NullSrcLink_tskMain,
                                 NULL_SRC_LINK_TSK_PRI,
                                 gNullSrcLink_tskStack[nullSrcId],
                                 (NULL_SRC_LINK_TSK_STACK_SIZE), pObj, tskName);
        UTILS_assert(status == FVID2_SOK);
    }

    return status;
}
Example #10
0
Int32 DupLink_init()
{
    Int32 status;
    System_LinkObj linkObj;
    UInt32 dupId;
    DupLink_Obj *pObj;
    char tskName[32];
    UInt32 procId = System_getSelfProcId();

    for (dupId = 0; dupId < DUP_LINK_OBJ_MAX; dupId++)
    {
        pObj = &gDupLink_obj[dupId];

        memset(pObj, 0, sizeof(*pObj));

        pObj->tskId = SYSTEM_MAKE_LINK_ID(procId, SYSTEM_LINK_ID_DUP_0) + dupId;

        linkObj.pTsk = &pObj->tsk;
        linkObj.linkGetFullFrames = DupLink_getFullFrames;
        linkObj.linkPutEmptyFrames = DupLink_putEmptyFrames;
        linkObj.getLinkInfo = DupLink_getLinkInfo;

        System_registerLink(pObj->tskId, &linkObj);

        sprintf(tskName, "DUP%d", dupId);

        status = Utils_tskCreate(&pObj->tsk,
                                 DupLink_tskMain,
                                 DUP_LINK_TSK_PRI,
                                 gDupLink_tskStack[dupId],
                                 DUP_LINK_TSK_STACK_SIZE, pObj, tskName);
        UTILS_assert(status == FVID2_SOK);
    }

    return status;
}
Example #11
0
Int32 System_linkControlWithTimeout(UInt32 linkId, UInt32 cmd, Void *pPrm, UInt32 prmSize, Bool waitAck, UInt32 timeout)
{
    Int32  status;
    UInt32 procId;

    procId = SYSTEM_GET_PROC_ID(linkId);

    if(procId >= SYSTEM_PROC_MAX)
    {
;//        printf(" SYSTEM: Invalid proc ID ( procID = %d, linkID = 0x%08x, cmd = 0x%08x) \r\n", procId, linkId, cmd);
    }
    UTILS_assert(  procId < SYSTEM_PROC_MAX);

    if(procId!=System_getSelfProcId())
    {
        status = System_ipcMsgQSendMsg(linkId, cmd, pPrm, prmSize, waitAck, timeout);
    }
    else
    {
        status = System_linkControl_local(linkId, cmd, pPrm, prmSize, waitAck);
    }

    return status;
}
Example #12
0
Int32 System_ipcMsgQCreate()
{
    UInt32 i;
    UInt32 procId;
    Int32 status;
    Int32 retryCount;
    MessageQ_Params msgQParams;
    char msgQName[64];
    char ackMsgQName[64];

    i=0;

    while(gSystem_ipcMsgQEnableProcId[i]!=SYSTEM_PROC_MAX)
    {
        procId = gSystem_ipcMsgQEnableProcId[i];

        if (procId != SYSTEM_PROC_INVALID)
        {
            System_ipcGetMsgQName(procId, msgQName, ackMsgQName);

            if(procId==System_getSelfProcId())
            {
                /* create MsgQ */
                MessageQ_Params_init(&msgQParams);

/*                printf(" %u: SYSTEM: Creating MsgQ [%s] ...\n",
                   OSA_getCurTimeInMsec(),
                    msgQName
                );
*/
                gSystem_ipcObj.selfMsgQ = MessageQ_create(msgQName, &msgQParams);
                UTILS_assert(gSystem_ipcObj.selfMsgQ!=NULL);

                MessageQ_Params_init(&msgQParams);

/*                printf(" %u: SYSTEM: Creating MsgQ [%s] ...\n",
                    OSA_getCurTimeInMsec(),
                    ackMsgQName
                );
*/
                gSystem_ipcObj.selfAckMsgQ = MessageQ_create(ackMsgQName, &msgQParams);
                UTILS_assert(gSystem_ipcObj.selfMsgQ!=NULL);
            }
            else
            {
                /* open MsgQ */

                retryCount=10;
                while(retryCount)
                {
//                    printf(" %u: SYSTEM: Opening MsgQ [%s] ...\n",
 //                       OSA_getCurTimeInMsec(),
  //                      msgQName
   //                 );

                    status = MessageQ_open(msgQName, &gSystem_ipcObj.remoteProcMsgQ[procId]);
                    if(status==MessageQ_E_NOTFOUND)
                        OSA_waitMsecs(1000);
                    else
                    if(status==MessageQ_S_SUCCESS)
                        break;

                    retryCount--;
                    if(retryCount<=0)
                        UTILS_assert(0);
                }

                /* no need to open ack msgq,
                    since ack msgq id is embeeded in the received message
                */
            }
        }
        i++;
    }
    return OSA_SOK;
}