From 6fcc4cc6a22079766b52b9e1b9348cb6a6361041 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Fri, 31 May 2019 12:03:57 -0700 Subject: [PATCH] WIP Digital PM Support --- src/drivers/boards/common/board_common.h | 8 +++++--- src/drivers/stm32/adc/adc.cpp | 4 +++- src/modules/sensors/sensors.cpp | 12 +++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/drivers/boards/common/board_common.h b/src/drivers/boards/common/board_common.h index 35fe4aa120..9784edd494 100644 --- a/src/drivers/boards/common/board_common.h +++ b/src/drivers/boards/common/board_common.h @@ -178,9 +178,11 @@ # define BOARD_BATT_I_LIST {ADC_BATTERY_CURRENT_CHANNEL} # define BOARD_BRICK_VALID_LIST {BOARD_ADC_BRICK_VALID} #elif BOARD_NUMBER_BRICKS == 2 -# define BOARD_BATT_V_LIST {ADC_BATTERY1_VOLTAGE_CHANNEL, ADC_BATTERY2_VOLTAGE_CHANNEL} -# define BOARD_BATT_I_LIST {ADC_BATTERY1_CURRENT_CHANNEL, ADC_BATTERY2_CURRENT_CHANNEL} -# define BOARD_BRICK_VALID_LIST {BOARD_ADC_BRICK1_VALID, BOARD_ADC_BRICK2_VALID} +# if !defined(BOARD_NUMBER_DIGITAL_BRICKS) +# define BOARD_BATT_V_LIST {ADC_BATTERY1_VOLTAGE_CHANNEL, ADC_BATTERY2_VOLTAGE_CHANNEL} +# define BOARD_BATT_I_LIST {ADC_BATTERY1_CURRENT_CHANNEL, ADC_BATTERY2_CURRENT_CHANNEL} +# endif +#define BOARD_BRICK_VALID_LIST {BOARD_ADC_BRICK1_VALID, BOARD_ADC_BRICK2_VALID} #elif BOARD_NUMBER_BRICKS == 3 # define BOARD_BATT_V_LIST {ADC_BATTERY1_VOLTAGE_CHANNEL, ADC_BATTERY2_VOLTAGE_CHANNEL, ADC_BATTERY3_VOLTAGE_CHANNEL} # define BOARD_BATT_I_LIST {ADC_BATTERY1_CURRENT_CHANNEL, ADC_BATTERY2_CURRENT_CHANNEL, ADC_BATTERY3_CURRENT_CHANNEL} diff --git a/src/drivers/stm32/adc/adc.cpp b/src/drivers/stm32/adc/adc.cpp index 8b5835d3b7..9b36be2515 100644 --- a/src/drivers/stm32/adc/adc.cpp +++ b/src/drivers/stm32/adc/adc.cpp @@ -440,7 +440,7 @@ ADC::update_system_power(hrt_abstime now) #endif /* The valid signals (HW dependent) are associated with each brick */ - +#if !defined(BOARD_NUMBER_DIGITAL_BRICKS) bool valid_chan[BOARD_NUMBER_BRICKS] = BOARD_BRICK_VALID_LIST; system_power.brick_valid = 0; @@ -448,6 +448,8 @@ ADC::update_system_power(hrt_abstime now) system_power.brick_valid |= valid_chan[b] ? 1 << b : 0; } +#endif + system_power.servo_valid = BOARD_ADC_SERVO_VALID; // OC pins are active low diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index cb2ccf9137..4f838af851 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -404,7 +404,7 @@ Sensors::adc_poll() * Selection is done in HW ala a LTC4417 or similar, or may be hard coded * Like in the FMUv4 */ - +#if !defined(BOARD_NUMBER_DIGITAL_BRICKS) /* The ADC channels that are associated with each brick, in power controller * priority order highest to lowest, as defined by the board config. */ @@ -415,6 +415,8 @@ Sensors::adc_poll() bat_voltage_v_chan[0] = _parameters.battery_adc_channel; } +#endif + /* The valid signals (HW dependent) are associated with each brick */ bool valid_chan[BOARD_NUMBER_BRICKS] = BOARD_BRICK_VALID_LIST; @@ -479,7 +481,7 @@ Sensors::adc_poll() */ selected_source = b; -#if BOARD_NUMBER_BRICKS > 1 +# if BOARD_NUMBER_BRICKS > 1 /* Move the selected_source to instance 0 */ if (_battery_pub_intance0ndx != selected_source) { @@ -490,9 +492,11 @@ Sensors::adc_poll() _battery_pub_intance0ndx = selected_source; } -#endif /* BOARD_NUMBER_BRICKS > 1 */ +# endif /* BOARD_NUMBER_BRICKS > 1 */ } +# if !defined(BOARD_NUMBER_DIGITAL_BRICKS) + // todo:per brick scaling /* look for specific channels and process the raw voltage to measurement data */ if (bat_voltage_v_chan[b] == buf_adc[i].am_channel) { @@ -503,6 +507,8 @@ Sensors::adc_poll() bat_current_a[b] = ((buf_adc[i].am_data * _parameters.battery_current_scaling) - _parameters.battery_current_offset) * _parameters.battery_a_per_v; } + +# endif /* !defined(BOARD_NUMBER_DIGITAL_BRICKS) */ } #endif /* BOARD_NUMBER_BRICKS > 0 */