![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
broadcom 4.x DSP驱动分析笔记
技术人生LJF
空杯心态
展开
-
ENDPT_410_casTaskMain
while(1) bosSleep( CAS_TASK_RATE ) //延时10 ms //读取命令队列while(memCircBufRead(casCtlCmdQ,(char*)&command,sizeof(CASCMD))==BUF_STATUS_OK ) //执行命令处理,收集命令信息,CASIO内容比较多,放在下面单独介绍 casIO(&casState.原创 2013-09-22 01:15:42 · 912 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptCreate
state = &vrgEndpt[physId]; //获取线路对象//根据线路类型设置线路对象类型属性,当前只关心FXSif (boardHalIsSlic(lineId)) state->endptType = EPTYPE_FXS;endptState->endptFuncs = &gVrgEndptFuncs; //ENDPT相关函数集,所有主功能函数处理e原创 2013-09-23 07:42:41 · 911 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptCapabilities
lineId = ((VRG_ENDPT_STATE *) endptState)->lineId;dspNum = lineId / (VRG_ENDPT_CFG_NUM_ENDPT/VRG_GLOBAL_CFG_MAX_NUM_DSP);//初始化ENDPT能力集*capabilities = vrgEndptCap[dspNum];state = GetEndptSt原创 2013-09-23 07:41:19 · 663 阅读 · 0 评论 -
ENDPT_410_HapiCnxEventProcess
cnx = GetCnxStateFromVHD( hapiEvt->handle ); //获取线路对象switch( hapiEvt->eventId )case HAPI_CDIS_HDLCDETECT: //检测到V21 HDLC信号 int reason = EPEVTREASON_V21flag; logEvent = VRG_TRUE; endptSta原创 2013-09-23 07:39:24 · 1570 阅读 · 1 评论 -
ENDPT_410_ProcessVrgEndptLinkInternal
//获取需要相连的两个线路索引lineId1 = ((VRG_ENDPT_STATE *) endptState)->lineId;lineId2 = ((VRG_ENDPT_STATE *) otherEndptState)->lineId;//获取两个ENDPT对象state1 = GetEndptState( lineId1 );state2 = GetEndptSt原创 2013-09-23 07:48:08 · 607 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptDestroy
state = GetEndptState( vrgEndptState->lineId ); //获取ENDPT对象//向心跳模块注销拖管病号hbUnregisterPatient( state->cnxSignalHBId );hbUnregisterPatient( state->signalHBId );hbUnregisterPatient( state->sign原创 2013-09-23 07:44:35 · 765 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptDeleteConnection
state = GetEndptState( lineId ); //获取线路对象if (cnxId == CNX_UNUSED) //如果资源ID未设置,则表示删除当前线路所有资源连接 //遍历当前线路所有资源连接 for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MAX_CNX_PER_ENDPT; cnxIndex++ ) //如果原创 2013-09-23 07:43:34 · 729 阅读 · 0 评论 -
ENDPT_410_HapiEndptEventProcess
state = GetEndptStateFromVHD( hapiEvt->handle ); //获取线路对象switch( hapiEvt->eventId )case HAPI_PTE_TONE_ON_EVT: //DTMF按键ON事件 VRG_UINT8 tone = hapiEvt->op2.val & 0xFF; //获取按键音 //如果按键音大于正常原创 2013-09-23 07:39:41 · 990 阅读 · 0 评论 -
ENDPT_410_MltEventProcess
VRG_ENDPT *pState = GetEndptState(mltEvt->portId); //获取endpt对象pState->testMode = TESTMODE_NONE; //清除测试标记//通知用户层,线路诊断测试完成,上报测试结果(*endptConfig.notify)( pState->endptArchive, -1, EPEVT_MLT_MEA原创 2013-09-23 07:40:41 · 663 阅读 · 0 评论 -
ENDPT_410_endpoint_init
bosInit(); //memset结构gBosErrorModule bosErrorInit(); bosSleepInit() //将sleep相关函数名存入错误模块gBosErrorModule数组中 bosSleepInitFunctionNames() bosSemInit() //将sim相关函数名存入错误模块gBosErrorModu原创 2013-09-23 07:37:21 · 992 阅读 · 0 评论 -
ENDPT_410_endpoint_open
//为用户层准备,初始化收包队列packetQueueInit(); packetQueue.head = 0; packetQueue.tail = 0; packetQueue.length = 0; memset( &packetAvailableSemaphore, 0, sizeof(packetAvailableSema原创 2013-09-23 07:38:27 · 725 阅读 · 0 评论 -
ENDPT_410_endpoint_ioctl
//函数指针数组 FN_IOCTL IoctlFuncs[] = { DoVrgEndptInit, DoVrgEndptDeinit, DoVrgEndptCreate, DoVrgEndptDestroy, DoVrgEndptCapabilities, DoVrgEndptSignal, D原创 2013-09-23 07:38:08 · 799 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptGetRtpStats
lineId = ((VRG_ENDPT_STATE *) endptState)->lineId;state = GetEndptState( lineId ); //获取ENDPT对象//查找上层传入的资源ID,是否在驱动中有对应的CNX资源对象,如果没有则返回错误for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MAX_CNX_PER_原创 2013-09-23 07:44:42 · 751 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptGetT38Stats
state = GetEndptState( lineId ); //获取ENDPT对象//根据用户传来CNXID查找资源对象,如没找到则返回错误for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MAX_CNX_PER_ENDPT; cnxIndex++ ) if ((state->cnx[cnxIndex]) && (state->cnx[c原创 2013-09-23 07:45:44 · 614 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptCreateConnection
state = GetEndptState( lineId ); //获取ENDPT对象//收发模式校验if (!IsCnxModeSupported(cnxParam->mode, dspNum)) return ( EPSTATUS_UNSUPPORTED_MODE );if ( state->endptType == EPTYPE_PSTN ) //FXO口类型原创 2013-09-23 07:43:23 · 1078 阅读 · 0 评论 -
ENDPT_410_CnxVhdEventCallback
cnx = GetCnxStateFromVHD( evtp->hsxdevhdl ); //获取CNX对象switch( evtp->hsxevt )case HAPINET_INGRESSRTPPKT: //向外待发送RTP endptState = GetEndptState( cnx->lineId ); //获取ENDPT对象 //我们当前来显不是这种模式,暂不看原创 2013-09-22 01:16:32 · 649 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptConsoleCmd
state = GetEndptState( lineId ); //获取线路对象casDriver = boardHalCasGetDriver( state->endptNum ); //获取CAS驱动对象switch ( cmd )//显示当前DSP mips值,当前该功能没用,返回硬编码0case EPCMD_DSP_MIPS: VRG_LOG_INFO((VRG_原创 2013-09-23 07:41:35 · 1149 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptSignal
state = GetEndptState( lineId ); //获取线路对象if( cnxId != -1 ) //如果当前信号作用于资源对象上 cnx = GetCnxState( cnxId ); //获取资源对象 if (signal == EPSIG_SB_DISCONNECT ) //设置VHD断开控制 //遍历当前线路所有资源对象 for( i原创 2013-09-23 07:50:14 · 1189 阅读 · 0 评论 -
ENDPT_410_DoVrgEndptInit
isEndptDeinitialized = FALSE; //标记endpt已经初始化initStatus = 0; //初始到哪个阶段,有多位宏表示initThreadPid = current->pid; //记载当前哪个进程调用了这个模块,当模块出现错误时,给该进程发送信号//挂载默认断言回调,其中voiceAssertHandler回调函数有向initThreadP原创 2013-09-23 07:34:38 · 1758 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptMuteConnection
lineId = ((VRG_ENDPT_STATE *) endptState)->lineId;state = GetEndptState( lineId ); //获取ENDPT对象//根据上层传来CNXID查找资源对象,如果没找到则返回错误for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MAX_CNX_PER_ENDPT; cnx原创 2013-09-23 07:49:18 · 666 阅读 · 0 评论 -
ENDPT_410_tpdTaskMain
while(1) //从消息队列中获取要要处理的消息 bosMsgQReceive( &tpdState.msgQId, &msgBuf ); //如果ENDPT主任务已经要求退出,则回应ACK并退出 if ( status == BOS_STATUS_RESET ) bosTaskResetAck(); return; if ( status == B原创 2013-09-24 00:35:31 · 715 阅读 · 0 评论 -
ENDPT_410_pstnCtlTaskMain
while ( 1 ) bosSleep( PSTN_CTL_CFG_TASK_RATE_MS ); //延时50 ms for (i = 0; i < PSTN_CTL_MAX_CHANNELS; i++) //遍历所有FXO口 //如果当前FXO口线路摘机并等待播号音 if ((pstnCtlState.chanState[i].vhdHdl != 0xFF) &&原创 2013-09-24 00:34:52 · 708 阅读 · 0 评论 -
ENDPT_410_PstnEventProcess
state = GetEndptStateFromVHD( pstnEvt->vhdHdl ); //获取线路对象switch ( pstnEvt->pEventInfo->event )case PSTN_CTL_EVT_CPTONE_TIMEOUT : //摘机后等待播号音超时 //给用户上报等待进展音超时事件 (*endptConfig.notify)( state->e原创 2013-09-24 00:34:58 · 590 阅读 · 0 评论 -
ENDPT_410_VrgDispatcherTaskMain
while( 1 ) semStatus = bosSemTake( &vrgDispSem ); //获取信号量等待 //从事件队列中获取事件 status = VrgQueueGet(vrgEventQ, &evt, sizeof(evt)); if ( status == EPSTATUS_SUCCESS ) VrgEventProcess( &evt );原创 2013-09-24 00:36:13 · 866 阅读 · 0 评论 -
ENDPT_410_CasEventProcess
GetEndptIndexFromCasHandle( casEvt->handle, &endptId );state = GetEndptStateFromPhysId( endptId ); //获取ENDPT对象BlockEvent = state->classState.evBlock; //获取当前事件阻塞集switch( casEvt->eventType )原创 2013-09-22 01:14:55 · 1407 阅读 · 0 评论 -
ENDPT_410_ProcessVrgEndptModifyConnection
state = GetEndptState( lineId ); //获取线路对象//合法性模式校验if (!IsCnxModeSupported(cnxParam->mode, dspNum)) return ( EPSTATUS_UNSUPPORTED_MODE );//合法性资源ID校验for( cnxIndex = 0; cnxIndex < VRG_ENDPT原创 2013-09-23 07:49:10 · 764 阅读 · 0 评论 -
ENDPT_410_endpoint_cleanup
DoVrgEndptDeinit(arg); //如果之前初始化阶段完成,则释放每条线路的所有媒体连接 if ( initStatus & VRGENDPTINIT_COMPLETED ) for (i = 0; i < vrgEndptGetNumEndpoints(); i++) for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MA原创 2013-09-23 07:35:22 · 964 阅读 · 0 评论