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_port_
 读取端口 Read port
 
WritePortwrite_port_
 写入端口 Write port
 
WritePort::Stream write_stream_
 写入流 Write stream
 
LibXR::Mutexwrite_mutex_ = nullptr
 写入端口互斥锁 Write port mutex
 
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_port_(read_port),
98 write_port_(write_port),
100 ramfs_(ramfs),
101 current_dir_(current_dir ? current_dir : &ramfs_.root_),
102 input_line_(MAX_LINE_SIZE + 1),
103 history_(MAX_HISTORY_NUMBER)
104 {
105 ASSERT(read_port != nullptr);
106 ASSERT(write_port != nullptr);
107 ASSERT(read_port->Readable());
108 ASSERT(write_port->Writable());
109
110 if (write_port == STDIO::write_)
111 {
112 if (STDIO::write_mutex_ == nullptr)
113 {
115 }
116
118 STDIO::write_stream_ = &write_stream_;
119 }
120 else
121 {
123 }
124 }
互斥锁类,提供线程同步机制 (Mutex class providing thread synchronization mechanisms).
Definition mutex.hpp:18
Dir root_
文件系统的根目录 Root directory of the file system
Definition ramfs.hpp:457
static LibXR::Mutex * write_mutex_
Write port mutex. 写入端口互斥锁。
Definition libxr_rw.hpp:600
static WritePort * write_
Write port instance. 写入端口。
Definition libxr_rw.hpp:599
Queue< LibXR::String< MAX_LINE_SIZE > > history_
历史命令 History of commands
Definition terminal.hpp:146
WritePort * write_port_
写入端口 Write port
Definition terminal.hpp:132
ReadPort * read_port_
读取端口 Read port
Definition terminal.hpp:131
WriteOperation write_op_
终端写操作 Terminal write operation
Definition terminal.hpp:130
RamFS & ramfs_
关联的文件系统 Associated file system
Definition terminal.hpp:137
WritePort::Stream write_stream_
写入流 Write stream
Definition terminal.hpp:133
LibXR::Mutex * write_mutex_
写入端口互斥锁 Write port mutex
Definition terminal.hpp:135
RamFS::Dir * current_dir_
当前目录 Current directory
Definition terminal.hpp:140
Stack< char > input_line_
输入行缓冲区 Input line buffer
Definition terminal.hpp:143
const Mode MODE
终端换行模式 Terminal line feed mode
Definition terminal.hpp:129

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 200 of file terminal.hpp.

201 {
202 if (offset_ == 0)
203 {
204 input_line_.Push(data);
205 }
206 else
207 {
209 }
210 input_line_[input_line_.Size()] = '\0';
211 }
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:142

◆ 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 370 of file terminal.hpp.

371 {
372 input_line_.Push('\0');
373
374 if (history_.EmptySize() == 0)
375 {
376 history_.Pop();
377 }
378 history_.Push(*reinterpret_cast<String<MAX_LINE_SIZE> *>(&input_line_[0]));
379 }

◆ 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 649 of file terminal.hpp.

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

◆ 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 193 of file terminal.hpp.

