libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER > Class Template Reference

终端类,实现一个基于 RamFS 的基本命令行接口 Terminal class implementing a basic command-line interface based on RamFS More...

#include <terminal.hpp>

Collaboration diagram for LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >:
[legend]

Public Types

enum class  Mode : uint8_t { CRLF = 0 , LF = 1 , CR = 2 }
 终端换行模式 Line feed modes for the terminal More...
 

Public Member Functions

 Terminal (LibXR::RamFS &ramfs, RamFS::Dir *current_dir=nullptr, ReadPort *read_port=STDIO::read_, WritePort *write_port=STDIO::write_, Mode MODE=Mode::CRLF)
 终端构造函数,初始化文件系统、I/O 端口和当前目录 Constructor to initialize the terminal with file system, I/O ports, and current directory
 
void LineFeed ()
 执行换行操作 Performs a line feed operation
 
void UpdateDisplayPosition ()
 更新光标位置 Updates cursor position
 
bool CanDisplayChar ()
 检查是否可以显示字符 Checks if a character can be displayed
 
bool CanDeleteChar ()
 检查是否可以删除字符 Checks if a character can be deleted
 
void AddCharToInputLine (char data)
 向输入行中添加字符,支持在光标位置插入 Adds a character to the input line, supports insertion at the cursor position
 
void DisplayChar (char data)
 在终端上显示字符,并根据历史记录模式进行相应操作 Displays a character on the terminal and updates accordingly if history mode is active
 
void RemoveCharFromInputLine ()
 从输入行中删除字符,支持在光标位置删除 Removes a character from the input line, supports deletion at the cursor position
 
void DeleteChar ()
 处理删除字符操作,支持回退删除,并在历史模式下更新显示 Handles the delete character operation, supports backspace deletion, and updates display in history mode
 
void ShowHeader ()
 显示终端提示符,包括当前目录信息 Displays the terminal prompt, including the current directory information
 
void ClearLine ()
 清除当前行 Clears the current line
 
void Clear ()
 清除整个终端屏幕 Clears the entire terminal screen
 
void ShowHistory ()
 显示历史记录中的输入行,更新终端显示 Displays the input line from history and updates the terminal display
 
void CopyHistoryToInputLine ()
 将历史命令复制到输入行,并重置历史索引和光标偏移 Copies the history command to the input line and resets history index and cursor offset
 
void AddHistory ()
 将当前输入行添加到历史记录 Adds the current input line to the history
 
void GetArgs ()
 解析输入行,将其拆分为参数数组 Parses the input line and splits it into argument array
 
RamFS::DirPath2Dir (char *path)
 将路径字符串解析为目录对象 Converts a path string into a directory object
 
RamFS::FilePath2File (char *path)
 将路径字符串解析为文件对象 Converts a path string into a file object
 
void ExecuteCommand ()
 解析并执行输入的命令 Parses and executes the entered command
 
void Parse (RawData &raw_data)
 解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them
 
void HandleAnsiCharacter (char data)
 解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them
 
void AutoComplete ()
 实现命令自动补全,匹配目录或文件名 Implements command auto-completion by matching directories or file names
 
void HandleControlCharacter (char data)
 处理控制字符,包括换行、删除、制表符等 Handles control characters such as newline, delete, and tab
 
void HandleCharacter (char data)
 处理输入字符,根据类型调用相应的处理函数 Handles input characters, dispatching them to the appropriate handler
 

Static Public Member Functions

static void ThreadFun (Terminal *term)
 终端线程函数,以独立线程方式持续驱动终端 Terminal thread function, continuously drives the terminal as an independent thread
 
static void TaskFun (Terminal *term)
 终端任务函数,以定时器任务方式驱动终端 Terminal task function, drives the terminal using a scheduled task
 

Data Fields

ReadOperation::OperationPollingStatus read_status_
 
WriteOperation::OperationPollingStatus write_status_
 
const Mode MODE
 终端换行模式 Terminal line feed mode
 
WriteOperation write_op_
 终端写操作 Terminal write operation
 
ReadPortread_
 读取端口 Read port
 
WritePortwrite_
 写入端口 Write port
 
RamFSramfs_
 关联的文件系统 Associated file system
 
char read_buff_ [READ_BUFF_SIZE]
 读取缓冲区 Read buffer
 
RamFS::Dircurrent_dir_
 当前目录 Current directory
 
uint8_t flag_ansi_ = 0
 ANSI 控制字符状态 ANSI control character state.
 
int offset_ = 0
 光标偏移 Cursor offset
 
Stack< char > input_line_
 输入行缓冲区 Input line buffer
 
char * arg_tab_ [MAX_ARG_NUMBER]
 命令参数列表 Command argument list
 
size_t arg_number_ = 0
 参数数量 Number of arguments
 
Queue< LibXR::String< MAX_LINE_SIZE > > history_
 历史命令 History of commands
 
int history_index_ = -1
 当前历史索引 Current history index
 
bool linefeed_flag_ = false
 换行标志 Line feed flag
 

Private Member Functions

char * StrchrRev (char *str, char c)
 反向查找字符串中的特定字符 Finds a specific character in a string from the end
 

Static Private Attributes

static constexpr char CLEAR_ALL []
 清屏命令 Clear screen command
 
static constexpr char CLEAR_LINE []
 清除当前行命令 Clear current line command
 
