Hi,
I found several potential numeric issues in parse_temp_press_calib_data(). Several members of the calib_data structure can overflow when the registers contain too large values. Example:
calib_data->dig_t2 = (int16_t)(((uint16_t)reg_data[3] << 😎 | (uint16_t)reg_data[2]);
The expression right to the int16 cast can become strictly bigger than int16_t. Perhaps this is not a likely value, but a broken sensor or faulty communication could lead to issues. All params except dig_t1 and dig_p1 are affected.
A similar case exists in parse_humidity_calib_data():
calib_data->dig_h2 = (int16_t)(((uint16_t)reg_data[1] << 😎 | (uint16_t)reg_data[0]);
Besides that, great code quality, thanks!