Receive asynchronous data in javascript
up vote
2
down vote
favorite
I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.
I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:
Bash script:
#!/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();
but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.
I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:
echo "Hello world!" > /dev/udp/192.168.1.10/6188
but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?
javascript bash udp qml ipc
add a comment |
up vote
2
down vote
favorite
I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.
I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:
Bash script:
#!/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();
but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.
I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:
echo "Hello world!" > /dev/udp/192.168.1.10/6188
but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?
javascript bash udp qml ipc
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.
I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:
Bash script:
#!/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();
but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.
I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:
echo "Hello world!" > /dev/udp/192.168.1.10/6188
but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?
javascript bash udp qml ipc
I'm using an Linux embedded device that can only run QML/Javascript items. There are no compilers available, no Python, no curl, no Node.js, no package managers... But I can write bash scripts.
I need to send asynchronous data from a bash script to the QML/JS objects.
Until now I did the opposite: the JS reads a file created from the bash script:
Bash script:
#!/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();
but it's not useful for asynchronous data, because due the polling time I can lose something or get duplicate of already read stuff.
I'm looking for another way to send bytes from a bash script to the QML/JS items. I'm able to send UDP packets from bash:
echo "Hello world!" > /dev/udp/192.168.1.10/6188
but I don't know how to receive them in JS.
Are there other ways to achieve the same goal?
javascript bash udp qml ipc
javascript bash udp qml ipc
edited Nov 11 at 14:24
asked Nov 11 at 13:35
Mark
1,06311431
1,06311431
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34
add a comment |
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249277%2freceive-asynchronous-data-in-javascript%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The best way is to write some extension in C++ which will create UDP socket waiting for the data and then will pass it ti QML.
– folibis
Nov 11 at 14:22
As said, there are no compilers. Otherwise there were no problems at all!
– Mark
Nov 11 at 14:24
Just out of interest, how Qt was compiled for the platform?
– folibis
Nov 11 at 14:26
The manufacturer built a Yocto environment and cross-compiled Qt.
– Mark
Nov 11 at 14:31
I think you should look in the direction of custom extension. I mean if you know what is platform, Qt version etc you can build an extension with cross-compiler and then install it in the target platform. Another workaround ...maybe WebSocket, but I see you use QtQuick1.
– folibis
Nov 11 at 15:34