Marcus Chang / AsyncSerial
Revision:
5:aecd37846dcc
Parent:
4:e0a0eef4ca18
Child:
6:9d48f2197243
--- a/source/AsyncSerial.cpp	Wed Apr 01 15:26:57 2015 +0100
+++ b/source/AsyncSerial.cpp	Wed Apr 01 16:28:02 2015 +0000
@@ -80,7 +80,7 @@
                 if (receiveIndex == receiveMaxLength)
                 {
                     timeout.detach();
-                    getDone();
+                    getDone(AsyncSerial::RECEIVE_FULL);
                 }
             }
 
@@ -93,7 +93,7 @@
                     if (conditionIndex == conditionEndLength)
                     {
                         timeout.detach();
-                        getDone();
+                        getDone(AsyncSerial::RECEIVE_FOUND);
                     }
                 }
                 else
@@ -124,18 +124,18 @@
     }
 }
 
-void AsyncSerial::getDone()
+void AsyncSerial::getDone(uint8_t status)
 {
     isReceiving = false;
 
     if (receiveDoneHandler)
     {
-        receiveDoneHandler(receiveBuffer, receiveIndex);
+        receiveDoneHandler(receiveBuffer, receiveIndex, status);
         receiveDoneHandler = NULL;
     }
     else if (receiveObject)
     {
-        receiveDoneObject(receiveObject, receiveMember, receiveBuffer, receiveIndex);
+        receiveDoneObject(receiveObject, receiveMember, receiveBuffer, receiveIndex, status);
         receiveObject = NULL;
     }
 }
@@ -204,10 +204,15 @@
         insideCondition = true;
     }
 
-    timeout.attach_us<AsyncSerial>(this, &AsyncSerial::getDone, timeoutMilli * 1000);
+    timeout.attach_us<AsyncSerial>(this, &AsyncSerial::receiveTimeout, timeoutMilli * 1000);
     isReceiving = true;
 }
 
+void AsyncSerial::receiveTimeout()
+{
+    getDone(AsyncSerial::RECEIVE_TIMEOUT);
+}
+
 int AsyncSerial::getc()
 {
     return SerialBase::_base_getc();