@@ -414,49 +414,53 @@ bool DallasTemperature::isConversionComplete() {
414414}
415415
416416// sends command for all devices on the bus to perform a temperature conversion
417- void DallasTemperature::requestTemperatures () {
417+ DallasTemperature::request_t DallasTemperature::requestTemperatures () {
418+ DallasTemperature::request_t req = {};
419+ req.result = true ;
418420
419421 _wire->reset ();
420422 _wire->skip ();
421423 _wire->write (STARTCONVO, parasite);
422424
423425 // ASYNC mode?
426+ req.timestamp = millis ();
424427 if (!waitForConversion)
425- return ;
426- blockTillConversionComplete (bitResolution);
427-
428+ return req ;
429+ blockTillConversionComplete (bitResolution, req. timestamp );
430+ return req;
428431}
429432
430433// sends command for one device to perform a temperature by address
431434// returns FALSE if device is disconnected
432435// returns TRUE otherwise
433- bool DallasTemperature::requestTemperaturesByAddress (const uint8_t * deviceAddress) {
434-
436+ DallasTemperature:: request_t DallasTemperature::requestTemperaturesByAddress (const uint8_t * deviceAddress) {
437+ DallasTemperature:: request_t req = {};
435438 uint8_t bitResolution = getResolution (deviceAddress);
436439 if (bitResolution == 0 ) {
437- return false ; // Device disconnected
440+ req.result = false ;
441+ return req; // Device disconnected
438442 }
439443
440444 _wire->reset ();
441445 _wire->select (deviceAddress);
442446 _wire->write (STARTCONVO, parasite);
443447
448+ req.timestamp = millis ();
444449 // ASYNC mode?
450+ req.result = true ;
445451 if (!waitForConversion)
446- return true ;
452+ return req ;
447453
448- blockTillConversionComplete (bitResolution);
454+ blockTillConversionComplete (bitResolution, req. timestamp );
449455
450- return true ;
456+ return req ;
451457
452458}
453459
454460// Continue to check if the IC has responded with a temperature
455- void DallasTemperature::blockTillConversionComplete (uint8_t bitResolution) {
456-
461+ void DallasTemperature::blockTillConversionComplete (uint8_t bitResolution, unsigned long start) {
457462 if (checkForConversion && !parasite) {
458- unsigned long start = millis ();
459- while (!isConversionComplete () && (millis () - start < MAX_CONVERSION_TIMEOUT ))
463+ while (!isConversionComplete () && (millis () - start < MAX_CONVERSION_TIMEOUT))
460464 yield ();
461465 } else {
462466 unsigned long delms = millisToWaitForConversion (bitResolution);
@@ -467,6 +471,18 @@ void DallasTemperature::blockTillConversionComplete(uint8_t bitResolution) {
467471
468472}
469473
474+ // Continue to check if the IC has responded with a temperature
475+ void DallasTemperature::blockTillConversionComplete (uint8_t bitResolution) {
476+ unsigned long start = millis ();
477+ blockTillConversionComplete (bitResolution, start);
478+ }
479+
480+ // Continue to check if the IC has responded with a temperature
481+ void DallasTemperature::blockTillConversionComplete (uint8_t bitResolution, DallasTemperature::request_t req) {
482+ if (req.result )
483+ blockTillConversionComplete (bitResolution, req.timestamp );
484+ }
485+
470486// returns number of milliseconds to wait till conversion is complete (based on IC datasheet)
471487uint16_t DallasTemperature::millisToWaitForConversion (uint8_t bitResolution) {
472488
@@ -587,7 +603,7 @@ void DallasTemperature::deactivateExternalPullup() {
587603}
588604
589605// sends command for one device to perform a temp conversion by index
590- bool DallasTemperature::requestTemperaturesByIndex (uint8_t deviceIndex) {
606+ DallasTemperature:: request_t DallasTemperature::requestTemperaturesByIndex (uint8_t deviceIndex) {
591607
592608 DeviceAddress deviceAddress;
593609 getAddress (deviceAddress, deviceIndex);
0 commit comments