Serial library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems

Dependents:   mDot_AT_firmware mtsas mtsas MTDOT-EVB-LinkCheck-AL ... more

Committer:
Mike Fiore
Date:
Fri Jan 23 16:52:25 2015 -0600
Revision:
10:b18a1064dfc6
Parent:
4:d348d001283b
Child:
11:4afbbafcd6b3
use mts_min/mts_max inline functions instead of MIN/MAX macros - macros break in IAR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 4:d348d001283b 1 #include "mbed.h"
Mike Fiore 1:d34b566d6f47 2 #include "MTSBufferedIO.h"
Mike Fiore 3:8e3cb3371b09 3 #include "Utils.h"
Mike Fiore 1:d34b566d6f47 4
Mike Fiore 1:d34b566d6f47 5 using namespace mts;
Mike Fiore 1:d34b566d6f47 6
Mike Fiore 1:d34b566d6f47 7 MTSBufferedIO::MTSBufferedIO(int txBufferSize, int rxBufferSize)
Mike Fiore 1:d34b566d6f47 8 : txBuffer(txBufferSize)
Mike Fiore 1:d34b566d6f47 9 , rxBuffer(rxBufferSize)
Mike Fiore 1:d34b566d6f47 10 {
Mike Fiore 1:d34b566d6f47 11 }
Mike Fiore 1:d34b566d6f47 12
Mike Fiore 1:d34b566d6f47 13 MTSBufferedIO::~MTSBufferedIO()
Mike Fiore 1:d34b566d6f47 14 {
Mike Fiore 1:d34b566d6f47 15 }
Mike Fiore 1:d34b566d6f47 16
Mike Fiore 1:d34b566d6f47 17 int MTSBufferedIO::write(const char* data, int length, unsigned int timeoutMillis)
Mike Fiore 1:d34b566d6f47 18 {
Mike Fiore 1:d34b566d6f47 19 //Writes until empty or timeout is reached (different implementation planned once tx isr is working)
Mike Fiore 1:d34b566d6f47 20 int bytesWritten = 0;
Mike Fiore 1:d34b566d6f47 21 Timer tmr;
Mike Fiore 1:d34b566d6f47 22 tmr.start();
Mike Fiore 10:b18a1064dfc6 23 length = mts_max(0,length);
Mike Fiore 1:d34b566d6f47 24 do {
Mike Fiore 1:d34b566d6f47 25 int bytesWrittenSwBuffer = txBuffer.write(&data[bytesWritten], length - bytesWritten);
Mike Fiore 1:d34b566d6f47 26 if(bytesWrittenSwBuffer > 0) {
Mike Fiore 1:d34b566d6f47 27 handleWrite();
Mike Fiore 1:d34b566d6f47 28 int bytesRemainingSwBuffer = txBuffer.size();
Mike Fiore 1:d34b566d6f47 29 txBuffer.clear();
Mike Fiore 1:d34b566d6f47 30 bytesWritten += (bytesWrittenSwBuffer - bytesRemainingSwBuffer);
Mike Fiore 1:d34b566d6f47 31 }
Mike Fiore 1:d34b566d6f47 32 } while(tmr.read_ms() <= timeoutMillis && bytesWritten < length);
Mike Fiore 1:d34b566d6f47 33 return bytesWritten;
Mike Fiore 1:d34b566d6f47 34 }
Mike Fiore 1:d34b566d6f47 35
Mike Fiore 1:d34b566d6f47 36 int MTSBufferedIO::write(const char* data, int length)
Mike Fiore 1:d34b566d6f47 37 {
Mike Fiore 1:d34b566d6f47 38 //Blocks until all bytes are written (different implementation planned once tx isr is working)
Mike Fiore 1:d34b566d6f47 39 int bytesWritten = 0;
Mike Fiore 10:b18a1064dfc6 40 length = mts_max(0,length);
Mike Fiore 1:d34b566d6f47 41 do {
Mike Fiore 1:d34b566d6f47 42 int bytesWrittenSwBuffer = txBuffer.write(&data[bytesWritten], length - bytesWritten);
Mike Fiore 1:d34b566d6f47 43 handleWrite();
Mike Fiore 1:d34b566d6f47 44 int bytesRemainingSwBuffer = txBuffer.size();
Mike Fiore 1:d34b566d6f47 45 txBuffer.clear();
Mike Fiore 1:d34b566d6f47 46 bytesWritten += bytesWrittenSwBuffer - bytesRemainingSwBuffer;
Mike Fiore 1:d34b566d6f47 47 } while(bytesWritten < length);
Mike Fiore 1:d34b566d6f47 48 return length;
Mike Fiore 1:d34b566d6f47 49 }
Mike Fiore 1:d34b566d6f47 50
Mike Fiore 1:d34b566d6f47 51 int MTSBufferedIO::write(char data, unsigned int timeoutMillis)
Mike Fiore 1:d34b566d6f47 52 {
Mike Fiore 1:d34b566d6f47 53 return write(&data, 1, timeoutMillis);
Mike Fiore 1:d34b566d6f47 54 }
Mike Fiore 1:d34b566d6f47 55
Mike Fiore 1:d34b566d6f47 56 int MTSBufferedIO::write(char data)
Mike Fiore 1:d34b566d6f47 57 {
Mike Fiore 1:d34b566d6f47 58 return write(&data, 1);
Mike Fiore 1:d34b566d6f47 59 }
Mike Fiore 1:d34b566d6f47 60
Mike Fiore 1:d34b566d6f47 61 int MTSBufferedIO::writeable() {
Mike Fiore 1:d34b566d6f47 62 return txBuffer.remaining();
Mike Fiore 1:d34b566d6f47 63 }
Mike Fiore 1:d34b566d6f47 64
Mike Fiore 1:d34b566d6f47 65 int MTSBufferedIO::read(char* data, int length, unsigned int timeoutMillis)
Mike Fiore 1:d34b566d6f47 66 {
Mike Fiore 1:d34b566d6f47 67 int bytesRead = 0;
Mike Fiore 1:d34b566d6f47 68 Timer tmr;
Mike Fiore 1:d34b566d6f47 69 tmr.start();
Mike Fiore 10:b18a1064dfc6 70 length = mts_max(0,length);
Mike Fiore 1:d34b566d6f47 71 do {
Mike Fiore 1:d34b566d6f47 72 bytesRead += rxBuffer.read(&data[bytesRead], length - bytesRead);
Mike Fiore 1:d34b566d6f47 73 } while(tmr.read_ms() <= timeoutMillis && bytesRead < length);
Mike Fiore 1:d34b566d6f47 74 return bytesRead;
Mike Fiore 1:d34b566d6f47 75 }
Mike Fiore 1:d34b566d6f47 76
Mike Fiore 1:d34b566d6f47 77 int MTSBufferedIO::read(char* data, int length)
Mike Fiore 1:d34b566d6f47 78 {
Mike Fiore 1:d34b566d6f47 79 int bytesRead = 0;
Mike Fiore 10:b18a1064dfc6 80 length = mts_max(0,length);
Mike Fiore 1:d34b566d6f47 81 while(bytesRead < length) {
Mike Fiore 1:d34b566d6f47 82 bytesRead += rxBuffer.read(&data[bytesRead], length - bytesRead);
Mike Fiore 1:d34b566d6f47 83 }
Mike Fiore 1:d34b566d6f47 84 return length;
Mike Fiore 1:d34b566d6f47 85 }
Mike Fiore 1:d34b566d6f47 86
Mike Fiore 1:d34b566d6f47 87 int MTSBufferedIO::read(char& data, unsigned int timeoutMillis)
Mike Fiore 1:d34b566d6f47 88 {
Mike Fiore 1:d34b566d6f47 89 return read(&data, 1, timeoutMillis);
Mike Fiore 1:d34b566d6f47 90 }
Mike Fiore 1:d34b566d6f47 91
Mike Fiore 1:d34b566d6f47 92 int MTSBufferedIO::read(char& data)
Mike Fiore 1:d34b566d6f47 93 {
Mike Fiore 1:d34b566d6f47 94 return rxBuffer.read(&data, 1);
Mike Fiore 1:d34b566d6f47 95 }
Mike Fiore 1:d34b566d6f47 96
Mike Fiore 1:d34b566d6f47 97 int MTSBufferedIO::readable() {
Mike Fiore 1:d34b566d6f47 98 return rxBuffer.size();
Mike Fiore 1:d34b566d6f47 99 }
Mike Fiore 1:d34b566d6f47 100
Mike Fiore 1:d34b566d6f47 101 bool MTSBufferedIO::txEmpty()
Mike Fiore 1:d34b566d6f47 102 {
Mike Fiore 1:d34b566d6f47 103 return txBuffer.isEmpty();
Mike Fiore 1:d34b566d6f47 104 }
Mike Fiore 1:d34b566d6f47 105
Mike Fiore 1:d34b566d6f47 106 bool MTSBufferedIO::rxEmpty()
Mike Fiore 1:d34b566d6f47 107 {
Mike Fiore 1:d34b566d6f47 108 return rxBuffer.isEmpty();
Mike Fiore 1:d34b566d6f47 109 }
Mike Fiore 1:d34b566d6f47 110
Mike Fiore 1:d34b566d6f47 111 bool MTSBufferedIO::txFull()
Mike Fiore 1:d34b566d6f47 112 {
Mike Fiore 1:d34b566d6f47 113 return txBuffer.isFull();
Mike Fiore 1:d34b566d6f47 114 }
Mike Fiore 1:d34b566d6f47 115
Mike Fiore 1:d34b566d6f47 116 bool MTSBufferedIO::rxFull()
Mike Fiore 1:d34b566d6f47 117 {
Mike Fiore 1:d34b566d6f47 118 return rxBuffer.isFull();
Mike Fiore 1:d34b566d6f47 119 }
Mike Fiore 1:d34b566d6f47 120
Mike Fiore 1:d34b566d6f47 121 void MTSBufferedIO::txClear()
Mike Fiore 1:d34b566d6f47 122 {
Mike Fiore 1:d34b566d6f47 123 txBuffer.clear();
Mike Fiore 1:d34b566d6f47 124 }
Mike Fiore 1:d34b566d6f47 125
Mike Fiore 1:d34b566d6f47 126 void MTSBufferedIO::rxClear()
Mike Fiore 1:d34b566d6f47 127 {
Mike Fiore 1:d34b566d6f47 128 rxBuffer.clear();
Mike Fiore 1:d34b566d6f47 129 }