static constexpr char CLEAR_BEHIND []
 清除光标后内容命令 Clear content after cursor command
 
static constexpr char KEY_RIGHT [] = "\033[C"
 右箭头键 Right arrow key
 
static constexpr char KEY_LEFT [] = "\033[D"
 左箭头键 Left arrow key
 
static constexpr char KEY_SAVE [] = "\033[s"
 保存光标位置 Save cursor position
 
static constexpr char KEY_LOAD [] = "\033[u"
 恢复光标位置 Restore cursor position
 
static constexpr char DELETE_CHAR []
 退格删除字符 Backspace delete character
 

Detailed Description

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
class LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >

终端类,实现一个基于 RamFS 的基本命令行接口 Terminal class implementing a basic command-line interface based on RamFS

Template Parameters
READ_BUFF_SIZE读取缓冲区大小 Read buffer size
MAX_LINE_SIZE最大输入行长度 Maximum input line size
MAX_ARG_NUMBER最大参数数量 Maximum number of arguments
MAX_HISTORY_NUMBER最大历史记录数量 Maximum number of command history records

Definition at line 30 of file terminal.hpp.

Member Enumeration Documentation

◆ Mode

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
enum class LibXR::Terminal::Mode : uint8_t
strong

终端换行模式 Line feed modes for the terminal

Enumerator
CRLF 

回车换行 Carriage Return + Line Feed (\r
)

LF 

仅换行 Line Feed (
)

CR 

仅回车 Carriage Return (\r)

Definition at line 73 of file terminal.hpp.

74 {
75 CRLF = 0,
76 LF = 1,
77 CR = 2
78 };
@ CR
仅回车 Carriage Return (\r)
@ CRLF
回车换行 Carriage Return + Line Feed (\r )
@ LF
仅换行 Line Feed ( )

Constructor & Destructor Documentation

◆ Terminal()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::Terminal ( LibXR::RamFS & ramfs,
RamFS::Dir * current_dir = nullptr,
ReadPort * read_port = STDIO::read_,
WritePort * write_port = STDIO::write_,
Mode MODE = Mode::CRLF )
inline

终端构造函数,初始化文件系统、I/O 端口和当前目录 Constructor to initialize the terminal with file system, I/O ports, and current directory

Parameters
ramfs关联的 RamFS 文件系统 Associated RamFS file system
current_dir当前目录(默认为根目录)Current directory (default: root)
read_port读取端口(默认使用标准输入)Read port (default: standard input)
write_port写入端口(默认使用标准输出)Write port (default: standard output)
MODE终端换行模式(默认 CRLF)Terminal line feed mode (default: CRLF)

Definition at line 90 of file terminal.hpp.

93 : read_status_(ReadOperation::OperationPollingStatus::READY),
94 write_status_(WriteOperation::OperationPollingStatus::READY),
95 MODE(MODE),
96 write_op_(write_status_),
97 read_(read_port),
98 write_(write_port),
99 ramfs_(ramfs),
100 current_dir_(current_dir ? current_dir : &ramfs_.root_),
101 input_line_(MAX_LINE_SIZE + 1),
102 history_(MAX_HISTORY_NUMBER)
103 {
104 ASSERT(read_port != nullptr);
105 ASSERT(write_port != nullptr);
106 ASSERT(read_port->Readable());
107 ASSERT(write_port->Writable());
108 }
Dir root_
文件系统的根目录 Root directory of the file system
Definition ramfs.hpp:624
Queue< LibXR::String< MAX_LINE_SIZE > > history_
历史命令 History of commands
Definition terminal.hpp:126
WriteOperation write_op_
终端写操作 Terminal write operation
Definition terminal.hpp:114
RamFS & ramfs_
关联的文件系统 Associated file system
Definition terminal.hpp:117
ReadPort * read_
读取端口 Read port
Definition terminal.hpp:115
WritePort * write_
写入端口 Write port
Definition terminal.hpp:116
RamFS::Dir * current_dir_
当前目录 Current directory
Definition terminal.hpp:120
Stack< char > input_line_
输入行缓冲区 Input line buffer
Definition terminal.hpp:123
const Mode MODE
终端换行模式 Terminal line feed mode
Definition terminal.hpp:113

Member Function Documentation

◆ AddCharToInputLine()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::AddCharToInputLine ( char data)
inline

向输入行中添加字符,支持在光标位置插入 Adds a character to the input line, supports insertion at the cursor position

Parameters
data要添加的字符 The character to add

Definition at line 182 of file terminal.hpp.

183 {
184 if (offset_ == 0)
185 {
186 input_line_.Push(data);
187 }
188 else
189 {
191 }
192 input_line_[input_line_.Size()] = '\0';
193 }
ErrorCode Insert(const Data &data, uint32_t index)
在指定位置插入数据 / Inserts data at a specified position
Definition stack.hpp:162
ErrorCode Push(const Data &data)
向栈中推入数据 / Pushes data onto the stack
Definition stack.hpp:74
uint32_t Size() const
获取栈中当前元素数量 / Returns the number of elements currently in the stack
Definition stack.hpp:60
int offset_
光标偏移 Cursor offset
Definition terminal.hpp:122

◆ AddHistory()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::AddHistory ( )
inline

将当前输入行添加到历史记录 Adds the current input line to the history

