libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
terminal.hpp
1#pragma once
2
3#include <array>
4#include <cctype>
5#include <cstddef>
6#include <cstdint>
7#include <cstdio>
8#include <cstring>
9#include <utility>
10
11#include "libxr_rw.hpp"
12#include "ramfs.hpp"
13#include "semaphore.hpp"
14#include "stack.hpp"
15
16namespace LibXR
17{
28template <size_t READ_BUFF_SIZE = 32, size_t MAX_LINE_SIZE = READ_BUFF_SIZE,
29 size_t MAX_ARG_NUMBER = 5, size_t MAX_HISTORY_NUMBER = 5>
31{
32 private:
37 using HistoryLine = std::array<char, MAX_LINE_SIZE + 1>;
38
47 static constexpr char CLEAR_ALL[] =
48 "\033[2J\033[1H";
49 static constexpr char CLEAR_LINE[] =
50 "\033[2K\r";
51 static constexpr char CLEAR_BEHIND[] =
52 "\033[K";
53 static constexpr char KEY_RIGHT[] = "\033[C";
54 static constexpr char KEY_LEFT[] = "\033[D";
55 static constexpr char KEY_SAVE[] = "\033[s";
56 static constexpr char KEY_LOAD[] = "\033[u";
57 static constexpr char DELETE_CHAR[] =
58 "\b \b";
59
68 char* StrchrRev(char* str, char c)
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 };
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)
121 {
122 ASSERT(read_port != nullptr);
123 ASSERT(write_port != nullptr);
124 ASSERT(read_port->Readable());
125 ASSERT(write_port->Writable());
154
156 char read_buff_[READ_BUFF_SIZE];
157
160 uint8_t flag_ansi_ = 0;
161 int offset_ = 0;
163 char* arg_tab_[MAX_ARG_NUMBER];
164 size_t arg_number_ = 0;
166 int history_index_ = -1;
167 bool linefeed_flag_ = false;
168 char linefeed_char_ = '\0';
169
174#include "display.hpp"
175
180#include "command.hpp"
181
186#include "input.hpp"
187
192#include "driver.hpp"
193};
194
195} // namespace LibXR
互斥锁类,提供线程同步机制 (Mutex class providing thread synchronization mechanisms).
Definition mutex.hpp:18
基于 BaseQueue 的泛型队列模板类 (Generic queue template class based on BaseQueue).
Definition queue.hpp:180
目录节点片段 / Directory-node fragment
Definition ramfs.hpp:10
轻量级内存文件系统 / Lightweight in-memory file system
Definition ramfs.hpp:23
ReadPort class for handling read operations.
Definition read_port.hpp:18
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 ReadPort * read_
Read port instance. 读取端口。
Definition stdio.hpp:25
static WritePort * write_
Write port instance. 写入端口。
Definition stdio.hpp:26
线程安全的栈数据结构 / Thread-safe stack data structure
Definition stack.hpp:23
终端类,实现一个基于 RamFS 的基本命令行接口 Terminal class implementing a basic command-line interface based on RamFS
Definition terminal.hpp:31
char * arg_tab_[MAX_ARG_NUMBER]
命令参数列表 Command argument list
Definition terminal.hpp:163
WritePort * write_port_
写入端口 Write port
Definition terminal.hpp:150
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
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
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
RamFS & ramfs_
关联的文件系统 Associated file system
Definition terminal.hpp:155
WritePort::Stream write_stream_
写入流 Write stream
Definition terminal.hpp:151
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
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
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
RamFS::Dir * current_dir_
当前目录 Current directory
Definition terminal.hpp:159
Stack< char > input_line_
输入行缓冲区 Input line buffer
Definition terminal.hpp:162
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
@ CR
仅回车 Carriage Return (\r)
@ CRLF
回车换行 Carriage Return + Line Feed (\r )
@ LF
仅换行 Line Feed ( )
bool linefeed_flag_
CRLF 抑制标志 CRLF suppression flag.
Definition terminal.hpp:167
const Mode MODE
终端换行模式 Terminal line feed mode
Definition terminal.hpp:147
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
WritePort class for handling write operations.
LibXR 命名空间
Definition ch32_can.hpp:14