Serial port handler class that allows sharing data from the serial ports via message queues objects. Each instance of this class is intended to handle a serial port in the system and is suitable for slow serial protocols.

Dependents:   Nucleo_modbus_protocol_test

Committer:
gabrielrivas
Date:
Mon Jan 19 15:44:04 2015 +0000
Revision:
2:aa72cb66762f
Parent:
1:a891da6966b7
Documentation added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gabrielrivas 1:a891da6966b7 1 /** Serial port handler.
gabrielrivas 1:a891da6966b7 2 * Copyright (c) 2015 Gabriel Rivas
gabrielrivas 1:a891da6966b7 3 *
gabrielrivas 1:a891da6966b7 4 * Licensed under the Apache License, Version 2.0 (the "License");
gabrielrivas 1:a891da6966b7 5 * you may not use this file except in compliance with the License.
gabrielrivas 1:a891da6966b7 6 * You may obtain a copy of the License at
gabrielrivas 1:a891da6966b7 7 *
gabrielrivas 1:a891da6966b7 8 * http://www.apache.org/licenses/LICENSE-2.0
gabrielrivas 1:a891da6966b7 9 *
gabrielrivas 1:a891da6966b7 10 * Unless required by applicable law or agreed to in writing, software
gabrielrivas 1:a891da6966b7 11 * distributed under the License is distributed on an "AS IS" BASIS,
gabrielrivas 1:a891da6966b7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
gabrielrivas 1:a891da6966b7 13 * See the License for the specific language governing permissions and
gabrielrivas 1:a891da6966b7 14 * limitations under the License.
gabrielrivas 1:a891da6966b7 15 */
gabrielrivas 1:a891da6966b7 16
gabrielrivas 0:f66dd1c93477 17 #include "SerialPortHandler.h"
gabrielrivas 0:f66dd1c93477 18
gabrielrivas 0:f66dd1c93477 19 SerialPortHandler::SerialPortHandler(Serial* ps, MessageQueue<uint8_t>* txQueue, MessageQueue<uint8_t>* rxQueue)
gabrielrivas 0:f66dd1c93477 20 {
gabrielrivas 2:aa72cb66762f 21 //assert(ps != NULL);
gabrielrivas 0:f66dd1c93477 22 m_ps = ps;
gabrielrivas 2:aa72cb66762f 23 //assert(txQueue != NULL);
gabrielrivas 0:f66dd1c93477 24 m_txQueue = txQueue;
gabrielrivas 2:aa72cb66762f 25 //assert(rxQueue != NULL);
gabrielrivas 0:f66dd1c93477 26 m_rxQueue = rxQueue;
gabrielrivas 0:f66dd1c93477 27 }
gabrielrivas 0:f66dd1c93477 28
gabrielrivas 0:f66dd1c93477 29 SerialPortHandler::~SerialPortHandler()
gabrielrivas 0:f66dd1c93477 30 {
gabrielrivas 0:f66dd1c93477 31 delete m_ps;
gabrielrivas 0:f66dd1c93477 32 delete m_txQueue;
gabrielrivas 0:f66dd1c93477 33 delete m_rxQueue;
gabrielrivas 0:f66dd1c93477 34 }
gabrielrivas 0:f66dd1c93477 35
gabrielrivas 0:f66dd1c93477 36 void SerialPortHandler::transmitPacket()
gabrielrivas 0:f66dd1c93477 37 {
gabrielrivas 0:f66dd1c93477 38 uint32_t count = m_txQueue->getWriteIndex();
gabrielrivas 0:f66dd1c93477 39 uint8_t data;
gabrielrivas 0:f66dd1c93477 40
gabrielrivas 0:f66dd1c93477 41 for (uint32_t i = 0; i < count; i++) {
gabrielrivas 0:f66dd1c93477 42 data = m_txQueue->read();
gabrielrivas 0:f66dd1c93477 43
gabrielrivas 0:f66dd1c93477 44 m_ps->putc(data);
gabrielrivas 0:f66dd1c93477 45 }
gabrielrivas 0:f66dd1c93477 46 }
gabrielrivas 0:f66dd1c93477 47
gabrielrivas 0:f66dd1c93477 48 void SerialPortHandler::receivePacket()
gabrielrivas 0:f66dd1c93477 49 {
gabrielrivas 0:f66dd1c93477 50 uint8_t rxreg = m_ps->getc();
gabrielrivas 0:f66dd1c93477 51 m_rxQueue->write(rxreg);
gabrielrivas 0:f66dd1c93477 52 }