mirror of https://github.com/OpenIPC/firmware.git
Add temperature monitor, add channels.sh, add jumbo frames (#1787)
parent
a066980166
commit
accf5a91ba
|
@ -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<int> rx_fd;
|
||||
vector<string> 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 <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <sys/socket.h>
|
||||
+#include <sys/un.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string>
|
||||
@@ -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);
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 <<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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue