in common/sensor/dev/tmp431.c [16:72]
uint8_t tmp431_read(uint8_t sensor_num, int *reading)
{
if (!reading) {
return SENSOR_UNSPECIFIED_ERROR;
}
uint8_t retry = 5, temperature_high_byte = 0xFF, temperature_low_byte = 0xFF;
I2C_MSG msg = { 0 };
msg.bus = sensor_config[SensorNum_SensorCfg_map[sensor_num]].port;
msg.slave_addr = sensor_config[SensorNum_SensorCfg_map[sensor_num]].slave_addr;
msg.tx_len = 1;
msg.rx_len = 1;
uint8_t offset = sensor_config[SensorNum_SensorCfg_map[sensor_num]].offset;
if (offset == TMP431_LOCAL_TEMPERATRUE) {
msg.data[0] = LOCAL_TEMPERATURE_HIGH_BYTE;
if (i2c_master_read(&msg, retry)) {
return SENSOR_FAIL_TO_ACCESS;
}
temperature_high_byte = msg.data[0];
msg.data[0] = LOCAL_TEMPERATURE_LOW_BYTE;
if (i2c_master_read(&msg, retry)) {
return SENSOR_FAIL_TO_ACCESS;
}
temperature_low_byte = msg.data[0];
} else if (offset == TMP431_REMOTE_TEMPERATRUE) {
msg.data[0] = REMOTE_TEMPERATURE_HIGH_BYTE;
if (i2c_master_read(&msg, retry)) {
return SENSOR_FAIL_TO_ACCESS;
}
temperature_high_byte = msg.data[0];
msg.data[0] = REMOTE_TEMPERATURE_LOW_BYTE;
if (i2c_master_read(&msg, retry)) {
return SENSOR_FAIL_TO_ACCESS;
}
temperature_low_byte = msg.data[0];
} else {
printf("[%s] Unknown offset(%d)\n", __func__, offset);
return SENSOR_UNSPECIFIED_ERROR;
}
float val;
if (temperature_range == RANGE_0_127) {
val = temperature_high_byte + ((temperature_low_byte >> 4) * 0.0625);
} else if (temperature_range == RANGE_m55_150) {
val = (temperature_high_byte - 64) + ((temperature_low_byte >> 4) * 0.0625);
} else {
printf("[%s] Unknown temperature range(%d)\n", __func__, temperature_range);
return SENSOR_UNSPECIFIED_ERROR;
}
sensor_val *sval = (sensor_val *)reading;
sval->integer = (int32_t)val;
sval->fraction = (int32_t)(val * 1000) % 1000;
return SENSOR_READ_SUCCESS;
}