Found cause for the bug, please confirm as I have no sensor to test with.
The scratchpad is defined as array of unsigned int 8 (see ds2438.h)
typedef uint8_t ScratchPad;
in readTempC(); the temperature reading is done and two shifts are used to merge the value of the MSB and LSB register. As the value of MSB is an unsigned int, the value casting it to an int_16_t does not do a sign extension. Therefor as the value becomes (should be) negative, it is interpreted as 255 instead of -1.
The problem reveals itself in this line:
int16_t rawTemp = ( ((int16_t)_scratchPad[TEMP_MSB]) << 5) | (_scratchPad[TEMP_LSB] >> 3);
Solution: Change readTempC() to
//override for now, plsfixkthx
_parasite = 1;
//request temp conversion
//copy data from eeprom to scratchpad & read scratchpad
//return tempC (ignore 3 lsb as they are always 0);
uint8_t x = _scratchPad[TEMP_MSB];
int rawTemp = (x & 0x80)?(-256+x): x; // uint8_t => int
float f = rawTemp + (_scratchPad[TEMP_LSB] >> 3) * 0.03125;
Note: Other solution could be the changing the type of the scratchpad to signed but I did not investigate the impact of that change to the rest of the DS2438 class.