mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-23 02:03:33 +08:00
Allow the setup flags to control the S.BUS / RSSI port instead of doing some wild, likely incorrect, guesses.
This commit is contained in:
@@ -98,13 +98,15 @@ controls_tick() {
|
|||||||
uint16_t rssi = 0;
|
uint16_t rssi = 0;
|
||||||
|
|
||||||
#ifdef ADC_RSSI
|
#ifdef ADC_RSSI
|
||||||
unsigned counts = adc_measure(ADC_RSSI);
|
if (r_setup_features & PX4IO_P_SETUP_FEATURES_ADC_RSSI) {
|
||||||
if (counts != 0xffff) {
|
unsigned counts = adc_measure(ADC_RSSI);
|
||||||
/* use 1:1 scaling on 3.3V ADC input */
|
if (counts != 0xffff) {
|
||||||
unsigned mV = counts * 3300 / 4096;
|
/* use 1:1 scaling on 3.3V ADC input */
|
||||||
|
unsigned mV = counts * 3300 / 4096;
|
||||||
|
|
||||||
/* scale to 0..253 */
|
/* scale to 0..253 */
|
||||||
rssi = mV / 13;
|
rssi = mV / 13;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -150,13 +152,6 @@ controls_tick() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* switch S.Bus output pin as needed */
|
|
||||||
if (sbus_status != (r_status_flags & PX4IO_P_STATUS_FLAGS_RC_SBUS)) {
|
|
||||||
#ifdef ENABLE_SBUS_OUT
|
|
||||||
ENABLE_SBUS_OUT((r_status_flags & PX4IO_P_STATUS_FLAGS_RC_SBUS));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
perf_end(c_gather_sbus);
|
perf_end(c_gather_sbus);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -148,7 +148,12 @@ uint16_t r_page_scratch[32];
|
|||||||
*/
|
*/
|
||||||
volatile uint16_t r_page_setup[] =
|
volatile uint16_t r_page_setup[] =
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ARCH_BOARD_PX4IO_V2
|
||||||
|
/* default to RSSI ADC functionality */
|
||||||
|
[PX4IO_P_SETUP_FEATURES] = PX4IO_P_SETUP_FEATURES_ADC_RSSI,
|
||||||
|
#else
|
||||||
[PX4IO_P_SETUP_FEATURES] = 0,
|
[PX4IO_P_SETUP_FEATURES] = 0,
|
||||||
|
#endif
|
||||||
[PX4IO_P_SETUP_ARMING] = 0,
|
[PX4IO_P_SETUP_ARMING] = 0,
|
||||||
[PX4IO_P_SETUP_PWM_RATES] = 0,
|
[PX4IO_P_SETUP_PWM_RATES] = 0,
|
||||||
[PX4IO_P_SETUP_PWM_DEFAULTRATE] = 50,
|
[PX4IO_P_SETUP_PWM_DEFAULTRATE] = 50,
|
||||||
@@ -166,7 +171,14 @@ volatile uint16_t r_page_setup[] =
|
|||||||
[PX4IO_P_SETUP_CRC ... (PX4IO_P_SETUP_CRC+1)] = 0,
|
[PX4IO_P_SETUP_CRC ... (PX4IO_P_SETUP_CRC+1)] = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PX4IO_P_SETUP_FEATURES_VALID (0)
|
#ifdef CONFIG_ARCH_BOARD_PX4IO_V2
|
||||||
|
#define PX4IO_P_SETUP_FEATURES_VALID (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | \
|
||||||
|
PX4IO_P_SETUP_FEATURES_SBUS2_OUT | \
|
||||||
|
PX4IO_P_SETUP_FEATURES_ADC_RSSI | \
|
||||||
|
PX4IO_P_SETUP_FEATURES_PWM_RSSI)
|
||||||
|
#else
|
||||||
|
#define PX4IO_P_SETUP_FEATURES_VALID 0
|
||||||
|
#endif
|
||||||
#define PX4IO_P_SETUP_ARMING_VALID (PX4IO_P_SETUP_ARMING_FMU_ARMED | \
|
#define PX4IO_P_SETUP_ARMING_VALID (PX4IO_P_SETUP_ARMING_FMU_ARMED | \
|
||||||
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK | \
|
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK | \
|
||||||
PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK | \
|
PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK | \
|
||||||
@@ -442,9 +454,35 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
|
|||||||
case PX4IO_P_SETUP_FEATURES:
|
case PX4IO_P_SETUP_FEATURES:
|
||||||
|
|
||||||
value &= PX4IO_P_SETUP_FEATURES_VALID;
|
value &= PX4IO_P_SETUP_FEATURES_VALID;
|
||||||
r_setup_features = value;
|
|
||||||
|
|
||||||
/* no implemented feature selection at this point */
|
/* some of the options conflict - give S.BUS out precedence, then ADC RSSI, then PWM RSSI */
|
||||||
|
|
||||||
|
/* switch S.Bus output pin as needed */
|
||||||
|
#ifdef ENABLE_SBUS_OUT
|
||||||
|
ENABLE_SBUS_OUT(value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | PX4IO_P_SETUP_FEATURES_SBUS2_OUT));
|
||||||
|
|
||||||
|
/* disable the conflicting options */
|
||||||
|
if (value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | PX4IO_P_SETUP_FEATURES_SBUS2_OUT)) {
|
||||||
|
value &= ~(PX4IO_P_SETUP_FEATURES_PWM_RSSI | PX4IO_P_SETUP_FEATURES_ADC_RSSI);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* disable the conflicting options with ADC RSSI */
|
||||||
|
if (value & (PX4IO_P_SETUP_FEATURES_ADC_RSSI)) {
|
||||||
|
value &= ~(PX4IO_P_SETUP_FEATURES_PWM_RSSI |
|
||||||
|
PX4IO_P_SETUP_FEATURES_SBUS1_OUT |
|
||||||
|
PX4IO_P_SETUP_FEATURES_SBUS2_OUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disable the conflicting options with PWM RSSI (without effect here, but for completeness) */
|
||||||
|
if (value & (PX4IO_P_SETUP_FEATURES_PWM_RSSI)) {
|
||||||
|
value &= ~(PX4IO_P_SETUP_FEATURES_ADC_RSSI |
|
||||||
|
PX4IO_P_SETUP_FEATURES_SBUS1_OUT |
|
||||||
|
PX4IO_P_SETUP_FEATURES_SBUS2_OUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* apply changes */
|
||||||
|
r_setup_features = value;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user