uint8_t tmp431_read()

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;
}