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:
Tue Dec 24 01:15:44 2013 +0000
Revision:
68:c490e4a51778
Parent:
67:1003b410f781
Child:
77:d7b14688a704
Moved timeout functionality to MTSBufferedIO calls. Improved sendCmd.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jengbrecht 0:563b70517320 1 #ifndef MTSBUFFEREDIO_CPP
jengbrecht 0:563b70517320 2 #define MTSBUFFEREDIO_CPP
jengbrecht 0:563b70517320 3
jengbrecht 0:563b70517320 4 #include "MTSBufferedIO.h"
jengbrecht 0:563b70517320 5
mfiore 39:6e94520a3217 6 using namespace mts;
mfiore 39:6e94520a3217 7
jengbrecht 0:563b70517320 8 MTSBufferedIO::MTSBufferedIO(int txBufferSize, int rxBufferSize)
jengbrecht 0:563b70517320 9 {
jengbrecht 0:563b70517320 10 txBuffer = new MTSCircularBuffer(txBufferSize);
jengbrecht 0:563b70517320 11 rxBuffer = new MTSCircularBuffer(rxBufferSize);
jengbrecht 0:563b70517320 12 }
jengbrecht 0:563b70517320 13
jengbrecht 0:563b70517320 14 MTSBufferedIO::~MTSBufferedIO()
jengbrecht 0:563b70517320 15 {
jengbrecht 0:563b70517320 16 delete txBuffer;
jengbrecht 0:563b70517320 17 delete rxBuffer;
jengbrecht 0:563b70517320 18 }
jengbrecht 0:563b70517320 19
sgodinez 68:c490e4a51778 20 int MTSBufferedIO::write(const char* data, int length, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 21 {
sgodinez 68:c490e4a51778 22 int bytesWritten = 0;
sgodinez 68:c490e4a51778 23 Timer tmr;
sgodinez 68:c490e4a51778 24 tmr.start();
sgodinez 68:c490e4a51778 25 do {
sgodinez 68:c490e4a51778 26 bytesWritten += write(&data[bytesWritten], length - bytesWritten);
sgodinez 68:c490e4a51778 27 } while(tmr.read_ms() <= timeoutMillis && bytesWritten < length);
sgodinez 68:c490e4a51778 28 return bytesWritten;
sgodinez 68:c490e4a51778 29 }
sgodinez 68:c490e4a51778 30
sgodinez 41:81d035fb0b6a 31 int MTSBufferedIO::write(const char* data, int length)
jengbrecht 0:563b70517320 32 {
jengbrecht 0:563b70517320 33 int tmp = txBuffer->write(data, length);
jengbrecht 0:563b70517320 34 handleWrite();
jengbrecht 0:563b70517320 35 return tmp;
jengbrecht 0:563b70517320 36 }
jengbrecht 0:563b70517320 37
sgodinez 68:c490e4a51778 38 int MTSBufferedIO::write(char data, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 39 {
sgodinez 68:c490e4a51778 40 return write(&data, 1, timeoutMillis);
sgodinez 68:c490e4a51778 41 }
sgodinez 68:c490e4a51778 42
jengbrecht 0:563b70517320 43 int MTSBufferedIO::write(char data)
jengbrecht 0:563b70517320 44 {
sgodinez 68:c490e4a51778 45 if(txBuffer->write(data)) {
sgodinez 68:c490e4a51778 46 handleWrite();
sgodinez 68:c490e4a51778 47 return 1;
sgodinez 68:c490e4a51778 48 }
sgodinez 68:c490e4a51778 49 return 0;
jengbrecht 0:563b70517320 50 }
jengbrecht 0:563b70517320 51
sgodinez 17:2d7c4ea7491b 52 int MTSBufferedIO::writeable() {
sgodinez 67:1003b410f781 53 return txBuffer->remaining();
sgodinez 17:2d7c4ea7491b 54 }
sgodinez 17:2d7c4ea7491b 55
sgodinez 68:c490e4a51778 56 int MTSBufferedIO::read(char* data, int length, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 57 {
sgodinez 68:c490e4a51778 58 int bytesRead = 0;
sgodinez 68:c490e4a51778 59 Timer tmr;
sgodinez 68:c490e4a51778 60 tmr.start();
sgodinez 68:c490e4a51778 61 do {
sgodinez 68:c490e4a51778 62 bytesRead += read(&data[bytesRead], length - bytesRead);
sgodinez 68:c490e4a51778 63 } while(tmr.read_ms() <= timeoutMillis && bytesRead < length);
sgodinez 68:c490e4a51778 64 return bytesRead;
sgodinez 68:c490e4a51778 65 }
sgodinez 68:c490e4a51778 66
jengbrecht 0:563b70517320 67 int MTSBufferedIO::read(char* data, int length)
jengbrecht 0:563b70517320 68 {
jengbrecht 0:563b70517320 69 return rxBuffer->read(data, length);
jengbrecht 0:563b70517320 70 }
jengbrecht 0:563b70517320 71
sgodinez 68:c490e4a51778 72 int MTSBufferedIO::read(char& data, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 73 {
sgodinez 68:c490e4a51778 74 return read(&data, 1, timeoutMillis);
sgodinez 68:c490e4a51778 75 }
sgodinez 68:c490e4a51778 76
sgodinez 17:2d7c4ea7491b 77 int MTSBufferedIO::read(char& data)
jengbrecht 0:563b70517320 78 {
sgodinez 17:2d7c4ea7491b 79 return rxBuffer->read(data);
sgodinez 17:2d7c4ea7491b 80 }
sgodinez 17:2d7c4ea7491b 81
sgodinez 17:2d7c4ea7491b 82 int MTSBufferedIO::readable() {
sgodinez 67:1003b410f781 83 return rxBuffer->size();
jengbrecht 0:563b70517320 84 }
jengbrecht 0:563b70517320 85
jengbrecht 0:563b70517320 86 bool MTSBufferedIO::txEmpty()
jengbrecht 0:563b70517320 87 {
jengbrecht 0:563b70517320 88 return txBuffer->isEmpty();
jengbrecht 0:563b70517320 89 }
jengbrecht 0:563b70517320 90
jengbrecht 0:563b70517320 91 bool MTSBufferedIO::rxEmpty()
jengbrecht 0:563b70517320 92 {
jengbrecht 0:563b70517320 93 return rxBuffer->isEmpty();
jengbrecht 0:563b70517320 94 }
jengbrecht 0:563b70517320 95
jengbrecht 0:563b70517320 96 bool MTSBufferedIO::txFull()
jengbrecht 0:563b70517320 97 {
jengbrecht 0:563b70517320 98 return txBuffer->isFull();
jengbrecht 0:563b70517320 99 }
jengbrecht 0:563b70517320 100
jengbrecht 0:563b70517320 101 bool MTSBufferedIO::rxFull()
jengbrecht 0:563b70517320 102 {
jengbrecht 0:563b70517320 103 return rxBuffer->isFull();
jengbrecht 0:563b70517320 104 }
jengbrecht 0:563b70517320 105
jengbrecht 0:563b70517320 106 void MTSBufferedIO::txClear()
jengbrecht 0:563b70517320 107 {
jengbrecht 0:563b70517320 108 txBuffer->clear();
jengbrecht 0:563b70517320 109 }
jengbrecht 0:563b70517320 110
jengbrecht 0:563b70517320 111 void MTSBufferedIO::rxClear()
jengbrecht 0:563b70517320 112 {
jengbrecht 0:563b70517320 113 rxBuffer->clear();
jengbrecht 0:563b70517320 114 }
jengbrecht 0:563b70517320 115
jengbrecht 0:563b70517320 116 #endif /* MTSBUFFEREDSERIAL_CPP */