mirror of https://github.com/OpenIPC/firmware.git
196 lines
4.4 KiB
Bash
Executable File
196 lines
4.4 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Start wifibroadcast
|
|
#
|
|
|
|
. /etc/datalink.conf
|
|
. /etc/wfb.conf
|
|
|
|
keydir="/etc"
|
|
chip=$(ipcinfo -c)
|
|
|
|
driver=""
|
|
|
|
# "0bda:8813" -> (8814) -> 8814au
|
|
# "0846:9052" -> (8811) -> 8821au
|
|
|
|
detect_wifi_card() {
|
|
echo "Detecting wifi card vendor..."
|
|
devices=$(lsusb | cut -d ' ' -f6 | sort | uniq)
|
|
for card in ${devices}
|
|
do
|
|
case "${card}" in
|
|
"0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101")
|
|
driver="realtek"
|
|
modprobe 88XXau rtw_tx_pwr_idx_override=${driver_txpower_override}
|
|
;;
|
|
"0cf3:9271" | "040d:3801")
|
|
driver="atheros"
|
|
modprobe mac80211
|
|
modprobe ath9k_htc
|
|
;;
|
|
"148f:3070")
|
|
driver="ralink"
|
|
modprobe mac80211
|
|
modprobe rt2x00usb
|
|
modprobe rt2800usb
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${driver}" ]; then
|
|
echo "No usb wifi card detected. Check wifi stick connection, usb power or possible bad soldering."
|
|
exit
|
|
else
|
|
echo "Detected:" ${driver}
|
|
fi
|
|
|
|
echo "Awaiting interface ${wlan} in system..."
|
|
|
|
local n=0
|
|
while ! $(ifconfig -a | grep -q ${wlan})
|
|
do
|
|
if [ ${n} -ge 5 ]; then
|
|
echo "No interface ${wlan}. Check wifi stick connection, usb power or possible bad soldering."
|
|
exit
|
|
fi
|
|
sleep 0.5
|
|
n=$(expr ${n} + 1)
|
|
done
|
|
}
|
|
|
|
load_modules() {
|
|
modprobe cfg80211
|
|
detect_wifi_card
|
|
}
|
|
|
|
load_interface() {
|
|
if [ ${driver} = "realtek" ]; then
|
|
ifconfig ${wlan} up
|
|
iwconfig ${wlan} mode monitor
|
|
elif [ ${driver} = "atheros" ] || [ ${driver} = "ralink" ]; then
|
|
iwconfig ${wlan} mode monitor
|
|
ifconfig ${wlan} up
|
|
fi
|
|
|
|
iw reg set ${region}
|
|
if [ ! -z "${frequency}" ]; then
|
|
iwconfig ${wlan} freq ${frequency}
|
|
else
|
|
iwconfig ${wlan} channel ${channel}
|
|
fi
|
|
iw dev ${wlan} set txpower fixed $((${txpower} * 100))
|
|
}
|
|
|
|
start_wfb() {
|
|
#forward to PC
|
|
if [ ! -z "${udp_addr}" ]; then
|
|
if [ ${udp_addr} = "auto" ]; then
|
|
ifdown eth0
|
|
ifup eth0
|
|
udp_addr=`ip route show 0.0.0.0/0 dev eth0 | cut -d\ -f3`
|
|
fi
|
|
if [ -z "${link_id}" ]; then
|
|
wfb_rx -c ${udp_addr} -u ${udp_port} -r ${stream} -K ${keydir}/gs.key ${wlan} >/dev/null &
|
|
else
|
|
wfb_rx -c ${udp_addr} -u ${udp_port} -p ${stream} -K ${keydir}/gs.key -i ${link_id} ${wlan} >/dev/null &
|
|
fi
|
|
fi
|
|
#use tablet as usb-modem
|
|
PHONE_IP=`ip route show 0.0.0.0/0 dev usb0 | cut -d\ -f3`
|
|
if [ ! -z ${PHONE_IP} ]; then
|
|
echo found usb0 device: ${PHONE_IP}
|
|
if [ -z "${link_id}" ]; then
|
|
wfb_rx -c ${PHONE_IP} -u 5600 -r ${stream} -K ${keydir}/gs.key ${wlan} >/dev/null &
|
|
else
|
|
wfb_rx -c ${PHONE_IP} -u 5600 -p ${stream} -K ${keydir}/gs.key -i ${link_id} ${wlan} >/dev/null &
|
|
fi
|
|
fi
|
|
#use tablet as wifi-ap
|
|
if [ ! -z ${tab_wlan} ]; then
|
|
ifdown ${tab_wlan}
|
|
ifup ${tab_wlan}
|
|
TAB_IP=`ip route show 0.0.0.0/0 dev ${tab_wlan} | cut -d\ -f3`
|
|
if [ ! -z ${TAB_IP} ]; then
|
|
echo found ${tab_wlan} ap ${TAB_IP}
|
|
if [ -z "${link_id}" ]; then
|
|
wfb_rx -c ${TAB_IP} -u 5600 -r ${stream} -K ${keydir}/gs.key ${wlan} >/dev/null &
|
|
else
|
|
wfb_rx -c ${TAB_IP} -u 5600 -p ${stream} -K ${keydir}/gs.key -i ${link_id} ${wlan} >/dev/null &
|
|
fi
|
|
fi
|
|
fi
|
|
#use hdmi
|
|
if [ ${use_hdmi} = "true" ]; then
|
|
/root/vdec &
|
|
if [ -z "${link_id}" ]; then
|
|
wfb_rx -c 127.0.0.1 -u 5000 -r ${stream} -K ${keydir}/gs.key ${wlan} >/dev/null &
|
|
else
|
|
wfb_rx -c 127.0.0.1 -u 5000 -p ${stream} -K ${keydir}/gs.key -i ${link_id} ${wlan} >/dev/null &
|
|
fi
|
|
fi
|
|
}
|
|
|
|
start_all() {
|
|
if [ ${daemon} -eq 1 ]; then
|
|
|
|
echo "Loading modules and wifi card driver..."
|
|
|
|
load_modules
|
|
|
|
echo "Preparing interface wlan..."
|
|
|
|
load_interface
|
|
|
|
if ! cat ${keydir}/drone.key > /dev/null 2>&1; then
|
|
echo "Generating drone & ground station keys..."
|
|
cd ${keydir} ; wfb_keygen
|
|
else
|
|
echo "Drone key exist..."
|
|
fi
|
|
|
|
echo "Starting Wifibroadcast service..."
|
|
|
|
start_wfb
|
|
|
|
echo "Done."
|
|
|
|
if [ ${telemetry} = "true" ]; then
|
|
if [ ${chip} = "gk7205v200" ]; then
|
|
# UART2_RX mux
|
|
devmem 0x120c0010 32 0x1e04
|
|
fi
|
|
/usr/bin/telemetry start
|
|
fi
|
|
|
|
else
|
|
echo "Wifibroadcast service disabled in wfb.conf..."
|
|
fi
|
|
}
|
|
|
|
|
|
stop_all() {
|
|
echo "Stopping all services..."
|
|
kill -9 $(pidof wfb_rx)
|
|
kill -9 $(pidof telemetry_rx)
|
|
kill -9 $(pidof telemetry_tx)
|
|
kill -9 $(pidof mavlink-routerd)
|
|
kill -9 $(pidof mavfwd)
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
start_all
|
|
;;
|
|
stop)
|
|
stop_all
|
|
;;
|
|
restart)
|
|
stop_all
|
|
start_all
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart}"
|
|
exit 1
|
|
esac
|