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
Diff: io/MTSSerialFlowControl.cpp
- 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) {