NuMaker Transfer data UART to Ethernet

Fork of Serial-to-Ethernet by Morgan Du

Committer:
SHLIU1@OANBE02333.nuvoton.com
Date:
Tue Mar 02 10:09:10 2021 +0800
Revision:
6:014b1a469aed
Support the both V5.X and V6.X for mbed-os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 1 /* mbed Microcontroller Library
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 2 * Copyright (c) 2006-2019 ARM Limited
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 3 * SPDX-License-Identifier: Apache-2.0
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 4 *
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 5 * Licensed under the Apache License, Version 2.0 (the "License");
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 6 * you may not use this file except in compliance with the License.
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 7 * You may obtain a copy of the License at
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 8 *
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 9 * http://www.apache.org/licenses/LICENSE-2.0
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 10 *
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 11 * Unless required by applicable law or agreed to in writing, software
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 12 * distributed under the License is distributed on an "AS IS" BASIS,
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 14 * See the License for the specific language governing permissions and
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 15 * limitations under the License.
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 16 */
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 17
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 18 #include "MyUnbufferedSerial.h"
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 19 #if (MBED_MAJOR_VERSION >= 6)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 20 #if DEVICE_SERIAL
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 21
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 22 #include "platform/mbed_critical.h"
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 23
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 24 namespace mbed {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 25
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 26 MyUnbufferedSerial::MyUnbufferedSerial(
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 27 PinName tx,
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 28 PinName rx,
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 29 int baud
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 30 ) : SerialBase(tx, rx, baud)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 31 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 32 // No lock needed in the constructor
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 33 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 34
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 35 MyUnbufferedSerial::MyUnbufferedSerial(
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 36 const serial_pinmap_t &static_pinmap, int baud
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 37 ) : SerialBase(static_pinmap, baud)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 38 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 39 // No lock needed in the constructor
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 40 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 41
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 42 ssize_t MyUnbufferedSerial::write(const void *buffer, size_t size)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 43 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 44 const unsigned char *buf = static_cast<const unsigned char *>(buffer);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 45
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 46 if (size == 0) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 47 return 0;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 48 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 49
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 50 bool lock_api = !core_util_in_critical_section();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 51
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 52 if (lock_api) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 53 lock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 54 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 55
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 56 for (size_t i = 0; i < size; i++) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 57 _base_putc(buf[i]);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 58 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 59
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 60 if (lock_api) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 61 unlock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 62 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 63
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 64 return size;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 65 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 66
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 67 ssize_t MyUnbufferedSerial::read(void *buffer, size_t size)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 68 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 69 unsigned char *buf = static_cast<unsigned char *>(buffer);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 70
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 71 if (size == 0) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 72 return 0;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 73 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 74
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 75 lock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 76
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 77 buf[0] = _base_getc();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 78
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 79 unlock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 80
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 81 return 1;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 82 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 83
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 84 short MyUnbufferedSerial::poll(short events) const
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 85 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 86 short revents = 0;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 87 if (
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 88 (events & POLLIN)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 89 && (const_cast <MyUnbufferedSerial *>(this))->SerialBase::readable()
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 90 ) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 91 revents |= POLLIN;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 92 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 93 if (
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 94 (events & POLLOUT)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 95 && (const_cast <MyUnbufferedSerial *>(this))->SerialBase::writeable()
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 96 ) {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 97 revents |= POLLOUT;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 98 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 99 return revents;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 100 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 101
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 102 int MyUnbufferedSerial::enable_input(bool enabled)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 103 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 104 SerialBase::enable_input(enabled);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 105
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 106 return 0;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 107 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 108
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 109 int MyUnbufferedSerial::enable_output(bool enabled)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 110 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 111 SerialBase::enable_output(enabled);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 112
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 113 return 0;
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 114 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 115
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 116 #if DEVICE_SERIAL_FC
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 117 void MyUnbufferedSerial::set_flow_control(Flow type, PinName flow1, PinName flow2)
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 118 {
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 119 lock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 120 SerialBase::set_flow_control(type, flow1, flow2);
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 121 unlock();
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 122 }
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 123 #endif // DEVICE_SERIAL_FC
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 124
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 125 } // namespace mbed
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 126
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 127 #endif // #if DEVICE_SERIAL
SHLIU1@OANBE02333.nuvoton.com 6:014b1a469aed 128 #endif // (MBED_MAJOR_VERSION >= 6 )