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
 
const HistoryLineHistoryFromNewest (int index_from_newest)
 按“从最新到最旧”的顺序取历史记录 Fetches one history entry counting from newest to oldest
 
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 ()
 路径解析、命令执行与自动补全片段 Path-resolution, command-execution, and auto-completion fragment
 
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 AutoComplete ()
 实现命令自动补全,匹配目录或文件名 Implements command auto-completion by matching directories or file names
 
void Parse (RawData &raw_data)
 输入字节解析与 ANSI / 控制字符分发片段 Input-byte parsing plus ANSI / control-character dispatch fragment
 
void HandleAnsiCharacter (char data)
 处理 ANSI 序列中的后续字符 Handles the follow-up characters of an ANSI sequence
 
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 size_t HistoryLineSize (const HistoryLine &line)
 行编辑、显示与历史记录片段 Line-editing, display, and history-management fragment
 
static void ThreadFun (Terminal *term)
 线程 / 轮询驱动入口片段 Threaded / polling driver-entry fragment
 
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_
 当前读/写轮询状态 / Current polling status of the read / write side.
 
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
 
size_t request_read_size_ = 0
 本轮计划读取的字节数 / Byte count requested for the current read attempt.
 
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< HistoryLinehistory_
 历史命令 History of commands
 
int history_index_ = -1
 当前历史索引 Current history index
 
bool linefeed_flag_ = false
 CRLF 抑制标志 CRLF suppression flag.
 
char linefeed_char_ = '\0'
 上一个换行字符 Previous line feed character
 

Private Types

using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>
 一条历史命令的固定存储单元 Fixed storage slot for one history command line
 

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 []
 终端控制序列常量 Terminal control-sequence constants
 
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 Typedef Documentation

◆ HistoryLine

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>
using LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HistoryLine = std::array<char, MAX_LINE_SIZE + 1>
private

一条历史命令的固定存储单元 Fixed storage slot for one history command line

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

88 {
89 CRLF = 0,
90 LF = 1,
91 CR = 2
92 };
@ 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)
Note
包含动态内存分配。 Contains dynamic memory allocation.

Definition at line 107 of file terminal.hpp.

110 : read_status_(ReadOperation::OperationPollingStatus::READY),
111 write_status_(WriteOperation::OperationPollingStatus::READY),
112 MODE(MODE),
114 read_port_(read_port),
115 write_port_(write_port),
117 ramfs_(ramfs),
118 current_dir_(current_dir ? current_dir : &ramfs_.root_),
119 input_line_(MAX_LINE_SIZE + 1),
120 history_(MAX_HISTORY_NUMBER)
121 {
122 ASSERT(read_port != nullptr);
123 ASSERT(write_port != nullptr);
124 ASSERT(read_port->Readable());
125 ASSERT(write_port->Writable());
126
127 if (write_port == STDIO::write_)
128 {
129 if (STDIO::write_mutex_ == nullptr)
130 {
132 }
133
136 }
137 else
138 {
140 }
141 }
互斥锁类,提供线程同步机制 (Mutex class providing thread synchronization mechanisms).
Definition mutex.hpp:18
Dir root_
根目录;所有外部 Add()/Find*() 默认都从这里进入 / Root directory; all external Add()/Find*() entry through here.
Definition ramfs.hpp:148
static LibXR::WritePort::Stream * write_stream_
Optional externally owned write stream. 可选的外部托管写流。
Definition stdio.hpp:29
static LibXR::Mutex * write_mutex_
Write port mutex. 写入端口互斥锁。
Definition stdio.hpp:27
static WritePort * write_
Write port instance. 写入端口。
Definition stdio.hpp:26
WritePort * write_port_
写入端口 Write port
Definition terminal.hpp:150
ReadPort * read_port_
读取端口 Read port
Definition terminal.hpp:149
WriteOperation write_op_
终端写操作 Terminal write operation
Definition terminal.hpp:148
Queue< HistoryLine > history_
历史命令 History of commands
Definition terminal.hpp:165
RamFS & ramfs_
关联的文件系统 Associated file system
Definition terminal.hpp:155
WritePort::Stream write_stream_
写入流 Write stream
Definition terminal.hpp:151
LibXR::Mutex * write_mutex_
写入端口互斥锁 Write port mutex
Definition terminal.hpp:153
WriteOperation::OperationPollingStatus write_status_
当前读/写轮询状态 / Current polling status of the read / write side.
Definition terminal.hpp:145
RamFS::Dir * current_dir_
当前目录 Current directory
Definition terminal.hpp:159
Stack< char > input_line_
输入行缓冲区 Input line buffer
Definition terminal.hpp:162
const Mode MODE
终端换行模式 Terminal line feed mode
Definition terminal.hpp:147

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

110 : read_status_(ReadOperation::OperationPollingStatus::READY),
111 write_status_(WriteOperation::OperationPollingStatus::READY),
112 MODE(MODE),
114 read_port_(read_port),
115 write_port_(write_port),
117 ramfs_(ramfs),
118 current_dir_(current_dir ? current_dir : &ramfs_.root_),

◆ 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

Note
超过 MAX_HISTORY_NUMBER 时,当前实现会丢掉最旧的一条,再压入最新输入。 When MAX_HISTORY_NUMBER is exceeded, the current implementation drops the oldest entry before pushing the newest input line.

Definition at line 287 of file terminal.hpp.

303{
304
314template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
315 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
316class Terminal
317{
318 private:
323 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
324
333 static constexpr char CLEAR_ALL[] =
334 "\033[2J\033[1H";
335 static constexpr char CLEAR_LINE[] =
336 "\033[2K\r";
337 static constexpr char CLEAR_BEHIND[] =
338 "\033[K";
339 static constexpr char KEY_RIGHT[] = "\033[C";
340 static constexpr char KEY_LEFT[] = "\033[D";
341 static constexpr char KEY_SAVE[] = "\033[s";
342 static constexpr char KEY_LOAD[] = "\033[u";
343 static constexpr char DELETE_CHAR[] =
344 "\b \b";
345
354 char* StrchrRev(char* str, char c)
355 {
356 auto len = strlen(str);
357 for (int i = static_cast<int>(len - 1); i >= 0; i--)
358 {
359 if (str[i] == c)
360 {
361 return str + i;
362 }
363 }
364 return nullptr;
365 }
366
367 public:
373 enum class Mode : uint8_t
374 {
375 CRLF = 0,
376 LF = 1,
377 CR = 2
378 };
379
393 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
394 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
396 : read_status_(ReadOperation::OperationPollingStatus::READY),
397 write_status_(WriteOperation::OperationPollingStatus::READY),
398 MODE(MODE),
400 read_port_(read_port),
401 write_port_(write_port),
403 ramfs_(ramfs),
404 current_dir_(current_dir ? current_dir : &ramfs_.root_),
405 input_line_(MAX_LINE_SIZE + 1),
406 history_(MAX_HISTORY_NUMBER)
407 {
408 ASSERT(read_port != nullptr);
409 ASSERT(write_port != nullptr);
410 ASSERT(read_port->Readable());
411 ASSERT(write_port->Writable());
412
413 if (write_port == STDIO::write_)
414 {
415 if (STDIO::write_mutex_ == nullptr)
416 {
418 }
419
422 }
423 else
424 {
426 }
427 }
428
432
433 const Mode MODE;
435 ReadPort* read_port_;
436 WritePort* write_port_;
437 WritePort::Stream write_stream_;
438
439 LibXR::Mutex* write_mutex_ = nullptr;
440
441 RamFS& ramfs_;
442 char read_buff_[READ_BUFF_SIZE];
443
444 size_t request_read_size_ = 0;
445 RamFS::Dir* current_dir_;
446 uint8_t flag_ansi_ = 0;
447 int offset_ = 0;
448 Stack<char> input_line_;
449 char* arg_tab_[MAX_ARG_NUMBER];
450 size_t arg_number_ = 0;
451 Queue<HistoryLine> history_;
452 int history_index_ = -1;
453 bool linefeed_flag_ = false;
454 char linefeed_char_ = '\0';
455
460#include "display.hpp"
461
466#include "command.hpp"
467
472#include "input.hpp"
473
478#include "driver.hpp"
479};
480
481} // namespace LibXR
轻量级内存文件系统 / Lightweight in-memory file system
Definition ramfs.hpp:23
static ReadPort * read_
Read port instance. 读取端口。
Definition stdio.hpp:25
char * arg_tab_[MAX_ARG_NUMBER]
命令参数列表 Command argument list
Definition terminal.hpp:163
static constexpr char KEY_LEFT[]
左箭头键 Left arrow key
Definition terminal.hpp:54
size_t arg_number_
参数数量 Number of arguments
Definition terminal.hpp:164
uint8_t flag_ansi_
ANSI 控制字符状态 ANSI control character state.
Definition terminal.hpp:160
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,...
Definition terminal.hpp:107
char linefeed_char_
上一个换行字符 Previous line feed character
Definition terminal.hpp:168
static constexpr char KEY_LOAD[]
恢复光标位置 Restore cursor position
Definition terminal.hpp:56
char read_buff_[READ_BUFF_SIZE]
读取缓冲区 Read buffer
Definition terminal.hpp:156
int history_index_
当前历史索引 Current history index
Definition terminal.hpp:166
char * StrchrRev(char *str, char c)
反向查找字符串中的特定字符 Finds a specific character in a string from the end
Definition terminal.hpp:68
int offset_
光标偏移 Cursor offset
Definition terminal.hpp:161
static constexpr char CLEAR_LINE[]
清除当前行命令 Clear current line command
Definition terminal.hpp:49
static constexpr char DELETE_CHAR[]
退格删除字符 Backspace delete character
Definition terminal.hpp:57
static constexpr char CLEAR_ALL[]
终端控制序列常量 Terminal control-sequence constants
Definition terminal.hpp:47
static constexpr char CLEAR_BEHIND[]
清除光标后内容命令 Clear content after cursor command
Definition terminal.hpp:51
size_t request_read_size_
本轮计划读取的字节数 / Byte count requested for the current read attempt.
Definition terminal.hpp:158
static constexpr char KEY_SAVE[]
保存光标位置 Save cursor position
Definition terminal.hpp:55
Mode
终端换行模式 Line feed modes for the terminal
Definition terminal.hpp:88
bool linefeed_flag_
CRLF 抑制标志 CRLF suppression flag.
Definition terminal.hpp:167
std::array< char, MAX_LINE_SIZE+1 > HistoryLine
一条历史命令的固定存储单元 Fixed storage slot for one history command line
Definition terminal.hpp:37
static constexpr char KEY_RIGHT[]
右箭头键 Right arrow key
Definition terminal.hpp:53
Operation< ErrorCode > ReadOperation
Read operation type.
Operation< ErrorCode > WriteOperation
Write operation type.