Definition at line 354 of file terminal.hpp.

355 {
356 input_line_.Push('\0');
357
358 if (history_.EmptySize() == 0)
359 {
360 history_.Pop();
361 }
362 history_.Push(*reinterpret_cast<String<MAX_LINE_SIZE> *>(&input_line_[0]));
363 }

◆ AutoComplete()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::AutoComplete ( )
inline

实现命令自动补全,匹配目录或文件名 Implements command auto-completion by matching directories or file names

Definition at line 631 of file terminal.hpp.

632 {
633 /* skip space */
634 char *path = &input_line_[0];
635 while (*path == ' ')
636 {
637 path++;
638 }
639
640 /* find last '/' in first argument */
641 char *tmp = path, *path_end = path;
642
643 while (*tmp != ' ' && *tmp != '\0')
644 {
645 if (*tmp == '/')
646 {
647 path_end = tmp;
648 }
649 tmp++;
650 }
651
652 /* return if not need complete */
653 if (tmp - &input_line_[0] != static_cast<int>(input_line_.Size() + offset_))
654 {
655 return;
656 }
657
658 /* get start of prefix */
659 char *prefix_start = nullptr;
660 RamFS::Dir *dir = nullptr;
661
662 if (path_end == path)
663 {
664 dir = current_dir_;
665 prefix_start = path_end;
666 }
667 else
668 {
669 prefix_start = path_end + 1;
670 }
671
672 /* find dir*/
673 if (dir == nullptr)
674 {
675 *path_end = '\0';
676 dir = Path2Dir(path);
677 *path_end = '/';
678 if (dir == nullptr)
679 {
680 return;
681 }
682 }
683
684 /* prepre for match */
685 RBTree<const char *>::Node<RamFS::FsNode> *ans_node = nullptr;
686 uint32_t number = 0;
687 size_t same_char_number = 0;
688
689 if (*prefix_start == '/')
690 {
691 prefix_start++;
692 }
693
694 int prefix_len = static_cast<int>(tmp - prefix_start);
695
696 auto foreach_fun_find = [&](RBTree<const char *>::Node<RamFS::FsNode> &node)
697 {
698 if (strncmp(node->name, prefix_start, prefix_len) == 0)
699 {
700 ans_node = &node;
701 number++;
702 }
703
704 return ErrorCode::OK;
705 };
706
707 /* start match */
708 (*dir)->rbt.Foreach<RamFS::FsNode>(foreach_fun_find);
709
710 if (number == 0)
711 {
712 return;
713 }
714 else if (number == 1)
715 {
716 auto name_len = strlen(ans_node->data_.name);
717 for (size_t i = 0; i < name_len - prefix_len; i++)
718 {
719 DisplayChar(ans_node->data_.name[i + prefix_len]);
720 }
721 }
722 else
723 {
724 ans_node = nullptr;
725 LineFeed();
726
727 auto foreach_fun_show = [&](RBTree<const char *>::Node<RamFS::FsNode> &node)
728 {
729 if (strncmp(node->name, prefix_start, prefix_len) == 0)
730 {
731 auto name_len = strlen(node->name);
732 (*this->write_)(ConstRawData(node->name, name_len), this->write_op_);
733 this->LineFeed();
734 if (ans_node == nullptr)
735 {
736 ans_node = &node;
737 same_char_number = name_len;
738 return ErrorCode::OK;
739 }
740
741 for (size_t i = 0; i < name_len; i++)
742 {
743 if (node->name[i] != ans_node->data_.name[i])
744 {
745 same_char_number = i;
746 break;
747 }
748 }
749
750 if (same_char_number > name_len)
751 {
752 name_len = same_char_number;
753 }
754
755 ans_node = &node;
756 }
757
758 return ErrorCode::OK;
759 };
760
761 (*dir)->rbt.Foreach<RamFS::FsNode>(foreach_fun_show);
762
763 ShowHeader();
764 (*write_)(ConstRawData(&input_line_[0], input_line_.Size()), write_op_);
765
766 for (size_t i = 0; i < same_char_number - prefix_len; i++)
767 {
768 DisplayChar(ans_node->data_.name[i + prefix_len]);
769 }
770 }
771 }
RamFS::Dir * Path2Dir(char *path)
将路径字符串解析为目录对象 Converts a path string into a directory object
Definition terminal.hpp:395
void DisplayChar(char data)
在终端上显示字符,并根据历史记录模式进行相应操作 Displays a character on the terminal and updates accordingly if history mode...
Definition terminal.hpp:201
void LineFeed()
执行换行操作 Performs a line feed operation
Definition terminal.hpp:134
void ShowHeader()
显示终端提示符,包括当前目录信息 Displays the terminal prompt, including the current directory information
Definition terminal.hpp:285

◆ CanDeleteChar()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
bool LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CanDeleteChar ( )
inline

检查是否可以删除字符 Checks if a character can be deleted

Returns
bool 是否可以删除字符 Whether the character can be deleted

Definition at line 175 of file terminal.hpp.

175{ return input_line_.Size() + offset_ > 0; }

◆ CanDisplayChar()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
bool LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CanDisplayChar ( )
inline

检查是否可以显示字符 Checks if a character can be displayed

Returns
bool 是否可以显示字符 Whether the character can be displayed

