From 03bb94599b80e394eb3459577b85466f8a4f985d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 30 May 2019 12:01:24 +1000 Subject: [PATCH] HAL_ChibiOS: support I2C sensor probes by bus mask --- .../hwdef/scripts/chibios_hwdef.py | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py index c5dcae5d3d..69c4d887bf 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py +++ b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py @@ -776,26 +776,33 @@ def parse_i2c_device(dev): a = dev.split(':') if len(a) != 3: error("Bad I2C device: %s" % dev) - busnum = int(a[1]) busaddr = int(a[2],base=0) - return 'hal.i2c_mgr->get_device(%u,0x%02x)' % (busnum, busaddr) + if a[1] == 'ALL_EXTERNAL': + return ('FOREACH_I2C_EXTERNAL(b)', 'hal.i2c_mgr->get_device(b,0x%02x)' % (busaddr)) + elif a[1] == 'ALL_INTERNAL': + return ('FOREACH_I2C_INTERNAL(b)', 'hal.i2c_mgr->get_device(b,0x%02x)' % (busaddr)) + elif a[1] == 'ALL': + return ('FOREACH_I2C(b)', 'hal.i2c_mgr->get_device(b,0x%02x)' % (busaddr)) + busnum = int(a[1]) + return ('', 'hal.i2c_mgr->get_device(%u,0x%02x)' % (busnum, busaddr)) def write_IMU_config(f): '''write IMU config defines''' global imu_list devlist = [] + wrapper = '' for dev in imu_list: driver = dev[0] for i in range(1,len(dev)): if dev[i].startswith("SPI:"): dev[i] = parse_spi_device(dev[i]) elif dev[i].startswith("I2C:"): - dev[i] = parse_i2c_device(dev[i]) + (wrapper, dev[i]) = parse_i2c_device(dev[i]) n = len(devlist)+1 devlist.append('HAL_INS_PROBE%u' % n) f.write( - '#define HAL_INS_PROBE%u ADD_BACKEND(AP_InertialSensor_%s::probe(*this,%s))\n' - % (n, driver, ','.join(dev[1:]))) + '#define HAL_INS_PROBE%u %s ADD_BACKEND(AP_InertialSensor_%s::probe(*this,%s))\n' + % (n, wrapper, driver, ','.join(dev[1:]))) if len(devlist) > 0: f.write('#define HAL_INS_PROBE_LIST %s\n\n' % ';'.join(devlist)) @@ -806,6 +813,7 @@ def write_MAG_config(f): for dev in compass_list: driver = dev[0] probe = 'probe' + wrapper = '' a = driver.split(':') driver = a[0] if len(a) > 1 and a[1].startswith('probe'): @@ -814,12 +822,12 @@ def write_MAG_config(f): if dev[i].startswith("SPI:"): dev[i] = parse_spi_device(dev[i]) elif dev[i].startswith("I2C:"): - dev[i] = parse_i2c_device(dev[i]) + (wrapper, dev[i]) = parse_i2c_device(dev[i]) n = len(devlist)+1 devlist.append('HAL_MAG_PROBE%u' % n) f.write( - '#define HAL_MAG_PROBE%u ADD_BACKEND(DRIVER_%s, AP_Compass_%s::%s(%s))\n' - % (n, driver, driver, probe, ','.join(dev[1:]))) + '#define HAL_MAG_PROBE%u %s ADD_BACKEND(DRIVER_%s, AP_Compass_%s::%s(%s))\n' + % (n, wrapper, driver, driver, probe, ','.join(dev[1:]))) if len(devlist) > 0: f.write('#define HAL_MAG_PROBE_LIST %s\n\n' % ';'.join(devlist)) @@ -830,6 +838,7 @@ def write_BARO_config(f): for dev in baro_list: driver = dev[0] probe = 'probe' + wrapper = '' a = driver.split(':') driver = a[0] if len(a) > 1 and a[1].startswith('probe'): @@ -838,14 +847,14 @@ def write_BARO_config(f): if dev[i].startswith("SPI:"): dev[i] = parse_spi_device(dev[i]) elif dev[i].startswith("I2C:"): - dev[i] = parse_i2c_device(dev[i]) + (wrapper, dev[i]) = parse_i2c_device(dev[i]) if dev[i].startswith('hal.i2c_mgr'): dev[i] = 'std::move(%s)' % dev[i] n = len(devlist)+1 devlist.append('HAL_BARO_PROBE%u' % n) f.write( - '#define HAL_BARO_PROBE%u ADD_BACKEND(AP_Baro_%s::%s(*this,%s))\n' - % (n, driver, probe, ','.join(dev[1:]))) + '#define HAL_BARO_PROBE%u %s ADD_BACKEND(AP_Baro_%s::%s(*this,%s))\n' + % (n, wrapper, driver, probe, ','.join(dev[1:]))) if len(devlist) > 0: f.write('#define HAL_BARO_PROBE_LIST %s\n\n' % ';'.join(devlist))