Multi-Hackers / SocketModem

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
sgodinez
Date:
Fri Dec 27 16:40:23 2013 +0000
Revision:
86:186bbf974c7c
Parent:
84:77c5ab16534d
Child:
91:9439ad14d7f0
No point in pointers.  Removed heap allocation from IO constructors.

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)
sgodinez 86:186bbf974c7c 6 : txBuffer(txBufferSize)
sgodinez 86:186bbf974c7c 7 , rxBuffer(rxBufferSize)
jengbrecht 0:563b70517320 8 {
sgodinez 86:186bbf974c7c 9
jengbrecht 0:563b70517320 10 }
jengbrecht 0:563b70517320 11
jengbrecht 0:563b70517320 12 MTSBufferedIO::~MTSBufferedIO()
jengbrecht 0:563b70517320 13 {
sgodinez 86:186bbf974c7c 14
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
sgodinez 86:186bbf974c7c 32 int bytesWrittenSwBuffer = txBuffer.write(data, length);
jengbrecht 0:563b70517320 33 handleWrite();
sgodinez 86:186bbf974c7c 34 int bytesRemainingSwBuffer = txBuffer.size();
sgodinez 86:186bbf974c7c 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 86:186bbf974c7c 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 86:186bbf974c7c 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 {
sgodinez 86:186bbf974c7c 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 86:186bbf974c7c 84 return rxBuffer.read(data);
sgodinez 17:2d7c4ea7491b 85 }
sgodinez 17:2d7c4ea7491b 86
sgodinez 17:2d7c4ea7491b 87 int MTSBufferedIO::readable() {
sgodinez 86:186bbf974c7c 88 return rxBuffer.size();
jengbrecht 0:563b70517320 89 }
jengbrecht 0:563b70517320 90
jengbrecht 0:563b70517320 91 bool MTSBufferedIO::txEmpty()
jengbrecht 0:563b70517320 92 {
sgodinez 86:186bbf974c7c 93 return txBuffer.isEmpty();
jengbrecht 0:563b70517320 94 }
jengbrecht 0:563b70517320 95
jengbrecht 0:563b70517320 96 bool MTSBufferedIO::rxEmpty()
jengbrecht 0:563b70517320 97 {
sgodinez 86:186bbf974c7c 98 return rxBuffer.isEmpty();
jengbrecht 0:563b70517320 99 }
jengbrecht 0:563b70517320 100
jengbrecht 0:563b70517320 101 bool MTSBufferedIO::txFull()
jengbrecht 0:563b70517320 102 {
sgodinez 86:186bbf974c7c 103 return txBuffer.isFull();
jengbrecht 0:563b70517320 104 }
jengbrecht 0:563b70517320 105
jengbrecht 0:563b70517320 106 bool MTSBufferedIO::rxFull()
jengbrecht 0:563b70517320 107 {
sgodinez 86:186bbf974c7c 108 return rxBuffer.isFull();
jengbrecht 0:563b70517320 109 }
jengbrecht 0:563b70517320 110
jengbrecht 0:563b70517320 111 void MTSBufferedIO::txClear()
jengbrecht 0:563b70517320 112 {
sgodinez 86:186bbf974c7c 113 txBuffer.clear();
jengbrecht 0:563b70517320 114 }
jengbrecht 0:563b70517320 115
jengbrecht 0:563b70517320 116 void MTSBufferedIO::rxClear()
jengbrecht 0:563b70517320 117 {
sgodinez 86:186bbf974c7c 118 rxBuffer.clear();
sgodinez 84:77c5ab16534d 119 }