|
|
|
@ -90,21 +90,21 @@ static void handle_process_do_command()
@@ -90,21 +90,21 @@ static void handle_process_do_command()
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case MAV_CMD_DO_SET_SERVO: |
|
|
|
|
do_set_servo(next_nonnav_command.p1, next_nonnav_command.alt); |
|
|
|
|
ServoRelayEvents.do_set_servo(next_nonnav_command.p1, next_nonnav_command.alt); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case MAV_CMD_DO_SET_RELAY: |
|
|
|
|
do_set_relay(next_nonnav_command.p1, next_nonnav_command.alt); |
|
|
|
|
ServoRelayEvents.do_set_relay(next_nonnav_command.p1, next_nonnav_command.alt); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case MAV_CMD_DO_REPEAT_SERVO: |
|
|
|
|
do_repeat_servo(next_nonnav_command.p1, next_nonnav_command.alt, |
|
|
|
|
next_nonnav_command.lat, next_nonnav_command.lng); |
|
|
|
|
ServoRelayEvents.do_repeat_servo(next_nonnav_command.p1, next_nonnav_command.alt, |
|
|
|
|
next_nonnav_command.lat, next_nonnav_command.lng); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case MAV_CMD_DO_REPEAT_RELAY: |
|
|
|
|
do_repeat_relay(next_nonnav_command.p1, next_nonnav_command.alt, |
|
|
|
|
next_nonnav_command.lat); |
|
|
|
|
ServoRelayEvents.do_repeat_relay(next_nonnav_command.p1, next_nonnav_command.alt, |
|
|
|
|
next_nonnav_command.lat); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
#if CAMERA == ENABLED |
|
|
|
@ -616,61 +616,6 @@ static void do_set_home()
@@ -616,61 +616,6 @@ static void do_set_home()
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_set_servo(uint8_t channel, uint16_t pwm) |
|
|
|
|
{ |
|
|
|
|
if (event_state.type == EVENT_TYPE_SERVO && |
|
|
|
|
event_state.channel == channel) { |
|
|
|
|
event_state.repeat = 0; |
|
|
|
|
} |
|
|
|
|
servo_write(channel-1, pwm); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_set_relay(uint8_t relay_num, uint8_t state) |
|
|
|
|
{ |
|
|
|
|
if (event_state.type == EVENT_TYPE_RELAY && |
|
|
|
|
event_state.channel == relay_num) { |
|
|
|
|
event_state.repeat = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (state == 1) { |
|
|
|
|
gcs_send_text_fmt(PSTR("Relay on")); |
|
|
|
|
relay.on(relay_num); |
|
|
|
|
} else if (state == 0) { |
|
|
|
|
gcs_send_text_fmt(PSTR("Relay off")); |
|
|
|
|
relay.off(relay_num); |
|
|
|
|
} else { |
|
|
|
|
gcs_send_text_fmt(PSTR("Relay toggle")); |
|
|
|
|
relay.toggle(relay_num); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_repeat_servo(uint8_t channel, uint16_t servo_value, int16_t repeat, uint16_t delay_time_ms) |
|
|
|
|
{ |
|
|
|
|
if (channel < 5 || channel > 16) { |
|
|
|
|
// not allowed |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
event_state.channel = channel; |
|
|
|
|
event_state.type = EVENT_TYPE_SERVO; |
|
|
|
|
|
|
|
|
|
event_state.start_time_ms = 0; |
|
|
|
|
event_state.delay_ms = delay_time_ms / 2; |
|
|
|
|
event_state.repeat = repeat * 2; |
|
|
|
|
event_state.servo_value = servo_value; |
|
|
|
|
event_state.undo_value = RC_Channel::rc_channel(channel-1)->radio_trim; |
|
|
|
|
update_events(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_repeat_relay(uint8_t relay_num, int16_t count, uint32_t period_ms) |
|
|
|
|
{ |
|
|
|
|
event_state.type = EVENT_TYPE_RELAY; |
|
|
|
|
event_state.channel = relay_num; |
|
|
|
|
event_state.start_time_ms = 0; |
|
|
|
|
event_state.delay_ms = period_ms/2; // half cycle time |
|
|
|
|
event_state.repeat = count*2; // number of full cycles |
|
|
|
|
update_events(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// do_take_picture - take a picture with the camera library |
|
|
|
|
static void do_take_picture() |
|
|
|
|
{ |
|
|
|
|