嵌入式技术论坛
直播中

王平

7年用户 1333经验值
私信 关注
[问答]

agile telnet输入命令重复显示反馈信息怎么办?

msh />输入回车后
msh />
     msh />
连续出现两次msh />提示符号

回帖(2)

王平

2023-5-5 14:11:36
问题已经解决:在telnet数据反馈添加格式符号处理,遍历所有将要输出的数据BUF,取出每一条完整的字符串分别发送出去。
具体代码实现如下:

rt_uint8_t *send_ptr = RT_NULL;
                rt_uint8_t *send_ptr_t = RT_NULL;
                rt_uint8_t *send_ptr_t2 = RT_NULL;
                rt_base_t level = rt_hw_interrupt_disable();
                int send_len = rt_ringbuffer_peak(telnet.tx_rb, &send_ptr);
                rt_hw_interrupt_enable(level);
                if(send_len > 0)
                {
                    send_ptr_t = send_ptr;
                    send_ptr_t2 = send_ptr;
                    m = 0;
                    for(i = 0; i < send_len; i++)
                    {
                        if(*send_ptr_t == '\n'){
                            memset(readbuf,'\0',512);
                            memcpy(readbuf, send_ptr_t2 + m, (i+1) - m);
                            if(readbuf[0] == '\n')
                            {
                                ;
                            }
                            else if(readbuf[6] == '\n')
                            {
                                send(telnet.client_fd, readbuf, 6, 0);
                            }
                            else {
                                readbuf[(i+1) - m] = '\r';
                                readbuf[(i+2) - m] = '\n';
                                send(telnet.client_fd, readbuf, (i+2) - m, 0);
                            }
                            m = i + 1;
                        }
                        else if(*send_ptr_t == '\b')
                        {
                            memset(readbuf,'\0',512);
                            memcpy(readbuf, send_ptr_t2 + m, (i+1) - m);
                            readbuf[(i+1) - m] = '\r';
                            send(telnet.client_fd, readbuf, (i+2) - m, 0);
                            m = i + 1;
                        }
                        send_ptr_t++;
                    }
                    client_tick_timeout = rt_tick_get() + rt_tick_from_millisecond(telnet.client_timeout * 60000);
                }
举报

王平

2023-5-5 14:11:43
这里是变量i和m的定义

/* telnet server thread entry */
static void telnet_thread(void* parameter)
{
    int i = 0;
    int m = 0;
    rt_uint8_t readbuf[512] = {0};
#define RECV_BUF_LEN 64
举报

更多回帖

发帖
×
20
完善资料,
赚取积分