From f0f6465ce38eca36c870dc69b227cfb0ff31af9a Mon Sep 17 00:00:00 2001 From: viktorxda <35473052+viktorxda@users.noreply.github.com> Date: Wed, 5 Feb 2025 12:14:11 +0100 Subject: [PATCH] [no ci] wifibroadcast-ng: update version --- .../wifibroadcast-ng/files/wifibroadcast | 36 +- .../wifibroadcast-ng/wifibroadcast-ng.mk | 2 +- .../package/wifibroadcast-ng/www/index.html | 560 +++++++++--------- .../package/wifibroadcast-ng/www/stream.svg | 4 - .../package/wifibroadcast/wifibroadcast.mk | 2 +- 5 files changed, 289 insertions(+), 315 deletions(-) delete mode 100644 general/package/wifibroadcast-ng/www/stream.svg diff --git a/general/package/wifibroadcast-ng/files/wifibroadcast b/general/package/wifibroadcast-ng/files/wifibroadcast index 5d59052b..11c15ed1 100755 --- a/general/package/wifibroadcast-ng/files/wifibroadcast +++ b/general/package/wifibroadcast-ng/files/wifibroadcast @@ -15,14 +15,11 @@ wfb_yaml() { load_config() { wfb_yaml /rom/etc/wfb.yaml wfb_yaml /etc/wfb.yaml - - if [ ! -e "$wfb_key" ]; then - wfb_key=/rom/etc/drone.key - fi + [ ! -e "$wfb_key" ] && wfb_key=/rom/etc/drone.key } load_modules() { - for card in $(lsusb | awk '{print $6}' | sort | uniq); do + for card in $(lsusb | awk '{print $6}' | uniq); do case "$card" in "0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012") driver=88XXau @@ -59,20 +56,9 @@ load_interface() { iw "$wfb_dev" set channel "$channel" "$mode" iw reg set 00 - if [ "$driver" = "88XXau" ]; then - iw "$wfb_dev" set txpower fixed "$((txpower * -100))" - else - iw "$wfb_dev" set txpower fixed "$((txpower * 50))" - fi - - case "$mode" in - "HT20") - bandwidth=20 - ;; - "HT40+" | "HT40-") - bandwidth=40 - ;; - esac + [ "$driver" = "88XXau" ] && wfb_pwr=$((txpower * -100)) || wfb_pwr=$((txpower * 50)) + iw "$wfb_dev" set txpower fixed "$wfb_pwr" + [ "$mode" = "HT20" ] && bandwidth=20 || bandwidth=40 } start_broadcast() { @@ -90,15 +76,13 @@ start_tunnel() { } start_telemetry() { - if [ "$(ipcinfo -c)" = "ssc33x" ]; then - devmem 0x1F207890 16 0x8 - fi + [ "$(ipcinfo -c)" = "ssc33x" ] && devmem 0x1F207890 16 0x8 if [ "$router" = "msposd" ]; then echo "- Starting $router" size=$(curl -s localhost/api/v1/config.json | jsonfilter -e "@.video0.size") - msposd --baudrate 115200 --channels 8 --ahi 0 -osd -r "$osd_fps" \ - --master "$serial" --out 10.5.0.1:14551 --size "${size:-1280x720}" > /dev/null & + msposd -b 115200 -c 8 -d -r $osd_fps -z "${size:-1280x720}" \ + -m "$serial" -o 10.5.0.1:14551 > /dev/null & elif [ "$router" = "mavfwd" ]; then echo "- Starting $router" mavfwd --baudrate 115200 --channels 8 -p 100 -a 15 -t \ @@ -107,9 +91,7 @@ start_telemetry() { } video_settings() { - if [ "$(ipcinfo -s)" = "imx415" ]; then - cli -s .isp.sensorConfig /etc/sensors/imx415_fpv.bin - fi + [ "$(ipcinfo -s)" = "imx415" ] && cli -s .isp.sensorConfig /etc/sensors/imx415_fpv.bin cli -s .isp.exposure 5 cli -s .video0.fps 60 cli -s .video0.codec h265 diff --git a/general/package/wifibroadcast-ng/wifibroadcast-ng.mk b/general/package/wifibroadcast-ng/wifibroadcast-ng.mk index 7a0e1404..46b650d6 100644 --- a/general/package/wifibroadcast-ng/wifibroadcast-ng.mk +++ b/general/package/wifibroadcast-ng/wifibroadcast-ng.mk @@ -4,7 +4,7 @@ # ################################################################################ -WIFIBROADCAST_NG_VERSION = f7172e55611679d6723f39383f1359ac9ec7c64d +WIFIBROADCAST_NG_VERSION = 82fd8b2d3caa52000b51a8c750db8b8af052c079 WIFIBROADCAST_NG_SITE = $(call github,svpcom,wfb-ng,$(WIFIBROADCAST_NG_VERSION)) WIFIBROADCAST_NG_LICENSE = GPL-3.0 diff --git a/general/package/wifibroadcast-ng/www/index.html b/general/package/wifibroadcast-ng/www/index.html index b2033343..ce1854af 100644 --- a/general/package/wifibroadcast-ng/www/index.html +++ b/general/package/wifibroadcast-ng/www/index.html @@ -1,314 +1,310 @@ <!DOCTYPE html> <html lang="en"> <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Camera</title> - <style> - body { - font-family: Helvetica; - background-color: #1e1e1e; - margin: 0; - padding: 0; - color: #dcdcdc; - text-align: center; - } - header { - background-color: #252526; - color: white; - padding: 15px 0; - } - h3 { - font-size: 1.5rem; - margin-top: 1rem; - color: #dee2e6bf; - } - .container { - padding: 20px; - } - .form-section { - background-color: #2d2d2d; - border-radius: 8px; - box-shadow: 0 2px 10px #00000080; - max-width: 40%; - padding: 20px; - margin: 20px auto; - } - .form-section label { - display: inline-block; - font-weight: bold; - margin: 10px 0 5px; - width: 150px; - vertical-align: top; - color: #dee2e6; - } - .form-section input, select { - width: 180px; - padding: 10px; - margin-bottom: 15px; - border-radius: 4px; - border: 1px solid #555; - background-color: #3c3c3c; - color: #dcdcdc; - display: inline-block; - box-sizing: border-box; - } - .form-section button { - background-color: #0d6efd80; - box-shadow: 0 2px 10px #00000040; - color: white; - padding: 10px 60px; - border: none; - border-radius: 4px; - cursor: pointer; - font-size: 1rem; - } - .form-section button:hover { - background-color: #0b5ed7; - } - #preview { - width: 100%; - max-width: 1200px; - aspect-ratio: 16/9; - border-radius: 8px; - box-shadow: 0 2px 10px #00000080; - } - .row { - margin-bottom: 15px; - } - </style> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Camera</title> + <style> + body { + font-family: Helvetica; + background-color: #1e1e1e; + color: #dcdcdc; + text-align: center; + } + header { + background-color: #252526; + border-radius: 4px; + box-shadow: 0 2px 10px #00000080; + color: white; + padding: 15px 0; + } + h3 { + font-size: 1.5rem; + margin-top: 1rem; + color: #dee2e6bf; + } + .container { + padding: 20px; + } + .form-section { + background-color: #2d2d2d; + border-radius: 4px; + box-shadow: 0 2px 10px #00000080; + max-width: 40%; + padding: 20px; + margin: 20px auto; + } + .form-section label { + display: inline-block; + font-weight: bold; + margin: 10px 0 5px; + width: 150px; + vertical-align: top; + color: #dee2e6; + } + .form-section select { + width: 120px; + padding: 10px; + margin-bottom: 15px; + border-radius: 4px; + border: 1px solid #555; + background-color: #3c3c3c; + color: #dcdcdc; + display: inline-block; + box-sizing: border-box; + } + .form-section input { + width: 120px; + height: 25px; + } + .form-section button { + background-color: #0d6efd80; + box-shadow: 0 2px 10px #00000040; + color: white; + padding: 10px 60px; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 1rem; + } + .form-section button:hover { + background-color: #0b5ed7; + } + #preview { + width: 100%; + max-width: 1200px; + background-color: #000; + box-shadow: 0 2px 10px #00000080; + border-radius: 4px; + } + .row { + margin-bottom: 15px; + } + </style> </head> <body> <header> - <img src="logo.svg" width="220px"> + <img src="logo.svg" width="220px"> </header> <div class="container"> - <section> - <video id="preview" poster="/mjpeg" style="background:url(stream.svg); background-size:cover;"></video> - </section> + <section> + <video id="preview" poster="/mjpeg"></video> + </section> - <section class="form-section"> - <h3>Video</h3> - <form id="majestic-form"> - <div class="row"> - <label for="video0_fps">FPS:</label> - <select id="video0_fps" name="majestic.video0.fps"> - <option value="30">30</option> - <option value="60">60</option> - <option value="90">90</option> - <option value="120">120</option> - </select> - </div> - <div class="row"> - <label for="video0_codec">Codec:</label> - <select id="video0_codec" name="majestic.video0.codec"> - <option value="h264">H264</option> - <option value="h265">H265</option> - </select> - </div> - <div class="row"> - <label for="video0_bitrate">Bitrate:</label> - <select id="video0_bitrate" name="majestic.video0.bitrate"> - <option value="1024">1024</option> - <option value="2048">2048</option> - <option value="3072">3072</option> - <option value="4096">4096</option> - <option value="5120">5120</option> - <option value="6144">6144</option> - <option value="7168">7168</option> - <option value="8192">8192</option> - </select> - </div> - </form> - <button id="apply-majestic-button">Apply</button> - </section> + <section class="form-section"> + <h3>Video</h3> + <form id="majestic-form"> + <div class="row"> + <label for="fps">FPS:</label> + <select id="fps" name="majestic.video0.fps"> + <option value="30">30</option> + <option value="60">60</option> + <option value="90">90</option> + <option value="120">120</option> + </select> + </div> + <div class="row"> + <label for="codec">Codec:</label> + <select id="codec" name="majestic.video0.codec"> + <option value="h264">H264</option> + <option value="h265">H265</option> + </select> + </div> + <div class="row"> + <label for="bitrate">Bitrate:</label> + <select id="bitrate" name="majestic.video0.bitrate"></select> + </div> + <div class="row"> + <label for="records">Record:</label> + <input type="checkbox" id="records" name="majestic.records.enabled"> + </div> + </form> + <button id="apply-majestic-button">Apply</button> + </section> - <section class="form-section"> - <h3>Wireless</h3> - <form id="wfb-form"> - <div class="row"> - <label for="txpower">TX Power:</label> - <input type="number" id="txpower" name="wfb.wireless.txpower"> - </div> - <div class="row"> - <label for="channel">Channel:</label> - <select id="channel" name="wfb.wireless.channel"> - <option value="32">32</option> - <option value="36">36</option> - <option value="40">40</option> - <option value="44">44</option> - <option value="48">48</option> - <option value="52">52</option> - <option value="56">56</option> - <option value="60">60</option> - <option value="64">64</option> - <option value="68">68</option> - <option value="96">96</option> - <option value="100">100</option> - <option value="104">104</option> - <option value="108">108</option> - <option value="112">112</option> - <option value="116">116</option> - <option value="120">120</option> - <option value="124">124</option> - <option value="128">128</option> - <option value="132">132</option> - <option value="136">136</option> - <option value="140">140</option> - <option value="144">144</option> - <option value="149">149</option> - <option value="153">153</option> - <option value="157">157</option> - <option value="161">161</option> - <option value="165">165</option> - <option value="169">169</option> - <option value="173">173</option> - <option value="177">177</option> - </select> - </div> - <div class="row"> - <label for="mode">Mode:</label> - <select id="mode" name="wfb.wireless.mode"> - <option value="HT20">HT20</option> - <option value="HT40-">HT40-</option> - <option value="HT40+">HT40+</option> - </select> - </div> + <section class="form-section"> + <h3>Wireless</h3> + <form id="wfb-form"> + <div class="row"> + <label for="txpower">TX Power:</label> + <select id="txpower" name="wfb.wireless.txpower"></select> + </div> + <div class="row"> + <label for="channel">Channel:</label> + <select id="channel" name="wfb.wireless.channel"> + <option value="32">32</option> + <option value="36">36</option> + <option value="40">40</option> + <option value="44">44</option> + <option value="48">48</option> + <option value="52">52</option> + <option value="56">56</option> + <option value="60">60</option> + <option value="64">64</option> + <option value="68">68</option> + <option value="96">96</option> + <option value="100">100</option> + <option value="104">104</option> + <option value="108">108</option> + <option value="112">112</option> + <option value="116">116</option> + <option value="120">120</option> + <option value="124">124</option> + <option value="128">128</option> + <option value="132">132</option> + <option value="136">136</option> + <option value="140">140</option> + <option value="144">144</option> + <option value="149">149</option> + <option value="153">153</option> + <option value="157">157</option> + <option value="161">161</option> + <option value="165">165</option> + <option value="169">169</option> + <option value="173">173</option> + <option value="177">177</option> + </select> + </div> + <div class="row"> + <label for="mode">Mode:</label> + <select id="mode" name="wfb.wireless.mode"> + <option value="HT20">HT20</option> + <option value="HT40-">HT40-</option> + <option value="HT40+">HT40+</option> + </select> + </div> - <h3>Broadcast</h3> - <div class="row"> - <label for="wfb_index">WFB Index:</label> - <select id="wfb_index" name="wfb.broadcast.wfb_index"> - <option value="1">1</option> - <option value="2">2</option> - <option value="3">3</option> - <option value="4">4</option> - <option value="5">5</option> - <option value="6">6</option> - <option value="7">7</option> - <option value="8">8</option> - </select> - </div> - <div class="row"> - <label for="tun_index">TUN Index:</label> - <select id="tun_index" name="wfb.broadcast.tun_index"> - <option value="1">1</option> - <option value="2">2</option> - <option value="3">3</option> - <option value="4">4</option> - <option value="5">5</option> - <option value="6">6</option> - <option value="7">7</option> - <option value="8">8</option> - </select> - </div> + <h3>Broadcast</h3> + <div class="row"> + <label for="wfb_index">WFB Index:</label> + <select id="wfb_index" name="wfb.broadcast.wfb_index"></select> + </div> + <div class="row"> + <label for="tun_index">TUN Index:</label> + <select id="tun_index" name="wfb.broadcast.tun_index"></select> + </div> - <h3>Telemetry</h3> - <div class="row"> - <label for="router">Router:</label> - <select id="router" name="wfb.telemetry.router"> - <option value="msposd">msposd</option> - <option value="mavfwd">mavfwd</option> - </select> - </div> - <div class="row"> - <label for="serial">Serial:</label> - <select id="serial" name="wfb.telemetry.serial"> - <option value="/dev/ttyS0">/dev/ttyS0</option> - <option value="/dev/ttyS2">/dev/ttyS2</option> - </select> - </div> - </form> - <button id="apply-wfb-button">Apply</button> - </section> + <h3>Telemetry</h3> + <div class="row"> + <label for="router">Router:</label> + <select id="router" name="wfb.telemetry.router"> + <option value="msposd">msposd</option> + <option value="mavfwd">mavfwd</option> + </select> + </div> + <div class="row"> + <label for="serial">Serial:</label> + <select id="serial" name="wfb.telemetry.serial"> + <option value="/dev/ttyS0">/dev/ttyS0</option> + <option value="/dev/ttyS2">/dev/ttyS2</option> + </select> + </div> + </form> + <button id="apply-wfb-button">Apply</button> + </section> - <section class="form-section"> - <h3>Configuration</h3> - <button id="reset-button">Reset</button> - </section> + <section class="form-section"> + <h3>Configuration</h3> + <button id="reset-button">Reset</button> + </section> </div> <script src="js-yaml.min.js"></script> <script> - let configData = { majestic: {}, wfb: {} }; + let configData = { majestic: {}, wfb: {} }; - async function loadYAML(url, setter) { - const response = await fetch(url); - const text = await response.text(); - setter(jsyaml.load(text)); - } + async function loadYAML(url, setter) { + const response = await fetch(url); + const text = await response.text(); + setter(jsyaml.load(text)); + } - async function uploadYAML(data, location) { - const yamlData = jsyaml.dump(data); - await fetch('/upload', { - method: 'POST', - headers: { 'File-Location': location }, - body: yamlData - }); - } + async function uploadYAML(data, location) { + const yamlData = jsyaml.dump(data); + await fetch('/upload', { + method: 'POST', + headers: { 'File-Location': location }, + body: yamlData + }); + } - async function runCommand(command) { - await fetch('/command', { - method: 'POST', - headers: { 'Run-Command': command } - }); - } + async function runCommand(command) { + await fetch('/command', { + method: 'POST', + headers: { 'Run-Command': command } + }); + } - function syncForm(data, formPrefix, mode) { - Object.keys(data).forEach((section) => { - Object.keys(data[section]).forEach((key) => { - const field = document.querySelector(`[name="${formPrefix}.${section}.${key}"]`); - if (field) { - if (mode === "setup") { - field.value = data[section][key]; - } else if (mode === "update") { - data[section][key] = field.value; - } - } - }); - }); - } + function syncForm(data, formPrefix, mode) { + Object.keys(data).forEach((section) => { + Object.keys(data[section]).forEach((key) => { + const field = document.getElementsByName(formPrefix + '.' + section + '.' + key)[0]; + if (field) { + if (mode === "setup") { + field.value = data[section][key]; + } else if (mode === "update") { + data[section][key] = field.value; + } + } + }); + }); + } - function executeDelay(button, command) { - button.disabled = true; - runCommand(command); - setTimeout(() => { - button.disabled = false; - location.reload(); - }, 1000); - } + function executeDelay(button, command) { + button.disabled = true; + runCommand(command); + setTimeout(() => { + button.disabled = false; + location.reload(); + }, 1000); + } - document.getElementById('apply-majestic-button').addEventListener('click', function() { - if (configData.majestic) { - syncForm(configData.majestic, 'majestic', "update"); - uploadYAML(configData.majestic, '/etc/majestic.yaml'); - executeDelay(this, 'killall -1 majestic'); - } - }); + function populateSelect(id, start, end, step) { + const select = document.getElementById(id); + for (let i = start; i <= end; i += step) { + const option = document.createElement('option'); + option.value = i; + option.textContent = i; + select.appendChild(option); + } + } - document.getElementById('apply-wfb-button').addEventListener('click', function() { - if (configData.wfb) { - syncForm(configData.wfb, 'wfb', "update"); - uploadYAML(configData.wfb, '/etc/wfb.yaml'); - executeDelay(this, 'wifibroadcast start'); - } - }); + populateSelect('bitrate', 1024, 20480, 1024); + populateSelect('txpower', 1, 50, 1); + populateSelect('wfb_index', 0, 8, 1); + populateSelect('tun_index', 0, 8, 1); - document.getElementById('reset-button').addEventListener('click', function() { - executeDelay(this, 'wifibroadcast reset'); - }); + document.getElementById('apply-majestic-button').addEventListener('click', function() { + if (configData.majestic) { + syncForm(configData.majestic, 'majestic', "update"); + uploadYAML(configData.majestic, '/etc/majestic.yaml'); + executeDelay(this, 'killall -1 majestic'); + } + }); - loadYAML('/etc/majestic.yaml', (data) => { - configData.majestic = data; - syncForm(configData.majestic, 'majestic', "setup"); - }); + document.getElementById('apply-wfb-button').addEventListener('click', function() { + if (configData.wfb) { + syncForm(configData.wfb, 'wfb', "update"); + uploadYAML(configData.wfb, '/etc/wfb.yaml'); + executeDelay(this, 'wifibroadcast start'); + } + }); - loadYAML('/etc/wfb.yaml', (data) => { - configData.wfb = data; - syncForm(configData.wfb, 'wfb', "setup"); - }); + document.getElementById('reset-button').addEventListener('click', function() { + executeDelay(this, 'wifibroadcast reset'); + }); + + loadYAML('/etc/majestic.yaml', (data) => { + configData.majestic = data; + syncForm(configData.majestic, 'majestic', "setup"); + }); + + loadYAML('/etc/wfb.yaml', (data) => { + configData.wfb = data; + syncForm(configData.wfb, 'wfb', "setup"); + }); </script> </body> diff --git a/general/package/wifibroadcast-ng/www/stream.svg b/general/package/wifibroadcast-ng/www/stream.svg deleted file mode 100644 index dac43081..00000000 --- a/general/package/wifibroadcast-ng/www/stream.svg +++ /dev/null @@ -1,4 +0,0 @@ -<svg width="160" height="90" viewBox="-10 -10 220 220" xmlns="http://www.w3.org/2000/svg" fill="#ddd"> - <path d="M99.806 0C44.912 0 0 44.912 0 99.806s44.912 99.806 99.806 99.806S199.612 154.7 199.612 99.806 154.698 0 99.806 0m0 6.656c24.58 0 47.018 9.654 63.708 25.354l-25.47 25.264 -7.298 -18.678c-0.332 -0.998 -1.664 -1.996 -2.994 -1.996H72.526q-2 -0.002 -2.994 1.996l-8.32 21.29H42.25a11.93 11.93 0 0 0 -11.978 11.978v65.87A11.93 11.93 0 0 0 42.25 149.708h2.596L31.49 162.956c-15.394 -16.632 -24.834 -38.842 -24.834 -63.15 0 -51.232 41.918 -93.15 93.15 -93.15m23.286 93.15c0 12.974 -10.312 23.286 -23.286 23.286 -5.286 0 -10.132 -1.712 -14.02 -4.62l32.798 -32.53a23.3 23.3 0 0 1 4.506 13.862m-46.574 0c0 -12.974 10.312 -23.286 23.286 -23.286 5.33 0 10.202 1.74 14.106 4.688l-32.818 32.552a23.28 23.28 0 0 1 -4.574 -13.952m42.144 -23.314a29.86 29.86 0 0 0 -18.856 -6.628 29.82 29.82 0 0 0 -29.942 29.942c0 7.084 2.42 13.558 6.476 18.668l-24.786 24.58H41.918a5.252 5.252 0 0 1 -5.322 -5.322V71.86a5.252 5.252 0 0 1 5.322 -5.322h21.29c1.332 0 2.662 -0.998 2.994 -1.996l8.32 -21.296h50.564l7.568 19.368zm-37.626 46.694a29.86 29.86 0 0 0 18.772 6.56 29.82 29.82 0 0 0 29.942 -29.942c0 -7.044 -2.394 -13.484 -6.408 -18.58l14.81 -14.686h19.214a5.252 5.252 0 0 1 5.322 5.322v65.87a5.252 5.252 0 0 1 -5.322 5.322H61zm18.772 69.77c-24.542 0 -46.948 -9.622 -63.628 -25.278l18.116 -17.97h103.4c6.656 0 11.978 -5.322 12.308 -11.978V71.86a11.925 11.925 0 0 0 -11.978 -11.978h-13.166l23.342 -23.15c15.346 16.624 24.758 38.804 24.758 63.074 0 51.232 -41.918 93.15 -93.15 93.15"/> - <path d="M149.708 73.188c-3.662 0 -6.656 2.994 -6.656 6.656S146.046 86.5 149.708 86.5s6.656 -2.994 6.656 -6.656 -2.994 -6.656 -6.656 -6.656"/> -</svg> diff --git a/general/package/wifibroadcast/wifibroadcast.mk b/general/package/wifibroadcast/wifibroadcast.mk index 3761b790..cefdc38e 100644 --- a/general/package/wifibroadcast/wifibroadcast.mk +++ b/general/package/wifibroadcast/wifibroadcast.mk @@ -4,7 +4,7 @@ # ################################################################################ -WIFIBROADCAST_VERSION = f7172e55611679d6723f39383f1359ac9ec7c64d +WIFIBROADCAST_VERSION = 82fd8b2d3caa52000b51a8c750db8b8af052c079 WIFIBROADCAST_SITE = $(call github,svpcom,wfb-ng,$(WIFIBROADCAST_VERSION)) WIFIBROADCAST_LICENSE = GPL-2.0