void * iio_buffer_first(const struct iio_buffer *buffer, const struct iio_channel *chn) { size_t len; unsigned int i; uintptr_t ptr = (uintptr_t) buffer->buffer; if (!iio_channel_is_enabled(chn)) return iio_buffer_end(buffer); for (i = 0; i < buffer->dev->nb_channels; i++) { struct iio_channel *cur = buffer->dev->channels[i]; len = cur->format.length / 8; /* NOTE: dev->channels are ordered by index */ if (cur->index < 0 || cur->index == chn->index) break; /* Test if the buffer has samples for this channel */ if (!TEST_BIT(buffer->mask, cur->index)) continue; if (ptr % len) ptr += len - (ptr % len); ptr += len; } len = chn->format.length / 8; if (ptr % len) ptr += len - (ptr % len); return (void *) ptr; }
bool iio_device_is_tx(const struct iio_device *dev) { unsigned int i; for (i = 0; i < dev->nb_channels; i++) { struct iio_channel *ch = dev->channels[i]; if (iio_channel_is_output(ch) && iio_channel_is_enabled(ch)) return true; } return false; }