summaryrefslogtreecommitdiff
path: root/error_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'error_utils.c')
-rw-r--r--error_utils.c331
1 files changed, 111 insertions, 220 deletions
diff --git a/error_utils.c b/error_utils.c
index 3e2e4fd..08b8a11 100644
--- a/error_utils.c
+++ b/error_utils.c
@@ -44,6 +44,7 @@ void set_gpib_error_flags (int error_num)
case obsolete_feature:
case config_too_large:
case config_cant_be_negative:
+ case invalid_error_check:
GPIB_Set_Command_Error();
break;
case query_error_interrupted:
@@ -604,6 +605,10 @@ void get_error_text(gchar **response, int error_num)
format_error_text(response,-200,"Invalid execution path. Programming error.");
break;
+ case invalid_error_check:
+ format_error_text(response,-200,"Invalid error checking. Needs programming fix.");
+ break;
+
case Startup_Not_Finished:
format_error_text(response,-300,"Not ready for commands yet. Still booting up.");
break;
@@ -627,6 +632,46 @@ void get_error_text(gchar **response, int error_num)
}
+void check_starting_pos_max_value (float test_limit, float *running_limit, float proposed_value, int possible_error, int *actual_error) {
+
+ *running_limit = test_limit;
+
+ if (proposed_value > (*running_limit * 1.001)) {
+ *actual_error = possible_error;
+ }
+
+ if (test_limit < 0.0) {
+ *actual_error = invalid_error_check;
+ }
+}
+
+void check_another_pos_max_value (float test_limit, float *running_limit, float proposed_value, int possible_error, int *actual_error) {
+
+ if (test_limit < *running_limit) {
+ check_starting_pos_max_value (test_limit, running_limit, proposed_value, possible_error, actual_error);
+ }
+}
+
+void check_starting_pos_min_value (float test_limit, float *running_limit, float proposed_value, int possible_error, int *actual_error) {
+ *running_limit = test_limit;
+
+ if (proposed_value < (*running_limit * 0.999)) {
+ *actual_error = possible_error;
+ }
+
+ if (test_limit < 0.0) {
+ *actual_error = invalid_error_check;
+ }
+}
+
+void check_another_pos_min_value (float test_limit, float *running_limit, float proposed_value, int possible_error, int *actual_error) {
+
+ if (test_limit > *running_limit) {
+ check_starting_pos_min_value (test_limit, running_limit, proposed_value, possible_error, actual_error);
+ }
+}
+
+
int Error_check(ChannelStruct ChannelStateToTest[max_channels])
{
static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
@@ -838,112 +883,51 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
/* --- check minimum frequency --- */
- globals.Constraints.err_min_freq[i]=globals.Flash.min_freq[i];
-
- if (ChannelStateToTest[i].frequency<(0.999*globals.Constraints.err_min_freq[i])) {
- report_error=freq_lower_limit;
- }
+ check_starting_pos_min_value (globals.Flash.min_freq[i], &globals.Constraints.err_min_freq[i], ChannelStateToTest[i].frequency, freq_lower_limit, &report_error);
/* ------------------------------- */
/* --- check maximum frequency --- */
- globals.Constraints.err_max_freq[i]=globals.Flash.max_freq[i];
+ check_starting_pos_max_value (globals.Flash.max_freq[i], &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, freq_upper_limit, &report_error);
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=freq_upper_limit;
+ if ((globals.Flash.max_freq_for_high_ot[i] > 0.0) && (fabs(ChannelStateToTest[i].offset) > globals.Flash.high_ot[i])) {
+ check_another_pos_max_value (globals.Flash.max_freq_for_high_ot[i], &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, PRF_limited_by_offset, &report_error);
}
- if ( (globals.Flash.max_freq_for_high_ot[i] > 0.0) &&
- (fabs(ChannelStateToTest[i].offset) > globals.Flash.high_ot[i])) {
-
- temp = globals.Flash.max_freq_for_high_ot[i];
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=PRF_limited_by_offset;
- }
- }
- }
-
- if (fabs(ChannelStateToTest[i].delay)>1.0e-15) {
- temp=0.95/fabs(ChannelStateToTest[i].delay);
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=Delay_Exceeds_95Period;
- }
- }
- }
+ check_another_pos_max_value (0.95/fabs(ChannelStateToTest[i].delay), &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, Delay_Exceeds_95Period, &report_error);
if (globals.Flash.min_pw[i] > 0.0) {
- temp=1/ChannelStateToTest[i].pw;
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=PW_Exceeds_Period;
- }
- }
+
+ check_another_pos_max_value (1/ChannelStateToTest[i].pw, &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, PW_Exceeds_Period, &report_error);
if ( (ChannelStateToTest[i].burst_count>1)
&& (globals.Flash.max_burst_count[i]>1)
&& !globals.Flash.burst_func[i]) {
- temp=1/(ChannelStateToTest[i].burst_count * (ChannelStateToTest[i].pw+ChannelStateToTest[i].burst_time));
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=Burst_Exceeds_Period;
- }
- }
+ check_another_pos_max_value (1/(ChannelStateToTest[i].burst_count * (ChannelStateToTest[i].pw+ChannelStateToTest[i].burst_time)),
+ &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, Burst_Exceeds_Period, &report_error);
}
- temp=(1/ChannelStateToTest[i].pw)*(ampl_fixed_max_duty/duty_scale);
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=duty_cycle_upper_limit;
- }
- }
+ check_another_pos_max_value ((1/ChannelStateToTest[i].pw)*(ampl_fixed_max_duty/duty_scale),
+ &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, duty_cycle_upper_limit, &report_error);
if (ChannelStateToTest[i].double_pulse==double_on) {
// pulse sep must be less than one half-period
- temp = 0.5 / ChannelStateToTest[i].delay;
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=Double_Separation_Too_Large;
- }
- }
+ check_another_pos_max_value (0.5 / ChannelStateToTest[i].delay, &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, Double_Separation_Too_Large, &report_error);
}
if ((globals.Flash.max_avg_ampl[i]) > 0.0 && (fabs(ChannelStateToTest[i].amplitude)) > 0.0) {
- temp=100.0 * globals.Flash.max_avg_ampl[i] /
- (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].pw * duty_scale);
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=Average_Amplitude_Too_High;
- }
- }
+ temp=100.0 * globals.Flash.max_avg_ampl[i] / (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].pw * duty_scale);
+ check_another_pos_max_value (temp, &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, Average_Amplitude_Too_High, &report_error);
}
if ((globals.Flash.hvps_avg_curr_limit[i] > 0.0) && (fabs(ChannelStateToTest[i].amplitude) > 0.0) && (ChannelStateToTest[i].pw > 0.0)) {
temp=(100.0 / duty_scale) * globals.Flash.hvps_avg_curr_limit[i] * ChannelStateToTest[i].load_type /
(fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].pw);
- if (temp<globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i]=temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=HVPS_Current_Too_High;
- }
- }
+ check_another_pos_max_value (temp, &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, HVPS_Current_Too_High, &report_error);
}
if (globals.Flash.max_avg_power[i] > 0.0) {
temp = (globals.Flash.max_avg_power[i] * ChannelStateToTest[i].load_type) / (ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude * ChannelStateToTest[i].pw);
- if (temp < globals.Constraints.err_max_freq[i]) {
- globals.Constraints.err_max_freq[i] = temp;
- if (ChannelStateToTest[i].frequency>(1.001*globals.Constraints.err_max_freq[i])) {
- report_error=average_power_limit;
- }
- }
+ check_another_pos_max_value (temp, &globals.Constraints.err_max_freq[i], ChannelStateToTest[i].frequency, average_power_limit, &report_error);
}
}
/* ------------------------------- */
@@ -960,108 +944,58 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
/* --- check maximum pw ---------- */
- globals.Constraints.err_max_pw[i]=globals.Flash.max_pw[i];
+ check_starting_pos_max_value (globals.Flash.max_pw[i], &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, pw_upper_limit, &report_error);
/* polarity overrides */
- if ((ChannelStateToTest[i].amplitude >= 0.0) && (globals.Flash.max_pw_pol[i][0] > 0.0) && (globals.Constraints.err_max_pw[i] > globals.Flash.max_pw_pol[i][0])) {
- globals.Constraints.err_max_pw[i] = globals.Flash.max_pw_pol[i][0];
- } else if ((ChannelStateToTest[i].amplitude <0.0) && (globals.Flash.max_pw_pol[i][1] > 0.0) && (globals.Constraints.err_max_pw[i] > globals.Flash.max_pw_pol[i][1])) {
- globals.Constraints.err_max_pw[i] = globals.Flash.max_pw_pol[i][1];
- }
-
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=pw_upper_limit;
+ if ((ChannelStateToTest[i].amplitude >= 0.0) && (globals.Flash.max_pw_pol[i][0] > 0.0)) {
+ check_another_pos_max_value (globals.Flash.max_pw_pol[i][0], &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, pw_upper_limit, &report_error);
+ } else if ((ChannelStateToTest[i].amplitude <0.0) && (globals.Flash.max_pw_pol[i][1] > 0.0)) {
+ check_another_pos_max_value (globals.Flash.max_pw_pol[i][1], &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, pw_upper_limit, &report_error);
}
// RC limit, as per AVR-8F-B
- temp = globals.Flash.cap_for_pw_rc_limit[i] * ChannelStateToTest[i].load_type;
- if ((temp > 0.0) && (temp<globals.Constraints.err_max_pw[i])) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=pw_rc_limit;
- }
- }
+ check_another_pos_max_value (globals.Flash.cap_for_pw_rc_limit[i] * ChannelStateToTest[i].load_type,
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, pw_rc_limit, &report_error);
if (ChannelStateToTest[i].double_pulse==double_on) {
- temp = (ChannelStateToTest[i].delay - globals.Flash.double_pulse_extra_deadtime[i]) / (1.0 + globals.Flash.double_pulse_extra_pw_margin[i]);
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=Double_Separation_Too_Small;
- }
- }
-
+ check_another_pos_max_value ((ChannelStateToTest[i].delay - globals.Flash.double_pulse_extra_deadtime[i]) / (1.0 + globals.Flash.double_pulse_extra_pw_margin[i]),
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, Double_Separation_Too_Small, &report_error);
if (ChannelStateToTest[i].burst_count>1) {
report_error=Cant_Do_Burst_and_Double;
}
}
- temp=(1/ChannelStateToTest[i].frequency) - globals.Flash.dead_time[i];
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=Dead_Time_Error;
- }
- }
+ check_another_pos_max_value ((1/ChannelStateToTest[i].frequency) - globals.Flash.dead_time[i],
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, Dead_Time_Error, &report_error);
- temp=1/ChannelStateToTest[i].frequency;
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=PW_Exceeds_Period;
- }
- }
+ check_another_pos_max_value (1/ChannelStateToTest[i].frequency, &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, PW_Exceeds_Period, &report_error);
if ( (ChannelStateToTest[i].burst_count>1)
&& (globals.Flash.max_burst_count[i]>1)
&& !globals.Flash.burst_func[i]) {
- temp=(1/ChannelStateToTest[i].frequency)/ChannelStateToTest[i].burst_count - ChannelStateToTest[i].burst_time;
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=Burst_Exceeds_Period;
- }
- }
- }
- temp=(1/ChannelStateToTest[i].frequency)*(ampl_fixed_max_duty/duty_scale);
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=duty_cycle_upper_limit;
- }
+ check_another_pos_max_value ((1/ChannelStateToTest[i].frequency)/ChannelStateToTest[i].burst_count - ChannelStateToTest[i].burst_time,
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, Burst_Exceeds_Period, &report_error);
}
+ check_another_pos_max_value ((1/ChannelStateToTest[i].frequency)*(ampl_fixed_max_duty/duty_scale),
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, duty_cycle_upper_limit, &report_error);
+
if ((globals.Flash.max_avg_ampl[i]) > 0.0 && (fabs(ChannelStateToTest[i].amplitude)) > 0.0) {
- temp=100.0 * globals.Flash.max_avg_ampl[i] /
- (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].frequency * duty_scale);
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=Average_Amplitude_Too_High;
- }
- }
+ check_another_pos_max_value (100.0 * globals.Flash.max_avg_ampl[i] / (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].frequency * duty_scale),
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, Average_Amplitude_Too_High, &report_error);
}
if ((globals.Flash.hvps_avg_curr_limit[i] > 0.0) && (fabs(ChannelStateToTest[i].amplitude) > 0.0) && (ChannelStateToTest[i].frequency > 0.0)) {
- temp=(100.0 / duty_scale) * globals.Flash.hvps_avg_curr_limit[i] * ChannelStateToTest[i].load_type /
- (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].frequency);
- if (temp<globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i]=temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=HVPS_Current_Too_High;
- }
- }
+ check_another_pos_max_value ((100.0 / duty_scale) * globals.Flash.hvps_avg_curr_limit[i] * ChannelStateToTest[i].load_type /
+ (fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].frequency),
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, HVPS_Current_Too_High, &report_error);
}
if (globals.Flash.max_avg_power[i] > 0.0) {
- temp = globals.Flash.max_avg_power[i] * ChannelStateToTest[i].load_type / (ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude * ChannelStateToTest[i].frequency);
- if (temp < globals.Constraints.err_max_pw[i]) {
- globals.Constraints.err_max_pw[i] = temp;
- if (ChannelStateToTest[i].pw>(1.001*globals.Constraints.err_max_pw[i])) {
- report_error=average_power_limit;
- }
- }
+ check_another_pos_max_value (globals.Flash.max_avg_power[i] * ChannelStateToTest[i].load_type /
+ (ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude * ChannelStateToTest[i].frequency),
+ &globals.Constraints.err_max_pw[i], ChannelStateToTest[i].pw, average_power_limit, &report_error);
}
/* ------------------------------- */
@@ -1233,12 +1167,8 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
if (globals.Flash.max_avg_power[i] > 0.0) {
temp = sqrt(globals.Flash.max_avg_power[i] * ChannelStateToTest[i].load_type / (ChannelStateToTest[i].pw * ChannelStateToTest[i].frequency));
// temp is positive at this point
- if (temp < globals.Constraints.err_max_ampl[i]) {
- globals.Constraints.err_max_ampl[i]=temp;
- if (ChannelStateToTest[i].amplitude>(1.001*globals.Constraints.err_max_ampl[i])) {
- report_error=average_power_limit;
- }
- }
+ check_another_pos_max_value (temp, &globals.Constraints.err_max_ampl[i], ChannelStateToTest[i].amplitude, average_power_limit, &report_error);
+
temp = temp * -1.0; // check negative possibility
if (temp > globals.Constraints.err_min_ampl[i]) {
globals.Constraints.err_min_ampl[i]=temp;
@@ -1274,12 +1204,8 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
temp=(100.0 / duty_scale) * globals.Flash.hvps_avg_curr_limit[i] * ChannelStateToTest[i].load_type /
(ChannelStateToTest[i].frequency * ChannelStateToTest[i].pw);
// temp is positive at this point
- if (temp < globals.Constraints.err_max_ampl[i]) {
- globals.Constraints.err_max_ampl[i]=temp;
- if (ChannelStateToTest[i].amplitude>(1.001*globals.Constraints.err_max_ampl[i])) {
- report_error=HVPS_Current_Too_High;
- }
- }
+ check_another_pos_max_value (temp, &globals.Constraints.err_max_ampl[i], ChannelStateToTest[i].amplitude, HVPS_Current_Too_High, &report_error);
+
temp = temp * -1.0; // check negative possibility
if (temp > globals.Constraints.err_min_ampl[i]) {
globals.Constraints.err_min_ampl[i]=temp;
@@ -1464,6 +1390,7 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
/* --- check minimum burst gap settings --- */
+ // FIXME - update with new check_ routines, but only report error if count>1
globals.Constraints.err_min_burst_time[i]=globals.Flash.min_burst_gap[i];
if ( (ChannelStateToTest[i].burst_count>1)
&& (ChannelStateToTest[i].burst_time<(0.999*globals.Constraints.err_min_burst_time[i]))) {
@@ -1473,6 +1400,7 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
/* --- check minimum burst period settings --- */
+ // FIXME - update with new check_ routines, but only report error if count>1
if (globals.Flash.min_pw[i] > 0.0) {
temp = globals.Flash.min_burst_per[i] - ChannelStateToTest[i].pw;
if (temp > globals.Constraints.err_min_burst_time[i]) {
@@ -1496,12 +1424,7 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
/* --- check maximum burst gap settings --- */
- globals.Constraints.err_max_burst_time[i]=globals.Flash.max_burst_gap[i];
- if ( (ChannelStateToTest[i].burst_count>1)
- && (ChannelStateToTest[i].burst_time>(1.001*globals.Constraints.err_max_burst_time[i]))) {
- report_error=max_burst_gap_error;
- }
-
+ check_starting_pos_max_value (globals.Flash.max_burst_gap[i], &globals.Constraints.err_max_burst_time[i], ChannelStateToTest[i].burst_time, max_burst_gap_error, &report_error);
}
}
@@ -1519,35 +1442,22 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
}
}
- globals.Constraints.err_min_rise_time[i]=globals.Flash.min_rise_time[i];
- if (ChannelStateToTest[i].rise_time<(0.999*globals.Constraints.err_min_rise_time[i])) {
- report_error=min_rise_time_error;
- }
-
- globals.Constraints.err_max_rise_time[i]=globals.Flash.max_rise_time[i];
- if (ChannelStateToTest[i].rise_time>(1.001*globals.Constraints.err_max_rise_time[i])) {
- report_error=max_rise_time_error;
- }
+ check_starting_pos_min_value (globals.Flash.min_rise_time[i], &globals.Constraints.err_min_rise_time[i], ChannelStateToTest[i].rise_time, min_rise_time_error, &report_error);
+ check_starting_pos_max_value (globals.Flash.max_rise_time[i], &globals.Constraints.err_max_rise_time[i], ChannelStateToTest[i].rise_time, max_rise_time_error, &report_error);
}
/* --- check slew settings --- */
/* disable amplitude checks if calibration is in progress */
if (globals.Flash.curr_slew[i])
if (!globals.Flags.extended_ampl_min_max) {
- globals.Constraints.err_min_slew[i]=globals.Flash.min_slew[i];
- if (ChannelStateToTest[i].slew<(0.999*globals.Constraints.err_min_slew[i])) {
- report_error=min_slew_error;
- }
-
- globals.Constraints.err_max_slew[i]=globals.Flash.max_slew[i];
- if (ChannelStateToTest[i].slew>(1.001*globals.Constraints.err_max_slew[i])) {
- report_error=max_slew_error;
- }
+ check_starting_pos_min_value (globals.Flash.min_slew[i], &globals.Constraints.err_min_slew[i], ChannelStateToTest[i].slew, min_slew_error, &report_error);
+ check_starting_pos_max_value (globals.Flash.max_slew[i], &globals.Constraints.err_max_slew[i], ChannelStateToTest[i].slew, max_slew_error, &report_error);
}
/* --- check resistance settings --- */
if (globals.Flash.switchable_load[i]) {
+ // FIXME to use new check_ functions
globals.Constraints.err_min_load_type[i]=globals.Flash.low_load_type[i];
if (duty_cycle > max_duty_this_ampl) {
globals.Constraints.err_min_load_type[i] *= duty_cycle / max_duty_this_ampl;
@@ -1558,52 +1468,33 @@ int Error_check(ChannelStruct ChannelStateToTest[max_channels])
}
if (globals.Flash.cap_for_pw_rc_limit[i] > 0.0) {
- temp = ChannelStateToTest[i].pw / globals.Flash.cap_for_pw_rc_limit[i];
- if (temp > globals.Constraints.err_min_load_type[i]) {
- globals.Constraints.err_min_load_type[i] = temp;
- if (ChannelStateToTest[i].load_type<(0.999*globals.Constraints.err_min_load_type[i])) {
- report_error=pw_rc_limit;
- }
- }
+ check_another_pos_min_value (ChannelStateToTest[i].pw / globals.Flash.cap_for_pw_rc_limit[i],
+ &globals.Constraints.err_min_load_type[i], ChannelStateToTest[i].load_type, pw_rc_limit, &report_error);
}
if (globals.Flash.hvps_avg_curr_limit[i] > 0.0) {
- temp= (duty_scale / 100.0) * fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].pw * ChannelStateToTest[i].frequency / globals.Flash.hvps_avg_curr_limit[i];
- if (temp > globals.Constraints.err_min_load_type[i]) {
- globals.Constraints.err_min_load_type[i]=temp;
- if (ChannelStateToTest[i].load_type<(0.999*globals.Constraints.err_min_load_type[i])) {
- report_error=HVPS_Current_Too_High;
- }
- }
+ check_another_pos_min_value ((duty_scale / 100.0) * fabs(ChannelStateToTest[i].amplitude) * ChannelStateToTest[i].pw * ChannelStateToTest[i].frequency /
+ globals.Flash.hvps_avg_curr_limit[i],
+ &globals.Constraints.err_min_load_type[i], ChannelStateToTest[i].load_type, HVPS_Current_Too_High, &report_error);
}
if (globals.Flash.max_peak_power[i] > 0.0) {
- temp = ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude / globals.Flash.max_peak_power[i];
- if (temp > globals.Constraints.err_min_load_type[i]) {
- globals.Constraints.err_min_load_type[i] = temp;
- if (ChannelStateToTest[i].load_type<(0.999*globals.Constraints.err_min_load_type[i])) {
- report_error=peak_power_limit;
- }
- }
+ check_another_pos_min_value (ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude / globals.Flash.max_peak_power[i],
+ &globals.Constraints.err_min_load_type[i], ChannelStateToTest[i].load_type, peak_power_limit, &report_error);
}
if (globals.Flash.max_avg_power[i] > 0.0) {
- temp = (ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude * ChannelStateToTest[i].pw * ChannelStateToTest[i].frequency) / globals.Flash.max_avg_power[i];
- if (temp > globals.Constraints.err_min_load_type[i]) {
- globals.Constraints.err_min_load_type[i] = temp;
- if (ChannelStateToTest[i].load_type<(0.999*globals.Constraints.err_min_load_type[i])) {
- report_error=average_power_limit;
- }
- }
+ check_another_pos_min_value ((ChannelStateToTest[i].amplitude * ChannelStateToTest[i].amplitude * ChannelStateToTest[i].pw * ChannelStateToTest[i].frequency) /
+ globals.Flash.max_avg_power[i],
+ &globals.Constraints.err_min_load_type[i], ChannelStateToTest[i].load_type, average_power_limit, &report_error);
}
- globals.Constraints.err_max_load_type[i]=1.0*globals.Flash.high_load_type[i];
- if (ChannelStateToTest[i].load_type>(1.001*globals.Constraints.err_max_load_type[i])) {
- report_error=max_load_type_error;
- }
+ check_starting_pos_max_value (globals.Flash.high_load_type[i], &globals.Constraints.err_max_load_type[i], ChannelStateToTest[i].load_type, max_load_type_error, &report_error);
/* --- check soft_current_limit settings --- */
if (globals.Flash.soft_current_limit_enabled[i]) {
+ // FIXME to use new check_ functions
+
globals.Constraints.err_min_soft_current_limit[i]=globals.Flash.min_soft_current_limit[i];
if (ChannelStateToTest[i].soft_current_limit<(0.999*globals.Constraints.err_min_soft_current_limit[i])) {
report_error=min_soft_current_limit_error;