diff --git a/core/frontend/src/utils/deviceid_decoder.ts b/core/frontend/src/utils/deviceid_decoder.ts index b188bffc60..516a7a7d13 100755 --- a/core/frontend/src/utils/deviceid_decoder.ts +++ b/core/frontend/src/utils/deviceid_decoder.ts @@ -32,6 +32,10 @@ enum COMPASS_TYPE { MMC5883 = 0x13, AK09918 = 0x14, AK09915 = 0x15, + QMC5883P = 0x16, + BMM350 = 0x17, + IIS2MDC = 0x18, + LIS2MDL = 0x19, } enum IMU_TYPE { @@ -69,6 +73,10 @@ enum IMU_TYPE { INS_BMI270 = 0x38, INS_BMI085 = 0x39, INS_ICM42670 = 0x3A, + INS_ICM45686 = 0x3B, + INS_SCHA63T = 0x3C, + INS_IIM42653 = 0x3D, + INS_LSM6DSV = 0x3E, } enum BARO_TYPE { diff --git a/core/services/ardupilot_manager/flight_controller_detector/linux/navigator.py b/core/services/ardupilot_manager/flight_controller_detector/linux/navigator.py index b65df45518..2e7efb5a44 100644 --- a/core/services/ardupilot_manager/flight_controller_detector/linux/navigator.py +++ b/core/services/ardupilot_manager/flight_controller_detector/linux/navigator.py @@ -38,13 +38,17 @@ def get_serials(self) -> List[Serial]: class NavigatorPi5(Navigator): - devices = { + required_devices = { "ADS1115": (0x48, 1), - "AK09915": (0x0C, 1), "BME280": (0x76, 1), "PCA9685": (0x40, 3), } + magnetometer_devices = { + "AK09915": (0x0C, 1), + "IIS2MDC_0x1E": (0x1E, 1), + } + def get_serials(self) -> List[Serial]: return [ Serial(port="C", endpoint="/dev/ttyAMA0"), @@ -56,17 +60,25 @@ def get_serials(self) -> List[Serial]: def detect(self) -> bool: if not self.is_pi5(): return False - return all(self.check_for_i2c_device(bus, address) for address, bus in self.devices.values()) + required_ok = all(self.check_for_i2c_device(bus, address) for address, bus in self.required_devices.values()) + magnetometer_ok = any( + self.check_for_i2c_device(bus, address) for address, bus in self.magnetometer_devices.values() + ) + return required_ok and magnetometer_ok class NavigatorPi4(Navigator): - devices = { + required_devices = { "ADS1115": (0x48, 1), - "AK09915": (0x0C, 1), "BME280": (0x76, 1), "PCA9685": (0x40, 4), } + magnetometer_devices = { + "AK09915": (0x0C, 1), + "IIS2MDC_0x1E": (0x1E, 1), + } + def get_serials(self) -> List[Serial]: release = "Bullseye" os_release = load_file("/etc/os-release") @@ -93,4 +105,8 @@ def get_serials(self) -> List[Serial]: def detect(self) -> bool: if self.is_pi5(): return False - return all(self.check_for_i2c_device(bus, address) for address, bus in self.devices.values()) + required_ok = all(self.check_for_i2c_device(bus, address) for address, bus in self.required_devices.values()) + magnetometer_ok = any( + self.check_for_i2c_device(bus, address) for address, bus in self.magnetometer_devices.values() + ) + return required_ok and magnetometer_ok