summaryrefslogtreecommitdiff
path: root/device-functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'device-functions.c')
-rw-r--r--device-functions.c69
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;
+ }
}
}