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

📄 telnet.c

📁 ucos移植到44b0
💻 C
字号:
/*
 * Author hugang <hgxxx@51eda.com>
 */
 
#include "../SOURCE/includes.h"               /* uC/OS interface */
#include "lwip/api.h"
#include "../inc/44blib.h"
#include "../inc/target.h"
#include "telnet.h"
#include <stdio.h>

void telnet_thread(void *arg)
{
	struct netconn *conn, *newconn;
	struct ip_addr l_ip;
	err_t err;
	char strbuf[64], cmdbuf[30];
	u16_t strlen;
	s8_t cmd_c;
	
	IP4_ADDR(&l_ip, 192,168,0,100);
  	/* Create a new connection identifier. */
	conn = netconn_new(NETCONN_TCP);

	/* Bind connection to well known port number 7. */
	//netconn_bind(conn, &l_ip, 23);
	netconn_bind(conn, &l_ip, 7);

  	/* Tell connection to go into listening mode. */
	netconn_listen(conn);

	while(1)
	{
		newconn = netconn_accept(conn);
        Uart_Printf(" newconn come here!\n");

		strlen = sprintf(strbuf,"Welcome to uC/OS_II demo shell \r\n");
		netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
		strlen = sprintf(strbuf,"Author: hugang <hgxxx@51eda.com> \r\n");
		netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
		strlen = sprintf(strbuf,"Escape command is exit\r\n\r\n\r\n");
		netconn_write(newconn, strbuf, strlen, NETCONN_COPY);	
		strlen = sprintf(strbuf,"hgxxx@shell:>");
		netconn_write(newconn, strbuf, strlen, NETCONN_COPY);		

		cmd_c = 0;
		
		/* Process the new connection. */
		if(newconn != NULL)
		{
	  		struct netbuf *buf;
	  		void *data;
	  		u16_t len;
			u8_t *datab;

	  		while((buf = netconn_recv(newconn)) != NULL)
			{
				do
				{
					netbuf_data(buf, &data, &len);
					datab = (unsigned char *) data;
					if((len == 2) && (*datab == 0x0d) && (*(datab+1) == 0x0a))
					{	
						if(cmd_c > 0)
						{
							cmdbuf[cmd_c] = 0x00;
							if(strcmp(cmdbuf, "ostime")==0)
							{
								INT32U os_time;
								os_time = OSTimeGet();
								strlen = sprintf(strbuf, "\r\nNow, OS time is: %d", os_time);
								netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
							}
							else if(strcmp(cmdbuf, "exit")==0)
							{
								netbuf_delete(buf);
								goto t_exit;
							}
							else
							{
								strlen = sprintf(strbuf, "\r\nyour command is: %s unkonwn command.", cmdbuf);
								netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
							}
							cmd_c = 0;
						}
						strlen = sprintf(strbuf,"\r\nhgxxx@shell:>");
						netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
					}
					else if((len == 1) && (*datab >= 0x20) && (*datab <= 0x7e) && (cmd_c < 29))
					{
						netconn_write(newconn, data, len, NETCONN_COPY);
						cmdbuf[cmd_c] = *datab;
						cmd_c++;
					}
					else if((len == 1) && (*datab == 0x08) && (cmd_c >0))
					{
						cmd_c--;
						strlen = sprintf(strbuf,"\b \b");
						netconn_write(newconn, strbuf, strlen, NETCONN_COPY);
					}
				}
				while(netbuf_next(buf) >= 0);
				netbuf_delete(buf);
	  		}
		}
t_exit:
		err = netconn_delete(newconn);	
  	}
}

⌨️ 快捷键说明

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