+ std_session_send_df_header(sdi);
+
+ front_selected = rear_selected = FALSE;
+ devc->active_channels = NULL;
+
+ for (channels = sdi->channels; channels; channels = channels->next) {
+ channel = channels->data;
+
+ if (!channel->enabled)
+ continue;
+
+ chanc = channel->priv;
+
+ if (chanc->location == CONN_FRONT)
+ front_selected = TRUE;
+ if (chanc->location == CONN_REAR)
+ rear_selected = TRUE;
+
+ devc->active_channels = g_slist_append(devc->active_channels, channel);
+ }
+
+ if (front_selected && rear_selected) {
+ sr_err("Can not use front and rear channels at the same time!");
+ g_slist_free(devc->active_channels);
+ return SR_ERR_ARG;
+ }
+
+ devc->num_active_channels = g_slist_length(devc->active_channels);
+ if (!devc->num_active_channels) {
+ sr_err("Need at least one active channel!");
+ g_slist_free(devc->active_channels);
+ return SR_ERR_ARG;
+ }
+ devc->current_channel = devc->active_channels->data;
+
+ hp_3457a_select_input(sdi, front_selected ? CONN_FRONT : CONN_REAR);
+
+ /* For plug-in cards, use the scan-advance features to scan channels. */
+ if (rear_selected && (devc->rear_card->card_id != REAR_TERMINALS)) {
+ create_channel_index_list(devc->active_channels, &ch_list);
+ hp_3457a_send_scan_list(sdi, (void *)ch_list->data, ch_list->len);
+ sr_scpi_send(scpi, "SADV AUTO");
+ g_array_free(ch_list, TRUE);
+ }