void bsp_log_bin_ind(s32 str_id, void* ind_data, u32 ind_data_size)
{
    u32 pbuf = 0;
    u32 buflen = 0;
    bsp_om_head_s        *bsp_om_header  = NULL;
    log_ind_enter_cnt ++;

    if((NULL == ind_data) ||(0 == ind_data_size) || (ind_data_size > BSP_DIAG_IND_DATA_MAX_LEN))
    {
        return ;
    }

    if( TRUE != bsp_om_get_hso_conn_flag())
    {
        return ;
    }

    buflen = sizeof(bsp_socp_head_s)+sizeof(bsp_om_head_s)+ind_data_size ;

    /*获取buf*/
    if(bsp_om_buf_sem_take())
    {
        return;
    }
    pbuf = bsp_om_get_buf(BSP_OM_SOCP_BUF_TYPE,buflen);

    if(0 == pbuf)
    {
        bsp_om_buf_sem_give();
        return ;
    }

    /*打包SOCP头*/
    PACKET_BSP_SOCP_HEAD(pbuf);

    bsp_om_header = (bsp_om_head_s*)(pbuf + sizeof(bsp_socp_head_s));

    bsp_om_header->om_id            = (BSP_STRU_ID_28_31_GROUP_MSP << 28) | (BSP_STRU_ID_16_23_BSP_CMD_IND << 16) |(u16)str_id;

    memcpy((u8*)bsp_om_header +sizeof(bsp_om_head_s),ind_data,ind_data_size);

    if(BSP_OK != bsp_om_into_send_list(pbuf,buflen))
    {
        bsp_om_free_buf(pbuf,buflen);
    }

    bsp_om_buf_sem_give();
    log_ind_exit_cnt ++;
}
 void  cpu_timeout_done(void)
{

        get_task_time(1);

        if(cpu_info_stru.report_swt  == BSP_SYSVIEW_SWT_ON)
        {
            if( TRUE == bsp_om_get_hso_conn_flag())
            {
                report_cpu_trace();
            }

            get_task_time(0);

            bsp_softtimer_add(&cpu_info_stru.loop_timer);
        }
}
void report_sysview_trace(bsp_sysview_type_e data_type)
{
    dump_queue_t *queue_head = NULL;
    u32 data_size = 0;
    u32 send_buf_len = 0;
    u32 q_front;
    u32 q_maxnum;
    u32 q_num;

    BSP_SYS_VIEW_TRACE_STRU *p_sysview_trace_stru = NULL;
    u32 threshold_size ;

    if( TRUE != bsp_om_get_hso_conn_flag())
    {
        return ;
    }

    if(BSP_SYSVIEW_TASK_INFO == data_type)
    {
        threshold_size  = task_info_stru.threshold_size;
        queue_head = (dump_queue_t *)DUMP_TASK_SWITCH_ADDR;
    }
    /* 内部接口,由入参保证*/
    else
    {
       threshold_size  = int_lock_stru.threshold_size;
       queue_head = (dump_queue_t *)DUMP_INTLOCK_ADDR;
    }

    q_num           = queue_head->num;
    q_maxnum    = queue_head->maxNum;
    q_front           = queue_head->front ;

    if(0 == q_num)
    {
        return ;
    }

    /* 每次触发上报最多上报门限值大小*/

    if((q_num *sizeof(int)) >= threshold_size )
    {
        data_size = threshold_size;
    }
    else
    {
        data_size = (q_num *sizeof(int));
    }

    /*不处理回卷指针*/
    if((q_front + data_size/sizeof(u32)) >=q_maxnum)
    {
        data_size = (q_maxnum - q_front )* sizeof(u32);
    }

    /*申请编码通道缓存buf*/
    send_buf_len = sizeof(BSP_SYS_VIEW_TRACE_STRU)+data_size ;

    if(bsp_om_buf_sem_take())
    {
        return;
    }
    p_sysview_trace_stru = bsp_om_get_buf(BSP_OM_SOCP_BUF_TYPE,send_buf_len );

    if(NULL == p_sysview_trace_stru)
    {
        QueueFrontDel(queue_head,data_size/sizeof(int));
        bsp_om_buf_sem_give();
        return ;
    }

    /*打包数据头*/
    sysview_trace_packet((u8*)p_sysview_trace_stru,send_buf_len,data_type);

    /*从dump模块指定地址中获取数据、发送数据到SOCP、更新dump模块队列指针*/
    memcpy((u8*)p_sysview_trace_stru +sizeof(BSP_SYS_VIEW_TRACE_STRU),(u8*)(queue_head->data+q_front),data_size);

    if(BSP_OK == bsp_om_into_send_list((void*)p_sysview_trace_stru,send_buf_len))
    {
        QueueFrontDel(queue_head,data_size/sizeof(int));
        g_sysview_debug[data_type].info_send_times++;
        g_sysview_debug[data_type].info_send_size += data_size;
    }
    else
    {
        QueueFrontDel(queue_head,data_size/sizeof(int));
        bsp_om_free_buf((void*)p_sysview_trace_stru,send_buf_len );
    }

    bsp_om_buf_sem_give();
    return ;

}
void bsp_trace(bsp_log_level_e log_level, bsp_module_e mod_id,char *fmt,...)
{
    int ret_len;
    u8 *log_buf = NULL;
    va_list arglist;
    s32 _args[6];
    s32 i;
    int flag;

    if(mod_id >= BSP_MODU_MAX )
    {
        return ;
    }

    if(g_mod_peint_level_info[mod_id].print_level > log_level )
    {
        return ;
    }

    /* 根据NV项的配置选择打印输出方式*/
    if( BSP_LOG_SEND_TO_SHELL == g_om_global_info.om_cfg.nv_cfg.log_switch)
    {
        /*lint -save -e530*/
        va_start(arglist, fmt);
        /*lint -restore +e530*/
        for(i = 0; i < 6; i++)
        {
            _args[i] = va_arg(arglist, s32);
        }
        va_end(arglist);

        flag = intLock();
         /* 如果当前处于锁中断或者是中断上下文*/
        if(VXWORKS_INT_LOCK_FLAG&flag)
        {
            printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
        }
        else
        {
            logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
        }

        intUnlock(flag);
    }
    else if(( BSP_LOG_SEND_TO_HSO == g_om_global_info.om_cfg.nv_cfg.log_switch)
                &&( TRUE== bsp_om_get_hso_conn_flag()))
    {
         /* 默认bsp trace 都往串口打印,可以通过NV项控制*/
        if(g_dump_cfg.dump_cfg.Bits.log_ctrl == 0)
        {
            va_start(arglist, fmt);
            for(i = 0; i < 6; i++)
            {
            _args[i] = va_arg(arglist, s32);
            }
            va_end(arglist);

            flag = intLock();

            /* 如果当前处于锁中断或者是中断上下文*/
            if(VXWORKS_INT_LOCK_FLAG&flag)
            {
                printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
            }
            else
            {
                logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
            }

            intUnlock(flag);
        }
        ret_len = BSP_PRINT_BUF_LEN;

        log_buf = (u8*)bsp_om_get_log_buf((u32)ret_len);

        if(NULL == log_buf)
        {
            g_get_buf_fail++;
            return;
        }

         /*兼容PS上报格式*/
        va_start(arglist, fmt);
        /*lint -save -e119*/
        vsnprintf((char *)(log_buf+sizeof(bsp_trace_s)+1), BSP_PRINT_BUF_LEN -sizeof(bsp_trace_s)-1, fmt, arglist); /* [false alarm]:屏蔽Fority错误 */
         /*lint -restore*/
        va_end(arglist);

        bsp_log_header_packet(mod_id,log_level,log_buf,(u32)ret_len);

        /* send data to socp src chan.
           don't do this if interrupt is locked, because semGive will reschedule task and unlock interrupt. */
        flag = intLock();
        if(!(VXWORKS_INT_LOCK_FLAG&flag))
        {
            osl_sem_up(&send_task_sem);
        }
        intUnlock(flag);
    }
    else if(( BSP_LOG_SEND_TO_HSO == g_om_global_info.om_cfg.nv_cfg.log_switch)
                &&( TRUE != g_om_global_info.hso_connect_flag))
    {
         va_start(arglist, fmt);
        for(i = 0; i < 6; i++)
        {
            _args[i] = va_arg(arglist, s32);
        }
        va_end(arglist);
        flag = intLock();
         /* 如果当前处于锁中断或者是中断上下文*/
        if(VXWORKS_INT_LOCK_FLAG&flag)
        {

            printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
        }
        else
        {
            logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]);
        }

        intUnlock(flag);
    }
    else
    {

    }

    return ;
}