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
|
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 -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_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 -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_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
|
endef
|
||||||
|
|
||||||
$(eval $(generic-package))
|
$(eval $(generic-package))
|
||||||
|
|
Loading…
Reference in New Issue