From d34d29ab381e5d538e188814c6bf60fb609be826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Krac=C3=ADk?= Date: Sun, 28 Jun 2020 17:04:52 +0200 Subject: [PATCH 1/2] Added support for generic Stream class --- src/Adafruit_GPS.cpp | 23 +++++++++++++++++++++++ src/Adafruit_GPS.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/Adafruit_GPS.cpp b/src/Adafruit_GPS.cpp index ff44207..39f19b2 100644 --- a/src/Adafruit_GPS.cpp +++ b/src/Adafruit_GPS.cpp @@ -202,6 +202,17 @@ Adafruit_GPS::Adafruit_GPS(HardwareSerial *ser) { gpsHwSerial = ser; // ...override gpsHwSerial with value passed. } +/**************************************************************************/ +/*! + @brief Constructor when using Stream + @param data Pointer to a Stream object +*/ +/**************************************************************************/ +Adafruit_GPS::Adafruit_GPS(Stream *data) { + common_init(); // Set everything to common state, then... + gpsStream = data; // ...override gpsStream with value passed. +} + /**************************************************************************/ /*! @brief Constructor when using I2C @@ -246,6 +257,7 @@ void Adafruit_GPS::common_init(void) { gpsSwSerial = NULL; // Set both to NULL, then override correct #endif gpsHwSerial = NULL; // port pointer in corresponding constructor + gpsStream = NULL; // port pointer in corresponding constructor gpsI2C = NULL; gpsSPI = NULL; recvdflag = false; @@ -298,6 +310,9 @@ size_t Adafruit_GPS::available(void) { if (gpsHwSerial) { return gpsHwSerial->available(); } + if (gpsStream) { + return gpsStream->available(); + } if (gpsI2C || gpsSPI) { return 1; // I2C/SPI doesnt have 'availability' so always has a byte at // least to read! @@ -322,6 +337,9 @@ size_t Adafruit_GPS::write(uint8_t c) { if (gpsHwSerial) { return gpsHwSerial->write(c); } + if (gpsStream) { + return gpsStream->write(c); + } if (gpsI2C) { gpsI2C->beginTransmission(_i2caddr); if (gpsI2C->write(c) != 1) { @@ -379,6 +397,11 @@ char Adafruit_GPS::read(void) { return c; c = gpsHwSerial->read(); } + if (gpsStream) { + if (!gpsStream->available()) + return c; + c = gpsStream->read(); + } if (gpsI2C) { if (_buff_idx <= _buff_max) { c = _i2cbuffer[_buff_idx]; diff --git a/src/Adafruit_GPS.h b/src/Adafruit_GPS.h index bf190b4..56bd521 100644 --- a/src/Adafruit_GPS.h +++ b/src/Adafruit_GPS.h @@ -87,6 +87,7 @@ public: Adafruit_GPS(SoftwareSerial *ser); // Constructor when using SoftwareSerial #endif Adafruit_GPS(HardwareSerial *ser); // Constructor when using HardwareSerial + Adafruit_GPS(Stream *data); // Constructor when using Stream Adafruit_GPS(TwoWire *theWire); // Constructor when using I2C Adafruit_GPS(SPIClass *theSPI, int8_t cspin); // Constructor when using SPI Adafruit_GPS(); // Constructor for no communications, just data storage @@ -286,6 +287,7 @@ private: #endif bool noComms = false; HardwareSerial *gpsHwSerial; + Stream *gpsStream; TwoWire *gpsI2C; SPIClass *gpsSPI; int8_t gpsSPI_cs = -1; From a1f664dd0b33d6feca1b8f42cf3b979ae0a71f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Krac=C3=ADk?= Date: Sat, 20 Nov 2021 20:55:34 +0100 Subject: [PATCH 2/2] Make clang happy --- src/Adafruit_GPS.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Adafruit_GPS.cpp b/src/Adafruit_GPS.cpp index 39f19b2..22c11b1 100644 --- a/src/Adafruit_GPS.cpp +++ b/src/Adafruit_GPS.cpp @@ -209,8 +209,8 @@ Adafruit_GPS::Adafruit_GPS(HardwareSerial *ser) { */ /**************************************************************************/ Adafruit_GPS::Adafruit_GPS(Stream *data) { - common_init(); // Set everything to common state, then... - gpsStream = data; // ...override gpsStream with value passed. + common_init(); // Set everything to common state, then... + gpsStream = data; // ...override gpsStream with value passed. } /**************************************************************************/