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

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MTSSerial.cpp Source File

MTSSerial.cpp

00001 #include "mbed.h"
00002 #include "MTSSerial.h"
00003 #include "MTSLog.h"
00004 
00005 using namespace mts;
00006 
00007 MTSSerial::MTSSerial(PinName TXD, PinName RXD, int txBufferSize, int rxBufferSize)
00008     : MTSBufferedIO(txBufferSize, rxBufferSize)
00009     , _serial(new RawSerial(TXD,RXD)),
00010     _baudrate(9600),
00011     _bits(8),
00012     _parity(mbed::SerialBase::None),
00013     _stop_bits(1)
00014 {
00015     _serial->attach(callback(this, &MTSSerial::handleRead), Serial::RxIrq);
00016 }
00017 
00018 MTSSerial::~MTSSerial()
00019 {
00020 }
00021 
00022 
00023 
00024 void MTSSerial::baud(int baudrate)
00025 {
00026     _baudrate = baudrate;
00027     _serial->baud(_baudrate);
00028 }
00029 
00030 void MTSSerial::format(int bits, SerialBase::Parity parity, int stop_bits)
00031 {
00032     _bits = bits;
00033     _parity = parity;
00034     _stop_bits = stop_bits;
00035     _serial->format(_bits, _parity, _stop_bits);
00036 }
00037 
00038 void MTSSerial::handleRead()
00039 {
00040     rxBuffer.write(_serial->getc());
00041 }
00042 
00043 void MTSSerial::handleWrite()
00044 {
00045     while(txBuffer.size() != 0) {
00046         if (_serial->writeable()) {
00047             char byte;
00048             if(txBuffer.read(byte) == 1) {
00049                 _serial->attach(NULL, Serial::RxIrq);
00050                 _serial->putc(byte);
00051                 _serial->attach(callback(this, &MTSSerial::handleRead), Serial::RxIrq);
00052             }
00053         } else {
00054             return;
00055         }
00056     }
00057 }
00058 
00059 void mts::MTSSerial::reattach(PinName TXD, PinName RXD) {
00060     delete _serial;
00061     _serial = new RawSerial(TXD, RXD);
00062     _serial->attach(callback(this, &MTSSerial::handleRead), Serial::RxIrq);
00063     _serial->baud(_baudrate);
00064     _serial->format(_bits, _parity, _stop_bits);
00065     rxBuffer.clear();
00066     txBuffer.clear();
00067 }
00068 
00069 void mts::MTSSerial::sendBreak() {
00070     _serial->send_break();
00071 }