- for (i = 0; i < device->num_channels; i++) {
- ch = sr_channel_new(i, SR_CHANNEL_ANALOG, TRUE,
- device->channels[i].name);
- sdi->channels = g_slist_append(sdi->channels, ch);
+ ch_idx = 0;
+ for (ch_num = 0; ch_num < device->num_channels; ch_num++) {
+ /* Create one channel per measurable output unit. */
+ old_idx = ch_idx;
+ for (i = 0; i < ARRAY_SIZE(pci); i++) {
+ if (!scpi_cmd_get(sdi, pci[i].command))
+ continue;
+ g_snprintf(ch_name, 16, "%s%s", pci[i].prefix,
+ device->channels[ch_num].name);
+ ch = sr_channel_new(ch_idx++, SR_CHANNEL_ANALOG, TRUE, ch_name);
+ pch = g_malloc0(sizeof(struct pps_channel));
+ pch->hw_output_idx = ch_num;
+ pch->hwname = device->channels[ch_num].name;
+ pch->mq = pci[i].mq;
+ ch->priv = pch;
+ sdi->channels = g_slist_append(sdi->channels, ch);
+ }
+ if (ch_idx == old_idx) {
+ /*
+ * Didn't create any channels for this hardware output.
+ * This can happen if the device has no measurement capability.
+ */
+ g_free(pch);
+ continue;
+ }