A library for talking to Multi-Tech's Cellular SocketModem Devices.

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
jengbrecht
Date:
Sat Jan 04 05:07:22 2014 +0000
Revision:
140:bf0c8288eb78
Parent:
129:3aa470877c59
Child:
141:571e0ef6c8dc
In MTSSerial and MTSSerialFlowControl added code in handle to read to clear buffer on invalid overflow condition of 0xFF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jengbrecht 0:563b70517320 1 #include "MTSSerial.h"
jengbrecht 0:563b70517320 2
mfiore 39:6e94520a3217 3 using namespace mts;
mfiore 39:6e94520a3217 4
jengbrecht 140:bf0c8288eb78 5 MTSSerial::MTSSerial(PinName TXD, PinName RXD, int txBufferSize, int rxBufferSize)
jengbrecht 140:bf0c8288eb78 6 : MTSBufferedIO(txBufferSize, rxBufferSize)
jengbrecht 140:bf0c8288eb78 7 , serial(TXD,RXD)
jengbrecht 0:563b70517320 8 {
sgodinez 86:186bbf974c7c 9 serial.attach(this, &MTSSerial::handleRead, Serial::RxIrq);
sgodinez 86:186bbf974c7c 10 //serial.attach(this, &MTSSerial::handleWrite, Serial::TxIrq);
jengbrecht 0:563b70517320 11 }
jengbrecht 0:563b70517320 12
jengbrecht 0:563b70517320 13 MTSSerial::~MTSSerial()
jengbrecht 0:563b70517320 14 {
sgodinez 86:186bbf974c7c 15
jengbrecht 0:563b70517320 16 }
jengbrecht 0:563b70517320 17
jengbrecht 0:563b70517320 18 void MTSSerial::baud(int baudrate)
jengbrecht 0:563b70517320 19 {
sgodinez 86:186bbf974c7c 20 serial.baud(baudrate);
jengbrecht 0:563b70517320 21 }
jengbrecht 0:563b70517320 22
jengbrecht 45:40745c2036cf 23 void MTSSerial::format(int bits, SerialBase::Parity parity, int stop_bits)
jengbrecht 0:563b70517320 24 {
sgodinez 86:186bbf974c7c 25 serial.format(bits, parity, stop_bits);
jengbrecht 0:563b70517320 26 }
jengbrecht 45:40745c2036cf 27
jengbrecht 0:563b70517320 28 void MTSSerial::handleRead()
jengbrecht 0:563b70517320 29 {
jengbrecht 129:3aa470877c59 30 while (serial.readable()) {
jengbrecht 129:3aa470877c59 31 char byte = serial.getc();
jengbrecht 129:3aa470877c59 32 if(rxBuffer.write(byte) != 1) {
jengbrecht 129:3aa470877c59 33 printf("[ERROR] Serial Rx Byte Dropped [%c][0x%02X]\r\n", byte, byte);
jengbrecht 140:bf0c8288eb78 34 if(byte == 0xFF) {
jengbrecht 140:bf0c8288eb78 35 serial.attach(NULL, Serial::RxIrq);
jengbrecht 140:bf0c8288eb78 36 serial.attach(this, &MTSSerial::handleRead, Serial::RxIrq);
jengbrecht 140:bf0c8288eb78 37 printf("[INFO] Reset the RxIrq.\n\r");
jengbrecht 140:bf0c8288eb78 38 }
jengbrecht 129:3aa470877c59 39 return;
jengbrecht 129:3aa470877c59 40 }
jengbrecht 81:45e1359a5c69 41 }
jengbrecht 0:563b70517320 42 }
jengbrecht 0:563b70517320 43
jengbrecht 0:563b70517320 44 // Currently uses Non-Irq based blocking write calls
jengbrecht 0:563b70517320 45 void MTSSerial::handleWrite()
jengbrecht 0:563b70517320 46 {
sgodinez 86:186bbf974c7c 47 while(txBuffer.size() != 0) {
sgodinez 86:186bbf974c7c 48 if (serial.writeable()) {
sgodinez 17:2d7c4ea7491b 49 char byte;
sgodinez 86:186bbf974c7c 50 if(txBuffer.read(byte) == 1) {
sgodinez 86:186bbf974c7c 51 serial.putc(byte);
sgodinez 17:2d7c4ea7491b 52 }
jengbrecht 0:563b70517320 53 } else {
jengbrecht 81:45e1359a5c69 54 return;
jengbrecht 0:563b70517320 55 }
jengbrecht 0:563b70517320 56 }
jengbrecht 0:563b70517320 57 }
jengbrecht 0:563b70517320 58