Merge branch 'master' of github.com:PX4/Firmware into mtecs

This commit is contained in:
Lorenz Meier
2014-05-07 10:21:21 +02:00
12 changed files with 96 additions and 32 deletions
+1
View File
@@ -38,3 +38,4 @@ tags
.tags_sorted_by_file .tags_sorted_by_file
.pydevproject .pydevproject
.ropeproject .ropeproject
*.orig
+2 -2
View File
@@ -32,9 +32,9 @@ then
param set MPC_Z_VEL_D 0.0 param set MPC_Z_VEL_D 0.0
param set MPC_Z_VEL_MAX 3 param set MPC_Z_VEL_MAX 3
param set MPC_Z_FF 0.5 param set MPC_Z_FF 0.5
param set MPC_TILT_MAX 1.0 param set MPC_TILTMAX_AIR 45.0
param set MPC_TILTMAX_LND 15.0
param set MPC_LAND_SPEED 1.0 param set MPC_LAND_SPEED 1.0
param set MPC_LAND_TILT 0.3
fi fi
set PWM_RATE 400 set PWM_RATE 400
-2
View File
@@ -103,8 +103,6 @@
#define GPIO_USART2_RTS 0xffffffff #define GPIO_USART2_RTS 0xffffffff
#undef GPIO_USART2_CK #undef GPIO_USART2_CK
#define GPIO_USART2_CK 0xffffffff #define GPIO_USART2_CK 0xffffffff
#undef GPIO_USART3_TX
#define GPIO_USART3_TX 0xffffffff
#undef GPIO_USART3_CK #undef GPIO_USART3_CK
#define GPIO_USART3_CK 0xffffffff #define GPIO_USART3_CK 0xffffffff
#undef GPIO_USART3_CTS #undef GPIO_USART3_CTS
+2 -2
View File
@@ -104,9 +104,9 @@ CONFIG_ARMV7M_CMNVECTOR=y
# CONFIG_STM32_JTAG_SW_ENABLE - Set JTAG-DP disabled and SW-DP enabled # CONFIG_STM32_JTAG_SW_ENABLE - Set JTAG-DP disabled and SW-DP enabled
# #
CONFIG_STM32_DFU=n CONFIG_STM32_DFU=n
CONFIG_STM32_JTAG_FULL_ENABLE=y CONFIG_STM32_JTAG_FULL_ENABLE=n
CONFIG_STM32_JTAG_NOJNTRST_ENABLE=n CONFIG_STM32_JTAG_NOJNTRST_ENABLE=n
CONFIG_STM32_JTAG_SW_ENABLE=n CONFIG_STM32_JTAG_SW_ENABLE=y
# #
# Individual subsystems can be enabled: # Individual subsystems can be enabled:
+20 -4
View File
@@ -683,6 +683,25 @@ PX4IO::init()
/* send command to arm system via command API */ /* send command to arm system via command API */
vehicle_command_s cmd; vehicle_command_s cmd;
/* send this to itself */
param_t sys_id_param = param_find("MAV_SYS_ID");
param_t comp_id_param = param_find("MAV_COMP_ID");
int32_t sys_id;
int32_t comp_id;
if (param_get(sys_id_param, &sys_id)) {
errx(1, "PRM SYSID");
}
if (param_get(comp_id_param, &comp_id)) {
errx(1, "PRM CMPID");
}
cmd.target_system = sys_id;
cmd.target_component = comp_id;
cmd.source_system = sys_id;
cmd.source_component = comp_id;
/* request arming */ /* request arming */
cmd.param1 = 1.0f; cmd.param1 = 1.0f;
cmd.param2 = 0; cmd.param2 = 0;
@@ -692,10 +711,7 @@ PX4IO::init()
cmd.param6 = 0; cmd.param6 = 0;
cmd.param7 = 0; cmd.param7 = 0;
cmd.command = VEHICLE_CMD_COMPONENT_ARM_DISARM; cmd.command = VEHICLE_CMD_COMPONENT_ARM_DISARM;
// cmd.target_system = status.system_id;
// cmd.target_component = status.component_id;
// cmd.source_system = status.system_id;
// cmd.source_component = status.component_id;
/* ask to confirm command */ /* ask to confirm command */
cmd.confirmation = 1; cmd.confirmation = 1;
+5
View File
@@ -484,6 +484,11 @@ bool handle_command(struct vehicle_status_s *status, const struct safety_s *safe
if (cmd->param1 != 0.0f && (fabsf(cmd->param1 - 1.0f) > 2.0f * FLT_EPSILON)) { if (cmd->param1 != 0.0f && (fabsf(cmd->param1 - 1.0f) > 2.0f * FLT_EPSILON)) {
mavlink_log_info(mavlink_fd, "Unsupported ARM_DISARM parameter: %.6f", cmd->param1); mavlink_log_info(mavlink_fd, "Unsupported ARM_DISARM parameter: %.6f", cmd->param1);
} else { } else {
// Flick to inair restore first if this comes from an onboard system
if (cmd->source_system == status->system_id && cmd->source_component == status->component_id) {
status->arming_state = ARMING_STATE_IN_AIR_RESTORE;
}
transition_result_t arming_res = arm_disarm(cmd->param1 != 0.0f, mavlink_fd, "arm/disarm component command"); transition_result_t arming_res = arm_disarm(cmd->param1 != 0.0f, mavlink_fd, "arm/disarm component command");
if (arming_res == TRANSITION_DENIED) { if (arming_res == TRANSITION_DENIED) {
mavlink_log_critical(mavlink_fd, "#audio: REJECTING component arm cmd"); mavlink_log_critical(mavlink_fd, "#audio: REJECTING component arm cmd");
+18 -17
View File
@@ -819,11 +819,11 @@ protected:
void send(const hrt_abstime t) void send(const hrt_abstime t)
{ {
bool updated = status_sub->update(t); bool updated = act_sub->update(t);
updated |= pos_sp_triplet_sub->update(t); (void)pos_sp_triplet_sub->update(t);
updated |= act_sub->update(t); (void)status_sub->update(t);
if (updated) { if (updated && (status->arming_state == ARMING_STATE_ARMED)) {
/* translate the current syste state to mavlink state and mode */ /* translate the current syste state to mavlink state and mode */
uint8_t mavlink_state; uint8_t mavlink_state;
uint8_t mavlink_base_mode; uint8_t mavlink_base_mode;
@@ -1339,22 +1339,23 @@ protected:
void send(const hrt_abstime t) void send(const hrt_abstime t)
{ {
(void)range_sub->update(t); if (range_sub->update(t)) {
uint8_t type; uint8_t type;
switch (range->type) { switch (range->type) {
case RANGE_FINDER_TYPE_LASER: case RANGE_FINDER_TYPE_LASER:
type = MAV_DISTANCE_SENSOR_LASER; type = MAV_DISTANCE_SENSOR_LASER;
break; break;
}
uint8_t id = 0;
uint8_t orientation = 0;
uint8_t covariance = 20;
mavlink_msg_distance_sensor_send(_channel, range->timestamp / 1000, type, id, orientation,
range->minimum_distance*100, range->maximum_distance*100, range->distance*100, covariance);
} }
uint8_t id = 0;
uint8_t orientation = 0;
uint8_t covariance = 20;
mavlink_msg_distance_sensor_send(_channel, range->timestamp / 1000, type, id, orientation,
range->minimum_distance*100, range->maximum_distance*100, range->distance*100, covariance);
} }
}; };
+6
View File
@@ -217,6 +217,12 @@ MavlinkReceiver::handle_message_command_long(mavlink_message_t *msg)
_mavlink->_task_should_exit = true; _mavlink->_task_should_exit = true;
} else { } else {
if (msg->sysid == mavlink_system.sysid && msg->compid == mavlink_system.compid) {
warnx("ignoring CMD spoofed with same SYS/COMP ID");
return;
}
struct vehicle_command_s vcmd; struct vehicle_command_s vcmd;
memset(&vcmd, 0, sizeof(vcmd)); memset(&vcmd, 0, sizeof(vcmd));
+15
View File
@@ -254,10 +254,25 @@ mixer_tick(void)
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++)
up_pwm_servo_set(i, r_page_servos[i]); up_pwm_servo_set(i, r_page_servos[i]);
/* set S.BUS1 or S.BUS2 outputs */
if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS2_OUT) {
sbus2_output(r_page_servos, PX4IO_SERVO_COUNT);
} else if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS1_OUT) {
sbus1_output(r_page_servos, PX4IO_SERVO_COUNT);
}
} else if (mixer_servos_armed && should_always_enable_pwm) { } else if (mixer_servos_armed && should_always_enable_pwm) {
/* set the disarmed servo outputs. */ /* set the disarmed servo outputs. */
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++)
up_pwm_servo_set(i, r_page_servo_disarmed[i]); up_pwm_servo_set(i, r_page_servo_disarmed[i]);
/* set S.BUS1 or S.BUS2 outputs */
if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS1_OUT)
sbus1_output(r_page_servos, PX4IO_SERVO_COUNT);
if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS2_OUT)
sbus2_output(r_page_servos, PX4IO_SERVO_COUNT);
} }
} }
+2
View File
@@ -219,6 +219,8 @@ extern bool dsm_input(uint16_t *values, uint16_t *num_values);
extern void dsm_bind(uint16_t cmd, int pulses); extern void dsm_bind(uint16_t cmd, int pulses);
extern int sbus_init(const char *device); extern int sbus_init(const char *device);
extern bool sbus_input(uint16_t *values, uint16_t *num_values, bool *sbus_failsafe, bool *sbus_frame_drop, uint16_t max_channels); extern bool sbus_input(uint16_t *values, uint16_t *num_values, bool *sbus_failsafe, bool *sbus_frame_drop, uint16_t max_channels);
extern bool sbus1_output(uint16_t *values, uint16_t num_values);
extern bool sbus2_output(uint16_t *values, uint16_t num_values);
/** global debug level for isr_debug() */ /** global debug level for isr_debug() */
extern volatile uint8_t debug_level; extern volatile uint8_t debug_level;
+12 -3
View File
@@ -463,9 +463,18 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
#ifdef ENABLE_SBUS_OUT #ifdef ENABLE_SBUS_OUT
ENABLE_SBUS_OUT(value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | PX4IO_P_SETUP_FEATURES_SBUS2_OUT)); ENABLE_SBUS_OUT(value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | PX4IO_P_SETUP_FEATURES_SBUS2_OUT));
/* disable the conflicting options */ /* disable the conflicting options with SBUS 1 */
if (value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | PX4IO_P_SETUP_FEATURES_SBUS2_OUT)) { if (value & (PX4IO_P_SETUP_FEATURES_SBUS1_OUT)) {
value &= ~(PX4IO_P_SETUP_FEATURES_PWM_RSSI | PX4IO_P_SETUP_FEATURES_ADC_RSSI); value &= ~(PX4IO_P_SETUP_FEATURES_PWM_RSSI |
PX4IO_P_SETUP_FEATURES_ADC_RSSI |
PX4IO_P_SETUP_FEATURES_SBUS2_OUT);
}
/* disable the conflicting options with SBUS 2 */
if (value & (PX4IO_P_SETUP_FEATURES_SBUS2_OUT)) {
value &= ~(PX4IO_P_SETUP_FEATURES_PWM_RSSI |
PX4IO_P_SETUP_FEATURES_ADC_RSSI |
PX4IO_P_SETUP_FEATURES_SBUS1_OUT);
} }
#endif #endif
+13 -2
View File
@@ -93,7 +93,7 @@ int
sbus_init(const char *device) sbus_init(const char *device)
{ {
if (sbus_fd < 0) if (sbus_fd < 0)
sbus_fd = open(device, O_RDONLY | O_NONBLOCK); sbus_fd = open(device, O_RDWR | O_NONBLOCK);
if (sbus_fd >= 0) { if (sbus_fd >= 0) {
struct termios t; struct termios t;
@@ -113,10 +113,21 @@ sbus_init(const char *device)
} else { } else {
debug("S.Bus: open failed"); debug("S.Bus: open failed");
} }
return sbus_fd; return sbus_fd;
} }
bool
sbus1_output(uint16_t *values, uint16_t num_values)
{
write(sbus_fd, 'A', 1);
}
bool
sbus2_output(uint16_t *values, uint16_t num_values)
{
write(sbus_fd, 'B', 1);
}
bool bool
sbus_input(uint16_t *values, uint16_t *num_values, bool *sbus_failsafe, bool *sbus_frame_drop, uint16_t max_channels) sbus_input(uint16_t *values, uint16_t *num_values, bool *sbus_failsafe, bool *sbus_frame_drop, uint16_t max_channels)
{ {