◆ 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

Note
当前自动补全只处理“第一参数且光标在该参数尾部”这一种情况,不会解析后续参数。 The current auto-completion handles only the first argument when the cursor is at that argument's tail; it does not parse later arguments.

Definition at line 239 of file terminal.hpp.

255{
256
266template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
267 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
268class Terminal
269{
270 private:
275 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
276
285 static constexpr char CLEAR_ALL[] =
286 "\033[2J\033[1H";
287 static constexpr char CLEAR_LINE[] =
288 "\033[2K\r";
289 static constexpr char CLEAR_BEHIND[] =
290 "\033[K";
291 static constexpr char KEY_RIGHT[] = "\033[C";
292 static constexpr char KEY_LEFT[] = "\033[D";
293 static constexpr char KEY_SAVE[] = "\033[s";
294 static constexpr char KEY_LOAD[] = "\033[u";
295 static constexpr char DELETE_CHAR[] =
296 "\b \b";
297
306 char* StrchrRev(char* str, char c)
307 {
308 auto len = strlen(str);
309 for (int i = static_cast<int>(len - 1); i >= 0; i--)
310 {
311 if (str[i] == c)
312 {
313 return str + i;
314 }
315 }
316 return nullptr;
317 }
318
319 public:
325 enum class Mode : uint8_t
326 {
327 CRLF = 0,
328 LF = 1,
329 CR = 2
330 };
331
345 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
346 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
348 : read_status_(ReadOperation::OperationPollingStatus::READY),
349 write_status_(WriteOperation::OperationPollingStatus::READY),
350 MODE(MODE),
352 read_port_(read_port),
353 write_port_(write_port),
355 ramfs_(ramfs),
356 current_dir_(current_dir ? current_dir : &ramfs_.root_),
357 input_line_(MAX_LINE_SIZE + 1),
358 history_(MAX_HISTORY_NUMBER)
359 {
360 ASSERT(read_port != nullptr);
361 ASSERT(write_port != nullptr);
362 ASSERT(read_port->Readable());
363 ASSERT(write_port->Writable());
364
365 if (write_port == STDIO::write_)
366 {
367 if (STDIO::write_mutex_ == nullptr)
368 {
370 }
371
374 }
375 else
376 {
378 }
379 }
380
384
385 const Mode MODE;
387 ReadPort* read_port_;
388 WritePort* write_port_;
389 WritePort::Stream write_stream_;
390
391 LibXR::Mutex* write_mutex_ = nullptr;
392
393 RamFS& ramfs_;
394 char read_buff_[READ_BUFF_SIZE];
395
396 size_t request_read_size_ = 0;
397 RamFS::Dir* current_dir_;
398 uint8_t flag_ansi_ = 0;
399 int offset_ = 0;
400 Stack<char> input_line_;
401 char* arg_tab_[MAX_ARG_NUMBER];
402 size_t arg_number_ = 0;
403 Queue<HistoryLine> history_;
404 int history_index_ = -1;
405 bool linefeed_flag_ = false;
406 char linefeed_char_ = '\0';
407
412#include "display.hpp"
413
418#include "command.hpp"
419
424#include "input.hpp"
425
430#include "driver.hpp"
431};
432
433} // namespace LibXR

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

100: standard input)

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

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

