summaryrefslogtreecommitdiff
path: root/xpp/calibrate_slics
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/calibrate_slics')
-rwxr-xr-xxpp/calibrate_slics29
1 files changed, 17 insertions, 12 deletions
diff --git a/xpp/calibrate_slics b/xpp/calibrate_slics
index c639832..c1e6064 100755
--- a/xpp/calibrate_slics
+++ b/xpp/calibrate_slics
@@ -5,7 +5,6 @@
#
use strict;
-use Time::HiRes qw (time alarm sleep);
my $SlicsFile = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/slics";
@@ -21,6 +20,11 @@ if (exists $ENV{DEBUG_CALIBRATION}) {
$debug = 1;
}
+sub mysleep($) {
+ my $timeout = shift;
+ select(undef,undef,undef,$timeout);
+}
+
sub logger($) {
print STDERR "LOG: @_\n";
system("logger @_");
@@ -37,7 +41,7 @@ sub write_to_slic_file($) {
die("Failed writing to slics file $SlicsFile");
print SLICS $write_str;
close(SLICS);
- sleep(0.001);
+ mysleep(0.001);
}
@@ -48,7 +52,7 @@ sub read_reg($$$) {
write_to_slic_file(
sprintf("%d R%s %02X", $read_slic, $direct, $read_reg));
- sleep(0.001);
+ mysleep(0.001);
open(SLICS,$SlicsFile) or
die("Failed reading from slics file $SlicsFile");
#awk '/^SLIC_REPLY:/{print $5}' $SLICS | cut -dx -f2
@@ -214,7 +218,7 @@ sub manual_calibrate_loop($$) {
# start calibration:
my $calibration_in_progress = 1;
write_reg(31, $write_reg, 'D', 0x1F);
- sleep $ManualCalibrationSleepTime;
+ mysleep $ManualCalibrationSleepTime;
# wait until all slics have finished calibration, or for timeout
while ($calibration_in_progress) {
@@ -231,7 +235,7 @@ sub manual_calibrate_loop($$) {
}
debug($debug_calib_str);
# TODO: unnecessary sleep in the last round:
- sleep $ManualCalibrationSleepTime;
+ mysleep $ManualCalibrationSleepTime;
}
}
@@ -254,8 +258,10 @@ sub auto_calibrate($$) {
);
# wait until all slics have finished calibration, or for timeout
- my $end_time=time() + 2;
- my $timeout=0;
+ my $sleep_cnt = 0;
+ # time periods in seconds:
+ my $sleep_time = 0.1;
+ my $timeout_time = 2;
CALIB_LOOP: for my $slic (@SlicNums) {
debug("checking slic $slic");
while(1) {
@@ -264,14 +270,13 @@ sub auto_calibrate($$) {
debug("slic $slic calibrated");
last;
}
- my $time=time();
- if ( $time > $end_time) {
- $timeout=1;
- debug("Exiting on timeout: $end_time < $time.");
+ if ( $sleep_cnt > $timeout_time/$sleep_time) {
+ debug("Auto Calibration: Exiting on timeout: $timeout_time.");
last CALIB_LOOP;
}
debug("auto_calibrate not done yet: slic #$slic\n");
- sleep(0.1);
+ mysleep(0.1);
+ $sleep_cnt++;
}
}
#log_calib_params();