From accf5a91ba50047ecd7ece41780ff899e6a18ceb Mon Sep 17 00:00:00 2001 From: snokvist Date: Sun, 6 Apr 2025 19:28:18 +0200 Subject: [PATCH] Add temperature monitor, add channels.sh, add jumbo frames (#1787) --- .../wifibroadcast-ext/0001-unix-socket.patch | 127 +++++++++++++ .../files/S75generate_vtx_info | 17 -- .../wifibroadcast-ext/files/S991temp_monitor | 18 ++ .../wifibroadcast-ext/files/channels.sh | 41 +++++ .../wifibroadcast-ext/files/generate_vtx_info | 174 ------------------ .../wifibroadcast-ext/files/temp_monitor | 74 ++++++++ .../package/wifibroadcast-ext/files/wfb.yaml | 17 ++ .../wifibroadcast-ext/files/wifibroadcast | 162 ++++++++++++++++ .../wifibroadcast-ext/wifibroadcast-ext.mk | 7 + 9 files changed, 446 insertions(+), 191 deletions(-) create mode 100644 general/package/wifibroadcast-ext/0001-unix-socket.patch delete mode 100755 general/package/wifibroadcast-ext/files/S75generate_vtx_info create mode 100644 general/package/wifibroadcast-ext/files/S991temp_monitor create mode 100644 general/package/wifibroadcast-ext/files/channels.sh delete mode 100755 general/package/wifibroadcast-ext/files/generate_vtx_info create mode 100644 general/package/wifibroadcast-ext/files/temp_monitor create mode 100644 general/package/wifibroadcast-ext/files/wfb.yaml create mode 100644 general/package/wifibroadcast-ext/files/wifibroadcast diff --git a/general/package/wifibroadcast-ext/0001-unix-socket.patch b/general/package/wifibroadcast-ext/0001-unix-socket.patch new file mode 100644 index 00000000..722d4e13 --- /dev/null +++ b/general/package/wifibroadcast-ext/0001-unix-socket.patch @@ -0,0 +1,127 @@ +diff --git a/src/tx.cpp b/src/tx.cpp +index 4dcfd87..b1a9d94 100644 +--- a/src/tx.cpp ++++ b/src/tx.cpp +@@ -1347,7 +1347,7 @@ int open_control_fd(int control_port) + void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_buf, int log_interval, + int udp_port, int debug_port, int k, int n, const string &keypair, int fec_timeout, + uint64_t epoch, uint32_t channel_id, uint32_t fec_delay, bool use_qdisc, uint32_t fwmark, +- radiotap_header_t &radiotap_header, uint8_t frame_type, int control_port, bool mirror) ++ radiotap_header_t &radiotap_header, uint8_t frame_type, int control_port, int socket_type, bool mirror) + { + vector rx_fd; + vector wlans; +@@ -1357,7 +1357,7 @@ void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_b + for(int i = 0; optind + i < argc; i++) + { + int bind_port = udp_port != 0 ? udp_port + i : 0; +- int fd = open_udp_socket_for_rx(bind_port, rcv_buf); ++ int fd = open_udp_socket_for_rx(bind_port, rcv_buf, INADDR_ANY, socket_type); + + if (udp_port == 0) + { +@@ -1371,7 +1371,15 @@ void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_b + bind_port = ntohs(saddr.sin_port); + IPC_MSG("%" PRIu64 "\tLISTEN_UDP\t%d:%x\n", get_time_ms(), bind_port, i); + } +- WFB_INFO("Listen on %d for %s\n", bind_port, argv[optind + i]); ++ ++ if (socket_type == SOCK_SEQPACKET) ++ { ++ WFB_INFO("Listen on %s for %s\n", UNIX_SOCKET, argv[optind + i]); ++ } ++ else ++ { ++ WFB_INFO("Listen on %d for %s\n", bind_port, argv[optind + i]); ++ } + rx_fd.push_back(fd); + wlans.push_back(string(argv[optind + i])); + } +@@ -1499,8 +1507,9 @@ int main(int argc, char * const *argv) + bool use_qdisc = false; + uint32_t fwmark = 0; + tx_mode_t tx_mode = LOCAL; ++ int socket_type = SOCK_DGRAM; + +- while ((opt = getopt(argc, argv, "dI:K:k:n:u:p:F:l:B:G:S:L:M:N:D:T:i:e:R:f:mVQP:C:")) != -1) { ++ while ((opt = getopt(argc, argv, "dI:K:k:n:u:p:F:l:B:G:S:L:M:N:D:T:i:e:R:f:mVQUP:C:")) != -1) { + switch (opt) { + case 'I': + tx_mode = INJECTOR; +@@ -1599,10 +1608,13 @@ int main(int argc, char * const *argv) + case 'C': + control_port = atoi(optarg); + break; ++ case 'U': ++ socket_type = SOCK_SEQPACKET; ++ break; + default: /* '?' */ + show_usage: + WFB_INFO("Local TX: %s [-K tx_key] [-k RS_K] [-n RS_N] [-u udp_port] [-R rcv_buf] [-p radio_port] [-F fec_delay] [-B bandwidth] [-G guard_interval] [-S stbc] [-L ldpc] [-M mcs_index] [-N VHT_NSS]\n" +- " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-P fwmark] [-C control_port] interface1 [interface2] ...\n", ++ " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-U] [-P fwmark] [-C control_port] interface1 [interface2] ...\n", + argv[0]); + WFB_INFO("TX distributor: %s -d [-K tx_key] [-k RS_K] [-n RS_N] [-u udp_port] [-R rcv_buf] [-p radio_port] [-F fec_delay] [-B bandwidth] [-G guard_interval] [-S stbc] [-L ldpc] [-M mcs_index] [-N VHT_NSS]\n" + " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-P fwmark] [-C control_port] host1:port1,port2,... [host2:port1,port2,...] ...\n", +@@ -1658,7 +1670,7 @@ int main(int argc, char * const *argv) + local_loop(argc, argv, optind, srv_port, rcv_buf, log_interval, + udp_port, debug_port, k, n, keypair, fec_timeout, + epoch, channel_id, fec_delay, use_qdisc, fwmark, +- radiotap_header, frame_type, control_port, mirror); ++ radiotap_header, frame_type, control_port, socket_type, mirror); + break; + + +diff --git a/src/wifibroadcast.cpp b/src/wifibroadcast.cpp +index d082958..a1f9f76 100644 +--- a/src/wifibroadcast.cpp ++++ b/src/wifibroadcast.cpp +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -65,9 +66,26 @@ uint64_t get_time_us(void) // in microseconds + int open_udp_socket_for_rx(int port, int rcv_buf_size, uint32_t bind_addr, int socket_type, int socket_protocol) + { + struct sockaddr_in saddr; +- int fd = socket(AF_INET, socket_type, socket_protocol); ++ struct sockaddr_un uaddr; ++ ++ int socket_family = (socket_type == SOCK_SEQPACKET) ? AF_UNIX : AF_INET; ++ int fd = socket(socket_family, socket_type, socket_protocol); + if (fd < 0) throw runtime_error(string_format("Error opening socket: %s", strerror(errno))); + ++ if (socket_family == AF_UNIX) ++ { ++ memset(&uaddr, '\0', sizeof(uaddr)); ++ uaddr.sun_family = socket_family; ++ strcpy(uaddr.sun_path, UNIX_SOCKET); ++ ++ if (::connect(fd, (struct sockaddr *) &uaddr, sizeof(uaddr)) < 0) ++ { ++ close(fd); ++ throw runtime_error(string_format("Unable to connect to %s : %s", uaddr.sun_path, strerror(errno))); ++ } ++ return fd; ++ } ++ + const int optval = 1; + if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(optval)) !=0) + { +diff --git a/src/wifibroadcast.hpp b/src/wifibroadcast.hpp +index 0947a76..9bc8e1d 100644 +--- a/src/wifibroadcast.hpp ++++ b/src/wifibroadcast.hpp +@@ -286,6 +286,8 @@ typedef struct { + #define IPC_MSG_SEND() fflush(stdout) + #endif + ++#define UNIX_SOCKET "/tmp/wfb_stream" ++ + int open_udp_socket_for_rx(int port, int rcv_buf_size, uint32_t bind_addr = INADDR_ANY, int socket_type = SOCK_DGRAM, int socket_protocol = 0); + uint64_t get_time_ms(void); + uint64_t get_time_us(void); diff --git a/general/package/wifibroadcast-ext/files/S75generate_vtx_info b/general/package/wifibroadcast-ext/files/S75generate_vtx_info deleted file mode 100755 index ea9aac4b..00000000 --- a/general/package/wifibroadcast-ext/files/S75generate_vtx_info +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -case "$1" in - start) - echo "Generating or updating /etc/vtx_info.yaml..." - generate_vtx_info - ;; - - stop) - echo "Generating or updating /etc/vtx_info.yaml only done when starting..." - ;; - - *) - echo "Usage: $0 {start|stop}" - exit 1 - ;; -esac diff --git a/general/package/wifibroadcast-ext/files/S991temp_monitor b/general/package/wifibroadcast-ext/files/S991temp_monitor new file mode 100644 index 00000000..3cf6907b --- /dev/null +++ b/general/package/wifibroadcast-ext/files/S991temp_monitor @@ -0,0 +1,18 @@ +#!/bin/sh + +case "$1" in + start) + echo "Starting temperature check..." + temp_monitor &>/dev/null & + ;; + + stop) + echo "Stopping temperature check..." + killall -q temp_monitor + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac diff --git a/general/package/wifibroadcast-ext/files/channels.sh b/general/package/wifibroadcast-ext/files/channels.sh new file mode 100644 index 00000000..eeba8df6 --- /dev/null +++ b/general/package/wifibroadcast-ext/files/channels.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +case "$1" in + 5) + echo "Channel5 change." + channel5.sh "$2" + ;; + 6) + echo "Channel6 change." + channel6.sh "$2" + ;; + 7) + echo "Channel7 change." + channel7.sh "$2" + ;; + 8) + echo "Channel8 change." + channel8.sh "$2" + ;; + 9) + echo "Channel9 change." + channel9.sh "$2" + ;; + 10) + echo "Channel10 change." + channel10.sh "$2" + ;; + 11) + echo "Channel11 change." + channel11.sh "$2" + ;; + 12) + echo "Channel12 change." + channel12.sh "$2" + ;; + *) + echo "No valid channel specified." + ;; +esac + +exit 0 diff --git a/general/package/wifibroadcast-ext/files/generate_vtx_info b/general/package/wifibroadcast-ext/files/generate_vtx_info deleted file mode 100755 index 0320ef61..00000000 --- a/general/package/wifibroadcast-ext/files/generate_vtx_info +++ /dev/null @@ -1,174 +0,0 @@ -#!/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 < "$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 diff --git a/general/package/wifibroadcast-ext/files/temp_monitor b/general/package/wifibroadcast-ext/files/temp_monitor new file mode 100644 index 00000000..e0c31ff3 --- /dev/null +++ b/general/package/wifibroadcast-ext/files/temp_monitor @@ -0,0 +1,74 @@ +#!/bin/sh +# Define temperature thresholds: +NORMAL_THRESHOLD=85 # Normal if below 85°C +REBOOT_THRESHOLD=100 # Reboot if 100°C or higher + +# --- Get Adapter info --- +for card in $(lsusb | awk '{print $6}' | sort | 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 +wifi_adapter=""$driver"" +echo "Wifi adapter found: $driver" + +while true; do + # --- Get VTX Temperature --- + # Example output from ipcinfo --temp: "39.00" + vtx_temp=$(ipcinfo --temp) + vtx_int=$(echo "$vtx_temp" | cut -d. -f1) + + adapter_temp=0 + if [ "$wifi_adapter" = "8733bu" ]; then + # Expected format: "rf_path: 0, thermal_value: 37, offset: 45, temperature: 20" + adapter_temp=$(grep -o 'temperature: [0-9]*' /proc/net/rtl8733bu/wlan0/thermal_state | awk '{print $2}') + elif [ "$wifi_adapter" = "88XXau" ]; then + echo "Adapter 88XXau temperature extraction not implemented yet." + adapter_temp=0 + elif [ "$wifi_adapter" = "8812eu" ]; then + if [ -f /proc/net/rtl88x2eu/wlan0/thermal_state ]; then + # Extract both temperature values and choose the highest + adapter_temp=$(grep -o 'temperature: [0-9]*' /proc/net/rtl88x2eu/wlan0/thermal_state | awk '{print $2}' | sort -n | tail -1) + else + echo "Thermal state file for 8812eu not found." + adapter_temp=0 + fi + else + echo "Unknown adapter type: $wifi_adapter" + fi + + # Fallback if adapter_temp is empty + if [ -z "$adapter_temp" ]; then + adapter_temp=0 + fi + + echo "VTX temperature: ${vtx_temp}°C, Adapter temperature: ${adapter_temp}°C" + + # --- Determine the Highest Temperature --- + if [ "$adapter_temp" -gt "$vtx_int" ]; then + max_temp=$adapter_temp + else + max_temp=$vtx_int + fi + + # --- Determine the current state based on max_temp --- + if [ "$max_temp" -lt "$NORMAL_THRESHOLD" ]; then + echo "All is well... Nothing to do" > /dev/null + elif [ "$max_temp" -lt "$REBOOT_THRESHOLD" ]; then + echo "Warning: High temperature was detected.\nVTX Temp:&T WifiTemp:&W &L30 &G8 &F18" > /tmp/MSPOSD.msg + else + echo "VTX will reboot due to thermal state...\nVTX Temp:&T WifiTemp:&W &L30 &G8 &F18.\nRebooting in 15 seconds..." > /tmp/MSPOSD.msg + sleep 15 + reboot + fi + + sleep 5 +done diff --git a/general/package/wifibroadcast-ext/files/wfb.yaml b/general/package/wifibroadcast-ext/files/wfb.yaml new file mode 100644 index 00000000..a11cbf1b --- /dev/null +++ b/general/package/wifibroadcast-ext/files/wfb.yaml @@ -0,0 +1,17 @@ +wireless: + txpower: 1 + channel: 161 + width: 20 +broadcast: + mcs_index: 2 + tun_index: 1 + fec_k: 8 + fec_n: 12 + stbc: 0 + ldpc: 0 + link_id: 7669206 + jumbo_frames: false +telemetry: + router: msposd + serial: ttyS2 + osd_fps: 20 diff --git a/general/package/wifibroadcast-ext/files/wifibroadcast b/general/package/wifibroadcast-ext/files/wifibroadcast new file mode 100644 index 00000000..84ba7d64 --- /dev/null +++ b/general/package/wifibroadcast-ext/files/wifibroadcast @@ -0,0 +1,162 @@ +#!/bin/sh +wfb_key=/etc/drone.key +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 /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_log "Wireless module not detected!" + exit 1 + fi + + echo_log "Detected driver: $driver" + if ! ifconfig "$wfb_dev" up; then + echo_log "Wireless driver not found!" + exit 1 + 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" + + if [ "$jumbo_frames" = "true" ]; then + ip link set dev "$wfb_dev" mtu 3994 + fi +} + +start_broadcast() { + echo_log "Starting wfb_tx" + wfb_tx -K "$wfb_key" -M "$mcs_index" -B "$width" -k "$fec_k" -n "$fec_n" \ + -S "$stbc" -L "$ldpc" -i "$link_id" -C 8000 -G short "$wfb_dev" &> /dev/null & +} + +start_tunnel() { + echo_log "Starting wfb_tun" + wfb_rx -K "$wfb_key" -i "$link_id" -p 160 -u 5800 "$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 32 -u 5801 "$wfb_dev" &> /dev/null & + wfb_tun -a 10.5.0.10/24 > /dev/null & +} + +start_telemetry() { + chipset=$(ipcinfo -c) + [ "$chipset" = "ssc33x" ] && devmem 0x1F207890 16 0x8 + + echo_log "Starting $router" + if [ "$router" = "mavfwd" ]; then + mavfwd -b 115200 -c 8 -p 100 -a 15 -t -m /dev/"$serial" \ + -i 0.0.0.0:14550 -o 10.5.0.1:14551 > /dev/null & + else + if [ "$router" = "msposd" ]; then + size=$(curl -s localhost/api/v1/config.json | jsonfilter -e "@.video0.size") + fi + msposd -b 115200 -c 8 -r "$osd_fps" -m /dev/"$serial" \ + -o 10.5.0.1:14551 -z "$size" > /dev/null & + 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.bitrate 8192 + 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 + cli -s .fpv.enabled true + cli -s .fpv.noiseLevel 1 +} + +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_log "Stopping $process" + killall -q "$process" + fi + done +} + +case "$1" in + start|stop) + $1 + ;; + + resetv) + cp -f /rom/etc/majestic.yaml /etc/majestic.yaml + video_settings + ;; + + resetw) + cp -f /rom/etc/wfb.yaml /etc/wfb.yaml + start + ;; + + *) + echo "Usage: $0 {start|stop|resetv|resetw}" + exit 1 + ;; +esac diff --git a/general/package/wifibroadcast-ext/wifibroadcast-ext.mk b/general/package/wifibroadcast-ext/wifibroadcast-ext.mk index 97366e89..13d15bf6 100644 --- a/general/package/wifibroadcast-ext/wifibroadcast-ext.mk +++ b/general/package/wifibroadcast-ext/wifibroadcast-ext.mk @@ -5,11 +5,18 @@ ################################################################################ define WIFIBROADCAST_EXT_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -d $(TARGET_DIR)/etc + $(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(WIFIBROADCAST_NG_PKGDIR)/files/wfb.yaml + $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(WIFIBROADCAST_EXT_PKGDIR)/files/S75generate_vtx_info + $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(WIFIBROADCAST_NG_PKGDIR)/files/S991temp_monitor $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_EXT_PKGDIR)/files/generate_vtx_info + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/wifibroadcast + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/temp_monitor + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/channels.sh endef $(eval $(generic-package))