fix(bkgpslog):fix pid float calc
[EVA-2020-02.git] / exec / bkgpslog
index 69ca4269168f643efccf2f26e99c5c9e8c52f1b6..0dd7f5dee3b1528b20a1c3676f249cdd18a92100 100755 (executable)
@@ -14,7 +14,7 @@ DIR_TMP_DEFAULT="/dev/shm"; # Default parent of working directory
 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_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.4.4-alpha2";          # 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)
 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)
@@ -29,10 +29,6 @@ declare -a argRecPubKeys # for processArguments function
 ## Initialize variables
 OPTION_VERBOSE=""; OPTION_ENCRYPT=""; OPTION_COMPRESS=""; OPTION_TMPDIR="";
 errReset=0; BUFFER_TTL_ADJ_FLOAT="";
 ## Initialize variables
 OPTION_VERBOSE=""; OPTION_ENCRYPT=""; OPTION_COMPRESS=""; OPTION_TMPDIR="";
 errReset=0; BUFFER_TTL_ADJ_FLOAT="";
-### PID Control factors
-K_P=1; # Gain for compensating buffer round lag
-T_I=1000; # Consider this number of past buffer rounds to eliminate error
-T_D=1; # Predict value this number of buffer rounds into the future
 
 #===BEGIN Declare local script functions===
 checkapp() {
 
 #===BEGIN Declare local script functions===
 checkapp() {
@@ -951,6 +947,11 @@ magicBufferSleepPID() {
     # errorHistorySize=100;
     ## Define BUFFER_TTL in nanoseconds
     BUFFER_TTL_NS=$((BUFFER_TTL * 10**9)) && vbm "BUFFER_TTL_NS:$BUFFER_TTL_NS";
     # errorHistorySize=100;
     ## Define BUFFER_TTL in nanoseconds
     BUFFER_TTL_NS=$((BUFFER_TTL * 10**9)) && vbm "BUFFER_TTL_NS:$BUFFER_TTL_NS";
+
+    ### 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
     
     # Calculate Error, errNS, in nanoseconds
     ## Get current time
     
     # Calculate Error, errNS, in nanoseconds
     ## Get current time
@@ -998,7 +999,10 @@ magicBufferSleepPID() {
        yell "WARNING:Buffer lag adjustment yielded negative seconds.";
     fi;
     ## Calculate nanosecond remainder
        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";
     ## 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";