251{
252
262template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
263 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
264class Terminal
265{
266 private:
271 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
272
281 static constexpr char CLEAR_ALL[] =
282 "\033[2J\033[1H";
283 static constexpr char CLEAR_LINE[] =
284 "\033[2K\r";
285 static constexpr char CLEAR_BEHIND[] =
286 "\033[K";
287 static constexpr char KEY_RIGHT[] = "\033[C";
288 static constexpr char KEY_LEFT[] = "\033[D";
289 static constexpr char KEY_SAVE[] = "\033[s";
290 static constexpr char KEY_LOAD[] = "\033[u";
291 static constexpr char DELETE_CHAR[] =
292 "\b \b";
293
302 char* StrchrRev(char* str, char c)
303 {
304 auto len = strlen(str);
305 for (int i = static_cast<int>(len - 1); i >= 0; i--)
306 {
307 if (str[i] == c)
308 {
309 return str + i;
310 }
311 }
312 return nullptr;
313 }
314
315 public:
321 enum class Mode : uint8_t
322 {
323 CRLF = 0,
324 LF = 1,
325 CR = 2
326 };
327
341 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
342 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
344 : read_status_(ReadOperation::OperationPollingStatus::READY),
345 write_status_(WriteOperation::OperationPollingStatus::READY),
346 MODE(MODE),
348 read_port_(read_port),
349 write_port_(write_port),
351 ramfs_(ramfs),
352 current_dir_(current_dir ? current_dir : &ramfs_.root_),
353 input_line_(MAX_LINE_SIZE + 1),
354 history_(MAX_HISTORY_NUMBER)
355 {
356 ASSERT(read_port != nullptr);
357 ASSERT(write_port != nullptr);
358 ASSERT(read_port->Readable());
359 ASSERT(write_port->Writable());
360
361 if (write_port == STDIO::write_)
362 {
363 if (STDIO::write_mutex_ == nullptr)
364 {
366 }
367
370 }
371 else
372 {
374 }
375 }
376
380
381 const Mode MODE;
383 ReadPort* read_port_;
384 WritePort* write_port_;
385 WritePort::Stream write_stream_;
386
387 LibXR::Mutex* write_mutex_ = nullptr;
388
389 RamFS& ramfs_;
390 char read_buff_[READ_BUFF_SIZE];
391
392 size_t request_read_size_ = 0;
393 RamFS::Dir* current_dir_;
394 uint8_t flag_ansi_ = 0;
395 int offset_ = 0;
396 Stack<char> input_line_;
397 char* arg_tab_[MAX_ARG_NUMBER];
398 size_t arg_number_ = 0;
399 Queue<HistoryLine> history_;
400 int history_index_ = -1;
401 bool linefeed_flag_ = false;
402 char linefeed_char_ = '\0';
403
408#include "display.hpp"
409
414#include "command.hpp"
415
420#include "input.hpp"
421
426#include "driver.hpp"
427};
428
429} // namespace LibXR

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

245{
246
256template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
257 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
258class Terminal
259{
260 private:
265 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
266
275 static constexpr char CLEAR_ALL[] =
276 "\033[2J\033[1H";
277 static constexpr char CLEAR_LINE[] =
278 "\033[2K\r";
279 static constexpr char CLEAR_BEHIND[] =
280 "\033[K";
281 static constexpr char KEY_RIGHT[] = "\033[C";
282 static constexpr char KEY_LEFT[] = "\033[D";
283 static constexpr char KEY_SAVE[] = "\033[s";
284 static constexpr char KEY_LOAD[] = "\033[u";
285 static constexpr char DELETE_CHAR[] =
286 "\b \b";
287
296 char* StrchrRev(char* str, char c)
297 {
298 auto len = strlen(str);
299 for (int i = static_cast<int>(len - 1); i >= 0; i--)
300 {
301 if (str[i] == c)
302 {
303 return str + i;
304 }
305 }
306 return nullptr;
307 }
308
309 public:
315 enum class Mode : uint8_t
316 {
317 CRLF = 0,
318 LF = 1,
319 CR = 2
320 };
321
335 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
336 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
338 : read_status_(ReadOperation::OperationPollingStatus::READY),
339 write_status_(WriteOperation::OperationPollingStatus::READY),
340 MODE(MODE),
342 read_port_(read_port),
343 write_port_(write_port),
345 ramfs_(ramfs),
346 current_dir_(current_dir ? current_dir : &ramfs_.root_),
347 input_line_(MAX_LINE_SIZE + 1),
348 history_(MAX_HISTORY_NUMBER)
349 {
350 ASSERT(read_port != nullptr);
351 ASSERT(write_port != nullptr);
352 ASSERT(read_port->Readable());
353 ASSERT(write_port->Writable());
354
355 if (write_port == STDIO::write_)
356 {
357 if (STDIO::write_mutex_ == nullptr)
358 {
360 }
361
364 }
365 else
366 {
368 }
369 }
370
374
375 const Mode MODE;
377 ReadPort* read_port_;
378 WritePort* write_port_;
379 WritePort::Stream write_stream_;
380
381 LibXR::Mutex* write_mutex_ = nullptr;
382
383 RamFS& ramfs_;
384 char read_buff_[READ_BUFF_SIZE];
385
386 size_t request_read_size_ = 0;
387 RamFS::Dir* current_dir_;
388 uint8_t flag_ansi_ = 0;
389 int offset_ = 0;
390 Stack<char> input_line_;
391 char* arg_tab_[MAX_ARG_NUMBER];
392 size_t arg_number_ = 0;
393 Queue<HistoryLine> history_;
394 int history_index_ = -1;
395 bool linefeed_flag_ = false;
396 char linefeed_char_ = '\0';
397
402#include "display.hpp"
403
408#include "command.hpp"
409
414#include "input.hpp"
415
420#include "driver.hpp"
421};
422
423} // namespace LibXR

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

