+ case 0: // Existing read - return raw value * 4
+ spiData >>= 18 ;
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
+ if ((spiData & 0x2000) != 0) // Negative
+ temp = -temp ;
+
+ return temp ;
+
+ case 1: // Return error bits
+ return spiData & 0x7 ;
+
+ case 2: // Return temp in C * 10
+ spiData >>= 18 ;
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
+ if ((spiData & 0x2000) != 0) // Negative
+ temp = -temp ;
+
+ return (int)rint ((double)temp * 2.5) ;
+
+ case 3: // Return temp in F * 10
+ spiData >>= 18 ;
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
+ if ((spiData & 0x2000) != 0) // Negative
+ temp = -temp ;
+
+ return (int)rint ((((double)temp * 0.25 * 9.0 / 5.0) + 32.0) * 10.0) ;
+
+ default: // Who knows...
+ return 0 ;
+