diff options
Diffstat (limited to 'device-functions.c')
-rw-r--r-- | device-functions.c | 69 |
1 files changed, 41 insertions, 28 deletions
diff --git a/device-functions.c b/device-functions.c index 3b1bf22..879ae73 100644 --- a/device-functions.c +++ b/device-functions.c @@ -89,7 +89,7 @@ void Main_Rst (void) globals.ChannelState[i].pw=0.0; } - globals.ChannelState[i].amplitude = rst_fixed_ampl_point(i); + globals.ChannelState[i].amplitude = rst_ampl_value(i); globals.ChannelState[i].offset=0.0; globals.ChannelState[i].zout=globals.Flash.zout_min[i]; @@ -4480,41 +4480,54 @@ int number_of_fixed_ampl_points(int channel) } -float rst_fixed_ampl_point (int channel) +float rst_ampl_value (int channel) { // smallest positive value, or zero - int i, max, pos_count, neg_count; - pos_count = 0; - neg_count = 0; - - float smallest_pos, smallest_neg; - smallest_pos = 1e9; - smallest_neg = -1e9; - + int max; max = number_of_fixed_ampl_points(channel); - // any zeroes? - for (i=0; i<max; i++) { - if (globals.Flash.fixed_ampl_points[channel][i] >= 0.0 ) { - ++pos_count; - if (globals.Flash.fixed_ampl_points[channel][i] < smallest_pos) { - smallest_pos = globals.Flash.fixed_ampl_points[channel][i]; - } - } else if (globals.Flash.fixed_ampl_points[channel][i] < 0.0 ) { - ++neg_count; - if (globals.Flash.fixed_ampl_points[channel][i] > smallest_neg) { - smallest_neg = globals.Flash.fixed_ampl_points[channel][i]; + if (max == 0) { + // not a unit that uses a list of fixed amplitudes + + if ((globals.Flash.min_ampl[channel] > 0.0) && (globals.Flash.max_ampl[channel] > 0.0)) { + // both min and max ampls are positive, range does not include zero. AVR-D4-B. + return globals.Flash.min_ampl[channel]; + } else { + // normal unit + return 0.0; + } + } else { + int i, pos_count, neg_count; + pos_count = 0; + neg_count = 0; + + float smallest_pos, smallest_neg; + smallest_pos = 1e9; + smallest_neg = -1e9; + + // any zeroes? + for (i=0; i<max; i++) { + if (globals.Flash.fixed_ampl_points[channel][i] >= 0.0 ) { + ++pos_count; + if (globals.Flash.fixed_ampl_points[channel][i] < smallest_pos) { + smallest_pos = globals.Flash.fixed_ampl_points[channel][i]; + } + } else if (globals.Flash.fixed_ampl_points[channel][i] < 0.0 ) { + ++neg_count; + if (globals.Flash.fixed_ampl_points[channel][i] > smallest_neg) { + smallest_neg = globals.Flash.fixed_ampl_points[channel][i]; + } } } - } - if (pos_count > 0) { - return smallest_pos; - } else if (neg_count > 0) { - return smallest_neg; - } else { - return 0.0; + if (pos_count > 0) { + return smallest_pos; + } else if (neg_count > 0) { + return smallest_neg; + } else { + return 0.0; + } } } |