@@ -108,7 +108,7 @@ func (d *DS18B20Driver) Temperature() (float32, error) {
108108 d .mutex .Lock ()
109109 defer d .mutex .Unlock ()
110110
111- val , err := d .connection . ReadInteger (temperatureCommand )
111+ val , err := d .readInteger (temperatureCommand )
112112 if err != nil {
113113 return 0 , err
114114 }
@@ -121,7 +121,7 @@ func (d *DS18B20Driver) Resolution() (uint8, error) {
121121 d .mutex .Lock ()
122122 defer d .mutex .Unlock ()
123123
124- val , err := d .connection . ReadInteger (resolutionCommand )
124+ val , err := d .readInteger (resolutionCommand )
125125 if err != nil {
126126 return 0 , err
127127 }
@@ -138,7 +138,7 @@ func (d *DS18B20Driver) IsExternalPowered() (bool, error) {
138138 d .mutex .Lock ()
139139 defer d .mutex .Unlock ()
140140
141- val , err := d .connection . ReadInteger (extPowerCommand )
141+ val , err := d .readInteger (extPowerCommand )
142142 if err != nil {
143143 return false , err
144144 }
@@ -151,7 +151,7 @@ func (d *DS18B20Driver) ConversionTime() (uint16, error) {
151151 d .mutex .Lock ()
152152 defer d .mutex .Unlock ()
153153
154- val , err := d .connection . ReadInteger (convTimeCommand )
154+ val , err := d .readInteger (convTimeCommand )
155155 if err != nil {
156156 return 0 , err
157157 }
@@ -166,13 +166,18 @@ func (d *DS18B20Driver) ConversionTime() (uint16, error) {
166166// DebugConversionTime try to set the conversion time and compare with real time to read temperature.
167167func (d * DS18B20Driver ) DebugConversionTime (start , end uint16 , stepwide uint16 , skipInvalid bool ) {
168168 r , _ := d .Resolution ()
169+ id , err := d .id ()
170+ if err != nil {
171+ fmt .Println (err .Error ())
172+ return
173+ }
169174 fmt .Printf ("\n ---- Conversion time check for '%s'@%dbit %d..%d +%d ----\n " ,
170- d . connection . ID () , r , start , end , stepwide )
175+ id , r , start , end , stepwide )
171176 fmt .Println ("|r1(err)\t |w(err)\t \t |r2(err)\t |T(err)\t \t |real\t \t |diff\t \t |" )
172177 fmt .Println ("--------------------------------------------------------------------------------" )
173178 for ct := start ; ct < end ; ct += stepwide {
174179 r1 , e1 := d .ConversionTime ()
175- ew := d .connection . WriteInteger (convTimeCommand , int (ct ))
180+ ew := d .writeInteger (convTimeCommand , int (ct ))
176181 r2 , e2 := d .ConversionTime ()
177182 time .Sleep (100 * time .Millisecond ) // relax the system
178183 start := time .Now ()
@@ -189,27 +194,31 @@ func (d *DS18B20Driver) DebugConversionTime(start, end uint16, stepwide uint16,
189194
190195func (d * DS18B20Driver ) initialize () error {
191196 if d .ds18b20Cfg .resolution != ds18b20DefaultResolution {
192- if err := d .connection . WriteInteger (resolutionCommand , int (d .ds18b20Cfg .resolution )); err != nil {
197+ if err := d .writeInteger (resolutionCommand , int (d .ds18b20Cfg .resolution )); err != nil {
193198 return err
194199 }
195200 }
196201
197202 if d .ds18b20Cfg .conversionTime != ds18b20DefaultConversionTime {
198- return d .connection . WriteInteger (convTimeCommand , int (d .ds18b20Cfg .conversionTime ))
203+ return d .writeInteger (convTimeCommand , int (d .ds18b20Cfg .conversionTime ))
199204 }
200205
201206 return nil
202207}
203208
204209func (d * DS18B20Driver ) shutdown () error {
210+ if d .connection == nil {
211+ return nil
212+ }
213+
205214 if d .ds18b20Cfg .resolution != ds18b20DefaultResolution {
206- if err := d .connection . WriteInteger (resolutionCommand , ds18b20DefaultResolution ); err != nil {
215+ if err := d .writeInteger (resolutionCommand , ds18b20DefaultResolution ); err != nil {
207216 return err
208217 }
209218 }
210219
211220 if d .ds18b20Cfg .conversionTime != ds18b20DefaultConversionTime {
212- return d .connection . WriteInteger (convTimeCommand , int (ds18b20DefaultConversionTime ))
221+ return d .writeInteger (convTimeCommand , int (ds18b20DefaultConversionTime ))
213222 }
214223
215224 return nil
0 commit comments