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:
Thu Dec 26 21:54:19 2013 +0000
Revision:
77:d7b14688a704
Parent:
68:c490e4a51778
Child:
84:77c5ab16534d
Fixed Several RTS/CTS Issues

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 77:d7b14688a704 33 //Once tx irq is working, we can remove bytesWrittenSwBuffer, bytesRemainingSwBuffer, and actuallyWritten
jengbrecht 77:d7b14688a704 34 //b/c tx buffer will be emptied async
jengbrecht 77:d7b14688a704 35 int bytesWrittenSwBuffer = txBuffer->write(data, length);
jengbrecht 0:563b70517320 36 handleWrite();
jengbrecht 77:d7b14688a704 37 int bytesRemainingSwBuffer = txBuffer->size();
jengbrecht 77:d7b14688a704 38 txBuffer->clear();
jengbrecht 77:d7b14688a704 39 int actualWritten = bytesWrittenSwBuffer - bytesRemainingSwBuffer;
jengbrecht 77:d7b14688a704 40 //if(actualWritten) {
jengbrecht 77:d7b14688a704 41 // printf("BYTES ACTUALLY WRITTEN [%d]\r\n", actualWritten);
jengbrecht 77:d7b14688a704 42 // }
jengbrecht 77:d7b14688a704 43 return actualWritten;
jengbrecht 0:563b70517320 44 }
jengbrecht 0:563b70517320 45
sgodinez 68:c490e4a51778 46 int MTSBufferedIO::write(char data, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 47 {
sgodinez 68:c490e4a51778 48 return write(&data, 1, timeoutMillis);
sgodinez 68:c490e4a51778 49 }
sgodinez 68:c490e4a51778 50
jengbrecht 0:563b70517320 51 int MTSBufferedIO::write(char data)
jengbrecht 0:563b70517320 52 {
sgodinez 68:c490e4a51778 53 if(txBuffer->write(data)) {
sgodinez 68:c490e4a51778 54 handleWrite();
sgodinez 68:c490e4a51778 55 return 1;
sgodinez 68:c490e4a51778 56 }
sgodinez 68:c490e4a51778 57 return 0;
jengbrecht 0:563b70517320 58 }
jengbrecht 0:563b70517320 59
sgodinez 17:2d7c4ea7491b 60 int MTSBufferedIO::writeable() {
sgodinez 67:1003b410f781 61 return txBuffer->remaining();
sgodinez 17:2d7c4ea7491b 62 }
sgodinez 17:2d7c4ea7491b 63
sgodinez 68:c490e4a51778 64 int MTSBufferedIO::read(char* data, int length, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 65 {
sgodinez 68:c490e4a51778 66 int bytesRead = 0;
sgodinez 68:c490e4a51778 67 Timer tmr;
sgodinez 68:c490e4a51778 68 tmr.start();
sgodinez 68:c490e4a51778 69 do {
sgodinez 68:c490e4a51778 70 bytesRead += read(&data[bytesRead], length - bytesRead);
sgodinez 68:c490e4a51778 71 } while(tmr.read_ms() <= timeoutMillis && bytesRead < length);
sgodinez 68:c490e4a51778 72 return bytesRead;
sgodinez 68:c490e4a51778 73 }
sgodinez 68:c490e4a51778 74
jengbrecht 0:563b70517320 75 int MTSBufferedIO::read(char* data, int length)
jengbrecht 0:563b70517320 76 {
jengbrecht 0:563b70517320 77 return rxBuffer->read(data, length);
jengbrecht 0:563b70517320 78 }
jengbrecht 0:563b70517320 79
sgodinez 68:c490e4a51778 80 int MTSBufferedIO::read(char& data, unsigned int timeoutMillis)
sgodinez 68:c490e4a51778 81 {
sgodinez 68:c490e4a51778 82 return read(&data, 1, timeoutMillis);
sgodinez 68:c490e4a51778 83 }
sgodinez 68:c490e4a51778 84
sgodinez 17:2d7c4ea7491b 85 int MTSBufferedIO::read(char& data)
jengbrecht 0:563b70517320 86 {
sgodinez 17:2d7c4ea7491b 87 return rxBuffer->read(data);
sgodinez 17:2d7c4ea7491b 88 }
sgodinez 17:2d7c4ea7491b 89
sgodinez 17:2d7c4ea7491b 90 int MTSBufferedIO::readable() {
sgodinez 67:1003b410f781 91 return rxBuffer->size();
jengbrecht 0:563b70517320 92 }
jengbrecht 0:563b70517320 93
jengbrecht 0:563b70517320 94 bool MTSBufferedIO::txEmpty()
jengbrecht 0:563b70517320 95 {
jengbrecht 0:563b70517320 96 return txBuffer->isEmpty();
jengbrecht 0:563b70517320 97 }
jengbrecht 0:563b70517320 98
jengbrecht 0:563b70517320 99 bool MTSBufferedIO::rxEmpty()
jengbrecht 0:563b70517320 100 {
jengbrecht 0:563b70517320 101 return rxBuffer->isEmpty();
jengbrecht 0:563b70517320 102 }
jengbrecht 0:563b70517320 103
jengbrecht 0:563b70517320 104 bool MTSBufferedIO::txFull()
jengbrecht 0:563b70517320 105 {
jengbrecht 0:563b70517320 106 return txBuffer->isFull();
jengbrecht 0:563b70517320 107 }
jengbrecht 0:563b70517320 108
jengbrecht 0:563b70517320 109 bool MTSBufferedIO::rxFull()
jengbrecht 0:563b70517320 110 {
jengbrecht 0:563b70517320 111 return rxBuffer->isFull();
jengbrecht 0:563b70517320 112 }
jengbrecht 0:563b70517320 113
jengbrecht 0:563b70517320 114 void MTSBufferedIO::txClear()
jengbrecht 0:563b70517320 115 {
jengbrecht 0:563b70517320 116 txBuffer->clear();
jengbrecht 0:563b70517320 117 }
jengbrecht 0:563b70517320 118
jengbrecht 0:563b70517320 119 void MTSBufferedIO::rxClear()
jengbrecht 0:563b70517320 120 {
jengbrecht 0:563b70517320 121 rxBuffer->clear();
jengbrecht 0:563b70517320 122 }
jengbrecht 0:563b70517320 123
jengbrecht 0:563b70517320 124 #endif /* MTSBUFFEREDSERIAL_CPP */