Definition at line 168 of file terminal.hpp.

168{ return input_line_.EmptySize() > 1; }
uint32_t EmptySize() const
获取栈的剩余可用空间 / Returns the remaining available space in the stack
Definition stack.hpp:65

◆ Clear()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::Clear ( )
inline

清除整个终端屏幕 Clears the entire terminal screen

Definition at line 311 of file terminal.hpp.

311{ (*write_)(ConstRawData(CLEAR_ALL), write_op_); }
static constexpr char CLEAR_ALL[]
清屏命令 Clear screen command
Definition terminal.hpp:33

◆ ClearLine()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ClearLine ( )
inline

清除当前行 Clears the current line

Definition at line 305 of file terminal.hpp.

305{ (*write_)(ConstRawData(CLEAR_LINE), write_op_); }
static constexpr char CLEAR_LINE[]
清除当前行命令 Clear current line command
Definition terminal.hpp:35

◆ CopyHistoryToInputLine()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CopyHistoryToInputLine ( )
inline

将历史命令复制到输入行,并重置历史索引和光标偏移 Copies the history command to the input line and resets history index and cursor offset

Definition at line 339 of file terminal.hpp.

340 {
342 for (size_t i = 0; i < history_[-history_index_ - 1].Length(); i++)
343 {
345 }
346 history_index_ = -1;
347 offset_ = 0;
348 }
void Reset()
重置栈 / Resets the stack
Definition stack.hpp:218
int history_index_
当前历史索引 Current history index
Definition terminal.hpp:127

◆ DeleteChar()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::DeleteChar ( )
inline

处理删除字符操作,支持回退删除,并在历史模式下更新显示 Handles the delete character operation, supports backspace deletion, and updates display in history mode

Definition at line 252 of file terminal.hpp.

253 {
254 bool use_history = false;
255
256 if (history_index_ >= 0)
257 {
259 use_history = true;
260 }
261
262 if (CanDeleteChar())
263 {
265 if (use_history)
266 {
267 ShowHistory();
268 }
269 else
270 {
271 (*write_)(ConstRawData(DELETE_CHAR), write_op_);
272 }
273
274 if (offset_ != 0)
275 {
277 }
278 }
279 }
void UpdateDisplayPosition()
更新光标位置 Updates cursor position
Definition terminal.hpp:154
bool CanDeleteChar()
检查是否可以删除字符 Checks if a character can be deleted
Definition terminal.hpp:175
void CopyHistoryToInputLine()
将历史命令复制到输入行,并重置历史索引和光标偏移 Copies the history command to the input line and resets history index and cu...
Definition terminal.hpp:339
void ShowHistory()
显示历史记录中的输入行,更新终端显示 Displays the input line from history and updates the terminal display
Definition terminal.hpp:317
static constexpr char DELETE_CHAR[]
退格删除字符 Backspace delete character
Definition terminal.hpp:43
void RemoveCharFromInputLine()
从输入行中删除字符,支持在光标位置删除 Removes a character from the input line, supports deletion at the cursor position
Definition terminal.hpp:234

◆ DisplayChar()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::DisplayChar ( char data)
inline

在终端上显示字符,并根据历史记录模式进行相应操作 Displays a character on the terminal and updates accordingly if history mode is active

Parameters
data要显示的字符 The character to display

Definition at line 201 of file terminal.hpp.

202 {
203 bool use_history = false;
204
205 if (history_index_ >= 0)
206 {
208 use_history = true;
209 }
210
211 if (CanDisplayChar())
212 {
213 AddCharToInputLine(data);
214 if (use_history)
215 {
216 ShowHistory();
217 }
218 else
219 {
220 (*write_)(ConstRawData(input_line_[input_line_.Size() - 1 + offset_]), write_op_);
221 }
222 if (offset_ != 0)
223 {
225 }
226 }
227 }
bool CanDisplayChar()
检查是否可以显示字符 Checks if a character can be displayed
Definition terminal.hpp:168
void AddCharToInputLine(char data)
向输入行中添加字符,支持在光标位置插入 Adds a character to the input line, supports insertion at the cursor position
Definition terminal.hpp:182

◆ ExecuteCommand()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ExecuteCommand ( )
inline

解析并执行输入的命令 Parses and executes the entered command

Definition at line 471 of file terminal.hpp.

