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:
sam_grove
Date:
Sat Jan 04 21:09:13 2014 +0000
Revision:
142:3b40320f3f73
Parent:
141:571e0ef6c8dc
Child:
144:52cb5b6667cc
Hack serial comm error to keep alive

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kranjan 141:571e0ef6c8dc 1 /* Universal Socket Modem Interface Library
kranjan 141:571e0ef6c8dc 2 * Copyright (c) 2013 Multi-Tech Systems
kranjan 141:571e0ef6c8dc 3 *
kranjan 141:571e0ef6c8dc 4 * Licensed under the Apache License, Version 2.0 (the "License");
kranjan 141:571e0ef6c8dc 5 * you may not use this file except in compliance with the License.
kranjan 141:571e0ef6c8dc 6 * You may obtain a copy of the License at
kranjan 141:571e0ef6c8dc 7 *
kranjan 141:571e0ef6c8dc 8 * http://www.apache.org/licenses/LICENSE-2.0
kranjan 141:571e0ef6c8dc 9 *
kranjan 141:571e0ef6c8dc 10 * Unless required by applicable law or agreed to in writing, software
kranjan 141:571e0ef6c8dc 11 * distributed under the License is distributed on an "AS IS" BASIS,
kranjan 141:571e0ef6c8dc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kranjan 141:571e0ef6c8dc 13 * See the License for the specific language governing permissions and
kranjan 141:571e0ef6c8dc 14 * limitations under the License.
kranjan 141:571e0ef6c8dc 15 */
kranjan 141:571e0ef6c8dc 16
jengbrecht 0:563b70517320 17 #include "MTSSerial.h"
jengbrecht 0:563b70517320 18
mfiore 39:6e94520a3217 19 using namespace mts;
mfiore 39:6e94520a3217 20
jengbrecht 140:bf0c8288eb78 21 MTSSerial::MTSSerial(PinName TXD, PinName RXD, int txBufferSize, int rxBufferSize)
jengbrecht 140:bf0c8288eb78 22 : MTSBufferedIO(txBufferSize, rxBufferSize)
jengbrecht 140:bf0c8288eb78 23 , serial(TXD,RXD)
jengbrecht 0:563b70517320 24 {
sgodinez 86:186bbf974c7c 25 serial.attach(this, &MTSSerial::handleRead, Serial::RxIrq);
sgodinez 86:186bbf974c7c 26 //serial.attach(this, &MTSSerial::handleWrite, Serial::TxIrq);
jengbrecht 0:563b70517320 27 }
jengbrecht 0:563b70517320 28
jengbrecht 0:563b70517320 29 MTSSerial::~MTSSerial()
jengbrecht 0:563b70517320 30 {
sgodinez 86:186bbf974c7c 31
jengbrecht 0:563b70517320 32 }
jengbrecht 0:563b70517320 33
jengbrecht 0:563b70517320 34 void MTSSerial::baud(int baudrate)
jengbrecht 0:563b70517320 35 {
sgodinez 86:186bbf974c7c 36 serial.baud(baudrate);
jengbrecht 0:563b70517320 37 }
jengbrecht 0:563b70517320 38
jengbrecht 45:40745c2036cf 39 void MTSSerial::format(int bits, SerialBase::Parity parity, int stop_bits)
jengbrecht 0:563b70517320 40 {
sgodinez 86:186bbf974c7c 41 serial.format(bits, parity, stop_bits);
jengbrecht 0:563b70517320 42 }
jengbrecht 45:40745c2036cf 43
jengbrecht 0:563b70517320 44 void MTSSerial::handleRead()
jengbrecht 0:563b70517320 45 {
jengbrecht 129:3aa470877c59 46 while (serial.readable()) {
jengbrecht 129:3aa470877c59 47 char byte = serial.getc();
jengbrecht 129:3aa470877c59 48 if(rxBuffer.write(byte) != 1) {
jengbrecht 129:3aa470877c59 49 printf("[ERROR] Serial Rx Byte Dropped [%c][0x%02X]\r\n", byte, byte);
jengbrecht 140:bf0c8288eb78 50 if(byte == 0xFF) {
sam_grove 142:3b40320f3f73 51 // hack so we dont hang - fix later
sam_grove 142:3b40320f3f73 52 puts("[ERR] Comm errors, must reboot");
sam_grove 142:3b40320f3f73 53 fflush(stdout);
sam_grove 142:3b40320f3f73 54 NVIC_SystemReset();
jengbrecht 140:bf0c8288eb78 55 }
jengbrecht 129:3aa470877c59 56 return;
jengbrecht 129:3aa470877c59 57 }
jengbrecht 81:45e1359a5c69 58 }
jengbrecht 0:563b70517320 59 }
jengbrecht 0:563b70517320 60
jengbrecht 0:563b70517320 61 // Currently uses Non-Irq based blocking write calls
jengbrecht 0:563b70517320 62 void MTSSerial::handleWrite()
jengbrecht 0:563b70517320 63 {
sgodinez 86:186bbf974c7c 64 while(txBuffer.size() != 0) {
sgodinez 86:186bbf974c7c 65 if (serial.writeable()) {
sgodinez 17:2d7c4ea7491b 66 char byte;
sgodinez 86:186bbf974c7c 67 if(txBuffer.read(byte) == 1) {
sgodinez 86:186bbf974c7c 68 serial.putc(byte);
sgodinez 17:2d7c4ea7491b 69 }
jengbrecht 0:563b70517320 70 } else {
jengbrecht 81:45e1359a5c69 71 return;
jengbrecht 0:563b70517320 72 }
jengbrecht 0:563b70517320 73 }
jengbrecht 0:563b70517320 74 }
jengbrecht 0:563b70517320 75
kranjan 141:571e0ef6c8dc 76