282{
283
293template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
294 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
295class Terminal
296{
297 private:
302 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
303
312 static constexpr char CLEAR_ALL[] =
313 "\033[2J\033[1H";
314 static constexpr char CLEAR_LINE[] =
315 "\033[2K\r";
316 static constexpr char CLEAR_BEHIND[] =
317 "\033[K";
318 static constexpr char KEY_RIGHT[] = "\033[C";
319 static constexpr char KEY_LEFT[] = "\033[D";
320 static constexpr char KEY_SAVE[] = "\033[s";
321 static constexpr char KEY_LOAD[] = "\033[u";
322 static constexpr char DELETE_CHAR[] =
323 "\b \b";
324
333 char* StrchrRev(char* str, char c)
334 {
335 auto len = strlen(str);
336 for (int i = static_cast<int>(len - 1); i >= 0; i--)
337 {
338 if (str[i] == c)
339 {
340 return str + i;
341 }
342 }
343 return nullptr;
344 }
345
346 public:
352 enum class Mode : uint8_t
353 {
354 CRLF = 0,
355 LF = 1,
356 CR = 2
357 };
358
372 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
373 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
375 : read_status_(ReadOperation::OperationPollingStatus::READY),
376 write_status_(WriteOperation::OperationPollingStatus::READY),
377 MODE(MODE),
379 read_port_(read_port),
380 write_port_(write_port),
382 ramfs_(ramfs),
383 current_dir_(current_dir ? current_dir : &ramfs_.root_),
384 input_line_(MAX_LINE_SIZE + 1),
385 history_(MAX_HISTORY_NUMBER)
386 {
387 ASSERT(read_port != nullptr);
388 ASSERT(write_port != nullptr);
389 ASSERT(read_port->Readable());
390 ASSERT(write_port->Writable());
391
392 if (write_port == STDIO::write_)
393 {
394 if (STDIO::write_mutex_ == nullptr)
395 {
397 }
398
401 }
402 else
403 {
405 }
406 }
407
411
412 const Mode MODE;
414 ReadPort* read_port_;
415 WritePort* write_port_;
416 WritePort::Stream write_stream_;
417
418 LibXR::Mutex* write_mutex_ = nullptr;
419
420 RamFS& ramfs_;
421 char read_buff_[READ_BUFF_SIZE];
422
423 size_t request_read_size_ = 0;
424 RamFS::Dir* current_dir_;
425 uint8_t flag_ansi_ = 0;
426 int offset_ = 0;
427 Stack<char> input_line_;
428 char* arg_tab_[MAX_ARG_NUMBER];
429 size_t arg_number_ = 0;
430 Queue<HistoryLine> history_;
431 int history_index_ = -1;
432 bool linefeed_flag_ = false;
433 char linefeed_char_ = '\0';
434
439#include "display.hpp"
440
445#include "command.hpp"
446
451#include "input.hpp"
452
457#include "driver.hpp"
458};
459
460} // namespace LibXR

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

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

128 {
129 if (STDIO::write_mutex_ == nullptr)
130 {
132 }
133
136 }
137 else
138 {
140 }
141 }
142
146
147 const Mode MODE;
149 ReadPort* read_port_;
150 WritePort* write_port_;
151 WritePort::Stream write_stream_;
152

◆ 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

Note
当前实现只内建了 cdls;其它命令都按“把第一个参数当 RamFS 可执行文件 路径”来处理。 The current implementation provides only the built-in cd and ls; every other command is handled by treating the first argument as the path of an executable RamFS file.

Definition at line 152 of file terminal.hpp.

◆ 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

路径解析、命令执行与自动补全片段 Path-resolution, command-execution, and auto-completion fragment

Terminal 的命令解析片段 Command-parsing fragment of Terminal

Note
这一组函数只负责把当前输入行解释成命令:参数切分、路径解析、内建命令执行、 可执行文件查找以及自动补全。 This group is responsible only for interpreting the current input line as a command: argument tokenization, path resolution, built-in command execution, executable lookup, and auto-completion.

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

Note
该过程会原地把空格改成 \0,并把每个参数起始位置填进 arg_tab_。 This process overwrites spaces in-place with \0 and stores each argument start pointer into arg_tab_.

Definition at line 21 of file terminal.hpp.

