📄 lcm_l1.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 + -