Multitech xDot AT Firmware

Dependencies:   MTS-Serial libxDot-mbed5

Committer:
jreiss
Date:
Wed Jan 16 14:20:49 2019 +0000
Revision:
18:72b6b49d363d
Parent:
14:f9a77400b622
Update libxDot to latest and mbed-os to 5.7.7; Update PacketRx for new library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 9:ff62b20f7000 1 #include "mbed.h"
Mike Fiore 9:ff62b20f7000 2 #include "ATSerialFlowControl.h"
Mike Fiore 9:ff62b20f7000 3 #include "MTSLog.h"
Mike Fiore 9:ff62b20f7000 4 #include "Utils.h"
Mike Fiore 9:ff62b20f7000 5
Mike Fiore 9:ff62b20f7000 6 using namespace mts;
Mike Fiore 9:ff62b20f7000 7
Mike Fiore 9:ff62b20f7000 8 ATSerialFlowControl::ATSerialFlowControl(PinName TXD, PinName RXD, PinName RTS, PinName CTS, int txBufSize, int rxBufSize)
Mike Fiore 9:ff62b20f7000 9 : ATSerial(TXD, RXD, txBufSize, rxBufSize)
Mike Fiore 9:ff62b20f7000 10 , rxReadyFlag(false)
Mike Fiore 9:ff62b20f7000 11 , rts(RTS)
Mike Fiore 9:ff62b20f7000 12 , cts(CTS)
Mike Fiore 9:ff62b20f7000 13 {
Mike Fiore 9:ff62b20f7000 14 notifyStartSending();
Mike Fiore 9:ff62b20f7000 15
Mike Fiore 9:ff62b20f7000 16 // Calculate the high and low watermark values
Mike Fiore 9:ff62b20f7000 17 highThreshold = mts_max(rxBufSize - 10, rxBufSize * 0.85);
Mike Fiore 9:ff62b20f7000 18 lowThreshold = rxBufSize * 0.3;
Mike Fiore 9:ff62b20f7000 19
Mike Fiore 9:ff62b20f7000 20 // Setup the low watermark callback on the internal receive buffer
Mike Fiore 9:ff62b20f7000 21 rxBuffer.attach(this, &ATSerialFlowControl::notifyStartSending, lowThreshold, LESS);
Mike Fiore 9:ff62b20f7000 22 }
Mike Fiore 9:ff62b20f7000 23
Mike Fiore 9:ff62b20f7000 24 ATSerialFlowControl::~ATSerialFlowControl()
Mike Fiore 9:ff62b20f7000 25 {
Mike Fiore 9:ff62b20f7000 26 }
Mike Fiore 9:ff62b20f7000 27
Mike Fiore 9:ff62b20f7000 28 //Override the rxClear function to make sure that flow control lines are set correctly.
Mike Fiore 9:ff62b20f7000 29 void ATSerialFlowControl::rxClear()
Mike Fiore 9:ff62b20f7000 30 {
Mike Fiore 9:ff62b20f7000 31 MTSBufferedIO::rxClear();
Mike Fiore 9:ff62b20f7000 32 notifyStartSending();
Mike Fiore 9:ff62b20f7000 33 }
Mike Fiore 9:ff62b20f7000 34
Mike Fiore 9:ff62b20f7000 35 void ATSerialFlowControl::notifyStartSending()
Mike Fiore 9:ff62b20f7000 36 {
Mike Fiore 9:ff62b20f7000 37 if(!rxReadyFlag) {
Mike Fiore 9:ff62b20f7000 38 rts.write(0);
Mike Fiore 9:ff62b20f7000 39 rxReadyFlag = true;
Mike Fiore 9:ff62b20f7000 40 //printf("RTS LOW: READY - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
Mike Fiore 9:ff62b20f7000 41 }
Mike Fiore 9:ff62b20f7000 42 }
Mike Fiore 9:ff62b20f7000 43
Mike Fiore 9:ff62b20f7000 44 void ATSerialFlowControl::notifyStopSending()
Mike Fiore 9:ff62b20f7000 45 {
Mike Fiore 9:ff62b20f7000 46 if(rxReadyFlag) {
Mike Fiore 9:ff62b20f7000 47 rts.write(1);
Mike Fiore 9:ff62b20f7000 48 rxReadyFlag = false;
Mike Fiore 9:ff62b20f7000 49 //printf("RTS HIGH: NOT-READY - RX[%d/%d]\r\n", rxBuffer.size(), rxBuffer.capacity());
Mike Fiore 9:ff62b20f7000 50 }
Mike Fiore 9:ff62b20f7000 51 }
Mike Fiore 9:ff62b20f7000 52
Mike Fiore 9:ff62b20f7000 53 void ATSerialFlowControl::handleRead()
Mike Fiore 9:ff62b20f7000 54 {
Mike Fiore 9:ff62b20f7000 55 ATSerial::handleRead();
Mike Fiore 9:ff62b20f7000 56 if (rxBuffer.size() >= highThreshold) {
Mike Fiore 9:ff62b20f7000 57 notifyStopSending();
Mike Fiore 9:ff62b20f7000 58 }
Mike Fiore 9:ff62b20f7000 59 }
Mike Fiore 9:ff62b20f7000 60
Mike Fiore 9:ff62b20f7000 61 void ATSerialFlowControl::handleWrite()
Mike Fiore 9:ff62b20f7000 62 {
Mike Fiore 14:f9a77400b622 63 while(txBuffer.size() != 0) {
Mike Fiore 14:f9a77400b622 64 if (_serial->writeable() && cts.read() == 0) {
Mike Fiore 14:f9a77400b622 65 char byte;
Mike Fiore 14:f9a77400b622 66 if(txBuffer.read(byte) == 1) {
Mike Fiore 14:f9a77400b622 67 _serial->attach(NULL, Serial::RxIrq);
Mike Fiore 14:f9a77400b622 68 _serial->putc(byte);
Mike Fiore 14:f9a77400b622 69 _serial->attach(this, &ATSerialFlowControl::handleRead, Serial::RxIrq);
Mike Fiore 14:f9a77400b622 70 }
Mike Fiore 14:f9a77400b622 71 } else {
Mike Fiore 14:f9a77400b622 72 return;
Mike Fiore 14:f9a77400b622 73 }
Mike Fiore 14:f9a77400b622 74 }
Mike Fiore 9:ff62b20f7000 75 }