/* handle a request to change stream rate. Note that copter passes in save==false, as sending mavlink messages on copter on APM2 costs enough that it can cause flight issues, so we don't want the save to happen when the user connects the ground station. */ void GCS_MAVLINK::handle_request_data_stream(mavlink_message_t *msg, bool save) { mavlink_request_data_stream_t packet; mavlink_msg_request_data_stream_decode(msg, &packet); int16_t freq = 0; // packet frequency if (packet.start_stop == 0) freq = 0; // stop sending else if (packet.start_stop == 1) freq = packet.req_message_rate; // start sending else return; AP_Int16 *rate = NULL; switch (packet.req_stream_id) { case MAV_DATA_STREAM_ALL: // note that we don't set STREAM_PARAMS - that is internal only for (uint8_t i=0; i<STREAM_PARAMS; i++) { if (save) { streamRates[i].set_and_save_ifchanged(freq); } else { streamRates[i].set(freq); } } break; case MAV_DATA_STREAM_RAW_SENSORS: rate = &streamRates[STREAM_RAW_SENSORS]; break; case MAV_DATA_STREAM_EXTENDED_STATUS: rate = &streamRates[STREAM_EXTENDED_STATUS]; break; case MAV_DATA_STREAM_RC_CHANNELS: rate = &streamRates[STREAM_RC_CHANNELS]; break; case MAV_DATA_STREAM_RAW_CONTROLLER: rate = &streamRates[STREAM_RAW_CONTROLLER]; break; case MAV_DATA_STREAM_POSITION: rate = &streamRates[STREAM_POSITION]; break; case MAV_DATA_STREAM_EXTRA1: rate = &streamRates[STREAM_EXTRA1]; break; case MAV_DATA_STREAM_EXTRA2: rate = &streamRates[STREAM_EXTRA2]; break; case MAV_DATA_STREAM_EXTRA3: rate = &streamRates[STREAM_EXTRA3]; break; } if (rate != NULL) { if (save) { rate->set_and_save_ifchanged(freq); } else { rate->set(freq); } } }
/* set a int16 and save if changed */ void AP_AutoTune::save_int16_if_changed(AP_Int16 &v, int16_t value, const char *suffix) { int16_t old_value = v.get(); v.set(value); if (old_value != v.get()) { v.save(); log_param_change(v.get(), suffix); } }