Initial commit
This commit is contained in:
59
src/shell.cpp
Normal file
59
src/shell.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user