31{
32 private:
37 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
38

◆ 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

处理 ANSI 序列中的后续字符 Handles the follow-up characters of an ANSI sequence

Parameters
data输入字符 The input character
Note
当前实现只识别箭头键对应的尾字符;其它 ANSI 序列会被静默忽略。 The current implementation recognizes only the tail characters used by arrow keys; other ANSI sequences are ignored silently.

Definition at line 37 of file terminal.hpp.

69 {
70 auto len = strlen(str);
71 for (int i = static_cast<int>(len - 1); i >= 0; i--)
72 {
73 if (str[i] == c)
74 {
75 return str + i;
76 }
77 }
78 return nullptr;
79 }
80
81 public:
87 enum class Mode : uint8_t
88 {
89 CRLF = 0,
90 LF = 1,
91 CR = 2
92 };
93

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

◆ 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
Note
这里还负责去掉一对 \r\n / \n\r 双换行中的重复第二字节,避免一次回车被 当成两次命令提交。 This path also suppresses the duplicated second byte of one \r\n / \n\r pair so a single Enter key does not submit the command twice.

Definition at line 111 of file terminal.hpp.

118 : &ramfs_.root_),
119 input_line_(MAX_LINE_SIZE + 1),
120 history_(MAX_HISTORY_NUMBER)
121 {
122 ASSERT(read_port != nullptr);
123 ASSERT(write_port != nullptr);
124 ASSERT(read_port->Readable());
125 ASSERT(write_port->Writable());
126
127 if (write_port == STDIO::write_)
128 {
129 if (STDIO::write_mutex_ == nullptr)
130 {
132 }
133
136 }
137 else
138 {
140 }
141 }
142
146
147 const Mode MODE;
149 ReadPort* read_port_;
150 WritePort* write_port_;
151 WritePort::Stream write_stream_;
152
153 LibXR::Mutex* write_mutex_ = nullptr;
154
155 RamFS& ramfs_;
156 char read_buff_[READ_BUFF_SIZE];
157
158 size_t request_read_size_ = 0;
159 RamFS::Dir* current_dir_;

◆ HistoryFromNewest()

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 HistoryLine & LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HistoryFromNewest ( int index_from_newest)
inline

按“从最新到最旧”的顺序取历史记录 Fetches one history entry counting from newest to oldest

Parameters
index_from_newest从最新一条开始的偏移;0 表示最新一条 Offset counted from the newest entry; 0 means the newest one
Returns
const HistoryLine& 对应的历史记录 Reference to the requested history entry
Note
Queue::operator[] 支持负索引从尾部反向访问,但这里把这个细节包起来, 避免调用点直接暴露 history_[-index - 1] 这种难读写法。 Queue::operator[] supports negative indices to walk backward from the tail, but this helper hides that detail so call sites do not have to expose the hard-to-read history_[-index - 1] form directly.

Definition at line 42 of file terminal.hpp.

◆ HistoryLineSize()

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 size_t LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::HistoryLineSize ( const HistoryLine & line)
inlinestatic

行编辑、显示与历史记录片段 Line-editing, display, and history-management fragment

Terminal 的显示与历史记录片段 Display and history fragment of Terminal

Note
这一组函数只负责行编辑、提示符显示、光标移动,以及历史记录的展示/拷回。 This group is responsible only for line editing, prompt rendering, cursor movement, and displaying / restoring history entries.

计算一条历史命令的实际文本长度 Calculates the actual text length of one stored history line

Parameters
line历史命令缓存 / Stored history line
Returns
size_t 历史命令的实际长度 Actual length of the history line

Definition at line 18 of file terminal.hpp.

◆ 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

Note
具体输出 \r\n\n 还是 \r 由构造时选定的 MODE 决定。 The actual emitted line ending is selected by the MODE chosen at construction time.

Definition at line 57 of file terminal.hpp.

