Skip to content

Commit

Permalink
Implement support for realtimecommand in telnet
Browse files Browse the repository at this point in the history
Simplify push2buffer code
Fix typos in BTService
  • Loading branch information
luc-github committed Dec 8, 2024
1 parent 5085a79 commit 48fe645
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 43 deletions.
6 changes: 3 additions & 3 deletions esp3d/src/modules/bluetooth/BT_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ void BTService::handle() {
// we cannot left data in buffer too long
// in case some commands "forget" to add \n
if (((millis() - _lastflush) > TIMEOUT_BT_FLUSH) && (_buffer_size > 0)) {
flushbuffer();
flushBuffer();
}
}

Expand All @@ -192,8 +192,8 @@ ESP3DAuthenticationLevel BTService::getAuthentication() { return _auth; }
void BTService::flushData(const uint8_t *data, size_t size,
ESP3DMessageType type) {
ESP3DMessage *message = esp3d_message_manager.newMsg(
ESP3DClientType::bluetooth, esp3d_commands.getOutputClient(), _buffer,
_buffer_size, _auth);
ESP3DClientType::bluetooth, esp3d_commands.getOutputClient(), data,
size, _auth);

if (message) {
message->type = type;
Expand Down
2 changes: 1 addition & 1 deletion esp3d/src/modules/bluetooth/BT_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class BTService {
uint8_t _buffer[ESP3D_BT_BUFFER_SIZE + 1]; // keep space of 0x0 terminal
size_t _buffer_size;
void push2buffer(uint8_t* sbuf, size_t len);
void flushbuffer();
void flushBuffer();
void flushChar(char c);
void flushData(const uint8_t* data, size_t size, ESP3DMessageType type);
bool _started;
Expand Down
67 changes: 29 additions & 38 deletions esp3d/src/modules/telnet/telnet_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ void Telnet_Server::handle() {
// we cannot left data in buffer too long
// in case some commands "forget" to add \n
if (((millis() - _lastflush) > TIMEOUT_TELNET_FLUSH) && (_buffer_size > 0)) {
flushbuffer();
flushBuffer();
}
}

Expand Down Expand Up @@ -214,57 +214,48 @@ void Telnet_Server::initAuthentication() {
}
ESP3DAuthenticationLevel Telnet_Server::getAuthentication() { return _auth; }

void Telnet_Server::flushbuffer() {
if (!_buffer || !_started) {
_buffer_size = 0;
return;
}
_buffer[_buffer_size] = 0x0;
ESP3DMessage *msg = esp3d_message_manager.newMsg(
ESP3DClientType::telnet, esp3d_commands.getOutputClient(), _buffer,
_buffer_size, _auth);
if (msg) {
// process command
esp3d_commands.process(msg);


void Telnet_Server::flushData(const uint8_t *data, size_t size, ESP3DMessageType type) {
ESP3DMessage *message = esp3d_message_manager.newMsg(
ESP3DClientType::telnet, esp3d_commands.getOutputClient(), data,
size, _auth);

if (message) {
message->type = type;
esp3d_log("Process Message");
esp3d_commands.process(message);
} else {
esp3d_log_e("Cannot create message");
}

_lastflush = millis();
}


void Telnet_Server::flushChar(char c) { flushData((uint8_t *)&c, 1, ESP3DMessageType::realtimecmd); }

void Telnet_Server::flushBuffer() {
_buffer[_buffer_size] = 0x0;
flushData((uint8_t *)_buffer, _buffer_size, ESP3DMessageType::unique);
_buffer_size = 0;
}


void Telnet_Server::push2buffer(uint8_t *sbuf, size_t len) {
if (!_buffer) {
if (!_buffer || !_started) {
return;
}
for (size_t i = 0; i < len; i++) {
_lastflush = millis();
// command is defined
if (char(sbuf[i]) == '\n') {
if (_buffer_size < ESP3D_TELNET_BUFFER_SIZE) {
_buffer[_buffer_size] = sbuf[i];
_buffer_size++;
}
flushbuffer();
} else if (esp3d_string::isPrintableChar(char(sbuf[i]))) {
if (_buffer_size < ESP3D_TELNET_BUFFER_SIZE) {
_buffer[_buffer_size] = sbuf[i];
_buffer_size++;
} else {
flushbuffer();
_buffer[_buffer_size] = sbuf[i];
_buffer_size++;
}
} else { // it is not printable char
// clean buffer first
if (_buffer_size > 0) {
flushbuffer();
}
// process char
if (esp3d_string::isRealTimeCommand(sbuf[i])) {
flushChar(sbuf[i]);
} else {
_buffer[_buffer_size] = sbuf[i];
_buffer_size++;
flushbuffer();
if (_buffer_size > ESP3D_TELNET_BUFFER_SIZE ||
_buffer[_buffer_size - 1] == '\n') {
flushBuffer();
}
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion esp3d/src/modules/telnet/telnet_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ class Telnet_Server {
uint8_t* _buffer;
size_t _buffer_size;
void push2buffer(uint8_t* sbuf, size_t len);
void flushbuffer();
void flushBuffer();
void flushChar(char c);
void flushData(const uint8_t* data, size_t size, ESP3DMessageType type);
};

extern Telnet_Server telnet_server;
Expand Down

0 comments on commit 48fe645

Please sign in to comment.