diff -rubN -x '*~' 1.6RC6/root/.profile 20181016/root/.profile
--- 1.6RC6/root/.profile	2018-03-20 05:57:27.000000000 +0300
+++ 20181016/root/.profile	2018-10-16 08:47:23.961753459 +0300
@@ -242,6 +242,12 @@
 	tmessage "WARNING: Unsupported or experimental wifi card: $DRIVER"
     fi
 
+    case $DRIVER in
+    *881[24]au)
+        DRIVER=rtl88xxau
+        ;;
+    esac
+                                                                        
     tmessage -n "Setting up $1: "
     if [ "$DRIVER" == "ath9k_htc" ]; then # set bitrates for Atheros via iw
 	ifconfig $1 up || {
@@ -322,7 +328,7 @@
 
     fi
 
-    if [ "$DRIVER" == "rt2800usb" ] || [ "$DRIVER" == "mt7601u" ] || [ "$DRIVER" == "rtl8192cu" ] || [ "$DRIVER" == "8812au" ]; then # do not set bitrate for Ralink, Mediatek, Realtek, done through tx parameter
+    if [ "$DRIVER" == "rt2800usb" ] || [ "$DRIVER" == "mt7601u" ] || [ "$DRIVER" == "rtl8192cu" ] || [ "$DRIVER" == "rtl88xxau" ]; then # do not set bitrate for Ralink, Mediatek, Realtek, done through tx parameter
 	tmessage -n "monitor mode.. "
 	iw dev $1 set monitor none || {
 	    echo
@@ -356,6 +362,18 @@
 	    echo
 	fi
 
+	if  [ "$DRIVER" == "rtl88xxau" -a -n "$3" ]; then
+  	    tmessage -n "TX power $3.. "
+	    iw dev $1 set txpower fixed $3 || {
+	        echo
+	        echo "ERROR: Setting TX power to $3 on $1 failed!"
+	        collect_errorlog
+	        sleep 365d
+	    }
+	    sleep 0.2
+	    tmessage -n "done. "
+	fi
+
     fi
 
 }
@@ -489,7 +507,7 @@
 	    else
 		for NIC in $NICS
 		do
-		    prepare_nic $NIC $FREQ
+		    prepare_nic $NIC $FREQ "$TXPOWER"
 		    sleep 0.1
 		done
 	    fi
@@ -579,6 +597,7 @@
 
     echo
     echo
+    dmesg -c >/dev/null 2>/dev/null
     detect_nics
 
     sleep 1
@@ -597,8 +616,17 @@
 
     if [ "$TXMODE" == "single" ]; then
 	DRIVER=`cat /sys/class/net/$NICS/device/uevent | nice grep DRIVER | sed 's/DRIVER=//'`
+        case $DRIVER in
+            *881[24]au)
+                DRIVER=rtl88xxau
+            ;;
+        esac
+
 	if [ "$DRIVER" != "ath9k_htc" ]; then # in single mode and ralink cards always, use frametype 1 (data)
     	    VIDEO_FRAMETYPE=0
+	    if [ "$DRIVER" == "rtl88xxau" ]; then
+      	        VIDEO_FRAMETYPE=1
+	    fi
 	    RALINK=1
 	fi
     else # for txmode dual always use frametype 1
@@ -616,6 +644,12 @@
     fi
 
     DRIVER=`cat /sys/class/net/$NICS/device/uevent | nice grep DRIVER | sed 's/DRIVER=//'`
+    case $DRIVER in
+        *881[24]au)
+            DRIVER=rtl88xxau
+        ;;
+    esac
+
     if [ "$CTS_PROTECTION" == "auto" ] && [ "$DRIVER" == "ath9k_htc" ]; then # only use CTS protection with Atheros
     	echo -n "Checking for other wifi traffic ... "
 	WIFIPPS=`/root/wifibroadcast/wifiscan $NICS`
@@ -2159,7 +2193,7 @@
 	if [ "$ETHERNET_HOTSPOT" == "N" ]; then
 		# disabled loop, as usual, everything is flaky on the Pi, gives kernel stall messages ...
 		nice ifconfig eth0 up
-		sleep 2
+		sleep 5
 		    if cat /sys/class/net/eth0/carrier | nice grep -q 1; then
 			echo "Ethernet connection detected"
 			CARRIER=1
@@ -2179,6 +2213,7 @@
 				    /tmp/osd >> /wbc_tmp/telemetrydowntmp.txt &
 				fi
 			    fi
+			    ping -n -q -c 1 1.1.1.1
 			else
 			    ps -ef | nice grep "pump -i eth0" | nice grep -v grep | awk '{print $2}' | xargs kill -9
 			    nice ifconfig eth0 down
diff -rubN -x '*~' 1.6RC6/root/wifibroadcast/tx_telemetry.c 20181016/root/wifibroadcast/tx_telemetry.c
--- 1.6RC6/root/wifibroadcast/tx_telemetry.c	2018-03-16 08:00:34.000000000 +0300
+++ 20181016/root/wifibroadcast/tx_telemetry.c	2018-03-20 06:15:45.000000000 +0300
@@ -340,10 +340,18 @@
         if(!procfile) {fprintf(stderr,"ERROR: opening %s failed!\n", path); return 0;}
         fgets(line, 100, procfile); // read the first line
         fgets(line, 100, procfile); // read the 2nd line
-        if(strncmp(line, "DRIVER=ath9k_htc", 16) == 0) { // it's an atheros card
-            fprintf(stderr, "tx_telemetry: Atheros card detected\n");
+        if(strncmp(line, "DRIVER=ath9k_htc", 16) == 0 || 
+            (
+             strncmp(line, "DRIVER=8812au",    13) == 0 || 
+             strncmp(line, "DRIVER=8814au",    13) == 0 || 
+             strncmp(line, "DRIVER=rtl8812au", 16) == 0 || 
+             strncmp(line, "DRIVER=rtl8814au", 16) == 0 || 
+             strncmp(line, "DRIVER=rtl88xxau", 16) == 0
+            )
+          ) { // it's an atheros or realtek card 
+            fprintf(stderr, "tx_telemetry: Atheros or Realtek card detected\n");
 	    type[num_interfaces] = 0;
-        } else { // ralink
+        } else { // ralink or mediatek
             fprintf(stderr, "tx_telemetry: Ralink card detected\n");
 	    type[num_interfaces] = 1;
         }
diff -rubN -x '*~' 1.6RC6/root/wifibroadcast_osd/render.c 20181016/root/wifibroadcast_osd/render.c
--- 1.6RC6/root/wifibroadcast_osd/render.c	2018-03-20 03:26:32.000000000 +0300
+++ 20181016/root/wifibroadcast_osd/render.c	2018-10-07 15:37:43.000000000 +0300
@@ -790,7 +790,7 @@
     //abs_heading is the absolute direction/bearing the arrow should point eg bearing to home could be 45 deg
     //because arrow is drawn relative to the osd/camera view we need to offset by craft's heading
     #if HOME_ARROW_INVERT == true
-    abs_heading = 360 - abs_heading;
+    abs_heading = abs_heading - 180;
     #endif
     float rel_heading = abs_heading - craft_heading; //direction arrow needs to point relative to camera/osd/craft
     if (rel_heading < 0) rel_heading += 360;
