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

📄 lcm_eiadrv.c

📁 abstract rtos
💻 C
字号:
#ifdef __cplusplusextern "C"{#endif #include "syscfg.h"#if( CONFIG_BOARD_GMPU == TRUE || CONFIG_BOARD_EIA == TRUE )#include "aos.h"#include "p2p_include.h"#include "ip/ip_pub.h" #include "socket/sock_pub.h"  #include "socket/sock_err.h"#if( CONFIG_BOARD_EIA == TRUE )#include "cfm/cfm_pub.h"#endif#include "../ker/ssp_msg.h"#include "lcm_q921.h"#include "lcm_udpdrv.h"#define DRV_EIA_DEBUG( fmt, eiano, p1, p2, p3 )void drv_eia_send_auth( MSG_S *pMsg, SOCKADDRIN_S *pTo, U32 tcpflag, U32 tcpSeq, U32 tcpAck );VOID drv_eia_send( U32 eia_no, struct msg_blk *mb ){    EIA_TABLE_S *pEia;    if( NULL == mb || NULL == mb->data )    {        if( NULL != mb )        {            msg_free( mb );        }                return ;    }    pEia = drv_get_eia_cb(eia_no);    if( (NULL == pEia)      || (FALSE == pEia->status) )    {        goto err_ret;    }    drv_udp_send( pEia, eia_no, mb );    return;err_ret:    aos_dmem_free( (VOID*)mb->head );    msg_free( mb );}void drv_eia_send_auth_ack( U16 eia_no, MSG_S *pMsg, SOCKADDRIN_S *pFrom, U32 tcpflag ){    EIA_TABLE_S *pEia;    pEia = drv_get_eia_cb(eia_no);    if( (NULL == pEia)      || (FALSE == pEia->status) )    {        goto err_ret;    }        drv_eia_send_auth( pMsg, pFrom, tcpflag, pEia->tcpSeq, pEia->tcpAck );    if(tcpflag)    {        pEia->tcpSeq += pMsg->ulSize + sizeof(struct eia_msg_hdr);    }    return;err_ret:    aos_msg_free( pMsg->pvMsgBuf );}void drv_eia_send_auth_req( MSG_S *pMsg, SOCKADDRIN_S *pTo, U32 tcpflag ){    EIA_TABLE_S *pEia;    pEia = &eia_table[0];            if( tcpflag )    {        AOS_ASSERT(0);        aos_dmem_free( mem_obj_head(pMsg->pvMsgBuf) );        return;    }    drv_eia_send_auth( pMsg, pTo, tcpflag, pEia->tcpSeq, pEia->tcpAck );}void drv_eia_send_auth( MSG_S *pMsg, SOCKADDRIN_S *pTo, U32 tcpflag, U32 tcpSeq, U32 tcpAck ){    struct eia_msg_hdr *headp;    MSG_HEAD_S *pMsgHead;    struct msg_blk *newmb;    if( NULL == pMsg || NULL == pMsg->pvMsgBuf )    {        return;    }    pMsgHead = (MSG_HEAD_S*)((U32)pMsg->pvMsgBuf - ELEMENT_OFFSET(MSG_HEAD_S,msg));    if( NULL == pTo )    {        aos_dmem_free( (VOID*)pMsgHead );        return;    }    if( (LOCAL_PROCESSOR_ID != pMsg->srcProcessorId) ||        (MPE_DEV != pMsg->srcMpe) ||        (MPE_DEV != pMsg->dstMpe) )    {        aos_dmem_free( (VOID*)pMsgHead );        return;    }        newmb = msg_alloc();    if( NULL == newmb )    {        aos_dmem_free( (VOID*)pMsgHead );        return;    }    newmb->head    = (U8*)pMsgHead;    newmb->truelen = (U32)pMsg->ulSize + ELEMENT_OFFSET( MSG_HEAD_S, msg );    newmb->end     = newmb->head + newmb->truelen;            newmb->data = (U8*)pMsg->pvMsgBuf;    newmb->len  = pMsg->ulSize;    newmb->tail = newmb->data + newmb->len;        headp = (struct eia_msg_hdr*)msg_push(newmb,sizeof(struct eia_msg_hdr) );    headp->msg_type  = EIA_AUTHEN;    headp->not_ordered = 1;    headp->is_new_ver  = 1;    headp->is_siptrunk = 0;    headp->eia_no_hi = 0x0F;    headp->eia_no_lo = U8_BUTT;    headp->timestamp = 0;          headp->tx_serialno= 0;     #if CONFIG_BOARD_GMPU == TRUE    if( tcpflag )    {        lcm_tcp_rapid_send_to_eth( g_lcm_rel_udp_port, tcpSeq, tcpAck, newmb, pTo );    }    else    {        lcm_rapid_send_to_eth( g_lcm_rel_udp_port, newmb, pTo );    }#else    lcm_rapid_send_to_eth( g_lcm_rel_udp_port, newmb, pTo );#endif}void drv_eia_add( U16 eiano, SOCKADDRIN_S *pFrom, U32 tcpflag, U32 tcpSeq, U32 tcpAck, U32 new_lcm_ver ){    EIA_TABLE_S *pEia;    DRV_EIA_DEBUG( "add eia %d", eiano, 0, 0, 0 );    if( NULL == pFrom )    {        return;    }    pEia = drv_get_eia_cb(eiano);    if( NULL == pEia )    {        return;    }            tcpAck += sizeof(struct eia_msg_hdr);#if( CONFIG_BOARD_EIA == TRUE )    if( (S32)(pEia->tcpSeq - tcpSeq) > 0 )    {        tcpSeq = pEia->tcpSeq;    }    if( (S32)(pEia->tcpAck - tcpAck) > 0 )    {        tcpAck = pEia->tcpAck;    }#endif    drv_udp_add( pEia, pFrom, tcpflag, tcpSeq, tcpAck, new_lcm_ver );}void drv_eia_delete( U16 eiano ){    EIA_TABLE_S    *pEia;    DRV_EIA_DEBUG( "deleate eia %d", eiano, 0, 0, 0 );        pEia = drv_get_eia_cb(eiano);    if( NULL == pEia )    {        return;    }    drv_udp_delete( pEia );}U16 drv_eia_get_peer_port( U16 eiano ){    EIA_TABLE_S    *pEia;       pEia = drv_get_eia_cb(eiano);    if( NULL == pEia || FALSE == pEia->status )    {        return U16_BUTT;    }    return AOS_NTOHS(pEia->addr.sin_usPort);}U32 drv_eia_get_peer_ip( U16 eiano ){    EIA_TABLE_S    *pEia;        pEia = drv_get_eia_cb(eiano);    if( NULL == pEia || FALSE == pEia->status )    {        return U16_BUTT;    }    return pEia->addr.sin_stAddr.s_ulAddr;}U32 drv_eia_is_tcp_mode( U16 eiano ){    EIA_TABLE_S    *pEia;        pEia = drv_get_eia_cb(eiano);    if( NULL == pEia || FALSE == pEia->status )    {        return 0;    }    return pEia->is_tcp_mode;}#endif#ifdef __cplusplus}#endif 

⌨️ 快捷键说明

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