HRESULT MV_CC_DSS_Reg(pMV_CC_DSS_ServiceInfo_t pSrvInfo) { HRESULT res; pMV_CC_ICCNet_t pICCNet; pMV_CC_DSS_ServiceInfo_t pSrvInfo_copy; if (pSrvInfo == NULL) MV_CC_DBG_Error(E_INVALIDARG, "MV_CC_DSS_Reg", NULL); if (pMV_APP_DSS == NULL) MV_CC_DBG_Error(E_NOTREADY, "MV_CC_DSS_Reg", NULL); pICCNet = pMV_APP_DSS->m_pICCNet; // check service id need dynamic generator? if (pSrvInfo->m_ServiceID == MV_CC_ServiceID_DynamicApply) { //get a new dynamic service id pSrvInfo->m_ServiceID = MV_CC_DSS_GetDynamicSID(pMV_APP_DSS); if (pSrvInfo->m_ServiceID == MV_CC_ServiceID_None) MV_CC_DBG_Error(E_FAIL, "MV_CC_DSS_Reg", NULL); } pSrvInfo_copy = MV_CC_DSS_GlobalServiceList_SrvInfo_Ctor(); if (pSrvInfo_copy == NULL) MV_CC_DBG_Error(E_OUTOFMEMORY, "MV_CC_DSS_Reg", NULL); GaloisMemcpy(pSrvInfo_copy, pSrvInfo, sizeof(MV_CC_DSS_ServiceInfo_t)); MV_OSAL_Mutex_Lock(pMV_APP_DSS->m_hGSListMutex); res = MV_CC_DSS_GlobalServiceList_Add(pSrvInfo->m_ServiceID, pSrvInfo_copy); if (res != S_OK) { MV_CC_DBG_Warning(res, "MV_CC_DSS_Reg MV_CC_DSS_GlobalServiceList_Add", NULL); goto MV_CC_DSS_Reg_Failure; } // Only for test //res = MV_CC_DSS_GlobalServiceList_Traversal(GSList_VisitFunc_Demo, NULL); MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); // Synchronize with Remote CPU res = MV_CC_DSS_DSPSendTo( pMV_APP_DSS, pMV_APP_DSS->m_RemoteCPU, DSPPacket_HeadGEN(CMD_DSS_Add, 1, 0, 0), (UCHAR *)pSrvInfo, sizeof(MV_CC_DSS_ServiceInfo_t)); if (res == E_FULL) res = S_OK; return res; MV_CC_DSS_Reg_Failure: MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); return res; }
HRESULT MV_CC_DSS_Reg(pMV_CC_DSS_ServiceInfo_t pSrvInfo, MV_CC_Task *cc_task ) { HRESULT res; pMV_CC_DSS_ServiceInfo_t pSrvInfo_copy; if (pSrvInfo == NULL) MV_CC_DBG_Error(E_INVALIDARG, "MV_CC_DSS_Reg", NULL); if (pMV_APP_DSS == NULL) MV_CC_DBG_Error(E_NOTREADY, "MV_CC_DSS_Reg", NULL); MV_OSAL_Mutex_Lock(pMV_APP_DSS->m_hGSListMutex); // check service id need dynamic generator? if (pSrvInfo->m_ServiceID == MV_CC_ServiceID_DynamicApply) { //get a new dynamic service id pSrvInfo->m_ServiceID = MV_CC_DSS_GetDynamicSID(pMV_APP_DSS); if (pSrvInfo->m_ServiceID == MV_CC_ServiceID_None) { pMV_APP_DSS->m_Status.m_RegErrCount++; MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); MV_CC_DBG_Error(E_FAIL, "MV_CC_DSS_Reg", NULL); } } pSrvInfo_copy = MV_CC_DSS_GlobalServiceList_SrvInfo_Ctor(); if (pSrvInfo_copy == NULL) { MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); MV_CC_DBG_Error(E_OUTOFMEMORY, "MV_CC_DSS_Reg", NULL); } GaloisMemcpy(pSrvInfo_copy, pSrvInfo, sizeof(MV_CC_DSS_ServiceInfo_t)); res = MV_CC_DSS_GlobalServiceList_Add(pSrvInfo->m_ServiceID, pSrvInfo_copy); if (res != S_OK) { pMV_APP_DSS->m_Status.m_RegErrCount++; MV_CC_DBG_Warning(res, "MV_CC_DSS_Reg" " MV_CC_DSS_GlobalServiceList_Add", NULL); goto MV_CC_DSS_Reg_Failure; } singlenode_add(cc_task->serverid_head, pSrvInfo->m_ServiceID); pMV_APP_DSS->m_Status.m_RegCount++; pMV_APP_DSS->m_Status.m_ServiceCount++; pMV_APP_DSS->m_Status.m_LastServiceID = pSrvInfo->m_ServiceID; MV_CC_DSS_Reg_Failure: MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); return res; }