Skip to content

Commit

Permalink
#60: avoid errors in the web ui when the rx fifo overflows (strange c…
Browse files Browse the repository at this point in the history
…ounter ids), add an error log for serial errors
  • Loading branch information
andreas committed Mar 22, 2024
1 parent 41b629e commit f99d6ed
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 7 deletions.
20 changes: 17 additions & 3 deletions lib/channel/GwChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,20 +106,34 @@ void GwChannel::setImpl(GwChannelInterface *impl){
}
void GwChannel::updateCounter(const char *msg, bool out)
{
char key[6];
char key[7];
key[0]=0;
if (msg[0] == '$')
{
strncpy(key, &msg[3], 3);
for (int i=0;i<6 && msg[i] != 0;i++){
if (i>=3) {
if (isalnum(msg[i]))key[i-3]=msg[i];
else key[i-3]='_';
}
key[i-2]=0;
}
key[3] = 0;
}
else if (msg[0] == '!')
{
strncpy(key, &msg[1], 5);
for (int i=0;i<6 && msg[i] != 0;i++){
if (i>=1) {
if (isalnum(msg[i]))key[i-1]=msg[i];
else key[i-1]='_';
}
key[i]=0;
}
key[5] = 0;
}
else{
return;
}
if (key[0] == 0) return;
if (out){
countOut->add(key);
}
Expand Down
6 changes: 5 additions & 1 deletion lib/serial/GwSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class GwSerialStream: public Stream{



GwSerial::GwSerial(GwLog *logger, Stream *s, int id,bool allowRead):serial(s)
GwSerial::GwSerial(GwLog *logger, HardwareSerial *s, int id,bool allowRead):serial(s)
{
LOG_DEBUG(GwLog::DEBUG,"creating GwSerial %p id %d",this,id);
this->id=id;
Expand All @@ -54,6 +54,10 @@ GwSerial::GwSerial(GwLog *logger, Stream *s, int id,bool allowRead):serial(s)
this->readBuffer=new GwBuffer(logger, GwBuffer::RX_BUFFER_SIZE,bufName+"rd");
}
buffer->reset("init");
serial->onReceiveError([this](hardwareSerial_error_t err){
GwLog *logger=this->logger;
LOG_DEBUG(GwLog::ERROR,"serial error on id %d: %d",this->id,(int)err);
});
initialized=true;
}
GwSerial::~GwSerial()
Expand Down
4 changes: 2 additions & 2 deletions lib/serial/GwSerial.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ class GwSerial : public GwChannelInterface{
int id=-1;
int overflows=0;
size_t enqueue(const uint8_t *data, size_t len,bool partial=false);
Stream *serial;
HardwareSerial *serial;
public:
static const int bufferSize=200;
GwSerial(GwLog *logger,Stream *stream,int id,bool allowRead=true);
GwSerial(GwLog *logger,HardwareSerial *stream,int id,bool allowRead=true);
~GwSerial();
bool isInitialized();
virtual size_t sendToClients(const char *buf,int sourceId,bool partial=false);
Expand Down
6 changes: 5 additions & 1 deletion web/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -346,11 +346,15 @@ function createCounterDisplay(parent,label,key,isEven){
}
});
}

function validKey(key){
if (! key) return;
return key.replace(/[^a-z_:A-Z0-9-]/g,'');
}
function updateMsgDetails(key, details) {
forEl('.msgDetails', function (frame) {
if (frame.getAttribute('id') !== key) return;
for (let k in details) {
k=validKey(k);
let el = frame.querySelector("[data-id=\"" + k + "\"] ");
if (!el) {
el = addEl('div', 'row', frame);
Expand Down

0 comments on commit f99d6ed

Please sign in to comment.