472 {
473 AddHistory();
474
475 GetArgs();
476
477 if (arg_number_ < 1 || arg_number_ > MAX_ARG_NUMBER)
478 {
479 return;
480 }
481
482 if (strcmp(arg_tab_[0], "cd") == 0)
483 {
484 RamFS::Dir *dir = Path2Dir(arg_tab_[1]);
485 if (dir != nullptr)
486 {
487 current_dir_ = dir;
488 }
489 LineFeed();
490 return;
491 }
492
493 if (strcmp(arg_tab_[0], "ls") == 0)
494 {
495 auto ls_fun = [&](RBTree<const char *>::Node<RamFS::FsNode> &item)
496 {
497 switch (item->type)
498 {
500 (*(this->write_))(ConstRawData("d "), this->write_op_);
501 break;
503 (*(this->write_))(ConstRawData("f "), this->write_op_);
504 break;
506 (*(this->write_))(ConstRawData("c "), this->write_op_);
507 break;
509 (*(this->write_))(ConstRawData("b "), this->write_op_);
510 break;
511 default:
512 (*(this->write_))(ConstRawData("? "), this->write_op_);
513 break;
514 }
515 (*(this->write_))(ConstRawData(item.data_.name), this->write_op_);
516 this->LineFeed();
517 return ErrorCode::OK;
518 };
519
520 current_dir_->data_.rbt.Foreach<RamFS::FsNode>(ls_fun);
521 return;
522 }
523
524 auto ans = Path2File(arg_tab_[0]);
525 if (ans == nullptr)
526 {
527 (*write_)(ConstRawData("Command not found."), write_op_);
528 LineFeed();
529 return;
530 }
531
532 if ((*ans)->type != RamFS::FileType::EXEC)
533 {
534 (*write_)(ConstRawData("Not an executable file."), write_op_);
535 LineFeed();
536 return;
537 }
538
539 (*ans)->Run(arg_number_, arg_tab_);
540 }
Data data_
存储的数据 (Stored data).
Definition rbt.hpp:99
@ STORAGE
存储 Storage
@ DIR
目录 Directory
@ EXEC
可执行 Executable
char * arg_tab_[MAX_ARG_NUMBER]
命令参数列表 Command argument list
Definition terminal.hpp:124
size_t arg_number_
参数数量 Number of arguments
Definition terminal.hpp:125
void AddHistory()
将当前输入行添加到历史记录 Adds the current input line to the history
Definition terminal.hpp:354
RamFS::File * Path2File(char *path)
将路径字符串解析为文件对象 Converts a path string into a file object
Definition terminal.hpp:440
void GetArgs()
解析输入行,将其拆分为参数数组 Parses the input line and splits it into argument array
Definition terminal.hpp:369

◆ GetArgs()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::GetArgs ( )
inline

解析输入行,将其拆分为参数数组 Parses the input line and splits it into argument array

Definition at line 369 of file terminal.hpp.

370 {
371 for (int i = 0; input_line_[i] != '\0'; i++)
372 {
373 if (input_line_[i] == ' ')
374 {
375 input_line_[i] = '\0';
376 }
377 else if (i == 0 || input_line_[i - 1] == '\0')
378 {
379 if (arg_number_ >= MAX_ARG_NUMBER)
380 {
381 return;
382 }
384 }
385 }
386 }

◆ HandleAnsiCharacter()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HandleAnsiCharacter ( char data)
inline

解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them

Parameters
raw_data输入的原始数据 Input raw data

Definition at line 563 of file terminal.hpp.

564 {
565 if (flag_ansi_ == 1)
566 {
567 if (isprint(data))
568 {
569 flag_ansi_++;
570 }
571 else
572 {
573 flag_ansi_ = 0;
574 }
575 }
576 else if (flag_ansi_ == 2)
577 {
578 switch (data)
579 {
580 case 'A':
581 if (history_index_ < int(history_.Size()) - 1)
582 {
584 ShowHistory();
585 }
586 break;
587 case 'B':
588 if (history_index_ >= 0)
589 {
591 ShowHistory();
592 }
593 break;
594 case 'C':
595 if (history_index_ >= 0)
596 {
598 ShowHistory();
599 }
600 if (offset_ < 0)
601 {
602 offset_++;
603 (*write_)(ConstRawData(KEY_RIGHT, sizeof(KEY_RIGHT) - 1), write_op_);
604 }
605
606 break;
607 case 'D':
608 if (history_index_ >= 0)
609 {
611 ShowHistory();
612 }
613 if (offset_ + input_line_.Size() > 0)
614 {
615 offset_--;
616 (*write_)(ConstRawData(KEY_LEFT, sizeof(KEY_LEFT) - 1), write_op_);
617 }
618 break;
619 default:
620 break;
621 }
622
623 flag_ansi_ = 0;
624 }
625 }
static constexpr char KEY_LEFT[]
左箭头键 Left arrow key
Definition terminal.hpp:40
uint8_t flag_ansi_
ANSI 控制字符状态 ANSI control character state.
Definition terminal.hpp:121
static constexpr char KEY_RIGHT[]
右箭头键 Right arrow key
Definition terminal.hpp:39

◆ HandleCharacter()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HandleCharacter ( char data)
inline

处理输入字符,根据类型调用相应的处理函数 Handles input characters, dispatching them to the appropriate handler

Parameters
data输入的字符 The input character

Definition at line 829 of file terminal.hpp.

830 {
831 if (flag_ansi_)
832 {
834 }
835 else if (isprint(data))
836 {
837 DisplayChar(data);
838 }
839 else
840 {
842 }
843 }
void HandleAnsiCharacter(char data)
解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them
Definition terminal.hpp:563
void HandleControlCharacter(char data)
处理控制字符,包括换行、删除、制表符等 Handles control characters such as newline, delete, and tab
Definition terminal.hpp:778

◆ HandleControlCharacter()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HandleControlCharacter ( char data)
inline

处理控制字符,包括换行、删除、制表符等 Handles control characters such as newline, delete, and tab

Parameters
data输入的控制字符 The input control character

Definition at line 778 of file terminal.hpp.

