Я использую встроенное устройство Linux, которое может запускать только элементы QML / Javascript. нет доступных компиляторов, нет Python, нет curl, нет Node.js, нет менеджеров пакетов ... Но я могу писать сценарии bash.
Мне нужно отправить асинхронные данные из bash-скрипта в объекты QML / JS.
До сих пор я делал наоборот: JS читает файл, созданный из скрипта bash:
Скрипт Bash:
#!/bin/bash
stty -F /dev/ttyS1 115200 -echo
echo "Receiver is listening..."
file="/dev/ttyS1"
while read -r line; do
echo "$line"
target=${line:0:1}
echo "$target"
if [ "$target" = "C" ]; then
echo "${line#?}" > /tmp/file1
elif [ "$target" = "D" ]; then
echo "${line#?}" > /tmp/file2
fi
done < "${file}"
QML / JS:
function request(url, callback) {
var xhr = new XMLHttpRequest();
var timer = Qt.createQmlObject("import QtQuick 1.1; Timer {interval: 500; repeat: false; running: true;}", root, "TimerTimeout");
timer.triggered.connect(function(){
xhr.abort();
_timeout = true
});
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
timer.running = false;
timer.destroy();
_timeout = false
callback(xhr.responseText);
}
};
xhr.open("GET", url, true);
xhr.send();
}
но это бесполезно для асинхронных данных, потому что из-за времени опроса я могу что-то потерять или получить дубликат уже прочитанного материала.
Я ищу другой способ отправки байтов из скрипта bash в элементы QML / JS. Я могу отправлять UDP-пакеты от bash:
echo "Hello world!" > /dev/udp/192.168.1.10/6188
но я не знаю, как получить их в JS.
Есть ли другие способы достижения той же цели?