libiio
Classes | Functions
Block

Classes

struct  iio_block
 A block of memory containing data samples. More...
 

Functions

__api __check_ret struct iio_blockiio_buffer_create_block (struct iio_buffer *buffer, size_t size)
 Create a data block for the given buffer. More...
 
__api void iio_block_destroy (struct iio_block *block)
 Destroy the given block. More...
 
__api void * iio_block_start (const struct iio_block *block)
 Get the start address of the block. More...
 
__api void * iio_block_first (const struct iio_block *block, const struct iio_channel *chn)
 Find the first sample of a channel in a block. More...
 
__api void * iio_block_end (const struct iio_block *block)
 Get the address after the last sample in a block. More...
 
__api __check_ret ssize_t iio_block_foreach_sample (const struct iio_block *block, const struct iio_channels_mask *mask, ssize_t(*callback)(const struct iio_channel *chn, void *src, size_t bytes, void *d), void *data)
 Call the supplied callback for each sample found in a block. More...
 
__api int iio_block_enqueue (struct iio_block *block, size_t bytes_used, bool cyclic)
 Enqueue the given iio_block to the buffer's queue. More...
 
__api int iio_block_dequeue (struct iio_block *block, bool nonblock)
 Dequeue the given iio_block from the buffer's queue. More...
 
__api struct iio_bufferiio_block_get_buffer (const struct iio_block *block)
 Retrieve a pointer to the iio_buffer structure. More...
 

Detailed Description

Function Documentation

◆ iio_block_dequeue()

__api int iio_block_dequeue ( struct iio_block block,
bool  nonblock 
)

Dequeue the given iio_block from the buffer's queue.

Parameters
blockA pointer to an iio_block structure
nonblockif True, the operation won't block and return -EBUSY if the block is not ready for dequeue.
Returns
On success, 0 is returned
On error, a negative error code is returned

◆ iio_block_destroy()

__api void iio_block_destroy ( struct iio_block block)

Destroy the given block.

Parameters
blockA pointer to an iio_block structure

◆ iio_block_end()

__api void* iio_block_end ( const struct iio_block block)

Get the address after the last sample in a block.

Parameters
blockA pointer to an iio_block structure
Returns
A pointer corresponding to the address that follows the last sample present in the buffer

◆ iio_block_enqueue()

__api int iio_block_enqueue ( struct iio_block block,
size_t  bytes_used,
bool  cyclic 
)

Enqueue the given iio_block to the buffer's queue.

Parameters
blockA pointer to an iio_block structure
bytes_usedThe size of the data from the iio_block to be written, in bytes
cyclicIf True, enable cyclic mode. The block's content will be repeated on the hardware's output until the buffer is cancelled or destroyed.
Returns
On success, 0 is returned
On error, a negative error code is returned

NOTE: After iio_block_enqueue is called, the block's data must not be accessed until iio_block_dequeue successfully returns.

◆ iio_block_first()

__api void* iio_block_first ( const struct iio_block block,
const struct iio_channel chn 
)

Find the first sample of a channel in a block.

Parameters
bufA pointer to an iio_block structure
chnA pointer to an iio_channel structure
Returns
A pointer to the first sample found, or to the end of the block if no sample for the given channel is present in the block

NOTE: This function, coupled with iio_block_end, can be used to iterate on all the samples of a given channel present in the block, doing the following:

for (void *ptr = iio_block_first(block, chn);
     ptr < iio_block_end(block);
     ptr += iio_device_get_sample_size(dev, mask)) {
   ....
}

The iio_channel passed as argument must be from the iio_device that was used to create the iio_buffer and then the iio_block, otherwise the result is undefined.

◆ iio_block_foreach_sample()

__api __check_ret ssize_t iio_block_foreach_sample ( const struct iio_block block,
const struct iio_channels_mask mask,
ssize_t(*)(const struct iio_channel *chn, void *src, size_t bytes, void *d)  callback,
void *  data 
)

Call the supplied callback for each sample found in a block.

Parameters
blockA pointer to an iio_block structure
callbackA pointer to a function to call for each sample found
dataA user-specified pointer that will be passed to the callback
Returns
number of bytes processed.

NOTE: The callback receives four arguments:

  • A pointer to the iio_channel structure corresponding to the sample,
  • A pointer to the sample itself,
  • The length of the sample in bytes,
  • The user-specified pointer passed to iio_block_foreach_sample.

◆ iio_block_get_buffer()

__api struct iio_buffer* iio_block_get_buffer ( const struct iio_block block)

Retrieve a pointer to the iio_buffer structure.

Parameters
blockA pointer to an iio_block structure
Returns
A pointer to an iio_buffer structure

◆ iio_block_start()

__api void* iio_block_start ( const struct iio_block block)

Get the start address of the block.

Parameters
bufA pointer to an iio_block structure
Returns
A pointer corresponding to the start address of the block

◆ iio_buffer_create_block()

__api __check_ret struct iio_block* iio_buffer_create_block ( struct iio_buffer buffer,
size_t  size 
)

Create a data block for the given buffer.

Parameters
bufA pointer to an iio_buffer structure
sizeThe size of the block to create, in bytes
Returns
On success, a pointer to an iio_block structure
On failure, a pointer-encoded error is returned