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
io/MTSSerial.cpp@141:571e0ef6c8dc, 2014-01-04 (annotated)
- Committer:
- kranjan
- Date:
- Sat Jan 04 05:28:45 2014 +0000
- Revision:
- 141:571e0ef6c8dc
- Parent:
- 140:bf0c8288eb78
- Child:
- 142:3b40320f3f73
Added licensing header to all files in the library
Who changed what in which revision?
User | Revision | Line number | New 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) { |
jengbrecht | 140:bf0c8288eb78 | 51 | serial.attach(NULL, Serial::RxIrq); |
jengbrecht | 140:bf0c8288eb78 | 52 | serial.attach(this, &MTSSerial::handleRead, Serial::RxIrq); |
jengbrecht | 140:bf0c8288eb78 | 53 | printf("[INFO] Reset the RxIrq.\n\r"); |
jengbrecht | 140:bf0c8288eb78 | 54 | } |
jengbrecht | 129:3aa470877c59 | 55 | return; |
jengbrecht | 129:3aa470877c59 | 56 | } |
jengbrecht | 81:45e1359a5c69 | 57 | } |
jengbrecht | 0:563b70517320 | 58 | } |
jengbrecht | 0:563b70517320 | 59 | |
jengbrecht | 0:563b70517320 | 60 | // Currently uses Non-Irq based blocking write calls |
jengbrecht | 0:563b70517320 | 61 | void MTSSerial::handleWrite() |
jengbrecht | 0:563b70517320 | 62 | { |
sgodinez | 86:186bbf974c7c | 63 | while(txBuffer.size() != 0) { |
sgodinez | 86:186bbf974c7c | 64 | if (serial.writeable()) { |
sgodinez | 17:2d7c4ea7491b | 65 | char byte; |
sgodinez | 86:186bbf974c7c | 66 | if(txBuffer.read(byte) == 1) { |
sgodinez | 86:186bbf974c7c | 67 | serial.putc(byte); |
sgodinez | 17:2d7c4ea7491b | 68 | } |
jengbrecht | 0:563b70517320 | 69 | } else { |
jengbrecht | 81:45e1359a5c69 | 70 | return; |
jengbrecht | 0:563b70517320 | 71 | } |
jengbrecht | 0:563b70517320 | 72 | } |
jengbrecht | 0:563b70517320 | 73 | } |
jengbrecht | 0:563b70517320 | 74 | |
kranjan | 141:571e0ef6c8dc | 75 |