69 {
70 auto len = strlen(str);
71 for (int i = static_cast<int>(len - 1); i >= 0; i--)

◆ 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

输入字节解析与 ANSI / 控制字符分发片段 Input-byte parsing plus ANSI / control-character dispatch fragment

Terminal 的输入解析片段 Input-parsing fragment of Terminal

Note
这一组函数只负责把读到的原始字节分发成 ANSI 序列、可显示字符或控制字符, 不直接处理文件系统命令语义。 This group is responsible only for routing raw bytes into ANSI sequences, printable characters, or control characters; it does not directly own filesystem-command semantics.

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

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

Definition at line 19 of file terminal.hpp.

◆ 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
Note
解析过程中会暂时把路径中的 / 改写成 \0 再恢复,所以调用方必须传入可写 缓冲区,而不是字符串常量。 The resolver temporarily rewrites / to \0 and restores it later, so callers must provide a writable buffer rather than a string literal.

Definition at line 52 of file terminal.hpp.

69 {
70 auto len = strlen(str);
71 for (int i = static_cast<int>(len - 1); i >= 0; i--)
72 {
73 if (str[i] == c)
74 {
75 return str + i;
76 }
77 }
78 return nullptr;
79 }
80
81 public:
87 enum class Mode : uint8_t
88 {
89 CRLF = 0,
90 LF = 1,
91 CR = 2
92 };
93

◆ 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
Note
这个解析同样会临时切开路径字符串,因此也要求 path 可写。 This resolver also temporarily splits the path string and therefore requires path to be writable.

Definition at line 110 of file terminal.hpp.

110 : read_status_(ReadOperation::OperationPollingStatus::READY),
111 write_status_(WriteOperation::OperationPollingStatus::READY),
112 MODE(MODE),
114 read_port_(read_port),
115 write_port_(write_port),
117 ramfs_(ramfs),
118 current_dir_(current_dir ? current_dir : &ramfs_.root_),
119 input_line_(MAX_LINE_SIZE + 1),
120 history_(MAX_HISTORY_NUMBER)
121 {
122 ASSERT(read_port != nullptr);
123 ASSERT(write_port != nullptr);
124 ASSERT(read_port->Readable());
125 ASSERT(write_port->Writable());
126
127 if (write_port == STDIO::write_)
128 {
129 if (STDIO::write_mutex_ == nullptr)
130 {
132 }
133
136 }
137 else
138 {
140 }

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

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

226{
227
237template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
238 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
239class Terminal
240{
241 private:
246 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
247
256 static constexpr char CLEAR_ALL[] =
257 "\033[2J\033[1H";
258 static constexpr char CLEAR_LINE[] =
259 "\033[2K\r";
260 static constexpr char CLEAR_BEHIND[] =
261 "\033[K";
262 static constexpr char KEY_RIGHT[] = "\033[C";
263 static constexpr char KEY_LEFT[] = "\033[D";
264 static constexpr char KEY_SAVE[] = "\033[s";
265 static constexpr char KEY_LOAD[] = "\033[u";
266 static constexpr char DELETE_CHAR[] =
267 "\b \b";
268
277 char* StrchrRev(char* str, char c)
278 {
279 auto len = strlen(str);
280 for (int i = static_cast<int>(len - 1); i >= 0; i--)
281 {
282 if (str[i] == c)
283 {
284 return str + i;
285 }
286 }
287 return nullptr;
288 }
289
290 public:
296 enum class Mode : uint8_t
297 {
298 CRLF = 0,
299 LF = 1,
300 CR = 2
301 };
302
316 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
317 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
319 : read_status_(ReadOperation::OperationPollingStatus::READY),
320 write_status_(WriteOperation::OperationPollingStatus::READY),
321 MODE(MODE),
323 read_port_(read_port),
324 write_port_(write_port),
326 ramfs_(ramfs),
327 current_dir_(current_dir ? current_dir : &ramfs_.root_),
328 input_line_(MAX_LINE_SIZE + 1),
329 history_(MAX_HISTORY_NUMBER)
330 {
331 ASSERT(read_port != nullptr);
332 ASSERT(write_port != nullptr);
333 ASSERT(read_port->Readable());
334 ASSERT(write_port->Writable());
335
336 if (write_port == STDIO::write_)
337 {
338 if (STDIO::write_mutex_ == nullptr)
339 {
341 }
342
345 }
346 else
347 {
349 }
350 }
351
355
356 const Mode MODE;
358 ReadPort* read_port_;
359 WritePort* write_port_;
360 WritePort::Stream write_stream_;
361
362 LibXR::Mutex* write_mutex_ = nullptr;
363
364 RamFS& ramfs_;
365 char read_buff_[READ_BUFF_SIZE];
366
367 size_t request_read_size_ = 0;
368 RamFS::Dir* current_dir_;
369 uint8_t flag_ansi_ = 0;
370 int offset_ = 0;
371 Stack<char> input_line_;
372 char* arg_tab_[MAX_ARG_NUMBER];
373 size_t arg_number_ = 0;
374 Queue<HistoryLine> history_;
375 int history_index_ = -1;
376 bool linefeed_flag_ = false;
377 char linefeed_char_ = '\0';
378
383#include "display.hpp"
384
389#include "command.hpp"
390
395#include "input.hpp"
396
401#include "driver.hpp"
402};
403
404} // namespace LibXR

◆ 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

Note
history_index_ < 0 时,这里回显的是当前尚未提交的输入行,而不是历史项。 When history_index_ < 0, this echoes the current in-progress input line rather than one history entry.

Definition at line 245 of file terminal.hpp.

261{
262
272template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
273 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
274class Terminal
275{
276 private:
281 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
282
291 static constexpr char CLEAR_ALL[] =
292 "\033[2J\033[1H";
293 static constexpr char CLEAR_LINE[] =
294 "\033[2K\r";
295 static constexpr char CLEAR_BEHIND[] =
296 "\033[K";
297 static constexpr char KEY_RIGHT[] = "\033[C";
298 static constexpr char KEY_LEFT[] = "\033[D";
299 static constexpr char KEY_SAVE[] = "\033[s";
300 static constexpr char KEY_LOAD[] = "\033[u";
301 static constexpr char DELETE_CHAR[] =
302 "\b \b";
303
312 char* StrchrRev(char* str, char c)
313 {
314 auto len = strlen(str);
315 for (int i = static_cast<int>(len - 1); i >= 0; i--)
316 {
317 if (str[i] == c)
318 {
319 return str + i;
320 }
321 }
322 return nullptr;
323 }
324
325 public:
331 enum class Mode : uint8_t
332 {
333 CRLF = 0,
334 LF = 1,
335 CR = 2
336 };
337
351 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
352 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
354 : read_status_(ReadOperation::OperationPollingStatus::READY),
355 write_status_(WriteOperation::OperationPollingStatus::READY),
356 MODE(MODE),
358 read_port_(read_port),
359 write_port_(write_port),
361 ramfs_(ramfs),
362 current_dir_(current_dir ? current_dir : &ramfs_.root_),
363 input_line_(MAX_LINE_SIZE + 1),
364 history_(MAX_HISTORY_NUMBER)
365 {
366 ASSERT(read_port != nullptr);
367 ASSERT(write_port != nullptr);
368 ASSERT(read_port->Readable());
369 ASSERT(write_port->Writable());
370
371 if (write_port == STDIO::write_)
372 {
373 if (STDIO::write_mutex_ == nullptr)
374 {
376 }
377
380 }
381 else
382 {
384 }
385 }
386
390
391 const Mode MODE;
393 ReadPort* read_port_;
394 WritePort* write_port_;
395 WritePort::Stream write_stream_;
396
397 LibXR::Mutex* write_mutex_ = nullptr;
398
399 RamFS& ramfs_;
400 char read_buff_[READ_BUFF_SIZE];
401
402 size_t request_read_size_ = 0;
403 RamFS::Dir* current_dir_;
404 uint8_t flag_ansi_ = 0;
405 int offset_ = 0;
406 Stack<char> input_line_;
407 char* arg_tab_[MAX_ARG_NUMBER];
408 size_t arg_number_ = 0;
409 Queue<HistoryLine> history_;
410 int history_index_ = -1;
411 bool linefeed_flag_ = false;
412 char linefeed_char_ = '\0';
413
418#include "display.hpp"
419
424#include "command.hpp"
425
430#include "input.hpp"
431
436#include "driver.hpp"
437};
438
439} // namespace LibXR

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

69 {
70 auto len = strlen(str);
71 for (int i = static_cast<int>(len - 1); i >= 0; i--)
72 {
73 if (str[i] == c)
74 {
75 return str + i;
76 }
77 }
78 return nullptr;
79 }

◆ 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
Note
TaskFun() 每次只推进有限一步状态机:发起读取、等待完成、消费完成结果, 然后立即返回给调度方。 TaskFun() advances the state machine by only a bounded step each time: start one read, wait for completion, consume one completed result, then return to the scheduler immediately.

Definition at line 77 of file terminal.hpp.

81 :
87 enum class Mode : uint8_t
88 {
89 CRLF = 0,
90 LF = 1,
91 CR = 2
92 };
93
107 Terminal(LibXR::RamFS& ramfs, RamFS::Dir* current_dir = nullptr,
108 ReadPort* read_port = STDIO::read_, WritePort* write_port = STDIO::write_,
110 : read_status_(ReadOperation::OperationPollingStatus::READY),
111 write_status_(WriteOperation::OperationPollingStatus::READY),
112 MODE(MODE),
114 read_port_(read_port),
115 write_port_(write_port),
117 ramfs_(ramfs),
118 current_dir_(current_dir ? current_dir : &ramfs_.root_),
119 input_line_(MAX_LINE_SIZE + 1),
120 history_(MAX_HISTORY_NUMBER)

◆ 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

线程 / 轮询驱动入口片段 Threaded / polling driver-entry fragment

Terminal 的驱动入口片段 Driver-entry fragment of Terminal

Note
这一组函数只决定“什么时候读、什么时候解析、什么时候提交输出”,不负责 行编辑、命令语义或显示细节。 This group decides only when to read, when to parse, and when to commit output; it does not own line editing, command semantics, or display details.

终端线程函数,以独立线程方式持续驱动终端 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
Note
每次真正拿到一批输入后,解析和输出提交都在 write_mutex_ 保护下完成, 以免和外部写口共享同一个输出流时交错。 Once one input batch is actually obtained, parsing and output commit are both completed under write_mutex_ so they do not interleave with other writers sharing the same output stream.

Definition at line 34 of file terminal.hpp.

◆ 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

Note
这里只重绘光标右侧的可见后缀;光标左侧的内容已经在输入缓冲区中保留。 This redraws only the visible suffix to the right of the cursor; the left side is already preserved in the input buffer.

Definition at line 81 of file terminal.hpp.

81 :

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 164 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 163 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"

终端控制序列常量 Terminal control-sequence constants

These literals are emitted directly into the write stream to implement clear-screen, clear-line, cursor-save/restore, and simple cursor motion. 这些字面量会被直接写进终端输出流,用来实现清屏、清行、保存/恢复光标和基础光标移动。 清屏命令 Clear screen command

Definition at line 47 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 51 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 49 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 159 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 57 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 160 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<HistoryLine> LibXR::Terminal< READ_BUFF_SIZE, MAX_LINE_SIZE, MAX_ARG_NUMBER, MAX_HISTORY_NUMBER >::history_

历史命令 History of commands

Definition at line 165 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 166 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 162 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 54 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 56 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 53 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 55 of file terminal.hpp.

◆ linefeed_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 >::linefeed_char_ = '\0'

上一个换行字符 Previous line feed character

Definition at line 168 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

CRLF 抑制标志 CRLF suppression flag.

Definition at line 167 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 147 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 161 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 155 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 156 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 149 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 143 of file terminal.hpp.

◆ request_read_size_

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 >::request_read_size_ = 0

本轮计划读取的字节数 / Byte count requested for the current read attempt.

Definition at line 158 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 153 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 148 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 150 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_

当前读/写轮询状态 / Current polling status of the read / write side.

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


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