Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
sensor_decoder_api Struct Reference

Decodes a single raw data buffer. More...

#include <sensor.h>

Data Fields

int(* get_frame_count )(const uint8_t *buffer, enum sensor_channel channel, size_t channel_idx, uint16_t *frame_count)
 Get the number of frames in the current buffer.
 
int(* get_size_info )(enum sensor_channel channel, size_t *base_size, size_t *frame_size)
 Get the size required to decode a given channel.
 
int(* decode )(const uint8_t *buffer, enum sensor_channel channel, size_t channel_idx, uint32_t *fit, uint16_t max_count, void *data_out)
 Decode up to max_count samples from the buffer.
 
bool(* has_trigger )(const uint8_t *buffer, enum sensor_trigger_type trigger)
 Check if the given trigger type is present.
 

Detailed Description

Decodes a single raw data buffer.

Data buffers are provided on the RTIO context that's supplied to sensor_read.

Field Documentation

◆ decode

int(* sensor_decoder_api::decode) (const uint8_t *buffer, enum sensor_channel channel, size_t channel_idx, uint32_t *fit, uint16_t max_count, void *data_out)

Decode up to max_count samples from the buffer.

Decode samples of channel sensor_channel across multiple frames. If there exist multiple instances of the same channel, channel_index is used to differentiate them. As an example, assume a sensor provides 2 distance measurements:

// Decode the first channel instance of 'distance'
decoder->decode(buffer, SENSOR_CHAN_DISTANCE, 0, &fit, 5, out);
...
// Decode the second channel instance of 'distance'
decoder->decode(buffer, SENSOR_CHAN_DISTANCE, 1, &fit, 5, out);
@ SENSOR_CHAN_DISTANCE
Distance.
Definition: sensor.h:119
Parameters
[in]bufferThe buffer provided on the RTIO context
[in]channelThe channel to decode
[in]channel_idxThe index of the channel
[in,out]fitThe current frame iterator
[in]max_countThe maximum number of channels to decode.
[out]data_outThe decoded data
Returns
0 no more samples to decode
>0 the number of decoded frames
<0 on error

◆ get_frame_count

int(* sensor_decoder_api::get_frame_count) (const uint8_t *buffer, enum sensor_channel channel, size_t channel_idx, uint16_t *frame_count)

Get the number of frames in the current buffer.

Parameters
[in]bufferThe buffer provided on the RTIO context.
[in]channelThe channel to get the count for
[in]channel_idxThe index of the channel
[out]frame_countThe number of frames on the buffer (at least 1)
Returns
0 on success
-ENOTSUP if the channel/channel_idx aren't found

◆ get_size_info

int(* sensor_decoder_api::get_size_info) (enum sensor_channel channel, size_t *base_size, size_t *frame_size)

Get the size required to decode a given channel.

When decoding a single frame, use base_size. For every additional frame, add another frame_size. As an example, to decode 3 frames use: 'base_size + 2 * frame_size'.

Parameters
[in]channelThe channel to query
[out]base_sizeThe size of decoding the first frame
[out]frame_sizeThe additional size of every additional frame
Returns
0 on success
-ENOTSUP if the channel is not supported

◆ has_trigger

bool(* sensor_decoder_api::has_trigger) (const uint8_t *buffer, enum sensor_trigger_type trigger)

Check if the given trigger type is present.

Parameters
[in]bufferThe buffer provided on the RTIO context
[in]triggerThe trigger type in question
Returns
Whether the trigger is present in the buffer

The documentation for this struct was generated from the following file: