Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8c32c84a1 | ||
|
|
8c4661665b | ||
|
|
2571aeaa4f | ||
|
|
d48f415bcf | ||
|
|
438b2fd47e | ||
|
|
a8c9985704 | ||
|
|
79659433ea | ||
|
|
bdd949c8c7 |
@@ -0,0 +1,66 @@
|
|||||||
|
name: Build HiLink URLLC firmware
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: openipc-builder
|
||||||
|
timeout-minutes: 360
|
||||||
|
env:
|
||||||
|
DEVICE: ssc338q_fpv_openipc-urllc-aio
|
||||||
|
BR2_DL_DIR: /tmp/builder-dl
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout builder branch
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Verify provisioned Buildroot toolchain
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -eu
|
||||||
|
id
|
||||||
|
missing=0
|
||||||
|
for tool in \
|
||||||
|
bash bc bison ccache cpio curl file flex gawk gcc git gzip make \
|
||||||
|
patch perl python3 rsync sed tar tree unzip wget xz; do
|
||||||
|
if ! command -v "$tool" >/dev/null 2>&1; then
|
||||||
|
echo "::error::Missing runner dependency: $tool"
|
||||||
|
missing=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
test "$missing" = 0
|
||||||
|
|
||||||
|
- name: Build exactly the HiLink URLLC profile
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
export GIT_HASH="$(git rev-parse --short HEAD)"
|
||||||
|
export GIT_BRANCH="$(git branch --show-current)"
|
||||||
|
mkdir -p "$BR2_DL_DIR" /tmp/ccache
|
||||||
|
ln -s /tmp/ccache "$HOME/.ccache"
|
||||||
|
|
||||||
|
if ! bash builder.sh "$DEVICE"; then
|
||||||
|
echo '--- largest files retained in the failed rootfs ---'
|
||||||
|
find openipc/output/target -type f -printf '%s\t%p\n' | \
|
||||||
|
sort -nr | sed -n '1,100p' || true
|
||||||
|
echo '--- rootfs target usage ---'
|
||||||
|
du -sh openipc/output/target 2>/dev/null || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p dist
|
||||||
|
firmware=$(find openipc/output/images -type f -name 'openipc*nor*.tgz' -print -quit)
|
||||||
|
test -n "$firmware"
|
||||||
|
cp "$firmware" "dist/${DEVICE}-nor.tgz"
|
||||||
|
sha256sum "dist/${DEVICE}-nor.tgz" > "dist/${DEVICE}-nor.tgz.sha256"
|
||||||
|
|
||||||
|
find dist -maxdepth 1 -type f -printf '%f %s bytes\n'
|
||||||
|
cat "dist/${DEVICE}-nor.tgz.sha256"
|
||||||
|
|
||||||
|
- name: Upload firmware artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: hilink-urllc-${{ github.sha }}
|
||||||
|
retention-days: 30
|
||||||
|
path: dist/*
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
bash \
|
||||||
|
bc \
|
||||||
|
bison \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates \
|
||||||
|
ccache \
|
||||||
|
cpio \
|
||||||
|
curl \
|
||||||
|
file \
|
||||||
|
flex \
|
||||||
|
gawk \
|
||||||
|
git \
|
||||||
|
gzip \
|
||||||
|
libncurses-dev \
|
||||||
|
make \
|
||||||
|
nodejs \
|
||||||
|
patch \
|
||||||
|
perl \
|
||||||
|
python3 \
|
||||||
|
rsync \
|
||||||
|
sed \
|
||||||
|
tar \
|
||||||
|
tree \
|
||||||
|
unzip \
|
||||||
|
wget \
|
||||||
|
xz-utils \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
start() {
|
||||||
|
echo "Starting network..."
|
||||||
|
ifup lo
|
||||||
|
modprobe 8812eu rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
ifdown lo
|
||||||
|
ifdown -f wlan0
|
||||||
|
ifdown -f eth0
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start|stop) "$1" ;;
|
||||||
|
restart|reload) stop; start ;;
|
||||||
|
*) echo "Usage: $0 {start|stop|restart|reload}"; exit 1 ;;
|
||||||
|
esac
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
ifdown eth0 2>/dev/null || true
|
||||||
|
ifup eth0
|
||||||
|
sleep 5
|
||||||
|
/usr/bin/mgmt-net --force
|
||||||
|
|
||||||
|
if [ -r /run/mgmt-netd.pid ] &&
|
||||||
|
kill -0 "$(cat /run/mgmt-netd.pid)" 2>/dev/null; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
while :; do
|
||||||
|
/usr/bin/mgmt-net
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
echo $! >/run/mgmt-netd.pid
|
||||||
|
;;
|
||||||
|
|
||||||
|
stop)
|
||||||
|
[ -r /run/mgmt-netd.pid ] &&
|
||||||
|
kill "$(cat /run/mgmt-netd.pid)" 2>/dev/null || true
|
||||||
|
rm -f /run/mgmt-netd.pid /run/mgmt-net.state
|
||||||
|
;;
|
||||||
|
esac
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
pidof wfb_tx wfb_rx wfb_tun wifilink >/dev/null && exit 0
|
||||||
|
pidof msposd >/dev/null && exit 0
|
||||||
|
|
||||||
|
size=$(curl -s localhost/api/v1/config.json | \
|
||||||
|
jsonfilter -qe "@.video0.size")
|
||||||
|
size="${size:-1280x720}"
|
||||||
|
|
||||||
|
msposd \
|
||||||
|
-b 115200 \
|
||||||
|
-c 8 \
|
||||||
|
-c 6 \
|
||||||
|
-p 500 \
|
||||||
|
-w 1000 \
|
||||||
|
-r 20 \
|
||||||
|
-m /dev/ttyS2 \
|
||||||
|
-o 127.0.0.1:14551 \
|
||||||
|
-z "$size" \
|
||||||
|
>/tmp/msposd-management.log 2>&1 &
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo "Starting wifibroadcast..."
|
||||||
|
wifibroadcast start
|
||||||
|
;;
|
||||||
|
|
||||||
|
stop)
|
||||||
|
echo "Stopping wifibroadcast..."
|
||||||
|
wifibroadcast stop
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
system:
|
||||||
|
webPort: 80
|
||||||
|
httpsPort: 443
|
||||||
|
logLevel: info
|
||||||
|
isp:
|
||||||
|
antiFlicker: disabled
|
||||||
|
sensorConfig: /etc/sensors/imx415_fpv.bin
|
||||||
|
exposure: 5
|
||||||
|
iqServer: false
|
||||||
|
image:
|
||||||
|
mirror: false
|
||||||
|
flip: false
|
||||||
|
rotate: 0
|
||||||
|
contrast: 50
|
||||||
|
hue: 50
|
||||||
|
saturation: 50
|
||||||
|
luminance: 50
|
||||||
|
video0:
|
||||||
|
enabled: true
|
||||||
|
codec: h264
|
||||||
|
fps: 60
|
||||||
|
bitrate: 4096
|
||||||
|
rcMode: cbr
|
||||||
|
gopSize: 0.2
|
||||||
|
size: 1280x720
|
||||||
|
profile: main
|
||||||
|
sliceUnits: 0
|
||||||
|
video1:
|
||||||
|
enabled: false
|
||||||
|
codec: h264
|
||||||
|
size: 704x576
|
||||||
|
fps: 15
|
||||||
|
jpeg:
|
||||||
|
enabled: true
|
||||||
|
qfactor: 50
|
||||||
|
fps: 5
|
||||||
|
osd:
|
||||||
|
enabled: false
|
||||||
|
font: /usr/share/fonts/truetype/UbuntuMono-Regular.ttf
|
||||||
|
template: '%d.%m.%Y %H:%M:%S'
|
||||||
|
posX: 16
|
||||||
|
posY: 16
|
||||||
|
audio:
|
||||||
|
enabled: false
|
||||||
|
volume: 30
|
||||||
|
srate: 8000
|
||||||
|
codec: opus
|
||||||
|
outputEnabled: false
|
||||||
|
outputVolume: 30
|
||||||
|
rtsp:
|
||||||
|
enabled: false
|
||||||
|
port: 554
|
||||||
|
nightMode:
|
||||||
|
colorToGray: true
|
||||||
|
irCutSingleInvert: false
|
||||||
|
lightMonitor: false
|
||||||
|
lightSensorInvert: false
|
||||||
|
motionDetect:
|
||||||
|
enabled: false
|
||||||
|
visualize: false
|
||||||
|
debug: false
|
||||||
|
records:
|
||||||
|
enabled: false
|
||||||
|
path: /mnt/mmcblk0p1/%F
|
||||||
|
split: 1
|
||||||
|
maxUsage: 95
|
||||||
|
notime: true
|
||||||
|
outgoing:
|
||||||
|
enabled: true
|
||||||
|
naluSize: 1400
|
||||||
|
wfb: true
|
||||||
|
server:
|
||||||
|
substream: false
|
||||||
|
watchdog:
|
||||||
|
enabled: true
|
||||||
|
timeout: 300
|
||||||
|
hls:
|
||||||
|
enabled: false
|
||||||
|
fpv:
|
||||||
|
enabled: true
|
||||||
|
noiseLevel: 1
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
iface eth0 inet static
|
||||||
|
hwaddress ether $(fw_printenv -n ethaddr || echo 00:00:23:34:45:66)
|
||||||
|
address 192.168.0.10
|
||||||
|
netmask 255.255.255.0
|
||||||
|
gateway 192.168.0.1
|
||||||
|
post-up echo "nameserver 1.1.1.1" > /etc/resolv.conf
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
auto wlan0
|
||||||
|
iface wlan0 inet static
|
||||||
|
address 192.168.0.10
|
||||||
|
netmask 255.255.255.0
|
||||||
|
gateway 192.168.0.1
|
||||||
|
pre-up wpa_passphrase "$(fw_printenv -n wlanssid)" "$(fw_printenv -n wlanpass)" > /tmp/wpa_supplicant.conf
|
||||||
|
pre-up sed -i 's/#psk.*/scan_ssid=1/g' /tmp/wpa_supplicant.conf
|
||||||
|
pre-up wpa_supplicant -B -i wlan0 -D nl80211,wext -c /tmp/wpa_supplicant.conf
|
||||||
|
post-up echo "nameserver 1.1.1.1" > /etc/resolv.conf
|
||||||
|
post-down killall -q wpa_supplicant
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
wireless:
|
||||||
|
txpower: 10
|
||||||
|
channel: 161
|
||||||
|
width: 20
|
||||||
|
mlink: 1500
|
||||||
|
broadcast:
|
||||||
|
mcs_index: 2
|
||||||
|
tun_index: 1
|
||||||
|
fec_k: 8
|
||||||
|
fec_n: 12
|
||||||
|
stbc: 0
|
||||||
|
ldpc: 0
|
||||||
|
link_id: 7669206
|
||||||
|
telemetry:
|
||||||
|
router: msposd
|
||||||
|
serial: ttyS2
|
||||||
|
osd_fps: 20
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
CHANNEL="${1:-}"
|
||||||
|
VALUE="${2:-}"
|
||||||
|
|
||||||
|
[ "$CHANNEL" = "6" ] || exit 0
|
||||||
|
|
||||||
|
case "$VALUE" in
|
||||||
|
''|*[!0-9]*) exit 2 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$VALUE" -le 1250 ]; then
|
||||||
|
logger -t channels "AUX2=$VALUE -> management"
|
||||||
|
exec /usr/bin/link-mode management
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$VALUE" -ge 1350 ]; then
|
||||||
|
logger -t channels "AUX2=$VALUE -> preflight"
|
||||||
|
exec /usr/bin/link-mode preflight
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
LOCK=/run/link-mode.lock
|
||||||
|
STATE=/run/link-mode.state
|
||||||
|
|
||||||
|
log() {
|
||||||
|
logger -t link-mode "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! mkdir "$LOCK" 2>/dev/null; then
|
||||||
|
log "another transition is in progress; ignoring ${1:-}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rmdir "$LOCK" 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT HUP INT TERM
|
||||||
|
|
||||||
|
wfb_active() {
|
||||||
|
pidof wfb_tx wfb_rx wfb_tun wifilink >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
preflight)
|
||||||
|
if wfb_active; then
|
||||||
|
echo wfb >"$STATE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "management -> WFB"
|
||||||
|
ifdown wlan0 >/dev/null 2>&1 || true
|
||||||
|
killall -q wpa_supplicant 2>/dev/null || true
|
||||||
|
ip link set wlan0 up
|
||||||
|
|
||||||
|
if /usr/bin/wifibroadcast start && wfb_active; then
|
||||||
|
echo wfb >"$STATE"
|
||||||
|
log "WFB is active"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "WFB start failed"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
management)
|
||||||
|
if wfb_active; then
|
||||||
|
log "WFB -> management"
|
||||||
|
/usr/bin/wifibroadcast stop
|
||||||
|
killall -q wifilink 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/bin/mgmt-net --force
|
||||||
|
echo management >"$STATE"
|
||||||
|
log "management path restored"
|
||||||
|
/etc/init.d/S97link-monitor start
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {preflight|management}" >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
STATE=/run/mgmt-net.state
|
||||||
|
LINK_LOCK=/run/link-mode.lock
|
||||||
|
FORCE="${1:-}"
|
||||||
|
|
||||||
|
[ -e "$LINK_LOCK" ] && [ "$FORCE" != "--force" ] && exit 0
|
||||||
|
|
||||||
|
eth_standby() {
|
||||||
|
ifdown eth0 2>/dev/null || true
|
||||||
|
ifup eth0
|
||||||
|
ip addr flush dev eth0
|
||||||
|
}
|
||||||
|
|
||||||
|
carrier=0
|
||||||
|
if [ -r /sys/class/net/eth0/carrier ]; then
|
||||||
|
carrier=$(cat /sys/class/net/eth0/carrier 2>/dev/null || echo 0)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if pidof wfb_tx wfb_rx wfb_tun wifilink >/dev/null; then
|
||||||
|
wfb_active=1
|
||||||
|
else
|
||||||
|
wfb_active=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$carrier" = "1" ]; then
|
||||||
|
wanted=ethernet
|
||||||
|
elif [ "$wfb_active" = "1" ]; then
|
||||||
|
wanted=wfb
|
||||||
|
else
|
||||||
|
wanted=wifi
|
||||||
|
fi
|
||||||
|
|
||||||
|
current=$(cat "$STATE" 2>/dev/null || true)
|
||||||
|
[ "$wanted" = "$current" ] && [ "$FORCE" != "--force" ] && exit 0
|
||||||
|
|
||||||
|
case "$wanted" in
|
||||||
|
ethernet)
|
||||||
|
[ "$wfb_active" = "0" ] && ifdown wlan0 2>/dev/null || true
|
||||||
|
ifdown eth0 2>/dev/null || true
|
||||||
|
ifup eth0
|
||||||
|
;;
|
||||||
|
|
||||||
|
wifi)
|
||||||
|
eth_standby
|
||||||
|
ifdown wlan0 2>/dev/null || true
|
||||||
|
ip link set wlan0 down
|
||||||
|
iw dev wlan0 set type managed
|
||||||
|
ip link set wlan0 up
|
||||||
|
ifup wlan0
|
||||||
|
;;
|
||||||
|
|
||||||
|
wfb)
|
||||||
|
eth_standby
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "$wanted" >"$STATE"
|
||||||
|
logger -t mgmt-net "active path: $wanted"
|
||||||
+196
@@ -0,0 +1,196 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
wfb_key=/etc/drone.key
|
||||||
|
wfb_cfg=/etc/wfb.yaml
|
||||||
|
wfb_dev=wlan0
|
||||||
|
|
||||||
|
echo_log() {
|
||||||
|
echo "$1" | logger -s -t wifibroadcast
|
||||||
|
}
|
||||||
|
|
||||||
|
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"$wfb_cfg"
|
||||||
|
wfb_yaml "$wfb_cfg"
|
||||||
|
[ ! -e "$wfb_key" ] && wfb_key=/rom"$wfb_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
|
||||||
|
;;
|
||||||
|
|
||||||
|
"0bda:a81a")
|
||||||
|
driver=8812eu
|
||||||
|
;;
|
||||||
|
|
||||||
|
"0bda:f72b" | "0bda:b733")
|
||||||
|
driver=8733bu
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$driver" ]; then
|
||||||
|
echo_log "Wireless module not detected!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo_log "Detected driver: $driver"
|
||||||
|
[ -e /sys/class/net/"$wfb_dev" ] && return
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
if [ "$driver" != "88XXau" ]; then
|
||||||
|
opt1="rtw_tx_pwr_by_rate=0"
|
||||||
|
opt2="rtw_tx_pwr_lmt_enable=0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
modprobe "$driver" "$opt1" "$opt2"
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
if ! ifconfig "$wfb_dev" up; then
|
||||||
|
echo_log "Wireless driver not found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
load_mlink() {
|
||||||
|
ifconfig "$wfb_dev" mtu "$mlink"
|
||||||
|
|
||||||
|
nalu=$((mlink - 100))
|
||||||
|
if [ "$(cli -g .outgoing.naluSize)" != "$nalu" ]; then
|
||||||
|
cli -s .outgoing.naluSize "$nalu"
|
||||||
|
killall -1 majestic
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
load_interface() {
|
||||||
|
iw "$wfb_dev" set monitor none
|
||||||
|
|
||||||
|
[ "$width" = "40" ] && wfb_width=HT40+ || wfb_width=HT20
|
||||||
|
iw "$wfb_dev" set channel "$channel" "$wfb_width"
|
||||||
|
iw reg set 00
|
||||||
|
|
||||||
|
[ "$driver" = "88XXau" ] && wfb_power=$((txpower * -100)) || wfb_power=$((txpower * 50))
|
||||||
|
iw "$wfb_dev" set txpower fixed "$wfb_power"
|
||||||
|
}
|
||||||
|
|
||||||
|
load_wfb() {
|
||||||
|
wfb_rx -K "$wfb_key" -i "$link_id" -p "$1" -u "$3" "$wfb_dev" &> /dev/null &
|
||||||
|
wfb_tx -K "$wfb_key" -M "$tun_index" -B "$width" -k "$fec_k" -n "$fec_n" \
|
||||||
|
-S "$stbc" -L "$ldpc" -i "$link_id" -p "$2" -u "$4" "$wfb_dev" &> /dev/null &
|
||||||
|
}
|
||||||
|
|
||||||
|
start_broadcast() {
|
||||||
|
echo_log "Starting wfb_tx"
|
||||||
|
wfb_tx -K "$wfb_key" -M "$mcs_index" -B "$width" -k "$fec_k" -n "$fec_n" -U rtp_local \
|
||||||
|
-S "$stbc" -L "$ldpc" -i "$link_id" -C 8000 "$wfb_dev" &> /dev/null &
|
||||||
|
}
|
||||||
|
|
||||||
|
start_tunnel() {
|
||||||
|
echo_log "Starting wfb_tun"
|
||||||
|
load_wfb 160 32 5800 5801
|
||||||
|
wfb_tun -a 10.5.0.10/24 > /dev/null &
|
||||||
|
}
|
||||||
|
|
||||||
|
start_telemetry() {
|
||||||
|
chipset=$(ipcinfo -c)
|
||||||
|
[ "$chipset" = "ssc33x" ] && devmem 0x1F207890 16 0x8
|
||||||
|
|
||||||
|
port_rx=14550
|
||||||
|
port_tx=14551
|
||||||
|
|
||||||
|
echo_log "Starting $router"
|
||||||
|
load_wfb 144 16 "$port_rx" "$port_tx"
|
||||||
|
|
||||||
|
if [ "$router" = "mavfwd" ]; then
|
||||||
|
mavfwd -b 115200 -c 8 -p 100 -a 15 -t -m /dev/"$serial" \
|
||||||
|
-o 127.0.0.1:"$port_tx" -i 127.0.0.1:"$port_rx" > /dev/null &
|
||||||
|
else
|
||||||
|
if [ "$router" = "msposd" ]; then
|
||||||
|
size=$(curl -s localhost/api/v1/config.json | jsonfilter -qe "@.video0.size")
|
||||||
|
fi
|
||||||
|
if ! pidof msposd >/dev/null; then
|
||||||
|
msposd -b 115200 -c 8 -c 6 -p 500 -w 1000 -r "$osd_fps" -m /dev/"$serial" \
|
||||||
|
-o 127.0.0.1:"$port_tx" -z "$size" > /dev/null &
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
video_settings() {
|
||||||
|
sensor=$(ipcinfo -s)
|
||||||
|
cli -s .isp.sensorConfig /etc/sensors/"$sensor"_fpv.bin
|
||||||
|
cli -s .isp.exposure 5
|
||||||
|
cli -s .video0.fps 60
|
||||||
|
cli -s .video0.size 1280x720
|
||||||
|
cli -s .video0.bitrate 4096
|
||||||
|
cli -s .video0.codec h264
|
||||||
|
cli -s .video0.rcMode cbr
|
||||||
|
cli -s .video0.gopSize 0.2
|
||||||
|
cli -s .outgoing.enabled true
|
||||||
|
cli -s .outgoing.wfb true
|
||||||
|
cli -s .fpv.enabled true
|
||||||
|
cli -s .fpv.noiseLevel 1
|
||||||
|
cli -s .records.split 1
|
||||||
|
cli -s .records.notime true
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
load_config
|
||||||
|
load_modules
|
||||||
|
load_mlink
|
||||||
|
load_interface
|
||||||
|
|
||||||
|
if [ ! -e /etc/system.ok ]; then
|
||||||
|
video_settings
|
||||||
|
touch /etc/system.ok
|
||||||
|
# killall -1 majestic
|
||||||
|
reboot
|
||||||
|
fi
|
||||||
|
|
||||||
|
stop
|
||||||
|
start_broadcast
|
||||||
|
start_tunnel
|
||||||
|
start_telemetry
|
||||||
|
wifilink 20 &
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
for process in wfb_rx wfb_tx wfb_tun mavfwd; do
|
||||||
|
if [ -n "$(pidof $process)" ]; then
|
||||||
|
echo_log "Stopping $process"
|
||||||
|
killall -q "$process"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start|stop)
|
||||||
|
$1
|
||||||
|
;;
|
||||||
|
|
||||||
|
reset)
|
||||||
|
cp -f /rom"$wfb_cfg" "$wfb_cfg"
|
||||||
|
cp -f /rom/etc/majestic.yaml /etc/majestic.yaml
|
||||||
|
video_settings
|
||||||
|
;;
|
||||||
|
|
||||||
|
cli)
|
||||||
|
shift
|
||||||
|
yaml-cli -i "$wfb_cfg" "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|reset|cli}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Set custom upgrade url
|
# Set the reproducible Piksar HiLink firmware release channel.
|
||||||
fw_setenv upgrade 'https://github.com/OpenIPC/builder/releases/download/latest/ssc338q_fpv_openipc-urllc-aio-nor.tgz'
|
fw_setenv upgrade 'https://git.piksar.eu/piotr/openipc-builder/releases/download/latest/ssc338q_fpv_openipc-urllc-aio-nor.tgz'
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -14,3 +14,8 @@
|
|||||||
/lib/modules/4.9.84/sigmastar/sensor_os04c10_mipi.ko
|
/lib/modules/4.9.84/sigmastar/sensor_os04c10_mipi.ko
|
||||||
/lib/modules/4.9.84/sigmastar/sensor_sc501ai_mipi.ko
|
/lib/modules/4.9.84/sigmastar/sensor_sc501ai_mipi.ko
|
||||||
/lib/modules/4.9.84/sigmastar/sensor_sc8235_mipi.ko
|
/lib/modules/4.9.84/sigmastar/sensor_sc8235_mipi.ko
|
||||||
|
#
|
||||||
|
# HiLink's radio is USB 0bda:a81a and loads 8812eu. The legacy 88XXau
|
||||||
|
# module targets other adapters and is 1.4 MiB, which exceeds the 8 MiB
|
||||||
|
# rootfs budget without serving this fixed hardware profile.
|
||||||
|
/lib/modules/4.9.84/extra/88XXau.ko
|
||||||
|
|||||||
Reference in New Issue
Block a user