更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
telnet_dev.h 文件参考

浏览源代码.

结构体

struct  TELNTE_FIFO_S
 
struct  TELNET_DEV_S
 

函数

INT32 TelnetTx (const CHAR *buf, UINT32 len)
 
INT32 TelnetDevInit (INT32 fd)
 
INT32 TelnetDevDeinit (VOID)
 
INT32 TelnetedRegister (VOID)
 
INT32 TelnetedUnregister (VOID)
 

函数说明

◆ TelnetDevDeinit()

INT32 TelnetDevDeinit ( VOID  )

在文件 telnet_dev.c405 行定义.

406{
407 INT32 ret;
408
409 ret = system_console_deinit(TELNET);
410 if (ret != 0) {
411 PRINT_ERR("Telnet console deinit error.\n");
412 }
413 return ret;
414}
INT32 system_console_deinit(const CHAR *deviceName)
控制台结束前的处理 和 system_console_init成对出现,像控制台的析构函数
Definition: console.c:1375
signed int INT32
Definition: los_typedef.h:60
函数调用图:
这是这个函数的调用关系图:

◆ TelnetDevInit()

INT32 TelnetDevInit ( INT32  fd)

在文件 telnet_dev.c382 行定义.

383{
384 INT32 ret;
385
386 if (clientFd < 0) {
387 PRINT_ERR("Invalid telnet clientFd.\n");
388 return -1;
389 }
390 ret = system_console_init(TELNET);//创建一个带远程登录功能的控制台
391 if (ret != 0) {
392 PRINT_ERR("Telnet console init error.\n");
393 return ret;
394 }
395 ret = ioctl(STDIN_FILENO, CFG_TELNET_SET_FD, clientFd);//绑定FD,相当于shell和控制台绑定
396 if (ret != 0) {
397 PRINT_ERR("Telnet device ioctl error.\n");
398 (VOID)system_console_deinit(TELNET);
399 }
400 return ret;
401}
INT32 system_console_init(const CHAR *deviceName)
初始化系统控制台并返回 stdinfd stdoutfd stderrfd ,和system_console_deinit成对出现,像控制台的构造函数
Definition: console.c:1329
函数调用图:
这是这个函数的调用关系图:

◆ TelnetedRegister()

INT32 TelnetedRegister ( VOID  )

在文件 telnet_dev.c365 行定义.

366{
367 INT32 ret;
368
369 g_telnetDev.id = 0;
370 g_telnetDev.cmdFifo = NULL;
371 g_telnetDev.eventPend = TRUE;
372 //注册 telnet 驱动, g_telnetDev为私有数据
373 ret = register_driver(TELNET, &g_telnetOps, TELNET_DEV_DRV_MODE, &g_telnetDev);//翻译过来是当读TELNET时,真正要去操作的是 g_telnetDev
374 if (ret != 0) {
375 PRINT_ERR("Telnet register driver error.\n");
376 }
377 return ret;
378}
BOOL eventPend
任务是否处于挂起
Definition: telnet_dev.h:66
UINT32 id
Definition: telnet_dev.h:65
TELNTE_FIFO_S * cmdFifo
Definition: telnet_dev.h:69
STATIC TELNET_DEV_S g_telnetDev
远程登录设备
Definition: telnet_dev.c:56
STATIC const struct file_operations_vfs g_telnetOps
Definition: telnet_dev.c:339
这是这个函数的调用关系图:

◆ TelnetedUnregister()

INT32 TelnetedUnregister ( VOID  )

在文件 telnet_dev.c354 行定义.

355{
357 g_telnetDev.cmdFifo = NULL;
358 (VOID)unregister_driver(TELNET);//注销字符设备驱动
359
360 return 0;
361}
void free(void *ptr)
释放ptr所指向的内存空间
Definition: malloc.c:66
函数调用图:
这是这个函数的调用关系图:

◆ TelnetTx()

INT32 TelnetTx ( const CHAR buf,
UINT32  len 
)

在文件 telnet_dev.c94 行定义.

95{
96 UINT32 i;
97 TELNET_DEV_S *telnetDev = NULL;
98
99 TelnetLock();
100
101 telnetDev = &g_telnetDev;
102 if ((buf == NULL) || (telnetDev->cmdFifo == NULL)) {
103 TelnetUnlock();
104 return -1;
105 }
106
107 /* size limited */
108 if (bufLen > telnetDev->cmdFifo->fifoNum) {//一次拿不完数据的情况
109 bufLen = telnetDev->cmdFifo->fifoNum;//只能装满
110 }
111
112 if (bufLen == 0) { //参数要先判断 @note_thinking
113 TelnetUnlock();
114 return 0;
115 }
116
117 /* copy commands to the fifo of the telnet device | 复制命令到telnet设备的fifo*/
118 for (i = 0; i < bufLen; i++) {
119 telnetDev->cmdFifo->rxBuf[telnetDev->cmdFifo->rxIndex] = *buf;
120 telnetDev->cmdFifo->rxIndex++;
121 telnetDev->cmdFifo->rxIndex %= FIFO_MAX;
122 buf++;
123 }
124 telnetDev->cmdFifo->fifoNum -= bufLen;
125
126 if (telnetDev->eventPend) {
127 /* signal that there are some works to do */
128 (VOID)LOS_EventWrite(&telnetDev->eventTelnet, TELNET_EVENT_MORE_CMD);
129 }
130 /* notify the command resolver task */
131 notify_poll(&telnetDev->wait);
132 TelnetUnlock();
133
134 return (INT32)bufLen;
135}
LITE_OS_SEC_TEXT UINT32 LOS_EventWrite(PEVENT_CB_S eventCB, UINT32 events)
写指定的事件类型
Definition: los_event.c:318
unsigned int UINT32
Definition: los_typedef.h:57
EVENT_CB_S eventTelnet
远程登录事件
Definition: telnet_dev.h:67
wait_queue_head_t wait
等待队列
Definition: telnet_dev.h:68
CHAR rxBuf[FIFO_MAX]
Definition: telnet_dev.h:60
UINT32 fifoNum
Definition: telnet_dev.h:58
UINT32 rxIndex
Definition: telnet_dev.h:56
VOID TelnetLock(VOID)
Definition: telnet_loop.c:157
VOID TelnetUnlock(VOID)
Definition: telnet_loop.c:162
函数调用图:
这是这个函数的调用关系图: