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:
- 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