diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CubeBlack/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/CubeBlack/hwdef.dat index fd85c55423..f973de0f8c 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/CubeBlack/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/CubeBlack/hwdef.dat @@ -24,6 +24,29 @@ PB1 PB1_ADC ADC1 SCALE(1) SPIDEV icm20948_ext SPI4 DEVID1 MPU_EXT_CS MODE3 4*MHZ 8*MHZ SPIDEV icm20602_ext SPI4 DEVID3 GYRO_EXT_CS MODE3 4*MHZ 8*MHZ + +# Sensor Check alias for validating board type +CHECK_MPU9250 spi_check_register("mpu9250", MPUREG_WHOAMI, MPU_WHOAMI_MPU9250) +CHECK_MPU9250_EXT spi_check_register("mpu9250_ext", MPUREG_WHOAMI, MPU_WHOAMI_MPU9250) +CHECK_ICM20602_EXT spi_check_register("icm20602_ext", MPUREG_WHOAMI, MPU_WHOAMI_ICM20602) +CHECK_LSM9DS0_EXT_G spi_check_register("lsm9ds0_ext_g", LSMREG_WHOAMI, LSM_WHOAMI_L3GD20) +CHECK_LSM9DS0_EXT_AM spi_check_register("lsm9ds0_ext_am", LSMREG_WHOAMI, LSM_WHOAMI_LSM303D) +CHECK_ICM20948_EXT spi_check_register("icm20948_ext", INV2REG_WHOAMI, INV2_WHOAMI_ICM20948) +CHECK_MS5611 check_ms5611("ms5611") +CHECK_MS5611_EXT check_ms5611("ms5611_ext") + +# Sensor Check Macros to be used for validating board type +CHECK_IMU0_PRESENT $CHECK_MPU9250_EXT || $CHECK_ICM20602_EXT +CHECK_IMU1_PRESENT ($CHECK_LSM9DS0_EXT_G && $CHECK_LSM9DS0_EXT_AM) || $CHECK_ICM20948_EXT +CHECK_IMU2_PRESENT $CHECK_MPU9250 +CHECK_BARO0_PRESENT $CHECK_MS5611 +CHECK_BARO1_PRESENT $CHECK_MS5611_EXT + +BOARD_VALIDATE $CHECK_IMU0_PRESENT $CHECK_IMU1_PRESENT $CHECK_IMU2_PRESENT $CHECK_BARO0_PRESENT $CHECK_BARO1_PRESENT + +# also define the default board type +define BOARD_TYPE_DEFAULT 3 + # three IMUs, but allow for different varients. First two IMUs are # isolated, 3rd isn't IMU Invensense SPI:mpu9250_ext ROTATION_PITCH_180 diff --git a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py index 939a600860..165f7aed30 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py +++ b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py @@ -847,12 +847,12 @@ def write_USB_config(f): (USB_VID, USB_PID) = get_USB_IDs() f.write('#define HAL_USB_VENDOR_ID 0x%04x\n' % int(USB_VID)) f.write('#define HAL_USB_PRODUCT_ID 0x%04x\n' % int(USB_PID)) - f.write('#define HAL_USB_STRING_MANUFACTURER "%s"\n' % get_config("USB_STRING_MANUFACTURER", default="ArduPilot")) + f.write('#define HAL_USB_STRING_MANUFACTURER %s\n' % get_config("USB_STRING_MANUFACTURER", default="\"ArduPilot\"")) default_product = "%BOARD%" if args.bootloader: default_product += "-BL" - f.write('#define HAL_USB_STRING_PRODUCT "%s"\n' % get_config("USB_STRING_PRODUCT", default=default_product)) - f.write('#define HAL_USB_STRING_SERIAL "%s"\n' % get_config("USB_STRING_SERIAL", default="%SERIAL%")) + f.write('#define HAL_USB_STRING_PRODUCT %s\n' % get_config("USB_STRING_PRODUCT", default="\"%s\""%default_product)) + f.write('#define HAL_USB_STRING_SERIAL %s\n' % get_config("USB_STRING_SERIAL", default="\"%SERIAL%\"")) f.write('\n\n') @@ -1032,6 +1032,28 @@ def write_BARO_config(f): if len(devlist) > 0: f.write('#define HAL_BARO_PROBE_LIST %s\n\n' % ';'.join(devlist)) +def write_board_validate_macro(f): + '''write board validation macro''' + global config + validate_string = '' + validate_dict = {} + if 'BOARD_VALIDATE' in config: + for check in config['BOARD_VALIDATE']: + check_name = check + check_string = check + while True: + def substitute_alias(m): + return '(' + get_config(m.group(1), spaces=True) + ')' + output = re.sub(r'\$(\w+|\{([^}]*)\})', substitute_alias, check_string) + if (output == check_string): + break + check_string = output + validate_dict[check_name] = check_string + # Finally create check conditional + for check_name in validate_dict: + validate_string += "!" + validate_dict[check_name] + "?" + "\"" + check_name + "\"" + ":" + validate_string += "nullptr" + f.write('#define HAL_VALIDATE_BOARD (%s)\n\n' % validate_string) def get_gpio_bylabel(label): '''get GPIO(n) setting on a pin label, or -1''' @@ -1624,6 +1646,7 @@ def write_hwdef_header(outfilename): write_IMU_config(f) write_MAG_config(f) write_BARO_config(f) + write_board_validate_macro(f) write_peripheral_enable(f) @@ -1843,7 +1866,7 @@ def process_line(line): global allpins, imu_list, compass_list, baro_list global mcu_type, mcu_series all_lines.append(line) - a = shlex.split(line) + a = shlex.split(line, posix=False) # keep all config lines for later use alllines.append(line)