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:
- 45:40745c2036cf
- Parent:
- 17:2d7c4ea7491b
- Child:
- 46:b30547bf07d5
--- a/io/MTSSerialFlowControl.cpp Thu Dec 19 16:54:09 2013 +0000 +++ b/io/MTSSerialFlowControl.cpp Thu Dec 19 21:38:01 2013 +0000 @@ -8,48 +8,60 @@ serial = new Serial(TXD, RXD); serial->attach(this, &MTSSerialFlowControl::handleRead, Serial::RxIrq); //serial->attach(this, &MTSSerialFlowControl::handleWrite, Serial::TxIrq); - + clearToSend = true; rts = new InterruptIn(RTS); rts->rise(this, &MTSSerialFlowControl::stopSending); // active low -> stop sending rts->fall(this, &MTSSerialFlowControl::startSending); // active low -> start sending - + cts = new DigitalOut(CTS); notifyStartSending(); - + highThreshold = rxBufSize * 0.85; lowThreshold = rxBufSize * 0.3; - + rxBuffer->attach(this, &MTSSerialFlowControl::notifyStartSending, lowThreshold, Vars::LESS); } -MTSSerialFlowControl::~MTSSerialFlowControl() { +MTSSerialFlowControl::~MTSSerialFlowControl() +{ delete rts; delete cts; delete serial; } -void MTSSerialFlowControl::baud(int baudrate) { +void MTSSerialFlowControl::baud(int baudrate) +{ serial->baud(baudrate); } -void MTSSerialFlowControl::startSending() { +void MTSSerialFlowControl::format(int bits, SerialBase::Parity parity, int stop_bits) +{ + serial->format(bits, parity, stop_bits); +} + +void MTSSerialFlowControl::startSending() +{ clearToSend = true; } -void MTSSerialFlowControl::stopSending() { +void MTSSerialFlowControl::stopSending() +{ clearToSend = false; } -void MTSSerialFlowControl::notifyStartSending() { +void MTSSerialFlowControl::notifyStartSending() +{ cts->write(0); } -void MTSSerialFlowControl::notifyStopSending() { +void MTSSerialFlowControl::notifyStopSending() +{ cts->write(1); } -void MTSSerialFlowControl::handleRead() { +void MTSSerialFlowControl::handleRead() +{ if (rxBuffer->available() > highThreshold) { notifyStopSending(); } @@ -58,7 +70,8 @@ } } -void MTSSerialFlowControl::handleWrite() { +void MTSSerialFlowControl::handleWrite() +{ if (clearToSend) { while(txBuffer->available() != 0) { if (serial->writeable()) {