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:
- 10:9d3ae421081b
- Parent:
- 9:e183765bd81b
- Child:
- 11:6b99dbf1b65d
--- a/source/AsyncSerial.cpp Fri Apr 10 13:05:30 2015 +0000
+++ b/source/AsyncSerial.cpp Fri Apr 10 14:35:58 2015 +0100
@@ -16,10 +16,14 @@
sendMember(),
sendDoneObject(NULL),
+ receiveHandler(),
+ receiveResult(),
+#if 0
receiveDoneHandler(NULL),
receiveObject(NULL),
receiveMember(),
receiveDoneObject(NULL),
+#endif
waitDoneHandler(NULL),
waitObject(NULL),
@@ -30,6 +34,7 @@
receiveBuffer(NULL),
receiveMaxLength(0),
receiveIndex(0),
+ receiveStatus(AsyncSerial::RECEIVE_TIMEOUT),
insideCondition(false),
conditionStartBuffer(NULL),
@@ -37,11 +42,14 @@
conditionEndBuffer(NULL),
conditionEndLength(0),
conditionIndex(0),
- timeout(),
- receiveStatus(AsyncSerial::RECEIVE_TIMEOUT)
+ timeout()
{
SerialBase::attach<AsyncSerial>(this, &AsyncSerial::getReady, SerialBase::RxIrq);
SerialBase::attach<AsyncSerial>(this, &AsyncSerial::putDone, SerialBase::TxIrq);
+
+#if DEVICE_SERIAL_FC
+// SerialBase::set_flow_control(SerialBase::RTSCTS, rts, cts);
+#endif
}
void AsyncSerial::putDone()
@@ -66,7 +74,7 @@
}
void AsyncSerial::getReady()
-{
+{
if (isReceiving)
{
uint8_t input = SerialBase::_base_getc();
@@ -74,7 +82,7 @@
DEBUG("%c", input);
if (insideCondition)
- {
+ {
if (conditionEndBuffer != NULL)
{
if (input == conditionEndBuffer[conditionIndex])
@@ -82,7 +90,7 @@
conditionIndex++;
if (conditionIndex == conditionEndLength)
- {
+ {
receiveStatus = AsyncSerial::RECEIVE_FOUND;
timeout.attach_us<AsyncSerial>(this, &AsyncSerial::receiveTimeout, MINIMUM_TIMEOUT);
}
@@ -147,14 +155,11 @@
}
else
{
- if (receiveDoneHandler)
- {
- receiveDoneHandler(receiveBuffer, receiveIndex, status);
- }
- else if (receiveObject)
- {
- receiveDoneObject(receiveObject, receiveMember, receiveBuffer, receiveIndex, status);
- }
+ receiveResult.buffer = receiveBuffer;
+ receiveResult.length = receiveIndex;
+ receiveResult.status = status;
+
+ receiveHandler.call(&receiveResult);
}
}
@@ -204,7 +209,7 @@
const char* _conditionStartBuffer, uint16_t _conditionStartLength,
const char* _conditionEndBuffer, uint16_t _conditionEndLength,
uint32_t timeoutMilli)
-{
+{
receiveBuffer = buffer;
receiveMaxLength = maxLength;
receiveIndex = 0;
@@ -252,7 +257,7 @@
void AsyncSerial::receiveTimeout()
{
DEBUG("timeout: %X %X\r\n", this, waitObject);
-
+
getDone(receiveStatus);
}

