mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			175 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| CFG_FILE="/etc/vtx_info.yaml"
 | |
| 
 | |
| ### 1. Fetch SoC from fw_printenv
 | |
| soc=$(fw_printenv soc 2>/dev/null | awk -F= '/soc=/ {print $2}')
 | |
| [ -z "$soc" ] && soc="ssc338q"
 | |
| 
 | |
| ### 2. Determine min/max bitrate based on SoC
 | |
| case "$soc" in
 | |
|     "ssc30kq")
 | |
|         min_bitrate="2800"
 | |
|         max_bitrate="18000"
 | |
|         ;;
 | |
|     "ssc338q")
 | |
|         min_bitrate="2800"
 | |
|         max_bitrate="28000"
 | |
|         ;;
 | |
|     *)
 | |
|         # Fallback if an unexpected SoC is found
 | |
|         min_bitrate="2800"
 | |
|         max_bitrate="28000"
 | |
|         ;;
 | |
| esac
 | |
| 
 | |
| ### 3. Fetch sensor from fw_printenv
 | |
| sensor=$(fw_printenv sensor 2>/dev/null | awk -F= '/sensor=/ {print $2}')
 | |
| [ -z "$sensor" ] && sensor="imx335"
 | |
| 
 | |
| ### 4. Fetch build_option from /etc/os-release
 | |
| build_option=$(awk -F= '/^BUILD_OPTION=/ {print $2}' /etc/os-release)
 | |
| [ -z "$build_option" ] && build_option="fpv"
 | |
| 
 | |
| ### 5. Detect Wi-Fi card from lsusb, map to known adapter
 | |
| raw_driver="none"
 | |
| for card in $(lsusb | awk '{print $6}' | sort | uniq); do
 | |
|     case "$card" in
 | |
|         "0bda:8812"|"0bda:881a"|"0b05:17d2"|"2357:0101"|"2604:0012")
 | |
|             raw_driver="rtl8812au"
 | |
|             break
 | |
|             ;;
 | |
|         "0bda:a81a")
 | |
|             raw_driver="rtl8812eu"
 | |
|             break
 | |
|             ;;
 | |
|         "0bda:f72b"|"0bda:b733")
 | |
|             raw_driver="rtl8733bu"
 | |
|             break
 | |
|             ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| ### 6. Determine Wi-Fi settings based on adapter
 | |
| case "$raw_driver" in
 | |
|     "rtl8812au")
 | |
|         min_bw="5"
 | |
|         max_bw="40"
 | |
|         ldpc="1"
 | |
|         stbc="1"
 | |
|         max_mcs="7"
 | |
|         # MCS0..7 -> stepped down from 63 to 40
 | |
|         mcs0_max_tx="63"
 | |
|         mcs1_max_tx="60"
 | |
|         mcs2_max_tx="57"
 | |
|         mcs3_max_tx="54"
 | |
|         mcs4_max_tx="51"
 | |
|         mcs5_max_tx="48"
 | |
|         mcs6_max_tx="44"
 | |
|         mcs7_max_tx="40"
 | |
|         ;;
 | |
|     "rtl8812eu")
 | |
|         min_bw="5"
 | |
|         max_bw="20"
 | |
|         ldpc="1"
 | |
|         stbc="1"
 | |
|         max_mcs="7"
 | |
|         # MCS0..7 -> stepped down from 63 to 40
 | |
|         mcs0_max_tx="63"
 | |
|         mcs1_max_tx="60"
 | |
|         mcs2_max_tx="57"
 | |
|         mcs3_max_tx="54"
 | |
|         mcs4_max_tx="51"
 | |
|         mcs5_max_tx="48"
 | |
|         mcs6_max_tx="44"
 | |
|         mcs7_max_tx="40"
 | |
|         ;;
 | |
|     "rtl8733bu")
 | |
|         min_bw="20"
 | |
|         max_bw="40"
 | |
|         ldpc="0"
 | |
|         stbc="0"
 | |
|         max_mcs="7"
 | |