779 {
780 if (data != '\r' && data != '\n')
781 {
782 linefeed_flag_ = false;
783 }
784
785 switch (data)
786 {
787 case '\n':
788 case '\r':
789 if (linefeed_flag_)
790 {
791 linefeed_flag_ = false;
792 return;
793 }
794 if (history_index_ >= 0)
795 {
797 }
798 LineFeed();
799 if (input_line_.Size() > 0)
800 {
802 arg_number_ = 0;
803 }
804 ShowHeader();
806 input_line_[0] = '\0';
807 offset_ = 0;
808 break;
809 case 0x7f:
810 case '\b':
811 DeleteChar();
812 break;
813 case '\t':
814 AutoComplete();
815 break;
816 case '\033':
817 flag_ansi_ = 1;
818 break;
819 default:
820 break;
821 }
822 }
void AutoComplete()
实现命令自动补全,匹配目录或文件名 Implements command auto-completion by matching directories or file names
Definition terminal.hpp:631
void ExecuteCommand()
解析并执行输入的命令 Parses and executes the entered command
Definition terminal.hpp:471
void DeleteChar()
处理删除字符操作,支持回退删除,并在历史模式下更新显示 Handles the delete character operation, supports backspace deletion,...
Definition terminal.hpp:252
bool linefeed_flag_
换行标志 Line feed flag
Definition terminal.hpp:128

◆ LineFeed()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::LineFeed ( )
inline

执行换行操作 Performs a line feed operation

Definition at line 134 of file terminal.hpp.

135 {
136 if (MODE == Mode::CRLF)
137 {
138 (*write_)(ConstRawData("\r\n"), write_op_);
139 }
140 else if (MODE == Mode::LF)
141 {
142 (*write_)(ConstRawData('\n'), write_op_);
143 }
144 else if (MODE == Mode::CR)
145 {
146 (*write_)(ConstRawData('\r'), write_op_);
147 }
148 }

◆ Parse()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::Parse ( RawData & raw_data)
inline

解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them

Parameters
raw_data输入的原始数据 Input raw data

Definition at line 548 of file terminal.hpp.

549 {
550 char *buff = static_cast<char *>(raw_data.addr_);
551 for (size_t i = 0; i < raw_data.size_; i++)
552 {
553 HandleCharacter(buff[i]);
554 }
555 }
void HandleCharacter(char data)
处理输入字符,根据类型调用相应的处理函数 Handles input characters, dispatching them to the appropriate handler
Definition terminal.hpp:829

◆ Path2Dir()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
RamFS::Dir * LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::Path2Dir ( char * path)
inline

将路径字符串解析为目录对象 Converts a path string into a directory object

Parameters
path目录路径字符串 The directory path string
Returns
RamFS::Dir* 解析出的目录指针,若找不到则返回 nullptr Pointer to the resolved directory, or nullptr if not found

Definition at line 395 of file terminal.hpp.

396 {
397 size_t index = 0;
398 RamFS::Dir *dir = current_dir_;
399
400 if (*path == '/')
401 {
402 index++;
403 dir = &ramfs_.root_;
404 }
405
406 for (size_t i = 0; i < MAX_LINE_SIZE; i++)
407 {
408 auto tmp = strchr(path + index, '/');
409 if (tmp == nullptr)
410 {
411 return dir->FindDir(path + index);
412 }
413 else if (tmp == path + index)
414 {
415 return nullptr;
416 }
417 else
418 {
419 tmp[0] = '\0';
420 dir = dir->FindDir(path + index);
421 tmp[0] = '/';
422 index += tmp - path + 1;
423 if (path[index] == '\0' || dir == nullptr)
424 {
425 return dir;
426 }
427 }
428 }
429
430 return nullptr;
431 }

◆ Path2File()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
RamFS::File * LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::Path2File ( char * path)
inline

将路径字符串解析为文件对象 Converts a path string into a file object

Parameters
path文件路径字符串 The file path string
Returns
RamFS::File* 解析出的文件指针,若找不到则返回 nullptr Pointer to the resolved file, or nullptr if not found

Definition at line 440 of file terminal.hpp.

441 {
442 auto name = StrchrRev(path, '/');
443
444 if (name == nullptr)
445 {
446 return current_dir_->FindFile(path);
447 }
448
449 if (name[1] == '\0')
450 {
451 return nullptr;
452 }
453
454 *name = '\0';
455 RamFS::Dir *dir = Path2Dir(path);
456 *name = '/';
457 if (dir != nullptr)
458 {
459 return dir->FindFile(name + 1);
460 }
461 else
462 {
463 return nullptr;
464 }
465 }
File * FindFile(const char *name)
查找当前目录中的文件 Finds a file in the current directory
Definition ramfs.hpp:290
char * StrchrRev(char *str, char c)
反向查找字符串中的特定字符 Finds a specific character in a string from the end
Definition terminal.hpp:54

◆ RemoveCharFromInputLine()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::RemoveCharFromInputLine ( )
inline

从输入行中删除字符,支持在光标位置删除 Removes a character from the input line, supports deletion at the cursor position

Definition at line 234 of file terminal.hpp.

235 {
236 if (offset_ == 0)
237 {
239 }
240 else
241 {
243 }
244 input_line_[input_line_.Size()] = '\0';
245 }
ErrorCode Delete(uint32_t index)
删除指定位置的数据 / Deletes data at a specified position
Definition stack.hpp:194
ErrorCode Pop(Data &data)
从栈中弹出数据 / Pops data from the stack
Definition stack.hpp:95

