Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
Diff: drivers/UARTSerial.cpp
- Revision:
- 168:9672193075cf
- Parent:
- 167:e84263d55307
- Child:
- 170:19eb464bc2be
--- a/drivers/UARTSerial.cpp Wed Jun 21 17:46:44 2017 +0100
+++ b/drivers/UARTSerial.cpp Thu Jul 06 15:42:05 2017 +0100
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#if DEVICE_SERIAL
+#if (DEVICE_SERIAL && DEVICE_INTERRUPTIN)
#include <errno.h>
#include "UARTSerial.h"
@@ -80,16 +80,16 @@
int UARTSerial::sync()
{
- lock();
+ api_lock();
while (!_txbuf.empty()) {
- unlock();
+ api_unlock();
// Doing better than wait would require TxIRQ to also do wake() when becoming empty. Worth it?
wait_ms(1);
- lock();
+ api_lock();
}
- unlock();
+ api_unlock();
return 0;
}
@@ -111,16 +111,16 @@
size_t data_written = 0;
const char *buf_ptr = static_cast<const char *>(buffer);
- lock();
+ api_lock();
while (_txbuf.full()) {
if (!_blocking) {
- unlock();
+ api_unlock();
return -EAGAIN;
}
- unlock();
+ api_unlock();
wait_ms(1); // XXX todo - proper wait, WFE for non-rtos ?
- lock();
+ api_lock();
}
while (data_written < length && !_txbuf.full()) {
@@ -138,7 +138,7 @@
}
core_util_critical_section_exit();
- unlock();
+ api_unlock();
return data_written;
}
@@ -149,16 +149,16 @@
char *ptr = static_cast<char *>(buffer);
- lock();
+ api_lock();
while (_rxbuf.empty()) {
if (!_blocking) {
- unlock();
+ api_unlock();
return -EAGAIN;
}
- unlock();
+ api_unlock();
wait_ms(1); // XXX todo - proper wait, WFE for non-rtos ?
- lock();
+ api_lock();
}
while (data_read < length && !_rxbuf.empty()) {
@@ -166,7 +166,7 @@
data_read++;
}
- unlock();
+ api_unlock();
return data_read;
}
@@ -205,12 +205,24 @@
return revents;
}
-void UARTSerial::lock(void)
+void UARTSerial::lock()
+{
+ // This is the override for SerialBase.
+ // No lock required as we only use SerialBase from interrupt or from
+ // inside our own critical section.
+}
+
+void UARTSerial::unlock()
+{
+ // This is the override for SerialBase.
+}
+
+void UARTSerial::api_lock(void)
{
_mutex.lock();
}
-void UARTSerial::unlock(void)
+void UARTSerial::api_unlock(void)
{
_mutex.unlock();
}
@@ -262,4 +274,4 @@
} //namespace mbed
-#endif //DEVICE_SERIAL
+#endif //(DEVICE_SERIAL && DEVICE_INTERRUPTIN)
