Marcus Chang / AsyncSerial
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);
 }