Merge pull request #111 from mikljohansson/fixed-uart-write-return-value

Fixed some bugs in the Serial implementations
This commit is contained in:
Neucrack
2021-05-31 10:00:08 +08:00
committed by GitHub
3 changed files with 16 additions and 7 deletions

View File

@@ -29,6 +29,7 @@ class HardwareSerial : public Stream
virtual void begin(uint32_t) {};
virtual void end() {};
virtual int available(void) = 0;
virtual int availableForWrite(void) = 0;
virtual int peek(void) = 0;
virtual int read(void) = 0;
virtual void flush(void) = 0;

View File

@@ -45,12 +45,12 @@ size_t Print::printf(const char *format, ...)
}
}
len = vsnprintf(temp, len+1, format, arg);
write((uint8_t*)temp, len);
size_t ret = write((uint8_t*)temp, len);
va_end(arg);
if(len >= sizeof(loc_buf)){
delete[] temp;
}
return len;
return ret;
}
/* default implementation: may be overridden */
@@ -58,7 +58,12 @@ size_t Print::write(const uint8_t *buffer, size_t size)
{
size_t n = 0;
while (size--) {
n += write(*buffer++);
size_t ret = write(*buffer++);
if (ret == 0) {
// Write of last byte didn't complete, abort additional processing
break;
}
n += ret;
}
return n;
}

View File

@@ -128,7 +128,7 @@ UARTClass::write(const uint8_t c)
while (uart[this->_uart]->LSR & (1u << 5))
continue;
uart[this->_uart]->THR = c;
return 0;
return 1;
}
static int
@@ -177,8 +177,11 @@ UARTHSClass::end()
size_t
UARTHSClass::write(const uint8_t uc_data)
{
uarths_putchar(uc_data);
return (1);
if (uarths_putchar(uc_data) == uc_data) {
return 1;
}
return 0;
}
static int
@@ -186,7 +189,7 @@ uarths_rec_callback(void *ctx)
{
int data;
auto &driver = *reinterpret_cast<UARTHSClass *>(ctx);
data = uarths_getc();
data = uarths_getchar();
if(data != EOF){
driver._buff->store_char((char)data);
}