From: Jonathan Cameron <jic23@kernel.org>
To: Hartmut Knaack <knaack.h@gmx.de>, linux-iio@vger.kernel.org
Cc: Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald <pmeerw@pmeerw.net>,
Roberta Dobrescu <roberta.dobrescu@gmail.com>,
Daniel Baluta <daniel.baluta@intel.com>,
Irina Tirdea <irina.tirdea@intel.com>
Subject: Re: [PATCH 12/32] tools:iio:generic_buffer: sign-extend and shift data
Date: Sun, 31 May 2015 17:41:28 +0100 [thread overview]
Message-ID: <556B39B8.9070001@kernel.org> (raw)
In-Reply-To: <09b071f8d6ae17166a1230ee8708ed65f2e2978d.1433072539.git.knaack.h@gmx.de>
On 31/05/15 13:39, Hartmut Knaack wrote:
> Refactor process_scan() to handle signed and unsigned data, respect shifts
> and the data mask for 2, 4 and 8 byte sized scan elements.
>
> Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
Nice clean up though diff had fun mixing the lines of code
to make the patch appear interesting at times ;)
Applied.
> ---
> tools/iio/generic_buffer.c | 97 +++++++++++++++++++++++++++++-----------------
> 1 file changed, 62 insertions(+), 35 deletions(-)
>
> diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c
> index a3cf8e3..bd974b8 100644
> --- a/tools/iio/generic_buffer.c
> +++ b/tools/iio/generic_buffer.c
> @@ -59,33 +59,80 @@ int size_from_channelarray(struct iio_channel_info *channels, int num_channels)
> return bytes;
> }
>
> -void print2byte(int input, struct iio_channel_info *info)
> +void print2byte(uint16_t input, struct iio_channel_info *info)
> {
> /* First swap if incorrect endian */
> if (info->be)
> - input = be16toh((uint16_t)input);
> + input = be16toh(input);
> else
> - input = le16toh((uint16_t)input);
> + input = le16toh(input);
>
> /*
> * Shift before conversion to avoid sign extension
> * of left aligned data
> */
> input >>= info->shift;
> + input &= info->mask;
> if (info->is_signed) {
> - int16_t val = input;
> + int16_t val = (int16_t)(input << (16 - info->bits_used)) >>
> + (16 - info->bits_used);
> + printf("%05f ", ((float)val + info->offset) * info->scale);
> + } else {
> + printf("%05f ", ((float)input + info->offset) * info->scale);
> + }
> +}
>
> - val &= (1 << info->bits_used) - 1;
> - val = (int16_t)(val << (16 - info->bits_used)) >>
> - (16 - info->bits_used);
> - printf("%05f ", ((float)val + info->offset)*info->scale);
> +void print4byte(uint32_t input, struct iio_channel_info *info)
> +{
> + /* First swap if incorrect endian */
> + if (info->be)
> + input = be32toh(input);
> + else
> + input = le32toh(input);
> +
> + /*
> + * Shift before conversion to avoid sign extension
> + * of left aligned data
> + */
> + input >>= info->shift;
> + input &= info->mask;
> + if (info->is_signed) {
> + int32_t val = (int32_t)(input << (32 - info->bits_used)) >>
> + (32 - info->bits_used);
> + printf("%05f ", ((float)val + info->offset) * info->scale);
> } else {
> - uint16_t val = input;
> + printf("%05f ", ((float)input + info->offset) * info->scale);
> + }
> +}
>
> - val &= (1 << info->bits_used) - 1;
> - printf("%05f ", ((float)val + info->offset)*info->scale);
> +void print8byte(uint64_t input, struct iio_channel_info *info)
> +{
> + /* First swap if incorrect endian */
> + if (info->be)
> + input = be64toh(input);
> + else
> + input = le64toh(input);
> +
> + /*
> + * Shift before conversion to avoid sign extension
> + * of left aligned data
> + */
> + input >>= info->shift;
> + input &= info->mask;
> + if (info->is_signed) {
> + int64_t val = (int64_t)(input << (64 - info->bits_used)) >>
> + (64 - info->bits_used);
> + /* special case for timestamp */
> + if (info->scale == 1.0f && info->offset == 0.0f)
> + printf("%" PRId64 " ", val);
> + else
> + printf("%05f ",
> + ((float)val + info->offset) * info->scale);
> + } else {
> + printf("%05f ", ((float)input + info->offset) * info->scale);
> }
> }
> +
> /**
> * process_scan() - print out the values in SI units
> * @data: pointer to the start of the scan
> @@ -108,32 +155,12 @@ void process_scan(char *data,
> &channels[k]);
> break;
> case 4:
> - if (!channels[k].is_signed) {
> - uint32_t val = *(uint32_t *)
> - (data + channels[k].location);
> - printf("%05f ", ((float)val +
> - channels[k].offset)*
> - channels[k].scale);
> -
> - }
> + print4byte(*(uint32_t *)(data + channels[k].location),
> + &channels[k]);
> break;
> case 8:
> - if (channels[k].is_signed) {
> - int64_t val = *(int64_t *)
> - (data +
> - channels[k].location);
> - if ((val >> channels[k].bits_used) & 1)
> - val = (val & channels[k].mask) |
> - ~channels[k].mask;
> - /* special case for timestamp */
> - if (channels[k].scale == 1.0f &&
> - channels[k].offset == 0.0f)
> - printf("%" PRId64 " ", val);
> - else
> - printf("%05f ", ((float)val +
> - channels[k].offset)*
> - channels[k].scale);
> - }
> + print8byte(*(uint64_t *)(data + channels[k].location),
> + &channels[k]);
> break;
> default:
> break;
>
next prev parent reply other threads:[~2015-06-01 21:16 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-31 12:39 [PATCH 00/32] iio-tools out-of-staging cleanup Hartmut Knaack
2015-05-31 12:39 ` [PATCH 01/32] tools:iio:generic_buffer: fix order of freeing data Hartmut Knaack
2015-05-31 16:13 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 02/32] tools:iio:generic_buffer: free dev_dir_name on exit Hartmut Knaack
2015-05-31 16:17 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 03/32] tools:iio:iio_utils: free scan_el_dir " Hartmut Knaack
2015-05-31 16:19 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 04/32] tools:iio: free channel-array completely Hartmut Knaack
2015-05-31 16:20 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 05/32] tools:iio:iio_utils: fix allocation handling Hartmut Knaack
2015-05-31 16:23 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 06/32] tools:iio:generic_buffer: add check before free Hartmut Knaack
2015-05-31 16:29 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 07/32] tools:iio:lsiio: add closedir before exit Hartmut Knaack
2015-05-31 16:30 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 08/32] tools:iio: save errno first Hartmut Knaack
2015-05-31 16:33 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 09/32] tools:iio:iio_event_monitor: save right errno Hartmut Knaack
2015-05-31 16:34 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 10/32] tools:iio:generic_buffer: fix check of errno Hartmut Knaack
2015-05-31 16:35 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 11/32] tools:iio:generic_buffer: pass up right error code Hartmut Knaack
2015-05-31 16:36 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 12/32] tools:iio:generic_buffer: sign-extend and shift data Hartmut Knaack
2015-05-31 16:41 ` Jonathan Cameron [this message]
2015-05-31 12:39 ` [PATCH 13/32] tools:iio:iio_utils: check amount of matches Hartmut Knaack
2015-05-31 16:41 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 14/32] tools:iio:iio_utils: implement digit calculation Hartmut Knaack
2015-05-31 18:19 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 15/32] tools:iio:iio_utils: mark private function static Hartmut Knaack
2015-05-31 12:40 ` [PATCH 16/32] tools:iio: catch errors in string allocation Hartmut Knaack
2015-05-31 18:21 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 17/32] tools:iio:generic_buffer: catch errors for arguments conversion Hartmut Knaack
2015-05-31 12:40 ` [PATCH 18/32] tools:iio:generic_buffer: add error handling Hartmut Knaack
2015-05-31 12:40 ` [PATCH 19/32] tools:iio:iio_event_monitor: " Hartmut Knaack
2015-05-31 18:25 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 20/32] tools:iio:iio_event_monitor: check if event is fully read Hartmut Knaack
2015-05-31 18:36 ` Jonathan Cameron
2015-06-01 22:00 ` Hartmut Knaack
2015-05-31 12:40 ` [PATCH 21/32] tools:iio:iio_utils: add error handling Hartmut Knaack
2015-05-31 18:44 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 22/32] tools:iio:lsiio: " Hartmut Knaack
2015-05-31 18:45 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 23/32] tools:iio:iio_utils: add missing documentation Hartmut Knaack
2015-06-01 7:33 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 24/32] tools:iio: return values directly Hartmut Knaack
2015-06-01 7:34 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 25/32] tools:iio:iio_event_monitor: refactor events output Hartmut Knaack
2015-06-01 7:34 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 26/32] tools:iio:iio_utils: refactor assignment of is_signed Hartmut Knaack
2015-06-01 7:35 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 27/32] tools:iio:iio_utils: move up reset of sysfsfp Hartmut Knaack
2015-06-01 7:37 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 28/32] tools:iio:iio_utils: initialize count during declaration Hartmut Knaack
2015-06-01 7:38 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 29/32] tools:iio: rework program parameters Hartmut Knaack
2015-06-01 7:40 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 30/32] tools:iio:iio_utils: pass strings as const Hartmut Knaack
2015-06-01 7:40 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 31/32] tools:iio: adjust coding style Hartmut Knaack
2015-06-01 7:46 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 32/32] tools:iio: rename variables Hartmut Knaack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=556B39B8.9070001@kernel.org \
--to=jic23@kernel.org \
--cc=daniel.baluta@intel.com \
--cc=irina.tirdea@intel.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
--cc=roberta.dobrescu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).