mirror of
https://github.com/sipeed/Maixduino.git
synced 2026-02-19 19:51:16 +01:00
Merge pull request #111 from mikljohansson/fixed-uart-write-return-value
Fixed some bugs in the Serial implementations
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user