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@144:52cb5b6667cc, 2014-01-15 (annotated)
- Committer:
- jengbrecht
- Date:
- Wed Jan 15 19:24:38 2014 +0000
- Revision:
- 144:52cb5b6667cc
- Parent:
- 142:3b40320f3f73
- Child:
- 145:6a65bc3e1310
Fixed nagging serial bug, in MTSSerial and MTSSerialFlowControl. Made handleRead simpler and disabled RxIrq before all putc calls.
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 | 144:52cb5b6667cc | 46 | char byte = serial.getc(); |
jengbrecht | 144:52cb5b6667cc | 47 | if(rxBuffer.write(byte) != 1) { |
jengbrecht | 144:52cb5b6667cc | 48 | printf("[ERROR] Serial Rx Byte Dropped [%c][0x%02X]\r\n", byte, byte); |
jengbrecht | 81:45e1359a5c69 | 49 | } |
jengbrecht | 0:563b70517320 | 50 | } |
jengbrecht | 0:563b70517320 | 51 | |
jengbrecht | 0:563b70517320 | 52 | // Currently uses Non-Irq based blocking write calls |
jengbrecht | 0:563b70517320 | 53 | void MTSSerial::handleWrite() |
jengbrecht | 0:563b70517320 | 54 | { |
sgodinez | 86:186bbf974c7c | 55 | while(txBuffer.size() != 0) { |
sgodinez | 86:186bbf974c7c | 56 | if (serial.writeable()) { |
sgodinez | 17:2d7c4ea7491b | 57 | char byte; |
sgodinez | 86:186bbf974c7c | 58 | if(txBuffer.read(byte) == 1) { |
jengbrecht | 144:52cb5b6667cc | 59 | serial.attach(NULL, Serial::RxIrq); |
sgodinez | 86:186bbf974c7c | 60 | serial.putc(byte); |
jengbrecht | 144:52cb5b6667cc | 61 | serial.attach(this, &MTSSerialFlowControl::handleRead, Serial::RxIrq); |
sgodinez | 17:2d7c4ea7491b | 62 | } |
jengbrecht | 0:563b70517320 | 63 | } else { |
jengbrecht | 81:45e1359a5c69 | 64 | return; |
jengbrecht | 0:563b70517320 | 65 | } |
jengbrecht | 0:563b70517320 | 66 | } |
jengbrecht | 0:563b70517320 | 67 | } |
jengbrecht | 0:563b70517320 | 68 | |
kranjan | 141:571e0ef6c8dc | 69 |