3
"""steps.py: Calculate the stepped ramp levels used by Anduril.
4
Usage: steps.py floor ceiling num_steps
13
floor, ceil, steps = [int(x) for x in args[:3]]
14
for i in range(steps):
15
guess = floor + (i * (float(ceil-floor)/(steps-1)))
16
this = nearest_level(guess, floor, ceil, steps)
17
#print('%i: %i (guess: %i)' % (i+1, this, guess))
18
print('%i: %i' % (i+1, this))
21
def nearest_level(target, floor, ceil, steps):
22
"""Copied/adapted from anduril.c"""
24
# using int16_t here saves us a bunch of logic elsewhere,
25
# by allowing us to correct for numbers < 0 or > 255 in one central place
29
if (target < mode_min): return mode_min;
30
if (target > mode_max): return mode_max;
31
# the rest isn't relevant for smooth ramping
32
#if (! ramp_style): return target;
34
ramp_range = ceil - floor;
35
ramp_discrete_step_size = ramp_range / (steps-1);
38
for i in range(steps):
39
this_level = floor + (i * int(ramp_range) / (steps-1));
40
diff = int(target - this_level);
41
if (diff < 0): diff = -diff;
42
if (diff <= (ramp_discrete_step_size>>1)):
48
if __name__ == "__main__":