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

Committer:
sgodinez
Date:
Fri Dec 27 16:40:23 2013 +0000
Revision:
86:186bbf974c7c
Parent:
83:9813f9b8ee68
Parent:
85:b17ad6781c5b
Child:
96:27bdf4aa3a31
No point in pointers.  Removed heap allocation from IO constructors.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jengbrecht 0:563b70517320 1 #include "MTSSerialFlowControl.h"
jengbrecht 0:563b70517320 2
mfiore 39:6e94520a3217 3 using namespace mts;
mfiore 39:6e94520a3217 4
sgodinez 86:186bbf974c7c 5 MTSSerialFlowControl::MTSSerialFlowControl(PinName TXD, PinName RXD, PinName RTS, PinName CTS, int txBufSize, int rxBufSize)
sgodinez 86:186bbf974c7c 6 : MTSSerial(TXD, RXD, txBufSize, rxBufSize)
sgodinez 86:186bbf974c7c 7 , rts(RTS)
sgodinez 86:186bbf974c7c 8 , cts(CTS)
jengbrecht 0:563b70517320 9 {
mfiore 10:2bd727a4b329 10 notifyStartSending();
jengbrecht 45:40745c2036cf 11
sgodinez 84:77c5ab16534d 12 highThreshold = MAX(rxBufSize - 10, rxBufSize * 0.85);
mfiore 2:8d3ea0dfce39 13 lowThreshold = rxBufSize * 0.3;
jengbrecht 45:40745c2036cf 14
sgodinez 86:186bbf974c7c 15 rxBuffer.attach(this, &MTSSerialFlowControl::notifyStartSending, lowThreshold, Vars::LESS);
mfiore 2:8d3ea0dfce39 16 }
mfiore 2:8d3ea0dfce39 17
jengbrecht 45:40745c2036cf 18 MTSSerialFlowControl::~MTSSerialFlowControl()
jengbrecht 45:40745c2036cf 19 {
mfiore 2:8d3ea0dfce39 20
jengbrecht 45:40745c2036cf 21 }
jengbrecht 45:40745c2036cf 22
jengbrecht 45:40745c2036cf 23 void MTSSerialFlowControl::notifyStartSending()
jengbrecht 45:40745c2036cf 24 {
sgodinez 86:186bbf974c7c 25 rts.write(0);
sgodinez 86:186bbf974c7c 26 //printf("RTS: START SENDING US BYTES - RX[%d]\r\n", rxBuffer.size());
mfiore 2:8d3ea0dfce39 27 }
mfiore 2:8d3ea0dfce39 28
jengbrecht 45:40745c2036cf 29 void MTSSerialFlowControl::notifyStopSending()
jengbrecht 45:40745c2036cf 30 {
sgodinez 86:186bbf974c7c 31 rts.write(1);
sgodinez 86:186bbf974c7c 32 //printf("RTS: STOP SENDING US BYTES - RX[%d]\r\n", rxBuffer.size());
mfiore 2:8d3ea0dfce39 33 }
mfiore 2:8d3ea0dfce39 34
jengbrecht 45:40745c2036cf 35 void MTSSerialFlowControl::handleRead()
jengbrecht 45:40745c2036cf 36 {
sgodinez 86:186bbf974c7c 37 while (serial.readable()) {
sgodinez 86:186bbf974c7c 38 rxBuffer.write(serial.getc());
sgodinez 86:186bbf974c7c 39 if (rxBuffer.size() > highThreshold) {
jengbrecht 77:d7b14688a704 40 notifyStopSending();
jengbrecht 77:d7b14688a704 41 }
mfiore 2:8d3ea0dfce39 42 }
mfiore 2:8d3ea0dfce39 43 }
mfiore 2:8d3ea0dfce39 44
jengbrecht 45:40745c2036cf 45 void MTSSerialFlowControl::handleWrite()
jengbrecht 45:40745c2036cf 46 {
sgodinez 86:186bbf974c7c 47 while(txBuffer.size() != 0) {
sgodinez 86:186bbf974c7c 48 if (serial.writeable() && cts.read() == 0) {
jengbrecht 77:d7b14688a704 49 char byte;
sgodinez 86:186bbf974c7c 50 if(txBuffer.read(byte) == 1) {
sgodinez 86:186bbf974c7c 51 serial.putc(byte);
mfiore 2:8d3ea0dfce39 52 }
jengbrecht 77:d7b14688a704 53 } else {
jengbrecht 77:d7b14688a704 54 return;
mfiore 2:8d3ea0dfce39 55 }
mfiore 2:8d3ea0dfce39 56 }
mfiore 2:8d3ea0dfce39 57 }