diff --git a/libraries/AP_HAL/utility/BetterStream.h b/libraries/AP_HAL/utility/BetterStream.h new file mode 100644 index 0000000000..454f89f724 --- /dev/null +++ b/libraries/AP_HAL/utility/BetterStream.h @@ -0,0 +1,38 @@ +// +// Copyright (c) 2010 Michael Smith. All rights reserved. +// +// This is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the +// Free Software Foundation; either version 2.1 of the License, or (at +// your option) any later version. +// + +#ifndef __AP_HAL_UTILITY_BETTERSTREAM_H__ +#define __AP_HAL_UTILITY_BETTERSTREAM_H__ + + +class AP_HAL::BetterStream : public AP_HAL::Stream { +public: + BetterStream(void) {} + + // Stream extensions + void print_P(const prog_char_t *); + void println_P(const prog_char_t *); + void printf(const char *, ...) + __attribute__ ((format(__printf__, 2, 3))); + void _printf_P(const prog_char *, ...) + __attribute__ ((format(__printf__, 2, 3))); + + virtual int txspace(void); + +#define printf_P(fmt, ...) _printf_P((const prog_char *)fmt, ## __VA_ARGS__) + +private: + void _vprintf(unsigned char, const char *, va_list) + __attribute__ ((format(__printf__, 3, 0))); + + +}; + +#endif // __AP_HAL_UTILITY_BETTERSTREAM_H__ + diff --git a/libraries/AP_HAL/utility/Print.h b/libraries/AP_HAL/utility/Print.h new file mode 100644 index 0000000000..06d1cd9a30 --- /dev/null +++ b/libraries/AP_HAL/utility/Print.h @@ -0,0 +1,73 @@ +/* + Print.h - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef __AP_HAL_UTILITY_PRINT_H__ +#define __AP_HAL_UTILITY_PRINT_H__ + +#include +#include + +/** + * This is the Arduino (v1.0) Print class, with some changes: + * - Removed methods for class String or _FlashStringHelper + * - printFloat takes a float, not a double. (double === float on AVR, but + * not on other platforms) + * - Integers use stdint names + */ + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 + +class AP_HAL::Print { + private: + size_t printNumber(unsigned long, uint8_t); + size_t printFloat(float, uint8_t); + public: + Print() {} + + virtual size_t write(uint8_t) = 0; + + size_t write(const char *str) { return write((const uint8_t *)str, strlen(str)); } + virtual size_t write(const uint8_t *buffer, size_t size); + + size_t print(const char[]); + size_t print(char); + size_t print(unsigned char, int = DEC); + size_t print(int, int = DEC); + size_t print(unsigned int, int = DEC); + size_t print(long, int = DEC); + size_t print(unsigned long, int = DEC); + size_t print(double, int = 2); + + size_t println(const char[]); + size_t println(char); + size_t println(unsigned char, int = DEC); + size_t println(int, int = DEC); + size_t println(unsigned int, int = DEC); + size_t println(long, int = DEC); + size_t println(unsigned long, int = DEC); + size_t println(double, int = 2); + size_t println(void); + +}; + +#endif // __AP_HAL_UTILITY_PRINT_H__ + diff --git a/libraries/AP_HAL/utility/Stream.h b/libraries/AP_HAL/utility/Stream.h new file mode 100644 index 0000000000..63d401c822 --- /dev/null +++ b/libraries/AP_HAL/utility/Stream.h @@ -0,0 +1,20 @@ + +#ifndef __AP_HAL_UTILITY_STREAM_H__ +#define __AP_HAL_UTILITY_STREAM_H__ + +#include "Print.h" + +/* A simple Stream library modeled after the bits we actually use + * from Arduino Stream */ + +class AP_HAL::Stream : public AP_HAL::Print { +public: + virtual int available() = 0; + /* return value for read() and peek() : + * -1 if nothing available, uint8_t value otherwise. */ + virtual int read() = 0; + virtual int peek() = 0; +}; + +#endif // __AP_HAL_UTILITY_STREAM_H__ +