@@ -202,6 +202,17 @@ Adafruit_GPS::Adafruit_GPS(HardwareSerial *ser) {
202
202
gpsHwSerial = ser; // ...override gpsHwSerial with value passed.
203
203
}
204
204
205
+ /* *************************************************************************/
206
+ /* !
207
+ @brief Constructor when using Stream
208
+ @param data Pointer to a Stream object
209
+ */
210
+ /* *************************************************************************/
211
+ Adafruit_GPS::Adafruit_GPS (Stream *data) {
212
+ common_init (); // Set everything to common state, then...
213
+ gpsStream = data; // ...override gpsStream with value passed.
214
+ }
215
+
205
216
/* *************************************************************************/
206
217
/* !
207
218
@brief Constructor when using I2C
@@ -246,6 +257,7 @@ void Adafruit_GPS::common_init(void) {
246
257
gpsSwSerial = NULL ; // Set both to NULL, then override correct
247
258
#endif
248
259
gpsHwSerial = NULL ; // port pointer in corresponding constructor
260
+ gpsStream = NULL ; // port pointer in corresponding constructor
249
261
gpsI2C = NULL ;
250
262
gpsSPI = NULL ;
251
263
recvdflag = false ;
@@ -298,6 +310,9 @@ size_t Adafruit_GPS::available(void) {
298
310
if (gpsHwSerial) {
299
311
return gpsHwSerial->available ();
300
312
}
313
+ if (gpsStream) {
314
+ return gpsStream->available ();
315
+ }
301
316
if (gpsI2C || gpsSPI) {
302
317
return 1 ; // I2C/SPI doesnt have 'availability' so always has a byte at
303
318
// least to read!
@@ -322,6 +337,9 @@ size_t Adafruit_GPS::write(uint8_t c) {
322
337
if (gpsHwSerial) {
323
338
return gpsHwSerial->write (c);
324
339
}
340
+ if (gpsStream) {
341
+ return gpsStream->write (c);
342
+ }
325
343
if (gpsI2C) {
326
344
gpsI2C->beginTransmission (_i2caddr);
327
345
if (gpsI2C->write (c) != 1 ) {
@@ -379,6 +397,11 @@ char Adafruit_GPS::read(void) {
379
397
return c;
380
398
c = gpsHwSerial->read ();
381
399
}
400
+ if (gpsStream) {
401
+ if (!gpsStream->available ())
402
+ return c;
403
+ c = gpsStream->read ();
404
+ }
382
405
if (gpsI2C) {
383
406
if (_buff_idx <= _buff_max) {
384
407
c = _i2cbuffer[_buff_idx];
0 commit comments