mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 14:05:39 +00:00
tools: iio: Add single-byte case for generic_buffer
Some sensors export data in an 8-bit format. Add a single-byte case for the generic_buffer tool so that these sensors' buffer data can be visualized. Signed-off-by: Tiberiu Breana <tiberiu.a.breana@intel.com> Reviewed-by: Hartmut Knaack <knaack.h@gmx.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
12ebb05246
commit
e8d0927a19
@ -61,6 +61,23 @@ int size_from_channelarray(struct iio_channel_info *channels, int num_channels)
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print1byte(uint8_t input, struct iio_channel_info *info)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Shift before conversion to avoid sign extension
|
||||||
|
* of left aligned data
|
||||||
|
*/
|
||||||
|
input >>= info->shift;
|
||||||
|
input &= info->mask;
|
||||||
|
if (info->is_signed) {
|
||||||
|
int8_t val = (int8_t)(input << (8 - info->bits_used)) >>
|
||||||
|
(8 - info->bits_used);
|
||||||
|
printf("%05f ", ((float)val + info->offset) * info->scale);
|
||||||
|
} else {
|
||||||
|
printf("%05f ", ((float)input + info->offset) * info->scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void print2byte(uint16_t input, struct iio_channel_info *info)
|
void print2byte(uint16_t input, struct iio_channel_info *info)
|
||||||
{
|
{
|
||||||
/* First swap if incorrect endian */
|
/* First swap if incorrect endian */
|
||||||
@ -152,6 +169,10 @@ void process_scan(char *data,
|
|||||||
for (k = 0; k < num_channels; k++)
|
for (k = 0; k < num_channels; k++)
|
||||||
switch (channels[k].bytes) {
|
switch (channels[k].bytes) {
|
||||||
/* only a few cases implemented so far */
|
/* only a few cases implemented so far */
|
||||||
|
case 1:
|
||||||
|
print1byte(*(uint8_t *)(data + channels[k].location),
|
||||||
|
&channels[k]);
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
print2byte(*(uint16_t *)(data + channels[k].location),
|
print2byte(*(uint16_t *)(data + channels[k].location),
|
||||||
&channels[k]);
|
&channels[k]);
|
||||||
|
Loading…
Reference in New Issue
Block a user