◆ ShowHeader()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ShowHeader ( )
inline

显示终端提示符,包括当前目录信息 Displays the terminal prompt, including the current directory information

Definition at line 285 of file terminal.hpp.

286 {
287 (*write_)(ConstRawData(ramfs_.root_->name, strlen(ramfs_.root_->name)), write_op_);
288 if (current_dir_ == &ramfs_.root_)
289 {
290 (*write_)(ConstRawData(":/"), write_op_);
291 }
292 else
293 {
294 (*write_)(ConstRawData(":"), write_op_);
295 (*write_)(ConstRawData(current_dir_->data_.name), write_op_);
296 }
297
298 (*write_)(ConstRawData("$ "), write_op_);
299 }

◆ ShowHistory()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ShowHistory ( )
inline

显示历史记录中的输入行,更新终端显示 Displays the input line from history and updates the terminal display

Definition at line 317 of file terminal.hpp.

318 {
319 ClearLine();
320 ShowHeader();
321 offset_ = 0;
322 if (history_index_ >= 0)
323 {
324 (*write_)(ConstRawData(history_[-history_index_ - 1].Raw(),
325 history_[-history_index_ - 1].Length()),
326 write_op_);
327 }
328 else
329 {
330 (*write_)(ConstRawData(&input_line_[0], input_line_.Size()), write_op_);
331 }
332 }
void ClearLine()
清除当前行 Clears the current line
Definition terminal.hpp:305

◆ StrchrRev()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char * LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::StrchrRev ( char * str,
char c )
inlineprivate

反向查找字符串中的特定字符 Finds a specific character in a string from the end

Parameters
str输入字符串 Input string
c要查找的字符 Character to find
Returns
char* 指向找到的字符的指针,如果未找到返回 nullptr Pointer to the found character, nullptr if not found

Definition at line 54 of file terminal.hpp.

55 {
56 auto len = strlen(str);
57 for (int i = static_cast<int>(len - 1); i >= 0; i--)
58 {
59 if (str[i] == c)
60 {
61 return str + i;
62 }
63 }
64 return nullptr;
65 }

◆ TaskFun()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
static void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::TaskFun ( Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER > * term)
inlinestatic

终端任务函数,以定时器任务方式驱动终端 Terminal task function, drives the terminal using a scheduled task

该函数用于以定时任务(或轮询方式)驱动终端,适用于资源受限的系统。 它不会持续运行,而是在定时器触发或系统任务调度时运行,执行一次数据读取和解析后返回。

This function drives the terminal using a scheduled task (or polling mode), making it suitable for resource-constrained systems. Unlike the thread-based approach, it only runs when scheduled (e.g., triggered by a timer) and processes available input data before returning.

Parameters
term指向 Terminal 实例的指针 Pointer to the Terminal instance

Definition at line 902 of file terminal.hpp.

