1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/analog_util/dac_util.c
Joshua DeWeese 86d751d4d3 sys/analog_util/dac_util: fix truncation bug
In `dac_util_map(...)` the expression `((value - min) * UINT16_MAX)` was
cast to a 16 bit unsigned, then divided by `(max - min)`. This means
that anytime `(value - min) != 0` the numerator was truncated prior to
being divided and then returned.

This patch modifies the expression so that the downcast to 16 bits is
performed as the last operation.
2022-12-09 13:58:12 -05:00

34 lines
713 B
C

/*
* Copyright (C) 2015 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup sys_analog_util
* @{
*
* @file
* @brief DAC utility function implementation
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*
* @}
*/
#include <limits.h>
#include "analog_util.h"
uint16_t dac_util_map(int value, int min, int max)
{
return (uint16_t)(((value - min) * UINT16_MAX) / (max - min));
}
uint16_t dac_util_mapf(float value, float min, float max)
{
return (uint16_t)(((value - min) * UINT16_MAX) / (max - min));
}