diff options
-rw-r--r-- | error_utils.c | 20 | ||||
-rw-r--r-- | flash.c | 1 | ||||
-rw-r--r-- | globals.h | 3 |
3 files changed, 21 insertions, 3 deletions
diff --git a/error_utils.c b/error_utils.c index 503724d..718c40b 100644 --- a/error_utils.c +++ b/error_utils.c @@ -647,6 +647,21 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels]) } } + float real_max_ampl[max_channels]; + float real_min_ampl[max_channels]; + for (i=0; i<max_channels; i++) { + real_max_ampl[i]=globals.Flash.max_ampl[i]; + real_min_ampl[i]=globals.Flash.min_ampl[i]; + } + + // handle AVR-D3-B-MS1, where the two channels must have opposite polarities + if ( (globals.Flash.channels==2) && globals.Flash.chans_opposite_polarities && globals.Flash.ChanKey_amplitude) { + if (ChannelStateToTest[0].amplitude > 0.0) { + real_max_ampl[1] = 0.0; + } else { + real_min_ampl[1]= 0.0; + } + } for (i=0; (i<num_of_chan) && !early_quit; ++i) { /* Must be changing a setting */ @@ -1048,7 +1063,7 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels]) /* --- check minimum amplitude --- */ - globals.Constraints.err_min_ampl[i]=globals.Flash.min_ampl[i]; + globals.Constraints.err_min_ampl[i]=real_min_ampl[i]; if ( (globals.Constraints.err_min_ampl[i]>=0.0 && ChannelStateToTest[i].amplitude<(0.999*globals.Constraints.err_min_ampl[i])) || (globals.Constraints.err_min_ampl[i]<0.0 && ChannelStateToTest[i].amplitude<(1.001*globals.Constraints.err_min_ampl[i])) ) { @@ -1083,7 +1098,8 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels]) /* --- check maximum amplitude --- */ - globals.Constraints.err_max_ampl[i]=globals.Flash.max_ampl[i]; + globals.Constraints.err_max_ampl[i]=real_max_ampl[i]; + if ( (globals.Constraints.err_max_ampl[i]>=0.0 && ChannelStateToTest[i].amplitude>(1.001*globals.Constraints.err_max_ampl[i])) || (globals.Constraints.err_max_ampl[i]<0.0 && ChannelStateToTest[i].amplitude>(0.999*globals.Constraints.err_max_ampl[i])) ) { report_error=amplitude_upper_limit; @@ -462,6 +462,7 @@ static void initFlashValues(FlashStruct *mem) mem->self_cal_typical_time_sec=0; mem->prf_limiter=1; + mem->chans_opposite_polarities=0; mem->pcb116c_mon=1; /* more recent ADC, different reading code */ mem->warn_even_if_output_off=0; @@ -456,8 +456,9 @@ typedef struct { char self_cal; /* 242 */ char prf_limiter; /* 243 */ + char chans_opposite_polarities; /* 244 */ - char spare_padding[12]; /* 244 - padding between common and per-channel sections of the */ + char spare_padding[11]; /* 245 - padding between common and per-channel sections of the */ /* flash eeprom. Adjust size if variables added to common section, */ /* so that per-channel section starts at 256 */ |