Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: libmDot-Custom MTS-Serial
Fork of mDot_AT_firmware_CUSTOM by
To change channel plans replace AS923 with AU915, EU868, KR920 or US915 on line 15
#define CHANNEL_PLAN CP_AS923
Diff: ATSerialFlowControl.cpp
- Revision:
- 9:ff62b20f7000
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ATSerialFlowControl.cpp Mon Apr 04 09:00:31 2016 -0500
@@ -0,0 +1,65 @@
+#include "mbed.h"
+#include "ATSerialFlowControl.h"
+#include "MTSLog.h"
+#include "Utils.h"
+
+using namespace mts;
+
+ATSerialFlowControl::ATSerialFlowControl(PinName TXD, PinName RXD, PinName RTS, PinName CTS, int txBufSize, int rxBufSize)
+ : ATSerial(TXD, RXD, txBufSize, rxBufSize)
+ , rxReadyFlag(false)
+ , rts(RTS)
+ , cts(CTS)
+{
+ notifyStartSending();
+
+ // Calculate the high and low watermark values
+ highThreshold = mts_max(rxBufSize - 10, rxBufSize * 0.85);
+ lowThreshold = rxBufSize * 0.3;
+
+ // Setup the low watermark callback on the internal receive buffer
+ rxBuffer.attach(this, &ATSerialFlowControl::notifyStartSending, lowThreshold, LESS);
+}
+
+ATSerialFlowControl::~ATSerialFlowControl()
+{
+}
+
+//Override the rxClear function to make sure that flow control lines are set correctly.
+void ATSerialFlowControl::rxClear()
+{
+ MTSBufferedIO::rxClear();
+ notifyStartSending();
+}
+
+void ATSerialFlowControl::notifyStartSending()
+{
+ if(!rxReadyFlag) {
+ rts.write(0);
+ rxReadyFlag = true;
+ //printf("RTS LOW: READY - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
+ }
+}
+
+void ATSerialFlowControl::notifyStopSending()
+{
+ if(rxReadyFlag) {
+ rts.write(1);
+ rxReadyFlag = false;
+ //printf("RTS HIGH: NOT-READY - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
+ }
+}
+
+void ATSerialFlowControl::handleRead()
+{
+ ATSerial::handleRead();
+ if (rxBuffer.size() >= highThreshold) {
+ notifyStopSending();
+ }
+}
+
+void ATSerialFlowControl::handleWrite()
+{
+ ATSerial::handleWrite();
+}
+
