HRESULT MV_CC_DSS_Init(void) { HRESULT res; if (pMV_APP_DSS != NULL) MV_CC_DBG_Error(E_NOTREADY, "MV_CC_DSS_Init", NULL); pMV_APP_DSS = MV_OSAL_Malloc(sizeof(MV_CC_DSP_t)); if (pMV_APP_DSS == NULL) MV_CC_DBG_Error(E_OUTOFMEMORY, "MV_CC_DSS_Init" " MV_OSAL_Malloc", NULL); pMV_APP_DSS->m_SeqID = MV_CC_ServiceID_DynamicStart; MV_OSAL_Mutex_Create(&(pMV_APP_DSS->m_SeqIDMutex)); MV_OSAL_Mutex_Create(&(pMV_APP_DSS->m_hGSListMutex)); MV_OSAL_Mutex_Lock(pMV_APP_DSS->m_hGSListMutex); res = MV_CC_DSS_GlobalServiceList_Init(); if (res != S_OK) MV_CC_DBG_Error(res, "MV_CC_DSS_Init" " MV_CC_DSS_GlobalServiceList_Init", NULL); pMV_APP_DSS->m_Status.m_RegCount = pMV_APP_DSS->m_Status.m_RegErrCount = pMV_APP_DSS->m_Status.m_FreeCount = pMV_APP_DSS->m_Status.m_FreeErrCount = pMV_APP_DSS->m_Status.m_InquiryCount = pMV_APP_DSS->m_Status.m_InquiryErrCount = pMV_APP_DSS->m_Status.m_UpdateCount = pMV_APP_DSS->m_Status.m_UpdateErrCount = pMV_APP_DSS->m_Status.m_ServiceCount = pMV_APP_DSS->m_Status.m_LastServiceID = 0; pMV_APP_DSS->m_Status.m_SeqID = pMV_APP_DSS->m_SeqID; MV_OSAL_Mutex_Unlock(pMV_APP_DSS->m_hGSListMutex); return S_OK; }
HRESULT MV_CC_DSS_Constructor( pMV_CC_DSP_t self, pMV_CC_ICCNet_t pICCNet) { HRESULT res; /* Parameter Check */ if ((self == NULL) || (pICCNet == NULL)) MV_CC_DBG_Error(E_INVALIDARG, "MV_CC_DSS_Constructor", NULL); if (pMV_APP_DSS != NULL) MV_CC_DBG_Error(E_NOTREADY, "MV_CC_DSS_Constructor", NULL); self->m_PrType = MV_CC_Protocol_CCDSP; self->OnRecvDemux = MV_CC_DSS_DSPOnRecvDemux; self->m_pICCNet = pICCNet; self->m_RdCount = 0; self->m_RdErrCount = 0; self->m_WrCount = 0; self->m_WrErrCount = 0; self->m_bStatusUpdate = false; self->m_RemoteCPU = MV_CC_DSS_REMOTECPU_INIT; self->m_SeqID = MV_CC_ServiceID_DynamicStart; MV_OSAL_Mutex_Create(&(self->m_SeqIDMutex)); MV_OSAL_Mutex_Create(&(self->m_hGSListMutex)); MV_OSAL_Mutex_Lock(self->m_hGSListMutex); res = MV_CC_DSS_GlobalServiceList_Init(); if (res != S_OK) MV_CC_DBG_Error(res, "MV_CC_DSS_Constructor MV_CC_DSS_GlobalServiceList_Init", NULL); MV_OSAL_Mutex_Unlock(self->m_hGSListMutex); if (MV_OSAL_CPU_LOCAL == MV_OSAL_CPU_MASTER) goto MV_CC_DSS_Constructor_Exit; // Check Remote CPU res = MV_CC_StartStatus_Check(); if ((res == S_OK) || (res == MV_CC_STATUS_OK)) { // Synchronize with Remote CPU res = MV_CC_DSS_DSPSendTo( self, self->m_RemoteCPU, DSPPacket_HeadGEN(CMD_DSS_AskUpdate, 0, 0, 0), NULL, 0); if (res != S_OK) MV_CC_DBG_Error(res, "MV_CC_DSS_Constructor Synchronize with Remote CPU (AskUpdate)", NULL); } MV_CC_DSS_Constructor_Exit: pMV_APP_DSS = self; return S_OK; }