|         # MCS0..7 -> stepped down from 63 to 40
 | |
|         mcs0_max_tx="63"
 | |
|         mcs1_max_tx="60"
 | |
|         mcs2_max_tx="57"
 | |
|         mcs3_max_tx="54"
 | |
|         mcs4_max_tx="51"
 | |
|         mcs5_max_tx="48"
 | |
|         mcs6_max_tx="44"
 | |
|         mcs7_max_tx="40"
 | |
|         ;;
 | |
|     *)
 | |
|         # Default if no known adapter
 | |
|         raw_driver="none"
 | |
|         min_bw="20"
 | |
|         max_bw="20"
 | |
|         ldpc="0"
 | |
|         stbc="0"
 | |
|         max_mcs="7"
 | |
|         # All MCS min=1, max=30
 | |
|         mcs0_max_tx="30"
 | |
|         mcs1_max_tx="30"
 | |
|         mcs2_max_tx="30"
 | |
|         mcs3_max_tx="30"
 | |
|         mcs4_max_tx="30"
 | |
|         mcs5_max_tx="30"
 | |
|         mcs6_max_tx="30"
 | |
|         mcs7_max_tx="30"
 | |
|         ;;
 | |
| esac
 | |
| 
 | |
| # For all adapters (recognized or not), mcsN_min_tx=1
 | |
| mcs0_min_tx="1"
 | |
| mcs1_min_tx="1"
 | |
| mcs2_min_tx="1"
 | |
| mcs3_min_tx="1"
 | |
| mcs4_min_tx="1"
 | |
| mcs5_min_tx="1"
 | |
| mcs6_min_tx="1"
 | |
| mcs7_min_tx="1"
 | |
| 
 | |
| ### 7. If /etc/vtx_info.yaml doesn't exist, create it; else update via yaml-cli
 | |
| if [ ! -f "$CFG_FILE" ]; then
 | |
|     cat <<EOF > "$CFG_FILE"
 | |
| vtx_info:
 | |
|   vtx_id: ff00
 | |
|   build_option: $build_option
 | |
|   soc: $soc
 | |
|   wifi:
 | |
|     wifi_adapter: $raw_driver
 | |
|     min_bw: $min_bw
 | |
|     max_bw: $max_bw
 | |
|     ldpc: $ldpc
 | |
|     stbc: $stbc
 | |
|     max_mcs: $max_mcs
 | |
|     tx_power:
 | |
|       mcs0_min_tx: $mcs0_min_tx
 | |
|       mcs0_max_tx: $mcs0_max_tx
 | |
|       mcs1_min_tx: $mcs1_min_tx
 | |
|       mcs1_max_tx: $mcs1_max_tx
 | |
|       mcs2_min_tx: $mcs2_min_tx
 | |
|       mcs2_max_tx: $mcs2_max_tx
 | |
|       mcs3_min_tx: $mcs3_min_tx
 | |
|       mcs3_max_tx: $mcs3_max_tx
 | |
|       mcs4_min_tx: $mcs4_min_tx
 | |
|       mcs4_max_tx: $mcs4_max_tx
 | |
|       mcs5_min_tx: $mcs5_min_tx
 | |
|       mcs5_max_tx: $mcs5_max_tx
 | |
|       mcs6_min_tx: $mcs6_min_tx
 | |
|       mcs6_max_tx: $mcs6_max_tx
 | |
|       mcs7_min_tx: $mcs7_min_tx
 | |
|       mcs7_max_tx: $mcs7_max_tx
 | |
|   video:
 | |
|     sensor: $sensor
 | |
|     min_bitrate: $min_bitrate
 | |
|     max_bitrate: $max_bitrate
 | |
| EOF
 | |
|     echo "Created $CFG_FILE with default/auto-detected values."
 | |
| else
 | |
|     echo "$CFG_FILE found. Updating values with yaml-cli..."
 | |
| 
 | |
|     echo "Updated $CFG_FILE with new auto-detected or default values via yaml-cli."
 | |
| fi
 |