903 {
904 RawData buff = term->read_buff_;
905 buff.size_ = LibXR::min(LibXR::max(1u, term->read_->Size()), READ_BUFF_SIZE);
906
907 ReadOperation op(term->read_status_);
908
909 while (true)
910 {
911 switch (term->read_status_)
912 {
913 case ReadOperation::OperationPollingStatus::READY:
914 buff.size_ = LibXR::min(LibXR::max(1u, term->read_->Size()), READ_BUFF_SIZE);
915 (*term->read_)(buff, op);
916 continue;
917 case ReadOperation::OperationPollingStatus::RUNNING:
918 return;
919 case ReadOperation::OperationPollingStatus::DONE:
920 buff.size_ = term->read_->read_size_;
921 if (buff.size_ > 0)
922 {
923 term->Parse(buff);
924 }
925 buff.size_ = LibXR::min(LibXR::max(1u, term->read_->Size()), READ_BUFF_SIZE);
926 (*term->read_)(buff, op);
927 return;
928 }
929 }
930 }
Operation< ErrorCode > ReadOperation
Read operation type.
Definition libxr_rw.hpp:235
constexpr auto max(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最大值
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值

◆ ThreadFun()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
static void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ThreadFun ( Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER > * term)
inlinestatic

终端线程函数,以独立线程方式持续驱动终端 Terminal thread function, continuously drives the terminal as an independent thread

该函数用于以独立线程的方式驱动终端,持续从输入流读取数据并解析,适用于高实时性应用。 它会在循环中不断检查输入流的大小,并在数据可用时进行解析。

This function runs as a separate thread to continuously drive the terminal, reading and parsing input data in a loop. It is suitable for high real-time applications. It continuously checks the input stream size and processes data when available.

Parameters
term指向 Terminal 实例的指针 Pointer to the Terminal instance

Definition at line 861 of file terminal.hpp.

862 {
863 RawData buff = term->read_buff_;
864
865 Semaphore read_sem, write_sem;
866 ReadOperation op(read_sem);
867
868 term->write_op_.type = WriteOperation::OperationType::NONE;
869 term->write_op_.data.sem_info.sem = &write_sem;
870 term->write_op_.data.sem_info.timeout = 10;
871 term->write_op_.type = WriteOperation::OperationType::BLOCK;
872
873 while (true)
874 {
875 buff.size_ = LibXR::min(term->read_->Size(), READ_BUFF_SIZE);
876 if ((*term->read_)(buff, op) == ErrorCode::OK)
877 {
878 if (term->read_->read_size_ > 0)
879 {
880 buff.size_ = term->read_->read_size_;
881 term->Parse(buff);
882 }
883 }
884 }
885 }

◆ UpdateDisplayPosition()

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
void LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::UpdateDisplayPosition ( )
inline

更新光标位置 Updates cursor position

Definition at line 154 of file terminal.hpp.

155 {
156 (*write_)(ConstRawData(KEY_SAVE), write_op_);
157 (*write_)(ConstRawData(CLEAR_BEHIND), write_op_);
158 (*write_)(ConstRawData(&input_line_[input_line_.Size() + offset_], -offset_),
159 write_op_);
160 (*write_)(ConstRawData(KEY_LOAD), write_op_);
161 }
static constexpr char KEY_LOAD[]
恢复光标位置 Restore cursor position
Definition terminal.hpp:42
static constexpr char CLEAR_BEHIND[]
清除光标后内容命令 Clear content after cursor command
Definition terminal.hpp:37
static constexpr char KEY_SAVE[]
保存光标位置 Save cursor position
Definition terminal.hpp:41

Field Documentation

◆ arg_number_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
size_t LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::arg_number_ = 0

参数数量 Number of arguments

Definition at line 125 of file terminal.hpp.

◆ arg_tab_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char* LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::arg_tab_[MAX_ARG_NUMBER]

命令参数列表 Command argument list

Definition at line 124 of file terminal.hpp.

◆ CLEAR_ALL

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CLEAR_ALL[]
staticconstexprprivate
Initial value:
=
"\033[2J\033[1H"

清屏命令 Clear screen command

Definition at line 33 of file terminal.hpp.

◆ CLEAR_BEHIND

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CLEAR_BEHIND[]
staticconstexprprivate
Initial value:
=
"\033[K"

清除光标后内容命令 Clear content after cursor command

Definition at line 37 of file terminal.hpp.

◆ CLEAR_LINE

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::CLEAR_LINE[]
staticconstexprprivate
Initial value:
=
"\033[2K\r"

清除当前行命令 Clear current line command

Definition at line 35 of file terminal.hpp.

◆ current_dir_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
RamFS::Dir* LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::current_dir_

当前目录 Current directory

Definition at line 120 of file terminal.hpp.

◆ DELETE_CHAR

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::DELETE_CHAR[]
staticconstexprprivate
Initial value:
=
"\b \b"

退格删除字符 Backspace delete character

Definition at line 43 of file terminal.hpp.

◆ flag_ansi_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
uint8_t LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::flag_ansi_ = 0

ANSI 控制字符状态 ANSI control character state.

Definition at line 121 of file terminal.hpp.

◆ history_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
Queue<LibXR::String<MAX_LINE_SIZE> > LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::history_

历史命令 History of commands

Definition at line 126 of file terminal.hpp.

◆ history_index_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
int LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::history_index_ = -1

当前历史索引 Current history index

Definition at line 127 of file terminal.hpp.

◆ input_line_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
Stack<char> LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::input_line_

输入行缓冲区 Input line buffer

Definition at line 123 of file terminal.hpp.

◆ KEY_LEFT

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::KEY_LEFT[] = "\033[D"
staticconstexprprivate

左箭头键 Left arrow key

Definition at line 40 of file terminal.hpp.

◆ KEY_LOAD

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::KEY_LOAD[] = "\033[u"
staticconstexprprivate

恢复光标位置 Restore cursor position

Definition at line 42 of file terminal.hpp.

◆ KEY_RIGHT

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::KEY_RIGHT[] = "\033[C"
staticconstexprprivate

右箭头键 Right arrow key

Definition at line 39 of file terminal.hpp.

◆ KEY_SAVE

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::KEY_SAVE[] = "\033[s"
staticconstexprprivate

保存光标位置 Save cursor position

Definition at line 41 of file terminal.hpp.

◆ linefeed_flag_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
bool LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::linefeed_flag_ = false

换行标志 Line feed flag

Definition at line 128 of file terminal.hpp.

◆ MODE

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
const Mode LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::MODE

终端换行模式 Terminal line feed mode

Definition at line 113 of file terminal.hpp.

◆ offset_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
int LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::offset_ = 0

光标偏移 Cursor offset

Definition at line 122 of file terminal.hpp.

◆ ramfs_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
RamFS& LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::ramfs_

关联的文件系统 Associated file system

Definition at line 117 of file terminal.hpp.

◆ read_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
ReadPort* LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::read_

读取端口 Read port

Definition at line 115 of file terminal.hpp.

◆ read_buff_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
char LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::read_buff_[READ_BUFF_SIZE]

读取缓冲区 Read buffer

Definition at line 118 of file terminal.hpp.

◆ read_status_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
ReadOperation::OperationPollingStatus LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::read_status_

Definition at line 110 of file terminal.hpp.

◆ write_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
WritePort* LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::write_

写入端口 Write port

Definition at line 116 of file terminal.hpp.

◆ write_op_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
WriteOperation LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::write_op_

终端写操作 Terminal write operation

Definition at line 114 of file terminal.hpp.

◆ write_status_

template<size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE, size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
WriteOperation::OperationPollingStatus LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::write_status_

Definition at line 111 of file terminal.hpp.


The documentation for this class was generated from the following file: