From 0387437fbdb2f9e62d4f6bf47fd30a60f538558c Mon Sep 17 00:00:00 2001 From: micio Date: Fri, 27 Jan 2017 16:49:08 +0000 Subject: [PATCH] Bazaar/Serial : added function to send a byte buffer git-svn-id: svn://ultimatepp.org/upp/trunk@10773 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- bazaar/Serial/Serial.h | 1 + bazaar/Serial/SerialPosix.cpp | 21 ++++++++++++-------- bazaar/Serial/SerialWindows.cpp | 35 +++++++++++++++++---------------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/bazaar/Serial/Serial.h b/bazaar/Serial/Serial.h index e414dac21..e67016c75 100644 --- a/bazaar/Serial/Serial.h +++ b/bazaar/Serial/Serial.h @@ -89,6 +89,7 @@ class Serial String Read(size_t reqSize = 0, uint32_t timeout = 0); // writes data + bool Write(uint8_t const *buf, uint32_t len, uint32_t timeout = 0); bool Write(String const &data, uint32_t timeout = 0); // check if opened diff --git a/bazaar/Serial/SerialPosix.cpp b/bazaar/Serial/SerialPosix.cpp index fca2bfc05..0bcb742a7 100644 --- a/bazaar/Serial/SerialPosix.cpp +++ b/bazaar/Serial/SerialPosix.cpp @@ -416,24 +416,23 @@ String Serial::Read(size_t reqSize, uint32_t timeout) return data; } -// writes data -bool Serial::Write(String const &data, uint32_t timeout) +// write buffer +bool Serial::Write(uint8_t const *buf, uint32_t len, uint32_t timeout) { - int dLen = data.GetCount(); if (!timeout) - return (write(fd, ~data, data.GetCount()) == dLen); + return (write(fd, buf, len) == len); uint32_t tim = msecs() + timeout; - const char *dPos = ~data; + const uint8_t *dPos = buf; for (;;) { - int written = write(fd, dPos, dLen); - if (written == dLen) + uint32_t written = write(fd, dPos, len); + if (written == len) return true; if (written >= 0) { dPos += written; - dLen -= written; + len -= written; continue; } if ((uint32_t)msecs() >= tim) @@ -442,6 +441,12 @@ bool Serial::Write(String const &data, uint32_t timeout) return false; } +// writes string +bool Serial::Write(String const &data, uint32_t timeout) +{ + return Write((const uint8_t *)~data, data.GetCount(), timeout); +} + // check if opened bool Serial::IsOpened(void) const { diff --git a/bazaar/Serial/SerialWindows.cpp b/bazaar/Serial/SerialWindows.cpp index 40dad4782..044f93176 100644 --- a/bazaar/Serial/SerialWindows.cpp +++ b/bazaar/Serial/SerialWindows.cpp @@ -432,42 +432,43 @@ String Serial::Read ( size_t reqSize, uint32_t timeout ) return res; } -// writes data -bool Serial::Write ( String const &data, uint32_t timeout ) +// write buffer +bool Serial::Write(uint8_t const *buf, uint32_t len, uint32_t timeout) { - unsigned long count = 0; + uint32_t count = 0; - int dLen = data.GetCount(); - - if ( !timeout ) + if (!timeout) { - WriteFile ( fd, ~data, dLen, &count, NULL ); - return count == dLen; + WriteFile(fd, buf, len, &count, NULL); + return count == len; } uint32_t tim = msecs() + timeout; + const char *dPos = buf; - const char *dPos = ~data; - - for ( ;; ) + for (;;) { - WriteFile ( fd, dPos, dLen, &count, NULL ); - if ( count == dLen ) + WriteFile(fd, dPos, len, &count, NULL); + if (count == len ) return true; - if ( count > 0 ) + if(count > 0) { dPos += count; - dLen -= count; + len -= count; continue; } - if ( ( uint32_t ) msecs() >= tim ) + if((uint32_t)msecs() >= tim) break; } - return false; +} +// writes string +bool Serial::Write(String const &data, uint32_t timeout) +{ + return Write((const uint8_t *)~data, data.GetCount(), timeout); } // check if opened