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
SerialPortHandler.cpp@2:aa72cb66762f, 2015-01-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |