mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| wfb_key=/etc/drone.key
 | |
| wfb_dev=wlan0
 | |
| 
 | |
| wfb_yaml() {
 | |
| 	if [ -e "$1" ]; then
 | |
| 		while IFS=: read -r key value; do
 | |
| 			key=$(eval echo "$key")
 | |
| 			value=$(eval echo "$value")
 | |
| 			export "$key=$value"
 | |
| 		done < "$1"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| load_config() {
 | |
| 	wfb_yaml /rom/etc/wfb.yaml
 | |
| 	wfb_yaml /etc/wfb.yaml
 | |
| 	[ ! -e "$wfb_key" ] && wfb_key=/rom/etc/drone.key
 | |
| }
 | |
| 
 | |
| load_modules() {
 | |
| 	for card in $(lsusb | awk '{print $6}' | uniq); do
 | |
| 		case "$card" in
 | |
| 			"0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012")
 | |
| 				driver=88XXau
 | |
| 				modprobe "$driver"
 | |
| 				;;
 | |
| 
 | |
| 			"0bda:a81a")
 | |
| 				driver=8812eu
 | |
| 				modprobe "$driver" rtw_regd_src=1 rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0
 | |
| 				;;
 | |
| 
 | |
| 			"0bda:f72b" | "0bda:b733")
 | |
| 				driver=8733bu
 | |
| 				modprobe "$driver" rtw_regd_src=1 rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0
 | |
| 				;;
 | |
| 		esac
 | |
| 	done
 | |
| 
 | |
| 	if [ -z "$driver" ]; then
 | |
| 		echo "- Wireless module not detected!"
 | |
| 		exit 1
 | |
| 	else
 | |
| 		echo "- Detected driver: $driver"
 | |
| 	fi
 | |
| 
 | |
| 	if ! ifconfig "$wfb_dev" up; then
 | |
| 		echo "- Wireless driver not found!"
 | |
| 		exit 1
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| load_interface() {
 | |
| 	iw "$wfb_dev" set monitor none
 | |
| 	iw "$wfb_dev" set channel "$channel" "$mode"
 | |
| 	iw reg set 00
 | |
| 
 | |
| 	[ "$driver" = "88XXau" ] && wfb_pwr=$((txpower * -100)) || wfb_pwr=$((txpower * 50))
 | |
| 	iw "$wfb_dev" set txpower fixed "$wfb_pwr"
 | |
| 	[ "$mode" = "HT20" ] && bandwidth=20 || bandwidth=40
 | |
| }
 | |
| 
 | |
| start_broadcast() {
 | |
| 	echo "- Starting wfb_tx"
 | |
| 	wfb_tx -K "$wfb_key" -M "$wfb_index" -B "$bandwidth" -C 8000 \
 | |
| 		-k "$fec_k" -n "$fec_n" -i "$link_id" "$wfb_dev" &> /dev/null &
 | |
| }
 | |
| 
 | |
| start_tunnel() {
 | |
| 	echo "- Starting wfb_tun"
 | |
| 	wfb_rx -p 160 -u 5800 -K "$wfb_key" -i "$link_id" "$wfb_dev" &> /dev/null &
 | |
| 	wfb_tx -p 32 -u 5801 -K "$wfb_key" -M "$tun_index" \
 | |
| 		-k "$fec_k" -n "$fec_n" -i "$link_id" "$wfb_dev" &> /dev/null &
 | |
| 	wfb_tun -a 10.5.0.10/24 > /dev/null &
 | |
| }
 | |
| 
 | |
| start_telemetry() {
 | |
| 	[ "$(ipcinfo -c)" = "ssc33x" ] && devmem 0x1F207890 16 0x8
 | |
| 
 | |
| 	if [ "$router" = "msposd" ]; then
 | |
| 		echo "- Starting $router"
 | |
| 		size=$(curl -s localhost/api/v1/config.json | jsonfilter -e "@.video0.size")
 | |
| 		msposd -b 115200 -c 8 -d -r $osd_fps -z "${size:-1280x720}" \
 | |
| 			-m "$serial" -o 10.5.0.1:14551 > /dev/null &
 | |
| 	elif [ "$router" = "mavfwd" ]; then
 | |
| 		echo "- Starting $router"
 | |
| 		mavfwd --baudrate 115200 --channels 8 -p 100 -a 15 -t \
 | |
| 			--master "$serial" --in 0.0.0.0:14550 --out 10.5.0.1:14551 > /dev/null &
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| video_settings() {
 | |
| 	[ "$(ipcinfo -s)" = "imx415" ] && cli -s .isp.sensorConfig /etc/sensors/imx415_fpv.bin
 | |
| 	cli -s .isp.exposure 5
 | |
| 	cli -s .video0.fps 60
 | |
| 	cli -s .video0.codec h265
 | |
| 	cli -s .video0.rcMode cbr
 | |
| 	cli -s .outgoing.enabled true
 | |
| 	cli -s .outgoing.server udp://0.0.0.0:5600
 | |
| }
 | |
| 
 | |
| start() {
 | |
| 	load_config
 | |
| 	load_modules
 | |
| 	load_interface
 | |
| 
 | |
| 	if [ ! -e /etc/system.ok ]; then
 | |
| 		sleep 1
 | |
| 		video_settings
 | |
| 		touch /etc/system.ok
 | |
| 		killall -1 majestic
 | |
| 	fi
 | |
| 
 | |
| 	stop
 | |
| 	start_broadcast
 | |
| 	start_tunnel
 | |
| 	start_telemetry
 | |
| }
 | |
| 
 | |
| stop() {
 | |
| 	for process in wfb_rx wfb_tx wfb_tun msposd mavfwd; do
 | |
| 		if [ -n "$(pidof $process)" ]; then
 | |
| 			echo "- Stopping $process"
 | |
| 			killall -q "$process"
 | |
| 		fi
 | |
| 	done
 | |
| }
 | |
| 
 | |
| case "$1" in
 | |
| 	start|stop)
 | |
| 		$1
 | |
| 		;;
 | |
| 
 | |
| 	reset)
 | |
| 		cp -f /rom/etc/majestic.yaml /etc/majestic.yaml
 | |
| 		cp -f /rom/etc/wfb.yaml /etc/wfb.yaml
 | |
| 		video_settings
 | |
| 		;;
 | |
| 
 | |
| 	*)
 | |
| 		echo "Usage: $0 {start|stop|reset}"
 | |
| 		exit 1
 | |
| 		;;
 | |
| esac
 |