Skip to content

Commit

Permalink
Revert "refactor: map_ui16 - matching argument types"
Browse files Browse the repository at this point in the history
This reverts commit 08878fb.
  • Loading branch information
dzid26 committed Jul 12, 2024
1 parent b700ed3 commit e0d4c10
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 22 deletions.
44 changes: 24 additions & 20 deletions src/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,43 @@
#include "stm8s.h"
#include "common.h"

uint16_t map_ui16(uint16_t in, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max) {
// If input is out of bounds, clamp it to the nearest boundary value
if (in <= in_min) {return out_min;}
if (in >= in_max) {return out_max;}

// Calculate the input and output ranges
uint16_t in_range = in_max - in_min;
uint16_t out_range = (out_max > out_min) ? (out_max - out_min) : (out_min - out_max);

// Make round up if mapping bigger ranges to smaller ranges
if (in_range > out_range) {
out_range = out_range + 1U;
int16_t map_ui16(int16_t x, int16_t in_min, int16_t in_max, int16_t out_min, int16_t out_max) {
// if input min is smaller than output min, return the output min value
if (x < in_min) {
return out_min;
}

// if input max is bigger than output max, return the output max value
else if (x > in_max) {
return out_max;
}

// map the input to the output range, round up if mapping bigger ranges to smaller ranges
else if ((in_max - in_min) > (out_max - out_min)) {
return (int16_t)(((int32_t)(x - in_min) * (out_max - out_min + 1)) / (in_max - in_min + 1)) + out_min;
}

// map the input to the output range, round down if mapping smaller ranges to bigger ranges
else {
return (int16_t)(((int32_t)(x - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min;
}
uint32_t scaled_value = ((uint32_t)(uint16_t)(in - in_min) * out_range) / in_range;
uint16_t out = (uint16_t)(uint32_t)(scaled_value + out_min);
return out;
}

uint8_t map_ui8(uint8_t in, uint8_t in_min, uint8_t in_max, uint8_t out_min, uint8_t out_max) {
uint8_t map_ui8(uint8_t x, uint8_t in_min, uint8_t in_max, uint8_t out_min, uint8_t out_max) {
// if input min is smaller than output min, return the output min value
if (in <= in_min) {
if (x <= in_min) {
return out_min;
}

// if input max is bigger than output max, return the output max value
if (in >= in_max) {
if (x >= in_max) {
return out_max;
}

if (out_max < out_min)
return (uint16_t)out_min - (uint16_t)((uint8_t)(in - in_min) * (uint8_t)(out_min - out_max)) / (uint8_t)(in_max - in_min);
return (uint16_t)out_min - (uint16_t)((uint8_t)(x - in_min) * (uint8_t)(out_min - out_max)) / (uint8_t)(in_max - in_min);
else
return (uint16_t)out_min + (uint16_t)((uint8_t)(in - in_min) * (uint8_t)(out_max - out_min)) / (uint8_t)(in_max - in_min);
return (uint16_t)out_min + (uint16_t)((uint8_t)(x - in_min) * (uint8_t)(out_max - out_min)) / (uint8_t)(in_max - in_min);
}

uint8_t ui8_min(uint8_t value_a, uint8_t value_b) {
Expand Down
4 changes: 2 additions & 2 deletions src/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@
//#define ADVANCED_MODE 1
//#define CALIBRATION_MODE 2

uint16_t map_ui16(uint16_t in, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max);
uint8_t map_ui8(uint8_t in, uint8_t in_min, uint8_t in_max, uint8_t out_min, uint8_t out_max);
int16_t map_ui16(int16_t x, int16_t in_min, int16_t in_max, int16_t out_min, int16_t out_max);
uint8_t map_ui8(uint8_t x, uint8_t in_min, uint8_t in_max, uint8_t out_max, uint8_t out_min);
uint8_t ui8_max(uint8_t value_a, uint8_t value_b);
uint8_t ui8_min(uint8_t value_a, uint8_t value_b);
uint16_t filter(uint16_t ui16_new_value, uint16_t ui16_old_value, uint8_t ui8_alpha);
Expand Down

0 comments on commit e0d4c10

Please sign in to comment.