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

📄 lcm_l1.c

📁 abstract rtos
💻 C
字号:
#ifdef __cplusplusextern "C"{#endif #include "syscfg.h"#include "aos.h"#include "../ker/ssp_msg.h"#include "../ker/ssp_debug.h"#include "lcm_q921.h"#include "lcm_if.h"VOID send_i_frame( L2_LINK_S *linkp ){    struct msg_blk *mb, *newmb;    U8 win_end, index, send_cnt;    Q921_FRAME_S *framep;            AOS_ASSERT_FUNC( NULL != linkp, return );    if( MULTIPLE_FRAME_ESTABLISHED != linkp->status )    {        return;    }#ifdef     LCM_DEBUG    aos_printf( MPE_LCM, "q921:->send_i_frame,phy=%s,portno=%d,dl=%s,va=%d,vs=%d",                PHY_STRING(linkp->phy_type),                linkp->phy_port_no,                DL_STRING(linkp->link_type),                linkp->v_a,                linkp->v_s );#endif        if( linkp->peer_rcv_busy )    {        return;    }        win_end = (linkp->v_a + linkp->k) & MOD_MASK;    if( linkp->v_s == win_end )    {        return;    }    if( linkp->i_frame_q.qlen <= ( (U32)(linkp->v_s-linkp->v_a)&MOD_MASK ) )    {        return;    }    index = linkp->v_a;    mb = linkp->i_frame_q.next;    while( index != linkp->v_s )    {        mb = mb->next;        if( NULL == mb )        {            aos_printf( MPE_LCM, "q921->: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) );            return;        }        index++;        index &= MOD_MASK;    }    send_cnt = 0;    while( (mb != (struct msg_blk *)&linkp->i_frame_q) && (index != win_end) )    {        newmb = msg_clone(mb);        if( NULL == newmb )        {#ifdef     LCM_DEBUG            aos_printf( MPE_LCM, "q921->:clone mb for s frame fail,phy=%s,portno=%d,dl=%s",                        PHY_STRING(linkp->phy_type),                        linkp->phy_port_no,                        DL_STRING(linkp->link_type) );#endif            break;        }        framep = (Q921_FRAME_S*)mb->data;        framep->ef_addr     = linkp->ef_addr;        framep->frm.i_frame.sapi = linkp->sapi;        framep->frm.i_frame.c_r  = linkp->own_cmd;        framep->frm.i_frame.ea_0 = 0;        framep->frm.i_frame.tei  = linkp->tei;        framep->frm.i_frame.ea_1 = 1;        framep->frm.i_frame.n_s = linkp->v_s;        framep->frm.i_frame.zero= 0;        framep->frm.i_frame.n_r = linkp->v_r;        framep->frm.i_frame.p_f = 0;        LCM_CUT_EFADDR_AND_SEND(linkp,newmb);                send_cnt++;        index++;        index &= MOD_MASK;        linkp->v_s = index;                mb  = mb->next;      }    if( send_cnt )    {        CLEAR_ACK_PENDING(linkp);        stop_t203(linkp);        start_t200(linkp);    	if( LCM_PRINT_L3_MSG(linkp) )    	{	        aos_printf( MPE_LCM, "q921:->send_i_frame,phy=%s,portno=%d,dl=%s,va=%d,vs=%d,send_cnt=%d",	                    PHY_STRING(linkp->phy_type),	                    linkp->phy_port_no,	                    DL_STRING(linkp->link_type),	                    linkp->v_a,	                    linkp->v_s,	                    send_cnt );    	}            }}VOID send_u_frame( L2_LINK_S *linkp, U8 c_r, U8 cmd, U8 p_f, struct msg_blk *mb ){    Q921_FRAME_S *framep;    struct msg_blk *newmb;    AOS_ASSERT_FUNC( NULL != linkp && NULL != mb, return );    newmb = msg_clone(mb);    if( NULL == newmb )    {#ifdef     LCM_DEBUG        aos_printf( MPE_LCM, "q921->:clone mb for u frame fail,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );#endif        return;    }	if( LCM_PRINT_L2_MSG(linkp) )	{	    aos_printf( MPE_LCM, "q921->:send_u_frame,phy=%s,portno=%d,dl=%s,c/r=%d,cmd=%s,p/f=%d",	                PHY_STRING(linkp->phy_type),	                linkp->phy_port_no,	                DL_STRING(linkp->link_type),	                c_r,cmd_string(cmd),p_f );	}        newmb->len  = U_FRAME_LEN;        newmb->tail = mb->data + newmb->len;        framep = (Q921_FRAME_S*)newmb->data;            framep->frm.u_frame.c_r = c_r;                    framep->frm.info[2] = cmd;    framep->frm.u_frame.p_f = p_f;     LCM_CUT_EFADDR_AND_SEND(linkp,newmb);}VOID send_u_frame_2( L2_LINK_S *linkp, U8 c_r, U8 cmd, U8 p_f ){    MSG_HEAD_S *msgp;    Q921_FRAME_S *framep;    struct msg_blk *newmb;    AOS_ASSERT_FUNC( NULL != linkp, return );     newmb = msg_alloc();    if( NULL == newmb )    {#ifdef     LCM_DEBUG        aos_printf( MPE_LCM, "q921->:allocates mb for u frame fail,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );#endif        return;    }	if( LCM_PRINT_L2_MSG(linkp) )	{        aos_printf( MPE_LCM, "q921->:send_u_frame_2,phy=%s,portno=%d,dl=%s,c/r=%d,cmd=%s,p/f=%d",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type),                    c_r,cmd_string(cmd),p_f );	}        msgp = (MSG_HEAD_S*)aos_dmem_alloc( MPE_LCM, Q921_SID_UFRAME, sizeof( MSG_HEAD_S ) + U_FRAME_LEN  + 14 );    if( NULL == msgp )    {#ifdef     LCM_DEBUG        aos_printf( MPE_LCM, "q921->:allocates u frame fail,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );#endif        msg_free(newmb);        return;      }    newmb->head = (VOID*)msgp;    newmb->truelen  = sizeof( MSG_HEAD_S ) + U_FRAME_LEN  + 14;    newmb->end  = newmb->head + newmb->truelen;        newmb->data = (VOID*)&msgp->msg[0];    newmb->len  = U_FRAME_LEN;    newmb->tail = newmb->data+newmb->len;    framep = (Q921_FRAME_S*)newmb->data;        framep->ef_addr = linkp->ef_addr;        framep->frm.u_frame.sapi = linkp->sapi;    framep->frm.u_frame.c_r  = c_r;    framep->frm.u_frame.ea_0 = 0;    framep->frm.u_frame.tei  = linkp->tei;    framep->frm.u_frame.ea_1 = 1;        framep->frm.info[2] = cmd;    framep->frm.u_frame.p_f = p_f;    LCM_CUT_EFADDR_AND_SEND(linkp,newmb);}VOID send_s_frame( L2_LINK_S *linkp, U8 c_r, U8 cmd, U8 p_f ){    MSG_HEAD_S *msgp;    Q921_FRAME_S *framep;    struct msg_blk *newmb;    AOS_ASSERT_FUNC( NULL != linkp, return );    newmb = msg_alloc();    if( NULL == newmb )    {#ifdef     LCM_DEBUG        aos_printf( MPE_LCM, "q921->:allocates mb for s frame fail,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );#endif        return;    }	if( LCM_PRINT_L2_MSG(linkp) )	{        aos_printf( MPE_LCM, "q921->:send_s_frame,phy=%s,portno=%d,dl=%s,c/r=%d,cmd=%s,p/f=%d,v_r=%d",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type),                    c_r,cmd_string(cmd),p_f, linkp->v_r );	}        msgp = (MSG_HEAD_S*)aos_dmem_alloc( MPE_LCM, Q921_SID_SFRAME, sizeof( MSG_HEAD_S ) + S_FRAME_LEN  + 14 );    if( NULL == msgp )    {#ifdef     LCM_DEBUG        aos_printf( MPE_LCM, "q921->:allocates s frame fail,phy=%s,portno=%d,dl=%s",                    PHY_STRING(linkp->phy_type),                    linkp->phy_port_no,                    DL_STRING(linkp->link_type) );#endif        msg_free(newmb);        return;      }    newmb->head = (VOID*)msgp;    newmb->truelen  = sizeof( MSG_HEAD_S ) + S_FRAME_LEN  + 14;    newmb->end  = newmb->head + newmb->truelen;        newmb->data = (VOID*)&msgp->msg[0];    newmb->len  = S_FRAME_LEN;    newmb->tail = newmb->data+newmb->len;    framep = (Q921_FRAME_S*)newmb->data;        framep->ef_addr = linkp->ef_addr;        framep->frm.s_frame.sapi = linkp->sapi;    framep->frm.s_frame.c_r  = c_r;    framep->frm.s_frame.ea_0 = 0;    framep->frm.s_frame.tei  = linkp->tei;    framep->frm.s_frame.ea_1 = 1;        framep->frm.info[2] = cmd;    framep->frm.s_frame.n_r = linkp->v_r;    framep->frm.s_frame.p_f = p_f;    LCM_CUT_EFADDR_AND_SEND(linkp,newmb);}#ifdef __cplusplus}#endif 

⌨️ 快捷键说明

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