You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.0 KiB
33 lines
1.0 KiB
import time
|
|
|
|
from cereal import log
|
|
from openpilot.system.sensord.sensors.i2c_sensor import Sensor
|
|
|
|
# https://content.arduino.cc/assets/st_imu_lsm6ds3_datasheet.pdf
|
|
class LSM6DS3_Temp(Sensor):
|
|
@property
|
|
def device_address(self) -> int:
|
|
return 0x6A # Default I2C address for LSM6DS3
|
|
|
|
def _read_temperature(self) -> float:
|
|
scale = 16.0 if log.SensorEventData.SensorSource.lsm6ds3 else 256.0
|
|
data = self.read(0x20, 2)
|
|
return 25 + (self.parse_16bit(data[0], data[1]) / scale)
|
|
|
|
def init(self):
|
|
chip_id = self.verify_chip_id(0x0F, [0x69, 0x6A])
|
|
if chip_id == 0x6A:
|
|
self.source = log.SensorEventData.SensorSource.lsm6ds3trc
|
|
else:
|
|
self.source = log.SensorEventData.SensorSource.lsm6ds3
|
|
|
|
def get_event(self, ts: int | None = None) -> log.SensorEventData:
|
|
event = log.SensorEventData.new_message()
|
|
event.version = 1
|
|
event.timestamp = int(time.monotonic() * 1e9)
|
|
event.source = self.source
|
|
event.temperature = self._read_temperature()
|
|
return event
|
|
|
|
def shutdown(self) -> None:
|
|
pass
|
|
|