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

📄 ssp_ping.c

📁 abstract rtos
💻 C
📖 第 1 页 / 共 3 页
字号:
    }            if( aping_paras[0][0] & XPING_R_X )    {                msg.srcProcessorId = LOCAL_PROCESSOR_ID;        msg.srcMpe = MPE_APING;        msg.dstProcessorId = aping_paras[0][1];        msg.dstMpe = MPE_APING;        msg.msgPrio = MSG_PRIO_NORMAL;        msg.ulSize  = sizeof(struct aping_s);        msg.pvMsgBuf = (VOID*)apingp;        apingp->prim = XPING_GO;                    aos_msg_send( &msg );        return;    }            if( 255 == apingp->cli_index )    {        aos_task_create("pingtsk", 10240, TASK_PRIO_NORMAL,             AOS_TASK_NOPREEMPT, (VOID(*)(VOID *))aping_task, (VOID*)apingp, &task_id );    }    else    {        aping_task(apingp);    }}VOID xping_go_handle( struct aping_s *apingp0 ){    U32   ulRet,aping_tid;    struct aping_s *apingp;    apingp = aos_msg_alloc( MPE_APING, sizeof(struct aping_s) );    if( NULL == apingp )    {        return;    }    aos_memcpy( apingp, apingp0, sizeof(struct aping_s) );        ulRet = aos_task_create("aping",                     8192,                    TASK_PRIO_NORMAL,                    AOS_TASK_NOPREEMPT,                    (VOID(*)(VOID *))aping_task,                    (VOID*)apingp,                    &aping_tid );    if( AOS_SUCC != ulRet )    {        apingp->prim  = XPING_BACK;        apingp->delay = 0;        apingp->xping_result = XPING_FAIL;        xping_back(apingp);    }}VOID aping_go_handle( struct aping_s *apingp ){    if( apingp->next_r >= apingp->total_r )    {                return;    }        if( apingp->next_r == (apingp->total_r-1) )    {                aping_back( apingp );        return;    }    else    {                aping_go( apingp );    }}VOID aping_back_handle( struct aping_s *apingp0 ){    struct msg_blk *mb;    U32  i;    struct aping_s *apingp;    if( apingp0->next_r )    {                aping_back( apingp0 );        return;    }            for( i = 0; i < APING_TASK_NUM; i++ )    {        if( U32_BUTT != ap_tsk[i].task_id          && apingp0->ping_task == (U8)ap_tsk[i].task_id )        {            break;        }    }    if( i >= APING_TASK_NUM )    {        return;    }        mb = msg_alloc();    if( NULL == mb )    {        return;    }    apingp = aos_msg_alloc( MPE_APING, sizeof(struct aping_s) );    if( NULL == apingp )    {        msg_free( mb );        return;    }    aos_memcpy( apingp, apingp0, sizeof(struct aping_s) );    mb->data = (U8*)apingp;    msg_que_tail( &ap_tsk[i].q1, mb );    aos_event_post( ap_tsk[i].task_id, APING_BACK_EVENT );}VOID xping_back_handle( struct aping_s *apingp ){    S8   szFrom[128],szBuf[256],*str;    U32  ping_mode;    U32  send_cnt,lost_cnt,lost_percent;    S32  l;        szFrom[0] = 0;    str = szFrom;        if( apingp->total_r > 0 )    {        ping_mode = AOS_NTOHL( apingp->aping_r[0][0] );        if( ping_mode & APING_R_EIA )        {            l = aos_sprintf( str, "[eia %u", AOS_NTOHL( apingp->aping_r[0][1] ) );        }        else if( ping_mode & APING_R_EIX )        {            l = aos_sprintf( str, "[eix" );        }        else        {            if( ping_mode & APING_R_IP_EX )            {                l = aos_sprintf( str, "[ip %A:%u", apingp->aping_r[0][1], AOS_HTONS(apingp->aping_p[0]) );            }            else            {                l = aos_sprintf( str, "[ip %A", apingp->aping_r[0][1] );            }        }        str += l;    }    if( apingp->total_r > 1 )    {        ping_mode = AOS_NTOHL( apingp->aping_r[1][0] );         if( ping_mode & APING_R_EIA )        {            l = aos_sprintf( str, " - eia %u", AOS_NTOHL( apingp->aping_r[1][1] ) );        }        else if( ping_mode & APING_R_EIX )        {            l = aos_sprintf( str, " - eix" );        }        else        {            if( ping_mode & APING_R_IP_EX )            {                l = aos_sprintf( str, " - ip %A:%u", apingp->aping_r[1][1], AOS_HTONS(apingp->aping_p[1]) );            }            else            {                l = aos_sprintf( str, " - ip %A", apingp->aping_r[1][1] );            }        }        str += l;    }    if( apingp->total_r > 2 )    {        ping_mode = AOS_NTOHL( apingp->aping_r[2][0] );         if( ping_mode & APING_R_EIA )        {            l = aos_sprintf( str, " - eia %u", AOS_NTOHL( apingp->aping_r[2][1] ) );        }        else if( ping_mode & APING_R_EIX )        {            l = aos_sprintf( str, " - eix" );        }        else        {            if( ping_mode & APING_R_IP_EX )            {                l = aos_sprintf( str, " - ip %A:%u", apingp->aping_r[2][1], AOS_HTONS(apingp->aping_p[2]) );            }            else            {                l = aos_sprintf( str, " - ip %A", apingp->aping_r[2][1] );            }        }        str += l;    }    aos_sprintf( str, "]" );    switch( apingp->xping_result )    {        case XPING_REPORT:            aos_sprintf( szBuf, "\r\nXping-%s reply,seq=%u, time < %ums",                szFrom, AOS_NTOHS(apingp->seq), AOS_NTOHL(apingp->delay) );            aping_out_string( apingp, szBuf, 0 );            break;                    case XPING_TIMEOUT:            aos_sprintf( szBuf, "\r\nXping-%s timeout,seq=%u", szFrom, AOS_NTOHS(apingp->seq) );            aping_out_string( apingp, szBuf, 0 );            break;        case XPING_END:            send_cnt  = AOS_NTOHL(apingp->aping_b[0][0]);            lost_cnt = AOS_NTOHL(apingp->aping_b[1][0]);            lost_percent = send_cnt?lost_cnt*100/send_cnt:0;            aos_sprintf( szBuf, "\r\n\r\n    Packet: Send = %u, Recv = %u, Lost = %u(%u%% loss)",                AOS_NTOHL(apingp->aping_b[0][0]), AOS_NTOHL(apingp->aping_b[0][1]), AOS_NTOHL(apingp->aping_b[1][0]), lost_percent );            aping_out_string( apingp, szBuf, 0 );            aos_sprintf( szBuf, "\r\nRound trip: Minimum = %ums, Maximum = %ums, Average = %ums\r\n",                 AOS_NTOHL(apingp->aping_b[1][1]), AOS_NTOHL(apingp->aping_b[2][0]), AOS_NTOHL(apingp->aping_b[2][1]) );            aping_out_string( apingp, szBuf, 1 );            break;                    case XPING_FAIL:            aos_sprintf( szBuf, "\r\nXping failure\r\n"  );            aping_out_string( apingp, szBuf, 1 );            break;                    default:            AOS_ASSERT(0);            break;    }    }VOID aping_go( struct aping_s *apingp0 ){    MSG_S msg;    U32 ping_mode, ping_val;    struct aping_s *apingp;    apingp = aos_msg_alloc( MPE_APING, sizeof(struct aping_s) );    if( NULL == apingp )    {        return;    }    aos_memcpy( apingp, apingp0, sizeof(struct aping_s) );    apingp->prim = APING_GO;    apingp->next_r++;    if( apingp->next_r > 2 )    {        return;    }    ping_mode = AOS_NTOHL( apingp->aping_r[apingp->next_r][0] );    ping_val  = apingp->aping_r[apingp->next_r][1];    if( ( ping_mode & APING_R_EIX )     || ( ping_mode & APING_R_EIA ) )    {        msg.srcProcessorId = LOCAL_PROCESSOR_ID;        msg.srcMpe = MPE_APING;        msg.dstProcessorId = ping_mode & APING_R_EIA ? \               AOS_NTOHL(ping_val) : EIG_MASTER_MPU_PROCESSOR_ID;        msg.dstMpe = MPE_APING;        msg.msgPrio = MSG_PRIO_NORMAL;        msg.ulSize  = sizeof(struct aping_s);        msg.pvMsgBuf = (VOID*)apingp;        aos_msg_trysend( &msg );        return;            }    else if( ping_mode & APING_R_IP )    {        struct msg_blk *newmb;        SOCKADDRIN_S sockaddr;        aos_memset( &sockaddr, 0, sizeof(sockaddr) );        sockaddr.sin_chLen              = sizeof( SOCKADDRIN_S );        sockaddr.sin_chFamily           = AF_INET;        if( ping_mode & APING_R_IP_EX )        {            sockaddr.sin_usPort = apingp->aping_p[apingp->next_r];        }        else        {            sockaddr.sin_usPort = AOS_HTONS(CONFIG_EIA_UDP_PORT + 1);        }        sockaddr.sin_stAddr.s_ulAddr    =  apingp->aping_r[apingp->next_r][1];        newmb = msg_alloc();        if( NULL == newmb )        {            aos_msg_free( apingp );            return;        }        newmb->head    = mem_obj_head(apingp);        newmb->truelen = mem_obj_size(apingp);        newmb->end     = newmb->head + newmb->truelen;        newmb->data = (U8*)apingp;        newmb->len  = sizeof(struct aping_s);        newmb->tail = newmb->data + newmb->len;                lcm_rapid_send_to_eth_no_wrapper( (g_lcm_rel_udp_port + 1), newmb, (VOID*)&sockaddr );        return;    }            aos_msg_free( apingp );}VOID aping_back( struct aping_s *apingp0 ){    MSG_S msg;    U32 ping_mode, cur_r, prev_val;    struct aping_s *apingp;    apingp = aos_msg_alloc( MPE_APING, sizeof(struct aping_s) );    if( NULL == apingp )    {        return;    }    aos_memcpy( apingp, apingp0, sizeof(struct aping_s) );    apingp->prim = APING_BACK;    cur_r = apingp->next_r;    ping_mode = AOS_NTOHL( apingp->aping_r[apingp->next_r][0] );    apingp->next_r--;    prev_val = apingp->aping_r[apingp->next_r][1];        if( ( ping_mode & APING_R_EIX )     || ( ping_mode & APING_R_EIA ) )    {        msg.srcProcessorId = LOCAL_PROCESSOR_ID;        msg.srcMpe = MPE_APING;        msg.dstProcessorId = ping_mode & APING_R_EIA ? \               EIG_MASTER_MPU_PROCESSOR_ID : AOS_NTOHL(prev_val);        msg.dstMpe = MPE_APING;        msg.msgPrio = MSG_PRIO_NORMAL;        msg.ulSize  = sizeof(struct aping_s);        msg.pvMsgBuf = (VOID*)apingp;        aos_msg_trysend( &msg );        return;            }    else if( ping_mode & APING_R_IP )    {        struct msg_blk *newmb;        SOCKADDRIN_S sockaddr;        U16          udp_port;        aos_memset( &sockaddr, 0, sizeof(sockaddr) );        udp_port = (U16)AOS_NTOHL(apingp->aping_b[cur_r][1]);        sockaddr.sin_chLen              = sizeof( SOCKADDRIN_S );        sockaddr.sin_chFamily           = AF_INET;        sockaddr.sin_usPort             = AOS_HTONS(udp_port);        sockaddr.sin_stAddr.s_ulAddr    = apingp->aping_b[cur_r][0];        newmb = msg_alloc();        if( NULL == newmb )        {            aos_msg_free( apingp );            return;        }        newmb->head    = mem_obj_head(apingp);        newmb->truelen = mem_obj_size(apingp);        newmb->end     = newmb->head + newmb->truelen;        newmb->data = (U8*)apingp;        newmb->len  = sizeof(struct aping_s);        newmb->tail = newmb->data + newmb->len;                lcm_rapid_send_to_eth_no_wrapper( g_lcm_rel_udp_port + 1, newmb, (VOID*)&sockaddr );        return;    }            aos_msg_free( apingp );}VOID xping_back( struct aping_s *apingp ){    MSG_S msg;        msg.srcProcessorId = LOCAL_PROCESSOR_ID;    msg.srcMpe = MPE_APING;    msg.dstProcessorId = EIG_MASTER_MPU_PROCESSOR_ID;    msg.dstMpe = MPE_APING;    msg.msgPrio = MSG_PRIO_NORMAL;    msg.ulSize  = sizeof(struct aping_s);    msg.pvMsgBuf = (VOID*)apingp;    aos_msg_send( &msg );    }VOID aping_task( struct aping_s *apingp0 ){    U32    hms, lms, delay;    U32    aping_count, ping_mode;    U16    aping_seq, seq;    U32    ulEvent, ret;    S8     szFrom[128],szBuf[256], *str;    U32    i, is_aping;    S32    l;    U32    max_delay=0, min_delay=0, lost_cnt=0, delay_total=0;    U32    back_cnt=0, send_cnt, lost_percent, average_delay;    struct msg_blk *mb;    struct aping_s *apingp=NULL, *xpingp=NULL;    if( NULL == apingp0 )    {        return;    }    ping_mode = AOS_NTOHL( apingp0->aping_r[0][0] );    if( ping_mode & XPING_R_X )    {        is_aping = 0;    }    else    {        is_aping = 1;    }    for( i = 0; i < APING_TASK_NUM; i++ )    {        if( U32_BUTT == ap_tsk[i].task_id )        {            break;        }    }    if( i >= APING_TASK_NUM )    {        if( is_aping )        {            aos_sprintf( szBuf, "\r\nAping failure becase no task" );            aping_out_string( apingp0, szBuf, 0 );            aos_msg_free( apingp0 );        }        else        {

⌨️ 快捷键说明

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