SCRIPT_TIME_START=$(date +%Y%m%dT%H%M%S.%N);
PATH="$HOME/.local/bin:$PATH"; # Add "$(systemd-path user-binaries)" path in case apps saved there
SCRIPT_HOSTNAME=$(hostname); # Save hostname of system running this script.
-SCRIPT_VERSION="0.4.4-alpha"; # Define version of script.
+SCRIPT_VERSION="0.5.2"; # Define version of script.
SCRIPT_NAME="bkgpslog"; # Define basename of script file.
SCRIPT_URL="https://gitlab.com/baltakatei/ninfacyzga-01"; # Define wesite hosting this script.
AGE_VERSION="1.0.0-beta2"; # Define version of age (encryption program)
### PID Control factors
K_P=1; # Gain for compensating buffer round lag
- T_I="$((4*BUFFER_TTL_NS))"; # Consider this number of past nanoseconds to eliminate error
- T_D="$((1*BUFFER_TTL_NS))"; # Predict value this number of nanoseconds into the future
+ T_I="$(((4)*BUFFER_TTL_NS/(1)))"; # Consider this number of past nanoseconds to eliminate error
+ T_D="$(((1)*BUFFER_TTL_NS/(1)))"; # Predict value this number of nanoseconds into the future
# Calculate Error, errNS, in nanoseconds
## Get current time
# for value in "${errorHistory[@]}"; do
# errReset=$(( errReset + ( value*BUFFER_TTL_NS ) ));
# done;
- errReset="$(( (errReset + (errNS*BUFFER_TTL_NS)) ))" && vbm "errReset:$errReset";
+ vbm "errReset(orig):$errReset"
+ errReset="$(( (errReset + (errNS*BUFFER_TTL_NS)) ))" && vbm "errReset(post):$errReset";
# errResetx10e3="$(( ( errResetx10e3 + ( errNSx10e3 * BUFFER_TTL_NS ) )*10**3 ))" && vbm "errResetx10e3:$errResetx10e3";
# Calculate errRate in nanoseconds per nanosecond
errRate="$(( errNS / BUFFER_TTL_NS ))" && vbm "errRate:$errRate";
# errRatex10e3="$(( ( errNSx10e3 ) / BUFFER_TTL_NS ))" && vbm "errRatex10e3:$errRatex10e3";
+
+ # Debug
+ vbm "errNS :$errNS";
+ vbm "errResetTerm:$((errReset/T_I))";
+ vbm "errRateTerm :$((errRate*T_D))";
# Calculate PID control signal
## ADJ = K_P * (errNS + errReset/T_I + errRate*T_D)
yell "WARNING:Buffer lag adjustment yielded negative seconds.";
fi;
## Calculate nanosecond remainder
- BUFFER_TTL_ADJ_FLOATFRAC="$((BUFFER_TTL_NS - (BUFFER_TTL_ADJ_INT*(10**9)) ))" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC";
+ ### Remove integer
+ BUFFER_TTL_ADJ_FLOATFRAC="$((BUFFER_TTL_ADJ_NS - (BUFFER_TTL_ADJ_INT*(10**9)) ))" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC";
+ ### Calc absolute value of fraction (by removing '-' if present; see https://stackoverflow.com/a/47240327
+ BUFFER_TTL_ADJ_FLOATFRAC="${BUFFER_TTL_ADJ_FLOATFRAC#-}" && vbm "BUFFER_TTL_ADJ_FLOATFRAC:$BUFFER_TTL_ADJ_FLOATFRAC";
## Form float BUFFER_TTL_ADJ_FLOAT
BUFFER_TTL_ADJ_FLOAT="$BUFFER_TTL_ADJ_INT"."$BUFFER_TTL_ADJ_FLOATFRAC" && vbm "BUFFER_TTL_ADJ_FLOAT:$BUFFER_TTL_ADJ_FLOAT";
vbm "STATUS:Calculated adjusted BUFFER_TTL (seconds):$BUFFER_TTL_ADJ_FLOAT";
- sleep 1 # Debug
} # Calc BUFFER_TTL_ADJ_FLOAT so buffer starts every BUFFER_TTL seconds
magicWriteVersion() {
# Desc: Appends time-stamped VERSION to PATHOUT_TAR
CMD_CONV_KML="gpsbabel -i nmea -f - -o kml -F - " && vbm "STATUS:Set CMD_CONV_KML to:$CMD_CONV_KML"; # convert NMEA to KML
# MAIN LOOP:Record gps data until script lifespan ends
- timeBufferFirstNS="$(timeEpochNS)"; bufferRound=0; BUFFER_TTL_ADJ_FLOAT="10.0";
+ timeBufferFirstNS="$(timeEpochNS)"; bufferRound=0; BUFFER_TTL_ADJ_FLOAT="$BUFFER_TTL";
while [[ "$SECONDS" -lt "$SCRIPT_TTL" ]]; do
magicParseRecipientDir;
magicGatherWriteBuffer &
- sleep "$BUFFER_TTL_ADJ_FLOAT";
+ sleep "$BUFFER_TTL_ADJ_FLOAT"; # adjusted by magicBufferSleepPID
((bufferRound++));
- magicBufferSleepPID; # Calculates BUFFER_TTL_ADJ from BUFFER_TTL given buffer expected start time vs. actual
+ magicBufferSleepPID; # Calculates BUFFER_TTL_ADJ_FLOAT from BUFFER_TTL given buffer expected start time vs. actual
done
# Cleanup