Initial commit

This commit is contained in:
2025-04-03 20:55:28 +02:00
commit d7d9a3567a
7 changed files with 431 additions and 0 deletions

59
src/shell.cpp Normal file
View File

@ -0,0 +1,59 @@
#include <Arduino.h>
#include "shell.h"
bool m_echo = true;
char m_ibuf[256] = { 0 };
int m_ibuf_pos = 0;
char m_prompt[10] = { 0 };
void (*m_callback)(char*, int);
void shell_init() {
strcat(m_prompt, "#> ");
}
void shell_echo(bool echo) {
m_echo = echo;
}
void shell_prompt(char* prompt) {
strncpy(m_prompt, prompt, 10);
}
void shell_callback(void(*cb)(char*, int)) {
m_callback = cb;
}
void draw_prompt() {
Serial.print(m_prompt);
}
void shell_loop() {
int c;
while (Serial.available()) {
c = Serial.read();
if (c == 13 || c == 4) {
// if (m_echo)
Serial.write(10);
if (m_callback != nullptr && m_ibuf_pos>0) {
m_callback(m_ibuf, m_ibuf_pos);
}
draw_prompt();
m_ibuf_pos = 0;
memset(m_ibuf, 0, IBUF_MAX);
} else if (c == 8 || c == 127) {
if (m_ibuf_pos > 0) {
m_ibuf[--m_ibuf_pos] = 0;
if (m_echo)
Serial.print("\x08 \x08");
}
} else if (c >= 32 && c<127) {
if (m_ibuf_pos < IBUF_MAX) {
m_ibuf[m_ibuf_pos++] = c & 0xFF;
if (m_echo)
Serial.write(c);
}
}
}
}