A library for talking to Multi-Tech's Cellular SocketModem Devices.

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Revision:
77:d7b14688a704
Parent:
67:1003b410f781
Child:
78:ef3ee53cf5df
--- a/io/MTSSerialFlowControl.cpp	Thu Dec 26 16:35:29 2013 +0000
+++ b/io/MTSSerialFlowControl.cpp	Thu Dec 26 21:54:19 2013 +0000
@@ -19,7 +19,8 @@
     cts = new DigitalOut(CTS);
     notifyStartSending();
 
-    highThreshold = rxBufSize * 0.85;
+    //highThreshold = MAX(rxBufSize - 10, rxBufSize * 0.85);
+    highThreshold = 10;
     lowThreshold = rxBufSize * 0.3;
 
     rxBuffer->attach(this, &MTSSerialFlowControl::notifyStartSending, lowThreshold, Vars::LESS);
@@ -45,47 +46,52 @@
 void MTSSerialFlowControl::startSending()
 {
     clearToSend = true;
+    //printf("RTS: START SENDING YOU BYTES - TX[%d]\r\n", txBuffer->size());
 }
 
 void MTSSerialFlowControl::stopSending()
 {
     clearToSend = false;
+    //printf("RTS: STOP SENDING YOU BYTES - TX[%d]\r\n", txBuffer->size());
 }
 
 void MTSSerialFlowControl::notifyStartSending()
 {
     cts->write(0);
+    //printf("CTS: START SENDING US BYTES - RX[%d]\r\n", rxBuffer->size());
 }
 
 void MTSSerialFlowControl::notifyStopSending()
 {
     cts->write(1);
+    //printf("CTS: STOP SENDING US BYTES - RX[%d]\r\n", rxBuffer->size());
 }
 
 void MTSSerialFlowControl::handleRead()
 {
-    if (rxBuffer->size() > highThreshold) {
-        notifyStopSending();
-    }
+    
     while (serial->readable()) {
         rxBuffer->write(serial->getc());
+        if (rxBuffer->size() > highThreshold) {
+            notifyStopSending();
+        }
     }
 }
 
 void MTSSerialFlowControl::handleWrite()
 {
-    if (clearToSend) {
-        while(txBuffer->size() != 0) {
-            if (serial->writeable()) {
-                char byte;
-                if(txBuffer->read(byte) == 1) {
-                    serial->putc(byte);
-                }
-            } else {
-                wait(.05);
+
+    while(txBuffer->size() != 0) {
+        if (serial->writeable() && clearToSend) {
+            char byte;
+            if(txBuffer->read(byte) == 1) {
+                serial->putc(byte);
             }
+        } else {
+            return;
         }
     }
+
 }
 
 #endif /* MTSSERIALFLOWCONTROL */
\ No newline at end of file