[no ci] General: refine fpv scripts (#1387)

pull/1389/head
viktorxda 2024-04-08 14:43:43 +02:00 committed by GitHub
parent a9214c48af
commit b4bf50b5d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 56 deletions

View File

@ -4,7 +4,7 @@ skip=$(fw_printenv -n fpv)
fw=$(grep "BUILD_OPTION" "/etc/os-release" | cut -d= -f2)
if [ -e /etc/datalink.conf ]; then
source /etc/datalink.conf
. /etc/datalink.conf
fi
case "$1" in
@ -32,9 +32,9 @@ case "$1" in
if [ "$use_zt" = "true" ]; then
echo "Starting ZeroTier-One daemon..."
/usr/sbin/zerotier-one -d &
if [ ! -f /var/lib/zerotier-one/networks.d/$zt_netid.conf ]; then
if [ ! -f "/var/lib/zerotier-one/networks.d/$zt_netid.conf" ]; then
sleep 8
zerotier-cli join $zt_netid &> /dev/null
zerotier-cli join "$zt_netid" > /dev/null
echo "Don't forget authorize in the my.zerotier.com!"
fi
fi

View File

@ -1,19 +1,20 @@
#!/bin/sh
chip=$(ipcinfo -c)
family=$(ipcinfo -f)
vendor=$(ipcinfo -v)
if ! [ ${chip} = "hi3536dv100" ]; then
if [ ! "$chip" = "hi3536dv100" ]; then
sensor=$(ipcinfo -s)
fi
basic() {
# set boot delay
fw_setenv bootdelay 0
# don't load f2fs module (disabled in kernel)
sed -i "s!f2fs!#f2fs!g" /etc/modules
# freely uart for telemetry
# free uart for telemetry
sed -i "s!console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL!#console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL!g" /etc/inittab
# tune socket buffer
@ -23,19 +24,21 @@ basic() {
prefix=${family}
hisi_goke() {
if [ ${vendor} = "hisilicon" ]; then
if [ "$vendor" = "hisilicon" ]; then
prefix="open"
fi
# remove unneeded modules
sed -i "s!insmod ${prefix}_rgn.ko!#insmod ${prefix}_rgn.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_jpege.ko!#insmod ${prefix}_jpege.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_ive.ko save_power=0!#insmod ${prefix}_ive.ko save_power=0!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_aio.ko!#insmod ${prefix}_aio.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_ai.ko!#insmod ${prefix}_ai.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_ao.ko!#insmod ${prefix}_ao.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_aenc.ko!#insmod ${prefix}_aenc.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_adec.ko!#insmod ${prefix}_adec.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_acodec.ko!#insmod ${prefix}_acodec.ko!g" /usr/bin/load_${vendor}
sed -i "s!insmod ${prefix}_rgn.ko!#insmod ${prefix}_rgn.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_jpege.ko!#insmod ${prefix}_jpege.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_ive.ko save_power=0!#insmod ${prefix}_ive.ko save_power=0!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_aio.ko!#insmod ${prefix}_aio.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_ai.ko!#insmod ${prefix}_ai.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_ao.ko!#insmod ${prefix}_ao.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_aenc.ko!#insmod ${prefix}_aenc.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_adec.ko!#insmod ${prefix}_adec.ko!g" "/usr/bin/load_${vendor}"
sed -i "s!insmod ${prefix}_acodec.ko!#insmod ${prefix}_acodec.ko!g" "/usr/bin/load_${vendor}"
# change fps 25 -> 30
sed -i "s!Isp_FrameRate=25!Isp_FrameRate=30!g" /etc/sensors/imx307_i2c_2l_1080p.ini
sed -i "s!Isp_FrameRate=25!Isp_FrameRate=30!g" /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini
@ -48,9 +51,10 @@ sigmastar() {
}
majestic_generic() {
cli -s .isp.slowShutter disabled
# enable digital image stabilization
# cli -s .isp.dis true
cli -s .isp.slowShutter disabled
cli -s .image.contrast 50
cli -s .image.luminance 50
cli -s .video0.size 1920x1080
@ -59,15 +63,18 @@ majestic_generic() {
cli -s .video0.codec h264
cli -s .video0.rcMode cbr
cli -s .video0.gopSize 1.5
# lowdelay support only imx307 sensor
if [ ${sensor} = "imx307" ]; then
if [ "$sensor" = "imx307" ]; then
cli -s .isp.lowDelay true
# cli -s .video0.sliceUnits 4
fi
if [ ${sensor} = "imx335" ]; then
if [ "$sensor" = "imx335" ]; then
cli -s .isp.drc 350
cli -s .isp.sensorConfig /etc/sensors/imx335_i2c_4M.ini
fi
cli -s .hls.enabled false
cli -s .netip.enabled false
cli -s .jpeg.enabled false
@ -85,18 +92,19 @@ majestic_sigmastar() {
streamer() {
if [ -f /usr/bin/majestic ]; then
if [ ${vendor} = "sigmastar" ]; then
if [ "$vendor" = "sigmastar" ]; then
majestic_sigmastar
else
majestic_generic
fi
# outgoing rtp stream to udp
cli -s .outgoing.enabled true
cli -s .outgoing.server udp://127.0.0.1:5600
fi
if [ -f /usr/bin/venc ]; then
if [ ${sensor} = "imx335" ]; then
if [ "$sensor" = "imx335" ]; then
sed -i "s!version=200_imx307B!version=300_imx335B!g" /etc/venc.conf
sed -i "s!size=720p!size=1292x972!g" /etc/venc.conf
fi
@ -106,24 +114,24 @@ streamer() {
finish() {
# complete tweaks and add marker
touch /etc/system.ok
echo "Preparing system done."
reboot
echo "Manually restart the system to apply changes."
}
case "$1" in
gk7205v200 | gk7205v210 | hi3516ev200)
echo "Preparing system tweaks for ${chip}..."
# set custom config
if [ ${chip} = "gk7205v200" ] && [ ${sensor} = "imx307" ]; then
if [ "$chip" = "gk7205v200" ] && [ "$sensor" = "imx307" ]; then
echo "switch to custom sensor config"
# cli -s .isp.sensorConfig /etc/sensors/60fps/720p_imx307_i2c_2l.ini
fi
# fix osmem in bootargs
bootargs=$(fw_printenv -n bootargs)
if echo ${bootargs} | grep -q "32M"; then
newbootargs="mem=\${osmem} "$(echo ${bootargs} | cut -d " " -f2-)
fw_setenv bootargs ${newbootargs}
if echo "$bootargs" | grep -q "32M"; then
newbootargs="mem=\${osmem} "$(echo "$bootargs" | cut -d " " -f2-)
fw_setenv bootargs "$newbootargs"
fw_setenv osmem 40M
fi
@ -137,13 +145,13 @@ case "$1" in
;;
gk7205v300 | hi3516ev300)
echo "Preparing system tweaks for ${chip}..."
echo "Preparing system tweaks for $chip..."
# increase osmem
mem=$(fw_printenv -n osmem) && [ "${mem}" = "32M" ] && fw_setenv osmem 64M && set_allocator cma || echo "Memory allocated for the system:" ${mem}
mem=$(fw_printenv -n osmem) && [ "$mem" = "32M" ] && fw_setenv osmem 64M && set_allocator cma || echo "Memory allocated for the system:" "$mem"
# set sensor config for smtsec board
if [ ${chip} = "gk7205v300" ] && [ ${sensor} = "imx307" ]; then
if [ "$chip" = "gk7205v300" ] && [ "$sensor" = "imx307" ]; then
cli -s .isp.sensorConfig /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini
fi
@ -154,19 +162,19 @@ case "$1" in
;;
t31l | t31n | t31x | t31zx)
echo "Preparing system tweaks for ${chip}..."
echo "Preparing system tweaks for $chip..."
basic
streamer
finish
;;
hi3536dv100)
echo "Preparing system tweaks for ${chip}..."
echo "Preparing system tweaks for $chip..."
finish
;;
ssc33x)
echo "Preparing system tweaks for ${chip}..."
echo "Preparing system tweaks for $chip..."
basic
sigmastar
streamer

View File

@ -4,11 +4,11 @@ vendor=$(ipcinfo -v)
keydir=/etc
if [ -e /etc/datalink.conf ]; then
source /etc/datalink.conf
. /etc/datalink.conf
fi
if [ -e /etc/wfb.conf ]; then
source /etc/wfb.conf
. /etc/wfb.conf
fi
set_mcs() {
@ -19,12 +19,12 @@ set_mcs() {
fi
if [ -z "$mcs" ]; then
setmcs $mcs_index
setmcs "$mcs_index"
fi
if [ "$mcs_index" -eq 1 ] || [ "$mcs_index" -eq 3 ]; then
if [ ! "$mcs_index" -eq "$mcs" ]; then
setmcs $mcs_index
setmcs "$mcs_index"
sleep 3
fi
fi
@ -40,7 +40,7 @@ detect_wifi_card() {
case "$card" in
"0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012")
driver="realtek"
modprobe 88XXau rtw_tx_pwr_idx_override=$driver_txpower_override
modprobe 88XXau rtw_tx_pwr_idx_override="$driver_txpower_override"
;;
"0cf3:9271" | "040d:3801")
@ -49,7 +49,7 @@ detect_wifi_card() {
set_mcs
fi
modprobe mac80211
modprobe ath9k_hw txpower=$txpower
modprobe ath9k_hw txpower="$txpower"
modprobe ath9k_htc
;;
esac
@ -59,13 +59,13 @@ detect_wifi_card() {
echo "No usb wifi card detected. Check wifi stick connection, usb power or possible bad soldering."
exit 1
else
echo "Detected:" $driver
echo "Detected: $driver"
fi
echo "Awaiting interface $wlan in system..."
local n=0
while ! $(ifconfig -a | grep -q $wlan); do
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 1
@ -82,19 +82,19 @@ load_modules() {
load_interface() {
if [ "$driver" = "realtek" ]; then
ifconfig $wlan up
iwconfig $wlan mode monitor
ifconfig "$wlan" up
iwconfig "$wlan" mode monitor
elif [ "$driver" = "atheros" ]; then
iwconfig $wlan mode monitor
ifconfig $wlan up
iwconfig "$wlan" mode monitor
ifconfig "$wlan" up
fi
iw reg set $region
iw reg set "$region"
if [ ! -z "$frequency" ]; then
iwconfig $wlan freq $frequency
if [ -n "$frequency" ]; then
iwconfig "$wlan" freq "$frequency"
else
iwconfig $wlan channel $channel
iwconfig "$wlan" channel "$channel"
fi
# dirty fix crash if txpower set. setting txpower disabled because patched driver always set txpower level 58
@ -102,13 +102,13 @@ load_interface() {
}
start_drone_wfb() {
wfb_tx -p $stream -u $udp_port -R $rcv_buf -K $keydir/$unit.key -B $bandwidth \
-M $mcs_index -S $stbc -L $ldpc -G $guard_interval -k $fec_k -n $fec_n \
-T $pool_timeout -i $link_id -f $frame_type $wlan > /dev/null &
wfb_tx -p "$stream" -u "$udp_port" -R "$rcv_buf" -K "$keydir/$unit.key" -B "$bandwidth" \
-M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \
-T "$pool_timeout" -i "$link_id" -f "$frame_type" "$wlan" > /dev/null &
}
start_gs_wfb() {
wfb_rx -c $udp_addr -u $udp_port -p $stream -K $keydir/$unit.key -i $link_id $wlan > /dev/null &
wfb_rx -c "$udp_addr" -u "$udp_port" -p "$stream" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
}
case "$1" in
@ -122,13 +122,13 @@ case "$1" in
if ! cat "$keydir/$unit.key" > /dev/null 2>&1; then
echo "Generating drone & ground station keys..."
cd $keydir; wfb_keygen
cd $keydir && wfb_keygen
else
echo $unit "key exist..."
echo "$unit key exist..."
fi
echo "Starting Wifibroadcast service..."
start_${unit}_wfb
start_"$unit"_wfb
echo "Done."
if [ "$telemetry" = "true" ]; then