You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. Stream.h - base class for character-based streams.
  3. Copyright (c) 2010 David A. Mellis. All right reserved.
  4. This library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Lesser General Public
  6. License as published by the Free Software Foundation; either
  7. version 2.1 of the License, or (at your option) any later version.
  8. This library is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Lesser General Public License for more details.
  12. You should have received a copy of the GNU Lesser General Public
  13. License along with this library; if not, write to the Free Software
  14. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  15. */
  16. #ifndef Stream_h
  17. #define Stream_h
  18. #include <inttypes.h>
  19. #include "Print.h"
  20. class Stream : public Print
  21. {
  22. public:
  23. Stream() : _timeout(1000), read_error(0) {}
  24. virtual int available() = 0;
  25. virtual int read() = 0;
  26. virtual int peek() = 0;
  27. virtual void flush() = 0;
  28. void setTimeout(unsigned long timeout);
  29. bool find(char *target);
  30. bool find(uint8_t *target) { return find ((char *)target); }
  31. bool find(char *target, size_t length);
  32. bool find(uint8_t *target, size_t length) { return find ((char *)target, length); }
  33. bool findUntil(char *target, char *terminator);
  34. bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); }
  35. bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen);
  36. bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); }
  37. long parseInt();
  38. long parseInt(char skipChar);
  39. float parseFloat();
  40. float parseFloat(char skipChar);
  41. size_t readBytes(char *buffer, size_t length);
  42. size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); }
  43. size_t readBytesUntil(char terminator, char *buffer, size_t length);
  44. size_t readBytesUntil(char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); }
  45. String readString(size_t max = 120);
  46. String readStringUntil(char terminator, size_t max = 120);
  47. int getReadError() { return read_error; }
  48. void clearReadError() { setReadError(0); }
  49. protected:
  50. void setReadError(int err = 1) { read_error = err; }
  51. unsigned long _timeout;
  52. private:
  53. char read_error;
  54. int timedRead();
  55. int timedPeek();
  56. int peekNextDigit();
  57. };
  58. #endif