193{ 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 186 of file terminal.hpp.

186{ 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 328 of file terminal.hpp.

328{ write_stream_ << ConstRawData(CLEAR_ALL); }
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 322 of file terminal.hpp.

322{ write_stream_ << ConstRawData(CLEAR_LINE); }
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 355 of file terminal.hpp.

356 {
358 for (size_t i = 0; i < history_[-history_index_ - 1].Length(); i++)
359 {
361 }
362 history_index_ = -1;
363 offset_ = 0;
364 }
void Reset()
重置栈 / Resets the stack
Definition stack.hpp:218
int history_index_
当前历史索引 Current history index
Definition terminal.hpp:147

◆ 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 270 of file terminal.hpp.

271 {
272 bool use_history = false;
273
274 if (history_index_ >= 0)
275 {
277 use_history = true;
278 }
279
280 if (CanDeleteChar())
281 {
283 if (use_history)
284 {
285 ShowHistory();
286 }
287 else
288 {
289 write_stream_ << ConstRawData(DELETE_CHAR);
290 }
291
292 if (offset_ != 0)
293 {
295 }
296 }
297 }
void UpdateDisplayPosition()
更新光标位置 Updates cursor position
Definition terminal.hpp:174
bool CanDeleteChar()
检查是否可以删除字符 Checks if a character can be deleted
Definition terminal.hpp:193
void CopyHistoryToInputLine()
将历史命令复制到输入行,并重置历史索引和光标偏移 Copies the history command to the input line and resets history index and cu...
Definition terminal.hpp:355
void ShowHistory()
显示历史记录中的输入行,更新终端显示 Displays the input line from history and updates the terminal display
Definition terminal.hpp:334
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:252

◆ 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 219 of file terminal.hpp.

220 {
221 bool use_history = false;
222
223 if (history_index_ >= 0)
224 {
226 use_history = true;
227 }
228
229 if (CanDisplayChar())
230 {
231 AddCharToInputLine(data);
232 if (use_history)
233 {
234 ShowHistory();
235 }
236 else
237 {
238 write_stream_ << ConstRawData(input_line_[input_line_.Size() - 1 + offset_]);
239 }
240 if (offset_ != 0)
241 {
243 }
244 }
245 }
bool CanDisplayChar()
检查是否可以显示字符 Checks if a character can be displayed
Definition terminal.hpp:186
void AddCharToInputLine(char data)
向输入行中添加字符,支持在光标位置插入 Adds a character to the input line, supports insertion at the cursor position
Definition terminal.hpp:200

◆ 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 487 of file terminal.hpp.

488 {
489 AddHistory();
490
491 GetArgs();
492
493 if (arg_number_ < 1 || arg_number_ > MAX_ARG_NUMBER)
494 {
495 return;
496 }
497
498 if (strcmp(arg_tab_[0], "cd") == 0)
499 {
500 RamFS::Dir *dir = Path2Dir(arg_tab_[1]);
501 if (dir != nullptr)
502 {
503 current_dir_ = dir;
504 }
505 LineFeed();
506 return;
507 }
508
509 if (strcmp(arg_tab_[0], "ls") == 0)
510 {
511 auto ls_fun = [&](RBTree<const char *>::Node<RamFS::FsNode> &item)
512 {
513 switch (item->type)
514 {
516 write_stream_ << ConstRawData("d ");
517 break;
519 write_stream_ << ConstRawData("f ");
520 break;
522 write_stream_ << ConstRawData("c ");
523 break;
525 write_stream_ << ConstRawData("b ");
526 break;
527 default:
528 write_stream_ << ConstRawData("? ");
529 break;
530 }
531 write_stream_ << ConstRawData(item.data_.name);
532 this->LineFeed();
533 return ErrorCode::OK;
534 };
535
536 current_dir_->data_.rbt.Foreach<RamFS::FsNode>(ls_fun);
537 return;
538 }
539
540 auto ans = Path2File(arg_tab_[0]);
541 if (ans == nullptr)
542 {
543 write_stream_ << ConstRawData("Command not found.");
544 LineFeed();
545 return;
546 }
547
548 if ((*ans)->type != RamFS::FileType::EXEC)
549 {
550 write_stream_ << ConstRawData("Not an executable file.");
551 LineFeed();
552 return;
553 }
554
556 (*ans)->Run(arg_number_, arg_tab_);
558 }
ErrorCode Lock()
加锁,如果锁已被占用,则阻塞等待 (Lock the mutex, blocking if it is already locked).
Definition mutex.cpp:14
void Unlock()
解锁互斥锁 (Unlock the mutex).
Definition mutex.cpp:28
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:144
size_t arg_number_
参数数量 Number of arguments
Definition terminal.hpp:145
void AddHistory()
将当前输入行添加到历史记录 Adds the current input line to the history
Definition terminal.hpp:370
RamFS::File * Path2File(char *path)
将路径字符串解析为文件对象 Converts a path string into a file object
Definition terminal.hpp:456
void GetArgs()
解析输入行,将其拆分为参数数组 Parses the input line and splits it into argument array
Definition terminal.hpp:385

◆ 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 385 of file terminal.hpp.

386 {
387 for (int i = 0; input_line_[i] != '\0'; i++)
388 {
389 if (input_line_[i] == ' ')
390 {
391 input_line_[i] = '\0';
392 }
393 else if (i == 0 || input_line_[i - 1] == '\0')
394 {
395 if (arg_number_ >= MAX_ARG_NUMBER)
396 {
397 return;
398 }
400 }
401 }
402 }

◆ 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 581 of file terminal.hpp.

582 {
583 if (flag_ansi_ == 1)
584 {
585 if (isprint(data))
586 {
587 flag_ansi_++;
588 }
589 else
590 {
591 flag_ansi_ = 0;
592 }
593 }
594 else if (flag_ansi_ == 2)
595 {
596 switch (data)
597 {
598 case 'A':
599 if (history_index_ < int(history_.Size()) - 1)
600 {
602 ShowHistory();
603 }
604 break;
605 case 'B':
606 if (history_index_ >= 0)
607 {
609 ShowHistory();
610 }
611 break;
612 case 'C':
613 if (history_index_ >= 0)
614 {
616 ShowHistory();
617 }
618 if (offset_ < 0)
619 {
620 offset_++;
621 write_stream_ << ConstRawData(KEY_RIGHT, sizeof(KEY_RIGHT) - 1);
622 }
623
624 break;
625 case 'D':
626 if (history_index_ >= 0)
627 {
629 ShowHistory();
630 }
631 if (offset_ + input_line_.Size() > 0)
632 {
633 offset_--;
634 write_stream_ << ConstRawData(KEY_LEFT, sizeof(KEY_LEFT) - 1);
635 }
636 break;
637 default:
638 break;
639 }
640
641 flag_ansi_ = 0;
642 }
643 }
static constexpr char KEY_LEFT[]
左箭头键 Left arrow key
Definition terminal.hpp:40
uint8_t flag_ansi_
ANSI 控制字符状态 ANSI control character state.
Definition terminal.hpp:141
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 847 of file terminal.hpp.

848 {
849 if (flag_ansi_)
850 {
852 }
853 else if (isprint(data))
854 {
855 DisplayChar(data);
856 }
857 else
858 {
860 }
861 }
void HandleAnsiCharacter(char data)
解析输入数据流,将其转换为字符并处理 Parses the input data stream, converting it into characters and processing them
Definition terminal.hpp:581
void HandleControlCharacter(char data)
处理控制字符,包括换行、删除、制表符等 Handles control characters such as newline, delete, and tab
Definition terminal.hpp:796

◆ 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 796 of file terminal.hpp.

797 {
798 if (data != '\r' && data != '\n')
799 {
800 linefeed_flag_ = false;
801 }
802
803 switch (data)
804 {
805 case '\n':
806 case '\r':
807 if (linefeed_flag_)
808 {
809 linefeed_flag_ = false;
810 return;
811 }
812 if (history_index_ >= 0)
813 {
815 }
816 LineFeed();
817 if (input_line_.Size() > 0)
818 {
820 arg_number_ = 0;
821 }
822 ShowHeader();
824 input_line_[0] = '\0';
825 offset_ = 0;
826 break;
827 case 0x7f:
828 case '\b':
829 DeleteChar();
830 break;
831 case '\t':
832 AutoComplete();
833 break;
834 case '\033':
835 flag_ansi_ = 1;
836 break;
837 default:
838 break;
839 }
840 }
void AutoComplete()
实现命令自动补全,匹配目录或文件名 Implements command auto-completion by matching directories or file names
Definition terminal.hpp:649
void ExecuteCommand()
解析并执行输入的命令 Parses and executes the entered command
Definition terminal.hpp:487
void DeleteChar()
处理删除字符操作,支持回退删除,并在历史模式下更新显示 Handles the delete character operation, supports backspace deletion,...
Definition terminal.hpp:270
bool linefeed_flag_
换行标志 Line feed flag
Definition terminal.hpp:148

◆ 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 154 of file terminal.hpp.

155 {
156 if (MODE == Mode::CRLF)
157 {
158 write_stream_ << ConstRawData("\r\n");
159 }
160 else if (MODE == Mode::LF)
161 {
162 write_stream_ << ConstRawData('\n');
163 }
164 else if (MODE == Mode::CR)
165 {
166 write_stream_ << ConstRawData('\r');
167 }
168 }

◆ 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 566 of file terminal.hpp.

567 {
568 char *buff = static_cast<char *>(raw_data.addr_);
569 for (size_t i = 0; i < raw_data.size_; i++)
570 {
571 HandleCharacter(buff[i]);
572 }
573 }
void HandleCharacter(char data)
处理输入字符,根据类型调用相应的处理函数 Handles input characters, dispatching them to the appropriate handler
Definition terminal.hpp:847

◆ 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 411 of file terminal.hpp.

412 {
413 size_t index = 0;
414 RamFS::Dir *dir = current_dir_;
415
416 if (*path == '/')
417 {
418 index++;
419 dir = &ramfs_.root_;
420 }
421
422 for (size_t i = 0; i < MAX_LINE_SIZE; i++)
423 {
424 auto tmp = strchr(path + index, '/');
425 if (tmp == nullptr)
426 {
427 return dir->FindDir(path + index);
428 }
429 else if (tmp == path + index)
430 {
431 return nullptr;
432 }
433 else
434 {
435 tmp[0] = '\0';
436 dir = dir->FindDir(path + index);
437 tmp[0] = '/';
438 index += tmp - path + 1;
439 if (path[index] == '\0' || dir == nullptr)
440 {
441 return dir;
442 }
443 }
444 }
445
446 return nullptr;
447 }

◆ 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 456 of file terminal.hpp.

457 {
458 auto name = StrchrRev(path, '/');
459
460 if (name == nullptr)
461 {
462 return current_dir_->FindFile(path);
463 }
464
465 if (name[1] == '\0')
466 {
467 return nullptr;
468 }
469
470 *name = '\0';
471 RamFS::Dir *dir = Path2Dir(path);
472 *name = '/';
473 if (dir != nullptr)
474 {
475 return dir->FindFile(name + 1);
476 }
477 else
478 {
479 return nullptr;
480 }
481 }
File * FindFile(const char *name)
查找当前目录中的文件 Finds a file in the current directory
Definition ramfs.cpp:32
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 252 of file terminal.hpp.

253 {
254 if (offset_ == 0)
255 {
257 }
258 else
259 {
261 }
262 input_line_[input_line_.Size()] = '\0';
263 }
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 303 of file terminal.hpp.

304 {
305 write_stream_ << ConstRawData(ramfs_.root_->name, strlen(ramfs_.root_->name));
306 if (current_dir_ == &ramfs_.root_)
307 {
308 write_stream_ << ConstRawData(":/");
309 }
310 else
311 {
312 write_stream_ << ConstRawData(":") << ConstRawData(current_dir_->data_.name);
313 }
314
315 write_stream_ << ConstRawData("$ ");
316 }

◆ 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 334 of file terminal.hpp.

335 {
336 ClearLine();
337 ShowHeader();
338 offset_ = 0;
339 if (history_index_ >= 0)
340 {
341 write_stream_ << ConstRawData(history_[-history_index_ - 1].Raw(),
342 history_[-history_index_ - 1].Length());
343 }
344 else
345 {
346 write_stream_ << ConstRawData(&input_line_[0], input_line_.Size());
347 }
348 }
void ClearLine()
清除当前行 Clears the current line
Definition terminal.hpp:322

◆ 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 923 of file terminal.hpp.

924 {
925 RawData buff = term->read_buff_;
926 buff.size_ = LibXR::min(LibXR::max(1u, term->read_port_->Size()), READ_BUFF_SIZE);
927
928 ReadOperation op(term->read_status_);
929
930 while (true)
931 {
932 switch (term->read_status_)
933 {
934 case ReadOperation::OperationPollingStatus::READY:
935 buff.size_ =
936 LibXR::min(LibXR::max(1u, term->read_port_->Size()), READ_BUFF_SIZE);
937 (*term->read_port_)(buff, op);
938 continue;
939 case ReadOperation::OperationPollingStatus::RUNNING:
940 return;
941 case ReadOperation::OperationPollingStatus::DONE:
942 buff.size_ = term->read_port_->read_size_;
943 if (buff.size_ > 0)
944 {
945 term->write_mutex_->Lock();
946 term->Parse(buff);
947 term->write_stream_.Commit();
948 term->write_mutex_->Unlock();
949 }
950 buff.size_ =
951 LibXR::min(LibXR::max(1u, term->read_port_->Size()), READ_BUFF_SIZE);
952 (*term->read_port_)(buff, op);
953 return;
954 }
955 }
956 }
Operation< ErrorCode > ReadOperation
Read operation type.
Definition libxr_rw.hpp:233
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 879 of file terminal.hpp.

880 {
881 RawData buff = term->read_buff_;
882
883 Semaphore read_sem, write_sem;
884 ReadOperation op(read_sem);
885
886 term->write_op_.type = WriteOperation::OperationType::NONE;
887 term->write_op_.data.sem_info.sem = &write_sem;
888 term->write_op_.data.sem_info.timeout = 10;
889 term->write_op_.type = WriteOperation::OperationType::BLOCK;
890
891 while (true)
892 {
893 buff.size_ = LibXR::min(term->read_port_->Size(), READ_BUFF_SIZE);
894 if ((*term->read_port_)(buff, op) == ErrorCode::OK)
895 {
896 if (term->read_port_->read_size_ > 0)
897 {
898 buff.size_ = term->read_port_->read_size_;
899 term->write_mutex_->Lock();
900 term->Parse(buff);
901 term->write_stream_.Commit();
902 term->write_mutex_->Unlock();
903 }
904 }
905 }
906 }

◆ 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 174 of file terminal.hpp.

175 {
176 write_stream_ << ConstRawData(KEY_SAVE) << ConstRawData(CLEAR_BEHIND)
177 << ConstRawData(&input_line_[input_line_.Size() + offset_], -offset_)
178 << ConstRawData(KEY_LOAD);
179 }
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 145 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 144 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 140 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 141 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 146 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 147 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 143 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 148 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 129 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 142 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 137 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 138 of file terminal.hpp.

◆ read_port_

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_port_

读取端口 Read port

Definition at line 131 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 126 of file terminal.hpp.

◆ write_mutex_

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::Mutex* LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::write_mutex_ = nullptr

写入端口互斥锁 Write port mutex

Definition at line 135 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 130 of file terminal.hpp.

◆ write_port_

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_port_

写入端口 Write port

Definition at line 132 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 127 of file terminal.hpp.

◆ write_stream_

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::Stream LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::write_stream_

写入流 Write stream

Definition at line 133 of file terminal.hpp.


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