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:
jengbrecht
Date:
Fri Dec 27 15:55:35 2013 +0000
Revision:
83:9813f9b8ee68
Parent:
81:45e1359a5c69
Child:
86:186bbf974c7c
Changed MTSSerialFlowControl to inherit from MTSSerial

Who changed what in which revision?

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