123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /**
- * Copyright (c) 2011-2021 Bill Greiman
- * This file is part of the SdFat library for SD memory cards.
- *
- * MIT License
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
- #ifndef ArduinoStream_h
- #define ArduinoStream_h
- /**
- * \file
- * \brief ArduinoInStream and ArduinoOutStream classes
- */
- #include "bufstream.h"
- //==============================================================================
- /**
- * \class ArduinoInStream
- * \brief Input stream for Arduino Stream objects
- */
- class ArduinoInStream : public ibufstream {
- public:
- /**
- * Constructor
- * \param[in] hws hardware stream
- * \param[in] buf buffer for input line
- * \param[in] size size of input buffer
- */
- ArduinoInStream(Stream &hws, char* buf, size_t size) {
- m_hw = &hws;
- m_line = buf;
- m_size = size;
- }
- /** read a line. */
- void readline() {
- size_t i = 0;
- uint32_t t;
- m_line[0] = '\0';
- while (!m_hw->available()) {
- yield();
- }
- while (1) {
- t = millis();
- while (!m_hw->available()) {
- if ((millis() - t) > 10) {
- goto done;
- }
- }
- if (i >= (m_size - 1)) {
- setstate(failbit);
- return;
- }
- m_line[i++] = m_hw->read();
- m_line[i] = '\0';
- }
- done:
- init(m_line);
- }
- protected:
- /** Internal - do not use.
- * \param[in] off
- * \param[in] way
- * \return true/false.
- */
- bool seekoff(off_type off, seekdir way) {
- (void)off;
- (void)way;
- return false;
- }
- /** Internal - do not use.
- * \param[in] pos
- * \return true/false.
- */
- bool seekpos(pos_type pos) {
- (void)pos;
- return false;
- }
- private:
- char *m_line;
- size_t m_size;
- Stream* m_hw;
- };
- //==============================================================================
- /**
- * \class ArduinoOutStream
- * \brief Output stream for Arduino Print objects
- */
- class ArduinoOutStream : public ostream {
- public:
- /** constructor
- *
- * \param[in] pr Print object for this ArduinoOutStream.
- */
- explicit ArduinoOutStream(print_t& pr) : m_pr(&pr) {}
- protected:
- /// @cond SHOW_PROTECTED
- /**
- * Internal do not use
- * \param[in] c
- */
- void putch(char c) {
- if (c == '\n') {
- m_pr->write('\r');
- }
- m_pr->write(c);
- }
- void putstr(const char* str) {
- m_pr->write(str);
- }
- bool seekoff(off_type off, seekdir way) {
- (void)off;
- (void)way;
- return false;
- }
- bool seekpos(pos_type pos) {
- (void)pos;
- return false;
- }
- bool sync() {
- return true;
- }
- pos_type tellpos() {
- return 0;
- }
- /// @endcond
- private:
- ArduinoOutStream() {}
- print_t* m_pr;
- };
- #endif // ArduinoStream_h
|