From Ben Katz mbed-dev library. Removed unnecessary target files to reduce the overall size by a factor of 10 to make it easier to import into the online IDE.

Dependents:   motor_driver motor_driver_screaming_fix

Committer:
saloutos
Date:
Thu Nov 26 04:08:56 2020 +0000
Revision:
0:083111ae2a11
first commit of leaned mbed dev lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saloutos 0:083111ae2a11 1 /* mbed Microcontroller Library
saloutos 0:083111ae2a11 2 * Copyright (c) 2006-2013 ARM Limited
saloutos 0:083111ae2a11 3 *
saloutos 0:083111ae2a11 4 * Licensed under the Apache License, Version 2.0 (the "License");
saloutos 0:083111ae2a11 5 * you may not use this file except in compliance with the License.
saloutos 0:083111ae2a11 6 * You may obtain a copy of the License at
saloutos 0:083111ae2a11 7 *
saloutos 0:083111ae2a11 8 * http://www.apache.org/licenses/LICENSE-2.0
saloutos 0:083111ae2a11 9 *
saloutos 0:083111ae2a11 10 * Unless required by applicable law or agreed to in writing, software
saloutos 0:083111ae2a11 11 * distributed under the License is distributed on an "AS IS" BASIS,
saloutos 0:083111ae2a11 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
saloutos 0:083111ae2a11 13 * See the License for the specific language governing permissions and
saloutos 0:083111ae2a11 14 * limitations under the License.
saloutos 0:083111ae2a11 15 */
saloutos 0:083111ae2a11 16 #include "drivers/RawSerial.h"
saloutos 0:083111ae2a11 17 #include "platform/mbed_wait_api.h"
saloutos 0:083111ae2a11 18 #include <stdio.h>
saloutos 0:083111ae2a11 19 #include <cstdarg>
saloutos 0:083111ae2a11 20
saloutos 0:083111ae2a11 21
saloutos 0:083111ae2a11 22 #if DEVICE_SERIAL
saloutos 0:083111ae2a11 23
saloutos 0:083111ae2a11 24 #define STRING_STACK_LIMIT 120
saloutos 0:083111ae2a11 25
saloutos 0:083111ae2a11 26 namespace mbed {
saloutos 0:083111ae2a11 27
saloutos 0:083111ae2a11 28 RawSerial::RawSerial(PinName tx, PinName rx, int baud) : SerialBase(tx, rx, baud) {
saloutos 0:083111ae2a11 29 // No lock needed in the constructor
saloutos 0:083111ae2a11 30 }
saloutos 0:083111ae2a11 31
saloutos 0:083111ae2a11 32 int RawSerial::getc() {
saloutos 0:083111ae2a11 33 lock();
saloutos 0:083111ae2a11 34 int ret = _base_getc();
saloutos 0:083111ae2a11 35 unlock();
saloutos 0:083111ae2a11 36 return ret;
saloutos 0:083111ae2a11 37 }
saloutos 0:083111ae2a11 38
saloutos 0:083111ae2a11 39 int RawSerial::putc(int c) {
saloutos 0:083111ae2a11 40 lock();
saloutos 0:083111ae2a11 41 int ret = _base_putc(c);
saloutos 0:083111ae2a11 42 unlock();
saloutos 0:083111ae2a11 43 return ret;
saloutos 0:083111ae2a11 44 }
saloutos 0:083111ae2a11 45
saloutos 0:083111ae2a11 46 int RawSerial::puts(const char *str) {
saloutos 0:083111ae2a11 47 lock();
saloutos 0:083111ae2a11 48 while (*str)
saloutos 0:083111ae2a11 49 putc(*str ++);
saloutos 0:083111ae2a11 50 unlock();
saloutos 0:083111ae2a11 51 return 0;
saloutos 0:083111ae2a11 52 }
saloutos 0:083111ae2a11 53
saloutos 0:083111ae2a11 54 // Experimental support for printf in RawSerial. No Stream inheritance
saloutos 0:083111ae2a11 55 // means we can't call printf() directly, so we use sprintf() instead.
saloutos 0:083111ae2a11 56 // We only call malloc() for the sprintf() buffer if the buffer
saloutos 0:083111ae2a11 57 // length is above a certain threshold, otherwise we use just the stack.
saloutos 0:083111ae2a11 58 int RawSerial::printf(const char *format, ...) {
saloutos 0:083111ae2a11 59 lock();
saloutos 0:083111ae2a11 60 std::va_list arg;
saloutos 0:083111ae2a11 61 va_start(arg, format);
saloutos 0:083111ae2a11 62 // ARMCC microlib does not properly handle a size of 0.
saloutos 0:083111ae2a11 63 // As a workaround supply a dummy buffer with a size of 1.
saloutos 0:083111ae2a11 64 char dummy_buf[1];
saloutos 0:083111ae2a11 65 int len = vsnprintf(dummy_buf, sizeof(dummy_buf), format, arg);
saloutos 0:083111ae2a11 66 if (len < STRING_STACK_LIMIT) {
saloutos 0:083111ae2a11 67 char temp[STRING_STACK_LIMIT];
saloutos 0:083111ae2a11 68 vsprintf(temp, format, arg);
saloutos 0:083111ae2a11 69 puts(temp);
saloutos 0:083111ae2a11 70 } else {
saloutos 0:083111ae2a11 71 char *temp = new char[len + 1];
saloutos 0:083111ae2a11 72 vsprintf(temp, format, arg);
saloutos 0:083111ae2a11 73 puts(temp);
saloutos 0:083111ae2a11 74 delete[] temp;
saloutos 0:083111ae2a11 75 }
saloutos 0:083111ae2a11 76 va_end(arg);
saloutos 0:083111ae2a11 77 unlock();
saloutos 0:083111ae2a11 78 return len;
saloutos 0:083111ae2a11 79 }
saloutos 0:083111ae2a11 80
saloutos 0:083111ae2a11 81 /** Acquire exclusive access to this serial port
saloutos 0:083111ae2a11 82 */
saloutos 0:083111ae2a11 83 void RawSerial::lock() {
saloutos 0:083111ae2a11 84 // No lock used - external synchronization required
saloutos 0:083111ae2a11 85 }
saloutos 0:083111ae2a11 86
saloutos 0:083111ae2a11 87 /** Release exclusive access to this serial port
saloutos 0:083111ae2a11 88 */
saloutos 0:083111ae2a11 89 void RawSerial::unlock() {
saloutos 0:083111ae2a11 90 // No lock used - external synchronization required
saloutos 0:083111ae2a11 91 }
saloutos 0:083111ae2a11 92
saloutos 0:083111ae2a11 93 } // namespace mbed
saloutos 0:083111ae2a11 94
saloutos 0:083111ae2a11 95 #endif