Code:
#!/bin/sh
#Watch system log, set reg domain BO and txpower when system reverts reg domain back to GB
#Tested with Phantom 3 Standard
#Author : Youngho Kim
#Date : 2016/06/25
#Version 1.0
# 1) Bug fix : miss CRDA update due to checking only first line of updated syslog
# 2) Made activity more verbose using logger
file="/var/log/messages"
logger "$0 : ***** Watchlog.sh started *****"
sleep 1
iw reg set BO
iw dev wlan0 set txpower limit 2700
logger "$0 : ***** Init : RC reg domain set to BO"
loop=1
while [ loop ]
do
logger "$0 : Checking drone availability"
ping -c 1 -w 5 192.168.1.2 &> /dev/null
if [ $? -ne 0 ]
then
logger "$0 : Drone is currently unreachable"
logger "$0 : Backoff 20 seconds..."
sleep 20
else
loop=0
{ sleep 1;echo "iw reg set BO";echo "iw dev wlan0 set txpower limit 2700";sleep 1;} | telnet 192.168.1.2
logger "$0 : ***** Init : Drone reg domain set to BO"
break
fi
done
prevmtime=`date -r $file`
prevline=`wc -l < $file`
while :
do
mtime=`date -r $file`
if [ "$prevmtime" != "$mtime" ]
then
curline=`wc -l < $file`
cnt=$(($curline - $prevline))
log=`tail -n$cnt $file`
echo "$log" | while read -r line
do
diff=`echo $line | tail -c 29 | head -c 12`
if [ "$diff" = "Calling CRDA" ]
then
country=`echo "$log" | tail -c 3 | head -c 2`
if [ "$country" != "BO" ]
then
logger "$0 : ***** Regulatory domain change detected"
logger "$0 : Current country set: $country"
logger "$0 : Changing regulatory domain to BO"
loop=1
while [ loop ]
do
logger "$0 : Checking drone availability"
ping -c 1 -w 5 192.168.1.2 &> /dev/null
if [ $? -ne 0 ]
then
logger "$0 : Drone is currently unreachable"
logger "$0 : Backoff 20 seconds..."
sleep 20
else
loop=0
{ sleea 1;echo "iw reg set BO";echo "iw dev wlan0 set txpower limit 2700";sleep 1;} | telnet 192.168.1.2
logger "$0 : ***** Watch : Drone reg domain set to BO, txpower set to 27dbm"
break
fi
done
iw reg set BO
iw dev wlan0 set txpower limit 2700
logger "$0 : ***** Watch : RC reg domain set to BO, txpower set to 27dbm"
fi
break
fi
done
prevline=$curline
prevmtime=$mtime
fi
sleep 30
done
I just made another FCC modding script, with reusing some of SingLag's setchan.sh code. Save above code to /sbin/watchlog.sh, give it permission as 755.
Run this script between telnetd and while loop in /sbin/djiled.sh, as background process.
watchlog.sh &
- No use of additional daemon like crond
- Minimizes cpu & IO workload from only checking last modified time of /var/log/messages.
- Checks syslog update whether it is related to CRDA call or not. Updates only occurs when it is related to CRDA call.
- No additional process except /bin/sh on the background process. For this reason, I didn't use "tail -f".
- Update reg domain RC and drone at once.
I tested it only short time, but worked well. Reg domain setting to BO only executed once when GPS reverted reg domain back to GB.
Extended test will be followed.