From 017ac159def18f9d9ec8ae7745f8cad7c9d14014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rasmussen?= Date: Tue, 26 Jul 2022 21:28:13 +0200 Subject: [PATCH] Check DS18B20 bulk read status before reading --- pkg/temperature/ds18b20.go | 54 ++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/pkg/temperature/ds18b20.go b/pkg/temperature/ds18b20.go index 1dc1903..8b8aa48 100644 --- a/pkg/temperature/ds18b20.go +++ b/pkg/temperature/ds18b20.go @@ -78,37 +78,13 @@ func PollSensors(ctx context.Context, wg *sync.WaitGroup, readingInterval time.D work_loop: select { case <-ticker.C: - start := time.Now() - - if accErrTrigger > 60 { - log.Fatal("Thermal bulk read failed 60 times in a row -- terminating") - } - - // Trigger a bulk read to start conversion on all sensors. - if err := triggerBulkRead(); err != nil { - accErrTrigger++ - hub.CaptureException(err) - log.Print(err) - break - } - - accErrTrigger = 0 - - // Ensure that we wait for sensors to convert data. - deltaSleep := sensorConversionTime - time.Since(start) - if deltaSleep > 0 { - // Wait for sensors to convert data. - time.Sleep(deltaSleep) - } - - // Poll bus state poll_bus: state, err := pollBusState() if err != nil { accErrTrigger++ hub.CaptureException(err) log.Print(err) - break work_loop + break } switch state { @@ -116,10 +92,36 @@ func PollSensors(ctx context.Context, wg *sync.WaitGroup, readingInterval time.D time.Sleep(busPollDelay) goto poll_bus - case BulkReadIdle, BulkReadReady: + case BulkReadIdle: + start := time.Now() + + // Trigger a bulk read to start conversion on all sensors. + if err := triggerBulkRead(); err != nil { + accErrTrigger++ + hub.CaptureException(err) + log.Print(err) + break work_loop + } + + accErrTrigger = 0 + + // Ensure that we wait for sensors to convert data. + deltaSleep := sensorConversionTime - time.Since(start) + if deltaSleep > 0 { + // Wait for sensors to convert data. + time.Sleep(deltaSleep) + } + + goto poll_bus + + case BulkReadReady: readSensors(hub) } + if accErrTrigger > 60 { + log.Fatal("Thermal bulk read failed 60 times in a row -- terminating") + } + case c := <-ConfigUpdate: configure(c)