aboutsummaryrefslogtreecommitdiff
path: root/apps/px4io/registers.c
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-01-15 22:22:15 -0800
committerpx4dev <px4@purgatory.org>2013-01-15 22:22:15 -0800
commitb4dcdae03d597b71f02850bec24c80134c10ae53 (patch)
tree15a97496fd182f628113fb3c5631d1bf3ea11a62 /apps/px4io/registers.c
parent0eb5a070f165fe311dd5bdf4c40635276b000787 (diff)
downloadpx4-firmware-b4dcdae03d597b71f02850bec24c80134c10ae53.tar.gz
px4-firmware-b4dcdae03d597b71f02850bec24c80134c10ae53.tar.bz2
px4-firmware-b4dcdae03d597b71f02850bec24c80134c10ae53.zip
Add support for battery current scaling. Add feedback for mixer load operations.
Diffstat (limited to 'apps/px4io/registers.c')
-rw-r--r--apps/px4io/registers.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/apps/px4io/registers.c b/apps/px4io/registers.c
index 2f411eebf..0206e0db0 100644
--- a/apps/px4io/registers.c
+++ b/apps/px4io/registers.c
@@ -60,6 +60,9 @@ volatile uint16_t r_page_setup[] =
[PX4IO_P_SETUP_PWM_LOWRATE] = 50,
[PX4IO_P_SETUP_PWM_HIGHRATE] = 200,
[PX4IO_P_SETUP_RELAYS] = 0,
+ [PX4IO_P_SETUP_VBATT_SCALE] = 10000,
+ [PX4IO_P_SETUP_IBATT_SCALE] = 0,
+ [PX4IO_P_SETUP_IBATT_BIAS] = 0
};
#define PX4IO_P_SETUP_FEATURES_VALID (PX4IO_P_FEAT_ARMING_MANUAL_OVERRIDE_OK)
@@ -80,7 +83,7 @@ static const uint16_t r_page_config[] = {
[PX4IO_P_CONFIG_PROTOCOL_VERSION] = 0,
[PX4IO_P_CONFIG_SOFTWARE_VERSION] = 0,
[PX4IO_P_CONFIG_BOOTLOADER_VERSION] = 0,
- [PX4IO_P_CONFIG_MAX_TRANSFER] = 64,
+ [PX4IO_P_CONFIG_MAX_TRANSFER] = 64, /* XXX hardcoded magic number */
[PX4IO_P_CONFIG_CONTROL_COUNT] = PX4IO_CONTROL_CHANNELS,
[PX4IO_P_CONFIG_ACTUATOR_COUNT] = IO_SERVO_COUNT,
[PX4IO_P_CONFIG_RC_INPUT_COUNT] = MAX_CONTROL_CHANNELS,
@@ -97,7 +100,7 @@ uint16_t r_page_status[] = {
[PX4IO_P_STATUS_FLAGS] = 0,
[PX4IO_P_STATUS_ALARMS] = 0,
[PX4IO_P_STATUS_VBATT] = 0,
- [PX4IO_P_STATUS_TEMPERATURE] = 0
+ [PX4IO_P_STATUS_IBATT] = 0
};
/**
@@ -396,10 +399,21 @@ registers_get(uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_val
* Intercept corrected for best results @ 12V.
*/
unsigned counts = adc_measure(ADC_VBATT);
- r_page_status[PX4IO_P_STATUS_VBATT] = (4150 + (counts * 46)) / 10;
+ unsigned mV = (4150 + (counts * 46)) / 10;
+ unsigned corrected = (mV * r_page_setup[PX4IO_P_SETUP_VBATT_SCALE]) / 10000;
+
+ r_page_status[PX4IO_P_STATUS_VBATT] = corrected;
}
- /* XXX PX4IO_P_STATUS_TEMPERATURE */
+ /* PX4IO_P_STATUS_IBATT */
+ {
+ unsigned counts = adc_measure(ADC_VBATT);
+ unsigned scaled = (counts * r_page_setup[PX4IO_P_SETUP_IBATT_SCALE]) / 10000;
+ int corrected = scaled + REG_TO_SIGNED(r_page_setup[PX4IO_P_SETUP_IBATT_BIAS]);
+ if (corrected < 0)
+ corrected = 0;
+ r_page_status[PX4IO_P_STATUS_IBATT] = corrected;
+ }
SELECT_PAGE(r_page_status);
break;