|
- /* Arduino SdFat Library
- * Copyright (C) 2012 by William Greiman
- *
- * This file is part of the Arduino SdFat Library
- *
- * This Library is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with the Arduino SdFat Library. If not, see
- * <http://www.gnu.org/licenses/>.
- */
- #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()) {}
-
- 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) {return false;}
- /** Internal - do not use.
- * \param[in] pos
- * \return true/false.
- */
- bool seekpos(pos_type 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& 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) {return false;}
- bool seekpos(pos_type pos) {return false;}
- bool sync() {return true;}
- pos_type tellpos() {return 0;}
- /// @endcond
- private:
- ArduinoOutStream() {}
- Print* m_pr;
- };
- #endif // ArduinoStream_h
|