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:
101:27bb34e23304
Parent:
96:27bdf4aa3a31
Child:
110:8f3149c99112
--- a/io/MTSSerialFlowControl.cpp	Mon Dec 30 19:00:56 2013 +0000
+++ b/io/MTSSerialFlowControl.cpp	Mon Dec 30 23:26:31 2013 +0000
@@ -4,6 +4,7 @@
 
 MTSSerialFlowControl::MTSSerialFlowControl(PinName TXD, PinName RXD, PinName RTS, PinName CTS, int txBufSize, int rxBufSize) 
 : MTSSerial(TXD, RXD, txBufSize, rxBufSize)
+, rxReadyFlag(false)
 , rts(RTS)
 , cts(CTS)
 {
@@ -20,16 +21,27 @@
 
 }
 
+void MTSSerialFlowControl::rxClear() {
+    MTSBufferedIO::rxClear();
+    notifyStartSending();   
+}
+
 void MTSSerialFlowControl::notifyStartSending()
 {
-    rts.write(0);
-    //printf("RTS: START SENDING US BYTES - RX[%d]\r\n", rxBuffer.size());
+    if(!rxReadyFlag) {
+        rts.write(0);
+        rxReadyFlag = true;
+        //printf("RTS LOW: START SENDING US BYTES - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
+    }
 }
 
 void MTSSerialFlowControl::notifyStopSending()
 {
-    rts.write(1);
-    //printf("RTS: STOP SENDING US BYTES - RX[%d]\r\n", rxBuffer.size());
+    if(rxReadyFlag) {
+        rts.write(1);
+        rxReadyFlag = false;
+        //printf("RTS HIGH: STOP SENDING US BYTES - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
+    }
 }
 
 void MTSSerialFlowControl::handleRead()
@@ -37,7 +49,7 @@
     while (serial.readable()) {
         char byte = serial.getc();
         if(rxBuffer.write(byte) != 1) {
-            printf("[ERROR] Serial Rx Byte Dropped [%c][%02X]\r\n", byte, byte);
+            printf("[ERROR] Serial Rx Byte Dropped [%c][0x%02X]\r\n", byte, byte);
             notifyStopSending();
         }
         if (rxBuffer.size() > highThreshold) {