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.
Diff: source/AsyncSerial.cpp
- Revision:
- 6:9d48f2197243
- Parent:
- 5:aecd37846dcc
- Child:
- 7:5ba3a01e13c4
diff -r aecd37846dcc -r 9d48f2197243 source/AsyncSerial.cpp
--- a/source/AsyncSerial.cpp Wed Apr 01 16:28:02 2015 +0000
+++ b/source/AsyncSerial.cpp Wed Apr 01 17:44:12 2015 +0100
@@ -128,15 +128,31 @@
{
isReceiving = false;
- if (receiveDoneHandler)
+ if ((receiveBuffer == NULL) && (conditionStartBuffer == 0))
{
- receiveDoneHandler(receiveBuffer, receiveIndex, status);
- receiveDoneHandler = NULL;
+ if (waitDoneHandler)
+ {
+ waitDoneHandler();
+ waitDoneHandler = NULL;
+ }
+ else if (waitObject)
+ {
+ waitDoneObject(waitObject, waitMember);
+ waitObject = NULL;
+ }
}
- else if (receiveObject)
+ else
{
- receiveDoneObject(receiveObject, receiveMember, receiveBuffer, receiveIndex, status);
- receiveObject = NULL;
+ if (receiveDoneHandler)
+ {
+ receiveDoneHandler(receiveBuffer, receiveIndex, status);
+ receiveDoneHandler = NULL;
+ }
+ else if (receiveObject)
+ {
+ receiveDoneObject(receiveObject, receiveMember, receiveBuffer, receiveIndex, status);
+ receiveObject = NULL;
+ }
}
}
@@ -189,6 +205,8 @@
receiveMaxLength = maxLength;
receiveIndex = 0;
+ conditionStartBuffer = _conditionStartBuffer;
+ conditionStartLength = _conditionStartLength;
conditionEndBuffer = _conditionEndBuffer;
conditionEndLength = _conditionEndLength;
conditionIndex = 0;
@@ -196,8 +214,6 @@
if ((_conditionStartBuffer != NULL) && (_conditionStartLength != 0))
{
insideCondition = false;
- conditionStartBuffer = _conditionStartBuffer;
- conditionStartLength = _conditionStartLength;
}
else
{
@@ -208,6 +224,23 @@
isReceiving = true;
}
+void AsyncSerial::wait(wait_handler_t handler,
+ const uint8_t* conditionEndBuffer, uint16_t conditionEndLength,
+ uint32_t timeoutMilli)
+{
+ if (handler)
+ {
+ waitDoneHandler = handler;
+
+ waitObject = NULL;
+
+ receive(NULL, 0,
+ NULL, 0,
+ conditionEndBuffer, conditionEndLength,
+ timeoutMilli);
+ }
+}
+
void AsyncSerial::receiveTimeout()
{
getDone(AsyncSerial::RECEIVE_TIMEOUT);

