HAL_ChibiOS: support I2C sensor probes by bus mask

This commit is contained in:
Andrew Tridgell 2019-05-30 12:01:24 +10:00
parent fc1ec8a465
commit 03bb94599b
1 changed files with 20 additions and 11 deletions

View File

@ -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))