Multi-Hackers / SocketModem

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
sgodinez
Date:
Fri Dec 27 15:51:19 2013 +0000
Revision:
84:77c5ab16534d
Parent:
77:d7b14688a704
Child:
86:186bbf974c7c
Employed RTS threshold algorithm.  Removed header guards from cpp files.

Who changed what in which revision?

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