⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm_q921.c

📁 abstract rtos
💻 C
📖 第 1 页 / 共 5 页
字号:
                send_msg_to_l3( linkp, MDL_RELEASE_CONFIRM );                stop_t200(linkp);                SET_LINK_STATUS( linkp, LINK_NOT_ESTABLISHED );            }            else            {                send_u_frame_2( linkp, linkp->own_cmd, _DISC, P_1 );                start_t200( linkp );                SET_LINK_STATUS( linkp, AWAITING_RELEASE );            }            break;                                default:            AOS_ASSERT( 0 );            break;    }}VOID establish_data_link( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );    CLEAR_EXCEPTION_COND(linkp);    linkp->rc = 0;    send_u_frame_2( linkp, linkp->own_cmd, _SABME, P_1 );    start_t200(linkp);    stop_t203(linkp);}AOS_INLINE VOID start_t200( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );        aos_timer_start( &linkp->t200, MPE_LCM, linkp->t200_len,                     Q921_T200, (U32)linkp, AOS_TIMER_NO_LOOP );}AOS_INLINE VOID start_t203( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );    aos_timer_start( &linkp->t203, MPE_LCM, linkp->t203_len,                     Q921_T203, (U32)linkp, AOS_TIMER_NO_LOOP );}AOS_INLINE VOID stop_t200( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );    aos_timer_stop( &linkp->t200 );}AOS_INLINE VOID stop_t203( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );    aos_timer_stop( &linkp->t203 );}AOS_INLINE U32 able_to_establish( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );        if( LCM_DRV_HDLC == linkp->phy_type )    {#if( CONFIG_BOARD_GMPU == TRUE )        if( !linkp->is_for_dss1 	      &&FALSE == v5_is_dl_allow_establish( (U16)linkp->phy_port_no, linkp->link_type ) )        {            return FALSE;        }#endif            }    else if( LCM_DRV_ETH == linkp->phy_type || LCM_DRV_UDP4EIA == linkp->phy_type )    {        U32 proc_id =  LOCAL_PROCESSOR_ID;                        if( (TRUE == dev_card_is_mpu( proc_id ))          &&(FALSE == dev_mpu_card_is_master() )          &&(FALSE == dev_card_is_mpu( linkp->phy_port_no )) )        {            return FALSE;        }    }        return TRUE;}VOID transmit_enquiry( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );    if( linkp->own_rcv_busy )    {        send_s_frame( linkp, linkp->own_cmd, _RNR, P_1 );    }    else    {        send_s_frame( linkp, linkp->own_cmd, _RR, P_1 );    }    CLEAR_ACK_PENDING(linkp);    start_t200(linkp);}VOID enquiry_response( L2_LINK_S *linkp ){    AOS_ASSERT( NULL != linkp );        if( linkp->own_rcv_busy )    {        send_s_frame( linkp, linkp->own_resp, _RNR, F_1 );    }    else    {        send_s_frame( linkp, linkp->own_resp, _RR, F_1 );    }    CLEAR_ACK_PENDING(linkp);}VOID n_r_error_recovery( L2_LINK_S *linkp ){    #ifdef LCM_DEBUG    aos_printf( MPE_LCM, "q921<-:n_r_error_recovery"                "at phy=%s portno=%d, dl=%s",                PHY_STRING(linkp->phy_type), linkp->phy_port_no,                DL_STRING(linkp->link_type) );    #endif    mdl_error_indication( linkp, Q921_ERR_J );        establish_data_link( linkp );    CLEAR_L3_INITED( linkp );}VOID mdl_error_indication( L2_LINK_S *linkp, U32 errCode ){	S8 errString[33]={0,};	AOS_ASSERT_FUNC( NULL != linkp, return );    if( LCM_PRINT_ERROR_IND(linkp) )    {	    error_string( errCode, errString );	    aos_printf( MPE_LCM, "q921<-:mdl_error_indication"	                "at phy=%s portno=%d, dl=%s, status=%s, errCode=0x%x,errString=%s",	                PHY_STRING(linkp->phy_type), linkp->phy_port_no,                    DL_STRING(linkp->link_type), STATUS_STRING(linkp->status),                    errCode, errString );    }    linkp->error_code |= errCode;}VOID invoke_retransmission( L2_LINK_S *linkp ){	if( linkp->v_s != linkp->v_a )	{		mdl_error_indication( linkp, Q921_ERR_P );	    linkp->v_s = linkp->v_a;	}}VOID put_in_i_que( L2_LINK_S *linkp, struct msg_blk *mb ){    AOS_ASSERT( NULL != linkp && NULL != mb );  	if( LCM_PRINT_L3_MSG(linkp) )  	{	    aos_printf( MPE_LCM,"put_in_i_que at phy=%s portno=%d, dl=%s, status=%s",	                PHY_STRING(linkp->phy_type), linkp->phy_port_no,                    DL_STRING(linkp->link_type), STATUS_STRING(linkp->status) );  	}    if( LCM_DRV_UDP4EIA == linkp->phy_type || LCM_DRV_UDP4SIPTRUNK == linkp->phy_type )    {        if( linkp->i_frame_q.qlen >= CONFIG_LCM_QUEUE_LEN )        {            if( NULL != mb )            {                aos_dmem_free( (VOID*)mb->head );                msg_free(mb);            }            linkp->discard_pkt++;            return;        }    }        msg_que_tail( &linkp->i_frame_q, mb );    send_i_frame(linkp);    }VOID discard_i_que( L2_LINK_S *linkp ){    struct msg_blk *mb;        AOS_ASSERT( NULL != linkp );        #ifdef LCM_DEBUG    aos_printf( MPE_LCM,"discard_i_que" );    #endif    while( NULL != (mb=msg_deque(&linkp->i_frame_q) ) )    {        aos_dmem_free( (VOID*)mb->head );        msg_free(mb);        linkp->discard_pkt++;    }}VOID confirm_i_frame( L2_LINK_S *linkp, U8 n_r ){    struct msg_blk *mb;        AOS_ASSERT( NULL != linkp );    while( linkp->v_a != n_r )    {        mb = msg_deque( &linkp->i_frame_q );        if( NULL == mb )        {            aos_printf( MPE_LCM, "q921:confirm_i_frame:get null pointer frome i "                    "frame queue,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );            break;        }        aos_dmem_free( (VOID*)mb->head );        msg_free(mb);        linkp->v_a++;        linkp->v_a &= MOD_MASK;    }}U32 get_cmd( struct msg_blk *mb, L2_LINK_S *linkp ){    Q921_FRAME_S *framep;    EF_ADDR_S temp_ef;    U32 cmd;    U8  peer_rsp;    AOS_ASSERT( NULL != mb && NULL != linkp );        framep = (Q921_FRAME_S *)mb->data;    if( framep->frm.u_frame.ea_0)    {        return _ERR_EA0;    }    if( !framep->frm.u_frame.ea_1 )    {        return _ERR_EA1;    }    if( !linkp->is_for_dss1 )    {        temp_ef.ef = framep->ef_addr;        if( temp_ef.s.ea_0 &1 )        {            return _ERR_EA1;        }        if( !temp_ef.s.ea_1 )        {            return _ERR_EA0;        }        if( temp_ef.s.zero )        {            return _ERR_EF_ZERO;        }    }    if( IS_I_FRAME( framep ) )    {        if( mb->len < I_FRAME_LEN )        {            return _ERR_FRAME;        }        if( mb->len > (linkp->n201+I_FRAME_LEN) )        {            return _ERR_FRAME_TOO_LONG;        }        if( framep->frm.u_frame.c_r != linkp->peer_cmd )        {            return _ERR_C_R;        }        return _I_COMMAND;    }    else if( IS_U_FRAME( framep ) )    {        cmd = framep->frm.info[2] & 0xef;        peer_rsp = (linkp->peer_cmd == NET_CMD ? NET_ACK : USER_ACK);        if( ((_SABME == cmd || _UI == cmd || _DISC == cmd)&&(framep->frm.u_frame.c_r != linkp->peer_cmd) )           ||((_DM == cmd || _UA == cmd || _FRMR == cmd )&&(framep->frm.u_frame.c_r != peer_rsp) ) )        {               return _ERR_C_R;        }            if( _UI != cmd )        {            if( mb->len != U_FRAME_LEN )            {                return _ERR_FRAME;            }            if( _SABME == cmd || _DM == cmd || _DISC == cmd              || _UA == cmd || _FRMR == cmd || _XID == cmd )            {            	return cmd;            }        }        else        {            if( mb->len < U_FRAME_LEN )            {                return _ERR_FRAME;            }            if( mb->len > (linkp->n201+I_FRAME_LEN) )            {                return _ERR_FRAME_TOO_LONG;            }            return _UI;        }    }    else if( IS_S_FRAME( framep ) )    {        cmd = framep->frm.info[2] & 0xef;    	        if( mb->len != S_FRAME_LEN )        {            return _ERR_FRAME;        }        if( _RR == cmd || _RNR == cmd || _REJ == cmd )        {        	return cmd;        }    }       	return _ERR_UNKNOWN_FRAME;}S8 *cmd_string( U32 cmd ){    S8 *s;        switch( cmd )    {        case _I_COMMAND:            s = "i comand";            break;                    case _UI:            s = "ui";            break;                    case _SABME:            s = "sabme";            break;        case _DISC:            s = "disc";            break;        case _UA:            s = "ua";            break;        case _DM:            s = "dm";            break;                    case _RR:            s = "rr";            break;        case _RNR:            s = "rnr";            break;        case _REJ:            s = "rej";            break;                    case _FRMR:            s = "frmr";            break;                    case _XID:            s = "xid";            break;        case _ERR_FRAME:            s = "err frame";            break;        case _ERR_EA0:            s = "err ea0";            break;        case _ERR_EA1:            s = "err ea1";            break;        case _ERR_EF_ZERO:            s = "err ef zero field";            break;                    case _ERR_FRAME_TOO_LONG:            s = "frame too long";            break;        default :            s = "err cmd";            break;    }    return s;}AOS_INLINE U8 get_link_type( U32 tei ){    U8 result;            switch( tei )    {        case PSTN_TEI:            result = V5DL_ID_PSTN;            break;        case CTRL_TEI:            result = V5DL_ID_CTRL;                        break;        case BCC_TEI:            result = V5DL_ID_BCC;                        break;        case PROT_TEI:            result = V5DL_ID_PROT1;                        break;        case LCTRL_TEI:            result = V5DL_ID_LINKC;                        break;        case DEV_TEI:            result = 0;            break;                    default:            result = V5DL_ID_BUTT;            break;    }    return result;}U16 lcm_get_dev_ef_addr( ){    U16 ef_addr;        FILL_EF_ADDR( ef_addr, LINK_EF_ADDR(V5DL_ID_DEV_MNGT) );    return ef_addr;}VOID error_string( U32 errCode, S8 *string ){	S8 ch='A';	U32 i=0,j=0;		while(i<('P'-'A'+1))	{		if( errCode & 1 )		{    		string[j+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -