/***************************************************************************** 函 数 名 : PPM_UsbIndPortInit 功能描述 : 用于USB 上OM主动上报端口通道的初始化 输入参数 : 无 输出参数 : 无 返 回 值 : VOS_ERR -- 初始化失败 VOS_OK -- 初始化成功 修改历史 : 1.日 期 : 2014年5月25日 作 者 : L00256032 修改内容 : V8R1 OM_Optimize项目新增 *****************************************************************************/ VOS_UINT32 PPM_UsbIndPortInit(VOS_VOID) { /* USB承载的OM IND端口,调用底软的异步接口发送数据,现在需要伪造成同步接口,申请信号量 */ if(VOS_OK != VOS_SmCCreate("UIND", 0, VOS_SEMA4_FIFO, &g_stUsbIndPseudoSync.ulPseudoSyncSemId)) { vos_printf("\r\nPPM_UsbIndPortInit: create g_stUsbIndPseudoSync.ulPseudoSyncSemId failedd\r\n"); g_stPpmDebugInfo.ulUsbIndSemErr++; return VOS_ERR; } mdrv_usb_reg_enablecb((USB_UDI_ENABLE_CB_T)PPM_UsbIndPortOpen); vos_printf("\r\nPPM_UsbIndPortInit mdrv_usb_reg_enablecb: reg %p", PPM_UsbIndPortOpen); g_stPpmDebugInfo.ulUsbIndRegOpen++; mdrv_usb_reg_disablecb((USB_UDI_DISABLE_CB_T)PPM_UsbIndPortClose); vos_printf("\r\nPPM_UsbIndPortInit mdrv_usb_reg_disablecb: reg %p", PPM_UsbIndPortClose); g_stPpmDebugInfo.ulUsbIndRegClose++; CPM_PhySendReg(CPM_IND_PORT, PPM_UsbIndSendData); return VOS_OK; }
/***************************************************************************** Function : VOS_SmCCreate Description: To create a counting semaphore; Input : acSmName -- the semaphore name, can be null ulSmInit -- The count number of the semaphore that create; ulFlags -- FIFO or priority; Output : pulSmID -- the ID of the create semaphore; Return : VOS_OK on success and errno on failure *****************************************************************************/ VOS_UINT32 VOS_SmCreate( VOS_CHAR Sm_Name[4], VOS_UINT32 Sm_Init, VOS_UINT32 Flags, VOS_SEM * Sm_ID ) { return( VOS_SmCCreate( Sm_Name, Sm_Init, Flags, Sm_ID )); }
/***************************************************************************** 函 数 名 : ftm_mailbox_init 功能描述 : FTM模块邮箱适配初始化 输入参数 : param 原语内容 ulLen 原语长度 输出参数 : 无 返 回 值 : 无 *****************************************************************************/ VOS_UINT32 ftm_mailbox_init() { if(VOS_OK != VOS_SmCCreate( "ftm_mailbox_taskproc", 0, VOS_SEMA4_FIFO, &g_mailbox_readsem)) { HAL_SDMLOG("[%s] : VOS_SmCCreate failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_LTE_CT, ftm_mailbox_ltect_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_LTE_CT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_LTE_BT, ftm_mailbox_ltebt_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_LTE_BT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_TDS_CT, ftm_mailbox_tdsct_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_TDS_CT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } if(BSP_OK != BSP_MailBox_ComNotifyReg(EN_MAILBOX_SERVICE_TDS_BT, ftm_mailbox_tdsbt_cb)) { HAL_SDMLOG("[%s] : BSP_MailBox_ComNotifyReg EN_MAILBOX_SERVICE_TDS_BT failed.\n", __FUNCTION__); return ERR_MSP_FAILURE; } return ERR_MSP_SUCCESS; }
VOS_UINT32 CBTPPM_OamUsbCbtPortInit(VOS_VOID) { /* CBT端口与PCVOICE复用,动态注册数据接收函数 */ CBTCPM_PortRcvReg(CBTSCM_SoftDecodeDataRcv); /* 动态注册数据发送函数 */ CBTCPM_PortSndReg(CBTPPM_OamUsbCbtSendData); /* USB承载的CBT端口,调用底软的异步接口发送数据,现在需要伪造成同步接口,申请信号量 */ if(VOS_OK != VOS_SmCCreate("UCBT", 0, VOS_SEMA4_FIFO, &g_ulCbtUsbPseudoSyncSemId)) { LogPrint("\r\n CBTPPM_OamUsbCbtPortInit: create g_ulCbtUsbPseudoSyncSemId failedd\r\n"); return VOS_ERR; } /* USB承载的CBT端口初始化UDI设备句柄 */ g_ulCbtPortUDIHandle = VOS_ERROR; /* CBT端口通过CBT的CPM管理,不注册物理发送函数 */ DRV_USB_REGUDI_ENABLECB((USB_UDI_ENABLE_CB_T)CBTPPM_OamUsbCbtPortOpen); DRV_USB_REGUDI_DISABLECB((USB_UDI_DISABLE_CB_T)CBTPPM_OamUsbCbtPortClose); return VOS_OK; }
VOS_UINT32 Monitor_Init(VOS_VOID) { /*读取开关分集的USIM卡温度门限*/ if(NV_OK != NV_Read(en_NV_Item_W_USIM_TEMP_ANT2_CTRL, (VOS_VOID*)&g_stMonitorUsimAntCtrl, sizeof(MONITOR_USIM_ANT2_CTRL))) { g_ulMonitorErrCode |= MONITOR_ERR_CODE_NV; return VOS_ERR; } if (VOS_OK != VOS_SmCCreate("MONS", 0, VOS_SEMA4_FIFO, &(g_ulMonitorCtrlSem))) { g_ulMonitorErrCode |= MONITOR_ERR_CODE_SEM; return VOS_ERR; } #if (VOS_VXWORKS == VOS_OS_VER) taskSpawn("MONITOR_TASK", 159, 0, 10240,(FUNCPTR)Monitor_QueryTask, 0, 0, 0, 0, 0, 0, 0, 0,0,0); #endif return VOS_OK; }
VOS_VOID dms_Init(VOS_VOID) { initDmsMainInfo(); if (VOS_OK != VOS_SmCCreate( "PCUIRX", 0, VOS_SEMA4_FIFO, &g_ulPcuiRxSem)) { vos_printf("dms_Init: creat pcui rx sem fail!\n");; } if (VOS_OK != VOS_SmCCreate( "CTRLRX", 0, VOS_SEMA4_FIFO, &g_ulCtrlRxSem)) { vos_printf("dms_Init: creat ctrl rx sem fail!\n");; } BSP_USB_RegUdiEnableCB(dms_UsbEnableEvtProc); BSP_USB_RegUdiDisableCB(dms_UsbDisableEvtProc); return ; }
VOS_VOID NV_ACoreInitSync(VOS_VOID) { #if (VOS_LINUX == VOS_OS_VER) /* 创建信号量 */ VOS_SmCCreate("NVOK", 0, 0, &g_ulNVInitSem); #endif /* 注册给C核中断 */ mdrv_ipc_int_connect((IPC_INT_LEV_E)IPC_ACPU_INT_SRC_CCPU_NVIM, (VOIDFUNCPTR)NV_ACoreInitIpcIsr, 0); mdrv_ipc_int_enable((IPC_INT_LEV_E)IPC_ACPU_INT_SRC_CCPU_NVIM); }
/***************************************************************************** 函 数 名 : Log_Init 功能描述 : 打印初始化 输入参数 : VOS_VOID 输出参数 : 无 返 回 值 : VOS_VOID 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2007年4月24日 作 者 : 李霄 46160 修改内容 : 新生成函数 *****************************************************************************/ VOS_VOID Log_Init(VOS_VOID) { OM_PORT_CFG_STRU stPortCfg; g_stLogEnt.ulPrintSwitch = LOG_FALSE; if (VOS_OK != VOS_SmMCreate("LOG_MSem", VOS_SEMA4_PRIOR | VOS_SEMA4_INVERSION_SAFE, &g_logBuffSem)) { vos_printf("Log: Error, semMCreate Fail"); return ; } if (VOS_OK != VOS_SmCCreate("LOG_CSem", 0, VOS_SEMA4_FIFO, &(g_stLogEnt.semOmPrint))) { VOS_SmDelete(g_logBuffSem); vos_printf("Log: Error, semCCreate Fail"); return ; } g_stLogEnt.rngOmRbufId = OM_RingBufferCreate(LOG_BUF_VOLUMN); if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId) { VOS_SmDelete(g_logBuffSem); VOS_SmDelete(g_stLogEnt.semOmPrint); vos_printf("Log: Error, rngCreate Fail"); return; } /* 从NV项中读出LOG的输出方式和文件支持的最大大小 */ if(NV_OK != NV_Read(en_NV_Item_Om_PsLog_Port, &stPortCfg, sizeof(OM_PORT_CFG_STRU))) { vos_printf("Log_InitFile: NV_Read fail, NV Id :%d\n", en_NV_Item_Om_PsLog_Port); stPortCfg.ulMaxFileSize = 0; } else { /*参数检测*/ if (OM_OUTPUT_BUTT > stPortCfg.enPortType) { g_stLogEnt.ulLogOutput = stPortCfg.enPortType; } } g_stLogEnt.ulPrintSwitch = LOG_TRUE; return; }
BST_OS_PAL_SEM_T BST_OS_PalCreateSem( BST_UINT32 ulSmInit ) { #if (VOS_RTOSCK == VOS_OS_VER) BST_OS_PAL_SEM_T stSemHandle; if(VOS_OK != VOS_SmCCreate("BST",ulSmInit,VOS_SEMA4_PRIOR,&stSemHandle)) { return BST_NULL_PTR; } else { return stSemHandle; } #else return semCCreate(SEM_Q_PRIORITY, (BST_INT32)ulSmInit); #endif }
VOS_UINT32 PPM_UsbIndPortInit(VOS_VOID) { /* USB承载的OM IND端口,调用底软的异步接口发送数据,现在需要伪造成同步接口,申请信号量 */ if(VOS_OK != VOS_SmCCreate("UIND", 0, VOS_SEMA4_FIFO, &g_stUsbIndPseudoSync.ulPseudoSyncSemId)) { LogPrint("\r\nPPM_UsbIndPortInit: create g_stUsbIndPseudoSync.ulPseudoSyncSemId failedd\r\n"); return VOS_ERR; } DRV_USB_REGUDI_ENABLECB((USB_UDI_ENABLE_CB_T)PPM_UsbIndPortOpen); DRV_USB_REGUDI_DISABLECB((USB_UDI_DISABLE_CB_T)PPM_UsbIndPortClose); CPM_PhySendReg(CPM_IND_PORT, PPM_UsbIndSendData); return VOS_OK; }
/***************************************************************************** Function : HPA_Init Description: HPA Init Input : void Return : OK or Error Other : *****************************************************************************/ VOS_UINT32 HPA_Init(VOS_VOID) { /* set SFN & CFN */ g_ucHpaCfnRead = 0; g_usHpaSfnRead = 0; /* set to 0 */ atomic_set(&g_stDspMailBoxTransferCount, 0); atomic_set(&g_stGDspMailBoxTransferCount, 0); atomic_set(&g_stGDsp1MailBoxTransferCount, 0); /*Hpa Error Count global Var. Init*/ VOS_MemSet((VOS_VOID *)(g_astHpaErrorCount), (VOS_CHAR)0x00, sizeof(g_astHpaErrorCount)); /*Hpa Interrupt Count global Var. Init*/ VOS_MemSet((VOS_VOID *)(&g_stHpaIntCount), (VOS_CHAR)0x00, sizeof(HPA_INT_COUNT_STRU)); if ( VOS_OK != VOS_SmCCreate( "TRAN", 0, VOS_SEMA4_FIFO, &g_ulHpaTransferSem)) { PS_LOG(UEPS_PID_WHPA, 0, PS_PRINT_WARNING, "HPA: creat g_ulHpaTransferSem Err"); return VOS_ERR; } #ifdef HPA_ITT g_pfnHpaDspIsrStub = VOS_NULL_PTR; g_pfnHpaIttMsgFilterFunc = VOS_NULL_PTR; #endif if(NV_OK != NV_Read(en_NV_Item_Max_Gsm_Reg_Cnt,&g_stGhpaRegCnt,sizeof(g_stGhpaRegCnt))) { PS_LOG(UEPS_PID_APM, 0, PS_PRINT_WARNING, "HPA: Read en_NV_Item_Max_Gsm_Reg_Cnt Err"); } return VOS_OK; }
/***************************************************************************** Function : TF_TaskEntry Description: entry of the task Input : void Return : void Other : *****************************************************************************/ VOS_VOID TF_TaskEntry(VOS_UINT32 ulPara0, VOS_UINT32 ulPara1, VOS_UINT32 ulPara2, VOS_UINT32 ulPara3) { if ( VOS_OK != VOS_SmCCreate( "TF", 0, VOS_SEMA4_FIFO, &(g_stTFControl.ulSem))) { Print("TF: creat sem error.\r\n"); return; } if(VOS_OK != DRV_SDMMC_ADD_HOOK( 0, (VOS_VOID *)TF_InsertNotify)) { Print("TF: register hook to lowersoftware error.\r\n"); return; } TF_ConfigLed(); TF_NVAutoResume(); DRV_ONLINE_UPDATE_RESULT(); /* main loop */ for ( ; ; ) { if ( VOS_OK != VOS_SmP(g_stTFControl.ulSem, 0) ) { continue; } /* light LED updating */ PS_TURN_ON_UPDATE_VERSION_LED(); /*lint -e746 修改人:徐铖 51137 ;检视人:蒋开波 00105005; 原因:该告警是因为OSA的VOS_ULFUNCPTR原型定义时没有在形参中加入void */ /* AUTH */ if ( VOS_NULL_PTR != g_stTFControl.pulFunctionAddress ) { if ( VOS_OK != g_stTFControl.pulFunctionAddress() ) { /* light LED fail to update */ PS_TURN_ON_UPDATE_VERSION_FAIL_LED(); Print("TF AUTH fail.\r\n"); continue; } } /*lint +e746 修改人:徐铖 51137; 检视人:蒋开波 00105005;*/ if(VOS_TRUE == DRV_TF_NVBACKUP_FLAG()) { /* NV Backup*/ if ( VOS_OK != NV_Backup() ) { /* light LED fail to update */ PS_TURN_ON_UPDATE_VERSION_FAIL_LED(); Print("TF backup fail.\r\n"); continue; } } /*set the flag of update */ DRV_SET_UPDATA_FLAG(0); /* reboot */ VOS_FlowReboot(); } }
/***************************************************************************** Function : VOS_SmMCreate Description: To create a Mutex semaphore, can be null Input : acSmName[4] -- the semaphore name; ulFlags -- FIFO or priority; Output : pulSmID -- the ID of the created semaphore; Return : VOS_OK on success and errno on failure *****************************************************************************/ VOS_UINT32 VOS_SmMCreate( VOS_CHAR Sm_Name[4], VOS_UINT32 Flags, VOS_SEM *Sm_ID ) { return( VOS_SmCCreate( Sm_Name, 0xFFFFFFFF, Flags, Sm_ID )); }
VOS_UINT32 SCM_SoftDecodeCfgRcvTaskInit(VOS_VOID) { VOS_UINT32 ulRslt; if (VOS_OK != VOS_SmCCreate("OMCF", 0, VOS_SEMA4_FIFO, &(g_stSCMDataRcvTaskCtrlInfo.SmID))) { /*lint -e534*/ vos_printf("SCM_SoftDecodeCfgRcvTaskInit: Error, OMCFG semCCreate Fail.\n"); /*lint +e534*/ g_stScmSoftDecodeInfo.stRbInfo.ulSemCreatErr++; return VOS_ERR; } /* 注册OM配置数据接收自处理任务 */ ulRslt = VOS_RegisterSelfTaskPrio(MSP_FID_DIAG_ACPU, (VOS_TASK_ENTRY_TYPE)SCM_SoftDecodeCfgRcvSelfTask, SCM_DATA_RCV_SELFTASK_PRIO, 8096); if ( VOS_NULL_BYTE == ulRslt ) { vos_printf("SCM_SoftDecodeCfgRcvTaskInit: VOS_RegisterSelfTaskPrio Fail.\n"); return VOS_ERR; } /*lint -e534*/ VOS_MemSet(&g_stScmSoftDecodeInfo, 0, sizeof(g_stScmSoftDecodeInfo)); /*lint +e534*/ if (VOS_OK != SCM_SoftDecodeCfgHdlcInit(&g_stScmHdlcSoftDecodeEntity)) { /*lint -e534*/ vos_printf("SCM_SoftDecodeCfgRcvTaskInit: Error, HDLC Init Fail.\n"); /*lint +e534*/ g_stScmSoftDecodeInfo.ulHdlcInitErr++; return VOS_ERR; } g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId = OM_RingBufferCreate(SCM_DATA_RCV_BUFFER_SIZE); if (VOS_NULL_PTR == g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId) { /*lint -e534*/ vos_printf("SCM_SoftDecodeCfgRcvTaskInit: Error, Creat OMCFG ringBuffer Fail.\n"); /*lint +e534*/ g_stScmSoftDecodeInfo.stRbInfo.ulRingBufferCreatErr++; /*lint -e534*/ VOS_MemFree(MSP_PID_DIAG_APP_AGENT, g_stScmHdlcSoftDecodeEntity.pucDecapBuff); /*lint +e534*/ return VOS_ERR; } g_stSCMDataRcvTaskCtrlInfo.pucBuffer = &g_aucSCMDataRcvBuffer[0]; VOS_SpinLockInit(&g_stScmSoftDecodeDataRcvSpinLock); return VOS_OK; }
/***************************************************************************** 函 数 名 : Log_Init 功能描述 : 打印初始化 输入参数 : void 输出参数 : 无 返 回 值 : void 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2007年4月24日 作 者 : 李霄 46160 修改内容 : 新生成函数 *****************************************************************************/ void Log_Init(void) { OM_PORT_CFG_STRU stPortCfg; g_stLogEnt.ulPrintSwitch = LOG_FALSE; if (VOS_OK != VOS_SmMCreate("LOG_MSem", VOS_SEMA4_PRIOR | VOS_SEMA4_INVERSION_SAFE, &g_logBuffSem)) { vos_printf("Log: Error, semMCreate Fail"); return ; } if (VOS_OK != VOS_SmCCreate("LOG_CSem", 0, VOS_SEMA4_FIFO, &(g_stLogEnt.semOmPrint))) { VOS_SmDelete(g_logBuffSem); vos_printf("Log: Error, semCCreate Fail"); return ; } g_stLogEnt.rngOmRbufId = OM_RingBufferCreate(LOG_BUF_VOLUMN); if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId) { VOS_SmDelete(g_logBuffSem); VOS_SmDelete(g_stLogEnt.semOmPrint); vos_printf("Log: Error, rngCreate Fail"); return; } /* 从NV项中读出LOG的输出方式和文件支持的最大大小 */ if(NV_OK != NV_Read(en_NV_Item_Om_PsLog_Port, &stPortCfg, sizeof(OM_PORT_CFG_STRU))) { vos_printf("Log_InitFile: NV_Read fail, NV Id :%d\n", en_NV_Item_Om_PsLog_Port); stPortCfg.ulMaxFileSize = 0; } else { /*参数检测*/ if (OM_OUTPUT_BUTT > stPortCfg.enPortType) { g_stLogEnt.ulLogOutput = (LOG_ULONG)stPortCfg.enPortType; } } g_stLogEnt.ulPrintSwitch = LOG_TRUE; /* 注册底软的回调函数,定义OM_Log...... */ #ifdef __LOG_BBIT__ LOG_RegisterDrv((LOG_PFUN)OM_Log, (LOG_PFUN)OM_Log1, (LOG_PFUN)OM_Log2, (LOG_PFUN)OM_Log3, (LOG_PFUN)OM_Log4); #endif #ifdef __LOG_RELEASE__ LOG_RegisterDrv((LOG_PFUN)OM_LogId, (LOG_PFUN)OM_LogId1, (LOG_PFUN)OM_LogId2, (LOG_PFUN)OM_LogId3, (LOG_PFUN)OM_LogId4); #endif return; }