Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more
io/MTSBufferedIO.cpp
- Committer:
- sgodinez
- Date:
- 2013-12-27
- Revision:
- 91:9439ad14d7f0
- Parent:
- 86:186bbf974c7c
- Child:
- 110:8f3149c99112
File content as of revision 91:9439ad14d7f0:
#include "MTSBufferedIO.h"
using namespace mts;
MTSBufferedIO::MTSBufferedIO(int txBufferSize, int rxBufferSize)
: txBuffer(txBufferSize)
, rxBuffer(rxBufferSize)
{
}
MTSBufferedIO::~MTSBufferedIO()
{
}
int MTSBufferedIO::write(const char* data, int length, unsigned int timeoutMillis)
{
//Writes until empty or timeout is reached (different implementation planned once tx isr is working)
int bytesWritten = 0;
Timer tmr;
tmr.start();
do {
int bytesWrittenSwBuffer = txBuffer.write(&data[bytesWritten], length - bytesWritten);
if(bytesWrittenSwBuffer > 0) {
handleWrite();
int bytesRemainingSwBuffer = txBuffer.size();
txBuffer.clear();
bytesWritten += (bytesWrittenSwBuffer - bytesRemainingSwBuffer);
}
} while(tmr.read_ms() <= timeoutMillis && bytesWritten < length);
return bytesWritten;
}
int MTSBufferedIO::write(const char* data, int length)
{
//Blocks until all bytes are written (different implementation planned once tx isr is working)
int bytesWritten = 0;
do {
int bytesWrittenSwBuffer = txBuffer.write(&data[bytesWritten], length - bytesWritten);
handleWrite();
int bytesRemainingSwBuffer = txBuffer.size();
txBuffer.clear();
bytesWritten += bytesWrittenSwBuffer - bytesRemainingSwBuffer;
} while(bytesWritten < length);
return length;
}
int MTSBufferedIO::write(char data, unsigned int timeoutMillis)
{
return write(&data, 1, timeoutMillis);
}
int MTSBufferedIO::write(char data)
{
return write(&data, 1);
}
int MTSBufferedIO::writeable() {
return txBuffer.remaining();
}
int MTSBufferedIO::read(char* data, int length, unsigned int timeoutMillis)
{
int bytesRead = 0;
Timer tmr;
tmr.start();
do {
bytesRead += rxBuffer.read(&data[bytesRead], length - bytesRead);
} while(tmr.read_ms() <= timeoutMillis && bytesRead < length);
return bytesRead;
}
int MTSBufferedIO::read(char* data, int length)
{
int bytesRead = 0;
while(bytesRead < length) {
bytesRead += rxBuffer.read(&data[bytesRead], length - bytesRead);
}
return length;
}
int MTSBufferedIO::read(char& data, unsigned int timeoutMillis)
{
return read(&data, 1, timeoutMillis);
}
int MTSBufferedIO::read(char& data)
{
return rxBuffer.read(&data, 1);
}
int MTSBufferedIO::readable() {
return rxBuffer.size();
}
bool MTSBufferedIO::txEmpty()
{
return txBuffer.isEmpty();
}
bool MTSBufferedIO::rxEmpty()
{
return rxBuffer.isEmpty();
}
bool MTSBufferedIO::txFull()
{
return txBuffer.isFull();
}
bool MTSBufferedIO::rxFull()
{
return rxBuffer.isFull();
}
void MTSBufferedIO::txClear()
{
txBuffer.clear();
}
void MTSBufferedIO::rxClear()
{
rxBuffer.clear();
}
uIP Socket Modem Shield (Outdated - see below)