Exemple #1
0
ssize_t iio_buffer_push(struct iio_buffer *buffer)
{
	const struct iio_device *dev = buffer->dev;
	ssize_t ret;

	if (buffer->dev_is_high_speed) {
		void *buf;
		ret = dev->ctx->ops->get_buffer(dev, &buf,
				buffer->data_length, buffer->mask, dev->words);
		if (ret >= 0) {
			buffer->buffer = buf;
			ret = (ssize_t) buffer->data_length;
		}
	} else {
		void *ptr = buffer->buffer;
		size_t tmp_len;

		/* iio_device_write_raw doesn't guarantee that all bytes are
		 * written */
		for (tmp_len = buffer->data_length; tmp_len; ) {
			ret = iio_device_write_raw(dev, ptr, tmp_len);
			if (ret < 0)
				goto out_reset_data_length;

			tmp_len -= ret;
			ptr = (void *) ((uintptr_t) ptr + ret);
		}

		ret = (ssize_t) buffer->data_length;
	}

out_reset_data_length:
	buffer->data_length = buffer->length;
	return ret;
}
Exemple #2
0
ssize_t iio_buffer_push(struct iio_buffer *buffer)
{
	const struct iio_device *dev = buffer->dev;

	if (buffer->dev_is_high_speed) {
		void *buf;
		ssize_t ret = dev->ctx->ops->get_buffer(dev,
				&buf, buffer->length, buffer->mask, dev->words);
		if (ret >= 0)
			buffer->buffer = buf;
		return ret;
	} else {
		size_t length = buffer->length;
		void *ptr = buffer->buffer;

		/* iio_device_write_raw doesn't guarantee that all bytes are
		 * written */
		while (length) {
			ssize_t ret = iio_device_write_raw(dev, ptr, length);
			if (ret < 0)
				return ret;

			length -= ret;
			ptr = (void *) ((uintptr_t) ptr + ret);
		}

		return (ssize_t) buffer->length;
	}
}