Commit 7338b096 authored by Jérome Perrin's avatar Jérome Perrin

Merge remote-tracking branch 'upstream/master' into zope4py2

parents b62f8386 4dcf80d4
Pipeline #23408 failed with stage
in 0 seconds
[buildout]
extends =
../cmake/buildout.cfg
../pkgconfig/buildout.cfg
parts =
jsoncpp
[jsoncpp]
recipe = slapos.recipe.cmmi
shared = true
pre-configure =
mkdir jsoncpp-build
configure-command =
cd jsoncpp-build && ${cmake:location}/bin/cmake ..
configure-options =
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@
url = https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz
md5sum = d6c8c609f2162eff373db62b90a051c7
make-binary =
cd jsoncpp-build && make
environment =
PATH=${pkgconfig:location}/bin:%(PATH)s
[buildout]
extends =
../cmake/buildout.cfg
../curl/buildout.cfg
../git/buildout.cfg
../jsoncpp/buildout.cfg
../tinyxml2/buildout.cfg
parts =
mavsdk
[c-astral-headers]
recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/nexedi/c-astral-c-library
revision = v0.1
git-executable = ${git:location}/bin/git
[gcc]
min_version = 7.1
[mavsdk-source]
recipe = slapos.recipe.build:gitclone
repository = https://github.com/mavlink/MAVSDK.git
revision = v0.37.0
git-executable = ${git:location}/bin/git
ignore-cloning-submodules = true
[mavsdk]
recipe = slapos.recipe.cmmi
path = ${mavsdk-source:location}
cmake = ${cmake:location}/bin/cmake
pre-configure =
${git:location}/bin/git submodule update --init --recursive
cp -r ${c-astral-headers:location}/* ${mavsdk-source:location}/src/third_party/mavlink/include/mavlink/v2.0/
sed -i 's#common/mavlink.h#CAstral/mavlink.h#' ${mavsdk-source:location}/src/core/mavlink_include.h
configure-command =
${:cmake}
configure-options =
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_FLAGS="${:CMAKE_CFLAGS}"
-DCMAKE_CXX_FLAGS="${:CMAKE_CFLAGS}"
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@
-DCMAKE_INSTALL_RPATH=${:CMAKE_LIBRARY_PATH}
-DPKG_CONFIG_EXECUTABLE=${pkgconfig:location}/bin/pkg-config
-DSUPERBUILD=OFF
-Bbuild/default
-H.
make-binary =
${:cmake} --build build/default --target install
environment =
CMAKE_INCLUDE_PATH=${curl:location}/include:${jsoncpp:location}/include:${tinyxml2:location}/include
CMAKE_LIBRARY_PATH=${:CMAKE_LIBRARY_PATH}
CMAKE_PROGRAM_PATH=${cmake:location}/bin
PATH=${pkgconfig:location}/bin/:%(PATH)s
LDFLAGS=-L${jsoncpp:location}/lib -Wl,-rpath=${jsoncpp:location}/lib
CMAKE_CFLAGS=-I${tinyxml2:location}/include
CMAKE_LIBRARY_PATH=${curl:location}/lib:${jsoncpp:location}/lib:${tinyxml2:location}/lib
...@@ -4,14 +4,26 @@ ...@@ -4,14 +4,26 @@
parts = open62541 parts = open62541
extends = extends =
../cmake/buildout.cfg ../cmake/buildout.cfg
../patch/buildout.cfg
[open62541] [open62541]
recipe = slapos.recipe.cmmi recipe = slapos.recipe.cmmi
shared = true shared = true
url = https://github.com/open62541/open62541/archive/refs/tags/v1.2.2.tar.gz url = https://github.com/open62541/open62541/archive/refs/heads/pack/v1.3.zip
md5sum = 2883bde165bc9bc3d459ccbb47acf7f4 md5sum = c2e9938f082b027110fba538de76684c
configure-command = ${cmake:location}/bin/cmake patch-options = -p1
patches =
${:_profile_base_location_}/ipv6_bugfix.patch#355bec02adee4ea73ff5a56ba6971ad2
configure-command =
${cmake:location}/bin/cmake
configure-options = configure-options =
-Bbuild -DBUILD_SHARED_LIBS=ON
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@ -DCMAKE_INSTALL_PREFIX=@@LOCATION@@
make-options = -C build -DUA_ENABLE_PUBSUB=ON
-DUA_ENABLE_SUBSCRIPTIONS=ON
-DUA_NAMESPACE_ZERO=REDUCED
post-install =
cp src/pubsub/*.h deps/open62541_queue.h @@LOCATION@@/include
environement =
PATH=${patch:location}/bin:%(PATH)s
commit ccdde2eddfd2e0937ba0b452063c60c214f5f2f5 (HEAD -> master)
Author: Thomas Gambier <thomas.gambier@nexedi.com>
Date: Sat May 28 19:18:02 2022 +0200
BUGFIX: UA_PubSubChannelUDPMC_regist supports different interface in IPv6
diff --git a/plugins/ua_pubsub_udp.c b/plugins/ua_pubsub_udp.c
index 2c6ea480..f66f5860 100644
--- a/plugins/ua_pubsub_udp.c
+++ b/plugins/ua_pubsub_udp.c
@@ -319,6 +319,7 @@ UA_PubSubChannelUDPMC_open(const UA_PubSubConnectionConfig *connectionConfig) {
"Interface configuration preparation failed.");
goto cleanup;
}
+ memcpy(&channelDataUDPMC->intf_addr, &group.ipv6.ipv6mr_interface, sizeof(group.ipv6.ipv6mr_interface));
}
#endif
}
@@ -432,6 +433,7 @@ UA_PubSubChannelUDPMC_regist(UA_PubSubChannel *channel, UA_ExtensionObject *tran
memcpy(&groupV6.ipv6mr_multiaddr,
&((const struct sockaddr_in6 *) &connectionConfig->ai_addr)->sin6_addr,
sizeof(struct in6_addr));
+ memcpy(&groupV6.ipv6mr_interface, &connectionConfig->intf_addr, sizeof(int));
if(UA_setsockopt(channel->sockfd,
connectionConfig->ai_family == PF_INET6 ? IPPROTO_IPV6 : IPPROTO_IP,
[buildout]
extends =
../mavsdk/buildout.cfg
../open62541/buildout.cfg
../quickjs/buildout.cfg
parts = qjs-wrapper
[qjs-wrapper]
recipe = slapos.recipe.cmmi
shared = true
configure-command = true
url = https://lab.nexedi.com/nexedi/qjs-wrapper/-/archive/v0.1/qjs-wrapper-v0.1.tar.gz
md5sum = 4f0eb6f3bc5719a8ec043ce4f4d20747
environment =
C_INCLUDE_PATH=include:${open62541:location}/include:${open62541:location}/deps:${open62541:location}/src/pubsub:${quickjs:location}/include
CPLUS_INCLUDE_PATH=include:${mavsdk:location}/include:${mavsdk:location}/include/mavsdk
LDFLAGS=-L${open62541:location}/lib -Wl,-rpath=${open62541:location}/lib -L${mavsdk:location}/lib -Wl,-rpath=${mavsdk:location}/lib
...@@ -5,8 +5,9 @@ parts = quickjs ...@@ -5,8 +5,9 @@ parts = quickjs
[quickjs] [quickjs]
recipe = slapos.recipe.cmmi recipe = slapos.recipe.cmmi
shared = true
configure-command = true configure-command = true
url = https://bellard.org/quickjs/quickjs-2020-09-06.tar.xz url = https://bellard.org/quickjs/quickjs-2021-03-27.tar.xz
md5sum = 47cb6def3263d6a631b647b268b1c554 md5sum = 135182a626aa0c87a49aa2bf58fd39bf
environment = environment =
PATH=${xz-utils:location}/bin:%(PATH)s PATH=${xz-utils:location}/bin:%(PATH)s
[buildout]
extends =
../cmake/buildout.cfg
parts =
tinyxml2
[tinyxml2]
recipe = slapos.recipe.cmmi
shared = true
configure-command =
${cmake:location}/bin/cmake
configure-options =
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@
-Dtinyxml2_SHARED_LIBS=ON
url = https://github.com/leethomason/tinyxml2/archive/refs/tags/9.0.0.tar.gz
md5sum = afecd941107a8e74d3d1b4363cf52bd7
...@@ -33,7 +33,7 @@ from requests_toolbelt.adapters import source ...@@ -33,7 +33,7 @@ from requests_toolbelt.adapters import source
import json import json
import multiprocessing import multiprocessing
import subprocess import subprocess
from unittest import skip from unittest import skip, expectedFailure
import ssl import ssl
from http.server import HTTPServer from http.server import HTTPServer
from http.server import BaseHTTPRequestHandler from http.server import BaseHTTPRequestHandler
...@@ -302,7 +302,8 @@ class TestDataMixin(object): ...@@ -302,7 +302,8 @@ class TestDataMixin(object):
except IOError: except IOError:
test_data = '' test_data = ''
for replacement, value in list(data_replacement_dict.items()): for replacement in sorted(data_replacement_dict.keys()):
value = data_replacement_dict[replacement]
runtime_data = runtime_data.replace(value, replacement) runtime_data = runtime_data.replace(value, replacement)
maxDiff = self.maxDiff maxDiff = self.maxDiff
...@@ -443,7 +444,8 @@ class TestDataMixin(object): ...@@ -443,7 +444,8 @@ class TestDataMixin(object):
self.another_server_ca.certificate_pem.decode()), self.another_server_ca.certificate_pem.decode()),
'@@another_server_ca.certificate_pem_double@@': unicode_escape( '@@another_server_ca.certificate_pem_double@@': unicode_escape(
unicode_escape(self.another_server_ca.certificate_pem.decode())), unicode_escape(self.another_server_ca.certificate_pem.decode())),
'@@getSoftwareURL@@': self.getSoftwareURL(), # self.getSoftwareURL can contain other replacements so do it first
'@@00getSoftwareURL@@': self.getSoftwareURL(),
'@@test_server_ca.certificate_pem@@': unicode_escape( '@@test_server_ca.certificate_pem@@': unicode_escape(
self.test_server_ca.certificate_pem.decode()), self.test_server_ca.certificate_pem.decode()),
'@@test_server_ca.certificate_pem_double@@': unicode_escape( '@@test_server_ca.certificate_pem_double@@': unicode_escape(
...@@ -4446,6 +4448,7 @@ class TestSlave(SlaveHttpFrontendTestCase, TestDataMixin): ...@@ -4446,6 +4448,7 @@ class TestSlave(SlaveHttpFrontendTestCase, TestDataMixin):
curl_command, out, err)) curl_command, out, err))
return out, err return out, err
@expectedFailure
def test_disabled_cookie_list(self): def test_disabled_cookie_list(self):
parameter_dict = self.assertSlaveBase('disabled-cookie-list') parameter_dict = self.assertSlaveBase('disabled-cookie-list')
out, err = self._curl( out, err = self._curl(
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -134,7 +134,7 @@ ...@@ -134,7 +134,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-3", "slap_computer_partition_id": "T-3",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -763,7 +763,7 @@ ...@@ -763,7 +763,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -802,7 +802,7 @@ ...@@ -802,7 +802,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -764,7 +764,7 @@ ...@@ -764,7 +764,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -804,7 +804,7 @@ ...@@ -804,7 +804,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -269,7 +269,7 @@ ...@@ -269,7 +269,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -308,7 +308,7 @@ ...@@ -308,7 +308,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -228,7 +228,7 @@ ...@@ -228,7 +228,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -268,7 +268,7 @@ ...@@ -268,7 +268,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-0", "slap_computer_partition_id": "T-0",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "RootSoftwareInstance", "slap_software_type": "RootSoftwareInstance",
"slave_instance_list": [ "slave_instance_list": [
{ {
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-1", "slap_computer_partition_id": "T-1",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "kedifa", "slap_software_type": "kedifa",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
"root_instance_title": "testing partition 0", "root_instance_title": "testing partition 0",
"slap_computer_id": "local", "slap_computer_id": "local",
"slap_computer_partition_id": "T-2", "slap_computer_partition_id": "T-2",
"slap_software_release_url": "@@getSoftwareURL@@", "slap_software_release_url": "@@00getSoftwareURL@@",
"slap_software_type": "single-custom-personal", "slap_software_type": "single-custom-personal",
"slave_instance_list": [], "slave_instance_list": [],
"timestamp": "@@TIMESTAMP@@" "timestamp": "@@TIMESTAMP@@"
......
# Javascript drone #
## Presentation ##
* Deploy 3 different scripts (`cli.js`, `demo.js` and `manual-flight.js`) on a drone to fly it
* Compile all required libraries to run flight scripts
## Parameters ##
* autopilot-ip: IPv4 address to identify the autpilot from the companion board
* id: User chosen ID for the drone (must be unique in a swarm, will be used as an identifier in multicast communications)
* is-a-simulation: Must be set to 'true' to automatically take off during simulation
* leader-id: Id of the drone chosen to be the leader of the swarm
* multicast-ipv6: IPv6 of the multicast group of the swarm
* drone-id-list: Comma seperated list of the drone IDs of the swarm (recommanded to add the current drone ID)
## How it works ##
Run `quickjs binary location` `desired script location`
# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax.
# The only allowed lines here are (regexes):
# - "^#" comments, copied verbatim
# - "^[" section beginings, copied verbatim
# - lines containing an "=" sign which must fit in the following categorie.
# - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file
# Copied verbatim.
# - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported
# by the re-generation script.
# Re-generated.
# - other lines are copied verbatim
# Substitution (${...:...}), extension ([buildout] extends = ...) and
# section inheritance (< = ...) are NOT supported (but you should really
# not need these here).
[instance-profile]
filename = instance.cfg
md5sum = 99017d061d3be30746f6daef3a7bd8c4
[cli]
filename = cli.js
md5sum = 33271aeec124301604fdd406f0b339d1
[common]
filename = common.js
md5sum = bacc70f2683c279ba4e0751de616d4ff
[demo]
filename = demo.js
md5sum = 31d8511e6d297643e65febe9a3ed2428
[manual-flight]
filename = manual-flight.js
md5sum = 175813fc8b2f19f91dae27ad4e14ab03
[pubsub]
filename = pubsub.js
md5sum = d949c9a6cdaaa94e7bdd22df5e52fbf4
/*jslint indent2 */
/*global console, std */
import {
loiter,
setAirspeed,
setAltitude,
setTargetLatLong,
reboot
} from "{{ qjs_wrapper }}"; //jslint-quiet
import {
connect,
displayDronePositions,
land,
quit,
startPubsub,
takeOff
} from "{{ common }}"; //jslint-quiet
/*jslint-disable*/
import * as std from "std";
/*jslint-enable*/
var running = false;
const wrongParameters = displayMessage.bind(null, "Wrong parameters");
function checkNumber(value, toExecute) {
return (
Number.isNaN(value)
? wrongParameters
: toExecute.bind(null, value)
);
}
function displayMessage(message) {
console.log(message);
return 0;
}
function exit() {
running = false;
quit();
return 0;
}
function getInput() {
let undefined_cmd;
let altitude;
let cmd;
let latitude;
let longitude;
let s;
let speed;
const help = `
connect
takeoff
land
goto(point)
gotoCoord(latitude, longitude)
altitude(altitude)
speed(speed)
positions
reboot
exit
help
`;
const f = std.fdopen(std.in, "r");
running = true;
while (running) {
std.printf("> ");
s = f.getline();
undefined_cmd = false;
switch (s) {
case "altitude":
std.printf("Altitude: ");
altitude = parseFloat(f.getline());
cmd = checkNumber(altitude, setAltitude);
break;
case "connect":
cmd = connect;
startPubsub();
break;
case "exit":
cmd = exit;
break;
case "gotoCoord":
std.printf("Latitude: ");
latitude = parseFloat(f.getline());
std.printf("Longitude: ");
longitude = parseFloat(f.getline());
cmd = checkNumber(longitude, checkNumber(latitude, setTargetLatLong));
break;
case "help":
cmd = displayMessage.bind(null, help);
break;
case "land":
cmd = land;
break;
case "loiter":
cmd = loiter;
break;
case "positions":
cmd = displayDronePositions;
break;
case "reboot":
cmd = reboot;
break;
case "speed":
std.printf("Speed: ");
speed = parseFloat(f.getline());
cmd = checkNumber(speed, setAirspeed);
break;
case "takeoff":
cmd = takeOff.bind(null, 60);
break;
default:
undefined_cmd = true;
cmd = displayMessage.bind(null, " Undefined command");
}
let ret = cmd();
if (ret) {
console.log(" [ERROR] function:\n", cmd, "\nreturn value:", ret);
}
else if (s !== "help" && !undefined_cmd) {
console.log(" Command successful");
}
};
f.close();
}
getInput();
/*jslint-disable*/
{% set comma_separated_drone_id_list = ', '.join(drone_id_list.split()) -%}
/*jslint-enable*/
import {
arm,
doParachute,
getAltitude,
getLatitude,
getLongitude,
getYaw,
initPubsub,
setAltitude,
setTargetLatLong,
start,
stop,
stopPubsub,
takeOffAndWait,
Drone
} from "{{ qjs_wrapper }}"; //jslint-quiet
import {exit} from "std";
import {sleep, Worker} from "os";
const IP = "{{ autopilot_ip }}";
const PORT = "7909";
export const IS_LEADER = {{ is_leader }};
export const LEADER_ID = {{ leader_id }};
export const SIMULATION = {{ is_a_simulation }};
export const EPSILON = 105;
const EPSILON_YAW = 6;
const EPSILON_ALTITUDE = 5;
const TARGET_YAW = 0;
export const ALTITUDE_DIFF = 30;
const URL = "udp://" + IP + ":" + PORT;
const LOG_FILE = "{{ log_dir }}/mavsdk-log";
const droneIdList = [{{ comma_separated_drone_id_list }}];
const droneDict = {};
var pubsubRunning = false;
var pubsubWorker;
export function connect() {
console.log("Will connect to", URL);
exit_on_fail(start(URL, LOG_FILE, 60), "Failed to connect to " + URL);
}
export function distance(lat1, lon1, lat2, lon2) {
const R = 6371e3; // meters
const la1 = lat1 * Math.PI/180; // la, lo in radians
const la2 = lat2 * Math.PI/180;
const lo1 = lon1 * Math.PI/180;
const lo2 = lon2 * Math.PI/180;
//haversine formula
const sinLat = Math.sin((la2 - la1)/2);
const sinLon = Math.sin((lo2 - lo1)/2);
const h = sinLat*sinLat + Math.cos(la1)*Math.cos(la2)*sinLon*sinLon
return 2*R*Math.asin(Math.sqrt(h));
}
export function displayDronePositions() {
if(!pubsubRunning)
console.log("You must start pubsub first !");
else {
for (const [id, drone] of Object.entries(droneDict)) {
console.log(id, drone.latitude, drone.longitude, drone.altitudeAbs, drone.altitudeRel);
}
}
return 0;
}
function exit_on_fail(ret, msg) {
if(ret) {
console.log(msg);
quit();
exit(-1);
}
}
export function quit() {
stop();
if(pubsubRunning) {
stopPubsub();
}
}
export function goToAltitude(target_altitude, wait, go) {
if(go) {
exit_on_fail(
setAltitude(target_altitude),
`Failed to go to altitude ${target_altitude} m`
);
}
if(wait) {
waitForAltitude(target_altitude);
}
}
export function land() {
var yaw;
while(true) {
yaw = getYaw();
console.log(`[DEMO] Waiting for yaw... (${yaw} , ${TARGET_YAW})`);
if(Math.abs(yaw - TARGET_YAW) < EPSILON_YAW) {
break;
}
sleep(250);
}
console.log("[DEMO] Deploying parachute...");
exit_on_fail(doParachute(2), "Failed to deploy parachute");
}
export function setLatLong(latitude, longitude, target_altitude) {
var cur_latitude;
var cur_longitude;
var d;
if(target_altitude !== 0) {
setAltitude(target_altitude, false, true);
}
console.log(`Going to (${latitude}, ${longitude}) from
(${getLatitude()}, ${getLongitude()})`);
exit_on_fail(
setTargetLatLong(latitude, longitude),
`Failed to go to (${latitude}, ${longitude})`
);
sleep(500);
while(true) {
cur_latitude = getLatitude();
cur_longitude = getLongitude();
d = distance(cur_latitude, cur_longitude, latitude, longitude);
console.log(`Waiting for drone to get to destination (${d} m),
(${cur_latitude} , ${cur_longitude}), (${latitude}, ${longitude})`);
if(d < EPSILON) {
sleep(6000);
return;
}
sleep(1000);
}
}
export function startPubsub() {
pubsubWorker = new Worker("{{ pubsub_script }}");
pubsubWorker.onmessage = function(e) {
if (!e.data.publishing)
pubsubWorker.onmessage = null;
}
initPubsub(droneIdList.length);
for (let i = 0; i < droneIdList.length; i++) {
let id = droneIdList[i]
droneDict[id] = new Drone(id);
droneDict[id].init(i);
}
pubsubWorker.postMessage({ action: "run" });
pubsubRunning = true;
return droneDict;
}
export function takeOff(altitude) {
exit_on_fail(arm(), "Failed to arm");
takeOffAndWait();
goToAltitude(altitude, true, true);
}
function waitForAltitude(target_altitude) {
var altitude = getAltitude();
while(Math.abs(altitude - target_altitude) > EPSILON_ALTITUDE) {
console.log(
`[DEMO] Waiting for altitude... (${altitude} , ${target_altitude})`);
sleep(1000);
altitude = getAltitude();
}
}
/*jslint indent2 */
/*global console */
import {
getAltitude,
getAltitudeRel,
getInitialAltitude,
getLatitude,
getLongitude,
landed,
loiter,
setCheckpoint,
setTargetCoordinates
} from "{{ qjs_wrapper }}"; //jslint-quiet
import {sleep} from "os";
import {
connect,
distance,
goToAltitude,
land,
quit,
setLatLong,
startPubsub,
takeOff,
ALTITUDE_DIFF,
IS_LEADER,
LEADER_ID,
SIMULATION
} from "{{ common }}"; //jslint-quiet
const FLIGH_ALTITUDE = 100;
const PARACHUTE_ALTITUDE = 35;
const checkpointList = [
{
"latitude": 45.64492790560583,
"longitude": 14.25334942966329,
"altitude": 585.1806861589965
},
{
"latitude": 45.64316335436476,
"longitude": 14.26332880184475,
"altitude": 589.8802607573035
},
{
"latitude": 45.64911917196595,
"longitude": 14.26214792790128,
"altitude": 608.6648153348965
},
{
"latitude": 45.64122685351364,
"longitude": 14.26590493128597,
"altitude": 606.1448368129072
},
{
"latitude": 45.64543355564817,
"longitude": 14.27242391207985,
"altitude": 630.0829598206344
},
{
"latitude": 45.6372792927328,
"longitude": 14.27533492411138,
"altitude": 616.1839898415284
},
{
"latitude": 45.64061299543953,
"longitude": 14.26161958465814,
"altitude": 598.0603137354178
},
{
"latitude": 45.64032340702919,
"longitude": 14.2682896662383,
"altitude": 607.1243119862851
}
];
const landingPoint = [
{
"latitude": 45.6398451,
"longitude": 14.2699217
}
];
let INITIAL_ALTITUDE;
let START_ALTITUDE;
var nextCheckpoint = 0;
var distanceToLandingPoint = 100;
var leaderAltitudeAbs;
var leaderAltitudeRel;
var leaderLatitude;
var leaderLongitude;
function followLeader(leaderId, initialAltitude, altitudeDiff) {
goToAltitude(START_ALTITUDE + ALTITUDE_DIFF, false, true);
while(droneDict[leaderId].altitudeAbs == 0) {
console.log("[DEMO] Waiting for leader to send its altitude");
sleep(1000);
}
while(droneDict[leaderId].altitudeAbs < initialAltitude) {
console.log(`[DEMO] Waiting for leader to reach altitude ${initialAltitude} (currently ${droneDict[leaderId].altitudeAbs})`);
sleep(1000);
}
console.log("[DEMO] Switching to following mode...\n");
do {
leaderAltitudeAbs = droneDict[leaderId].altitudeAbs;
leaderAltitudeRel = droneDict[leaderId].altitudeRel;
leaderLatitude = droneDict[leaderId].latitude;
leaderLongitude = droneDict[leaderId].longitude;
setTargetCoordinates(
leaderLatitude,
leaderLongitude,
leaderAltitudeAbs + altitudeDiff,
0
);
sleep(500);
} while(leaderAltitudeRel > PARACHUTE_ALTITUDE);
console.log("[DEMO] Stop following...\n");
nextCheckpoint = droneDict[leaderId].lastCheckpoint + 1;
}
function waitForAltitude(altitude) {
var curAltitude;
do {
sleep(1000);
curAltitude = getAltitude();
console.log(
`[DEMO] Waiting for altitude... (${curAltitude} , ${altitude})`);
}
while(curAltitude < altitude);
}
function waitForLanding() {
while(!landed()) {
sleep(1000);
}
}
console.log("[DEMO] Connecting...\n");
connect();
const droneDict = startPubsub();
INITIAL_ALTITUDE = getInitialAltitude();
START_ALTITUDE = INITIAL_ALTITUDE + FLIGH_ALTITUDE;
if(SIMULATION) {
takeOff(START_ALTITUDE + 1);
}
waitForAltitude(START_ALTITUDE);
console.log("[DEMO] Setting loiter mode...\n");
loiter();
sleep(3000);
if(!IS_LEADER) {
followLeader(LEADER_ID, START_ALTITUDE, ALTITUDE_DIFF);
}
for (let i = nextCheckpoint; i < checkpointList.length; i++) {
console.log(`[DEMO] Going to Checkpoint ${i}\n`);
setLatLong(checkpointList[i].latitude, checkpointList[i].longitude, checkpointList[i].altitude + FLIGH_ALTITUDE);
console.log(`[DEMO] Reached Checkpoint ${i}\n`);
setCheckpoint(i);
sleep(30000);
}
console.log("[DEMO] Setting altitude...\n");
goToAltitude(getAltitude() - getAltitudeRel() + PARACHUTE_ALTITUDE, true, true);
if(!IS_LEADER) {
setLatLong(
checkpointList[checkpointList.length - 1].latitude,
checkpointList[checkpointList.length - 1].longitude,
0
);
}
while(distanceToLandingPoint > 20) {
console.log(`[DEMO] Waiting to reache landing point (current distance is ${distanceToLandingPoint})`);
distanceToLandingPoint = distance(getLatitude(), getLongitude(), landingPoint.latitude, landingPoint.longitude);
}
console.log("[DEMO] Landing...\n");
land();
waitForLanding();
quit();
[buildout]
parts =
cli
demo
manual-flight
eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory}
offline = true
[directory]
recipe = slapos.cookbook:mkdirectory
home = $${buildout:directory}
etc = $${:home}/etc
var = $${:home}/var
log = $${:var}/log
[slap-configuration]
recipe = slapos.cookbook:slapconfiguration
computer = $${slap_connection:computer_id}
partition = $${slap_connection:partition_id}
url = $${slap_connection:server_url}
key = $${slap_connection:key_file}
cert = $${slap_connection:cert_file}
[drone]
recipe = slapos.recipe.build
slapparameter-dict = $${slap-configuration:configuration}
init =
options['autopilot-ip'] = options['slapparameter-dict'].get('autopilot_ip', '192.168.27.1')
options['id'] = options['slapparameter-dict'].get('id', '1')
options['is-a-simulation'] = options['slapparameter-dict'].get('is_a_simulation', 'false')
options['leader-id'] = options['slapparameter-dict'].get('leader_id', '1')
options['is-leader'] = 'true' if options['id'] == options['leader-id'] else 'false'
options['multicast-ipv6'] = options['slapparameter-dict'].get('multicast_ip', 'ff15::1111')
options['drone-id-list'] = options['slapparameter-dict'].get('drone_id_list', '')
[js-dynamic-template]
recipe = slapos.recipe.template:jinja2
rendered = $${directory:etc}/$${:_buildout_section_name_}
template = ${buildout:directory}/$${:_buildout_section_name_}.js
extra-context =
context =
raw qjs_wrapper ${qjs-wrapper:location}/lib/libqjswrapper.so
$${:extra-context}
[common]
<= js-dynamic-template
extra-context =
key autopilot_ip drone:autopilot-ip
key drone_id_list drone:drone-id-list
key is_a_simulation drone:is-a-simulation
key is_leader drone:is-leader
key leader_id drone:leader-id
key log_dir directory:log
key pubsub_script pubsub:rendered
[cli]
<= js-dynamic-template
extra-context =
key common common:rendered
[demo]
<= js-dynamic-template
extra-context =
key common common:rendered
[manual-flight]
<= js-dynamic-template
extra-context =
key common common:rendered
[pubsub]
<= js-dynamic-template
extra-context =
key id drone:id
key ipv6 drone:multicast-ipv6
/*jslint indent2 */
/*global console */
import {
getAltitude,
getInitialAltitude,
landed,
loiter,
setTargetCoordinates
} from "{{ qjs_wrapper }}"; //jslint-quiet
import {sleep} from "os";
import {
connect,
goToAltitude,
quit,
startPubsub,
takeOff,
ALTITUDE_DIFF,
IS_LEADER,
LEADER_ID,
SIMULATION
} from "{{ common }}"; //jslint-quiet
const FLIGH_ALTITUDE = 100;
const PARACHUTE_ALTITUDE = 35;
let INITIAL_ALTITUDE;
let START_ALTITUDE;
var leaderAltitudeAbs;
var leaderAltitudeRel;
var leaderLatitude;
var leaderLongitude;
function followLeader(leaderId, initialAltitude, altitudeDiff) {
goToAltitude(START_ALTITUDE + ALTITUDE_DIFF, false, true);
while(droneDict[leaderId].altitudeAbs == 0) {
console.log("[DEMO] Waiting for leader to send its altitude");
sleep(1000);
}
while(droneDict[leaderId].altitudeAbs < initialAltitude) {
console.log(`[DEMO] Waiting for leader to reach altitude ${initialAltitude} (currently ${droneDict[leaderId].altitudeAbs})`);
sleep(1000);
}
console.log("[DEMO] Switching to following mode...\n");
do {
leaderAltitudeAbs = droneDict[leaderId].altitudeAbs;
leaderAltitudeRel = droneDict[leaderId].altitudeRel;
leaderLatitude = droneDict[leaderId].latitude;
leaderLongitude = droneDict[leaderId].longitude;
setTargetCoordinates(
leaderLatitude,
leaderLongitude,
leaderAltitudeAbs + altitudeDiff,
0
);
sleep(500);
} while(leaderAltitudeRel > PARACHUTE_ALTITUDE);
console.log("[DEMO] Stop following...\n");
}
function waitForAltitude(altitude) {
var curAltitude;
do {
sleep(1000);
curAltitude = getAltitude();
console.log(
`[DEMO] Waiting for altitude... (${curAltitude} , ${altitude})`);
}
while(curAltitude < altitude);
}
function waitForLanding() {
while(!landed()) {
sleep(1000);
}
}
const droneDict = startPubsub();
console.log("[DEMO] Connecting...\n");
connect();
while(getInitialAltitude() == 0) {
console.log("[DEMO] Waiting for first telemetry\n");
sleep(1000);
}
INITIAL_ALTITUDE = getInitialAltitude();
START_ALTITUDE = INITIAL_ALTITUDE + FLIGH_ALTITUDE;
if(SIMULATION) {
takeOff(START_ALTITUDE + 1);
}
waitForAltitude(START_ALTITUDE);
console.log("[DEMO] Setting loiter mode...\n");
loiter();
sleep(3000);
if(!IS_LEADER) {
followLeader(LEADER_ID, START_ALTITUDE, ALTITUDE_DIFF);
}
console.log("[DEMO] Loitering until manual intructions are given\n")
waitForLanding();
quit();
import {runPubsub} from "{{ qjs_wrapper }}";
import {Worker} from "os";
const PORT = "4840";
const IPV6 = "{{ ipv6 }}";
var parent = Worker.parent;
function handle_msg(e) {
switch(e.data.action) {
case "run":
runPubsub(IPV6, PORT, "eth0", {{ id }});
parent.postMessage({running: false});
parent.onmessage = null;
break;
default:
console.log("Undefined action from parent: ", e.data.action);
}
}
parent.onmessage = handle_msg;
[buildout]
extends =
buildout.hash.cfg
../../stack/slapos.cfg
../../component/qjs-wrapper/buildout.cfg
parts =
instance-profile
common
cli
demo
manual-flight
pubsub
slapos-cookbook
[download-file-base]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/${:filename}
destination = ${buildout:directory}/${:filename}
[instance-profile]
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
output = ${buildout:directory}/template.cfg
[common]
<= download-file-base
[cli]
<= download-file-base
[demo]
<= download-file-base
[manual-flight]
<= download-file-base
[pubsub]
<= download-file-base
...@@ -15,11 +15,11 @@ ...@@ -15,11 +15,11 @@
[template] [template]
filename = instance.cfg.in filename = instance.cfg.in
md5sum = 7e90da1f6dac4233e1aa3248f48e357c md5sum = a7978940fb9cdcc4e1ec33015ba640ba
[template-kvm] [template-kvm]
filename = instance-kvm.cfg.jinja2 filename = instance-kvm.cfg.jinja2
md5sum = ff9fb2378a48d1ca8c72f6a87d3a0221 md5sum = 150285957daa256420d2d73519277420
[template-kvm-cluster] [template-kvm-cluster]
filename = instance-kvm-cluster.cfg.jinja2.in filename = instance-kvm-cluster.cfg.jinja2.in
...@@ -51,7 +51,7 @@ md5sum = e041e8011ad2ec7f104be173ef76f5e9 ...@@ -51,7 +51,7 @@ md5sum = e041e8011ad2ec7f104be173ef76f5e9
[template-ansible-promise] [template-ansible-promise]
filename = template/ansible-promise.in filename = template/ansible-promise.in
md5sum = a8cf453d20f01c707f02c4b4014580d8 md5sum = 6328f99728284847b8dd1146aadeae1b
[template-kvm-run] [template-kvm-run]
filename = template/template-kvm-run.in filename = template/template-kvm-run.in
...@@ -78,16 +78,16 @@ filename = instance-kvm-http.cfg.in ...@@ -78,16 +78,16 @@ filename = instance-kvm-http.cfg.in
md5sum = 438192aab9f11e40dc521b46a4854dcf md5sum = 438192aab9f11e40dc521b46a4854dcf
[image-download-controller] [image-download-controller]
filename = template/image-download-controller.py filename = template/image-download-controller.py.in
md5sum = 3cc10323fd4d2db4cfbac536b66eae7c md5sum = dc822ddd7dc987bf808a64a18ba11fd0
[image-download-config-creator] [image-download-config-creator]
filename = template/image-download-config-creator.py filename = template/image-download-config-creator.py.in
md5sum = 22ed19d9b8f7b983c97c52caa686bcd7 md5sum = b74b9d4829fe2c2f7122125cf87d29cd
[whitelist-firewall-download-controller] [whitelist-firewall-download-controller]
filename = template/whitelist-firewall-download-controller.py filename = template/whitelist-firewall-download-controller.py.in
md5sum = bc64e29546833817636261d1b28aa6dc md5sum = b4f6ffef08685bace1b9c01a3bd2620d
[whitelist-domains-default] [whitelist-domains-default]
filename = template/whitelist-domains-default filename = template/whitelist-domains-default
......
...@@ -1026,6 +1026,7 @@ extensions = jinja2.ext.do ...@@ -1026,6 +1026,7 @@ extensions = jinja2.ext.do
context = context =
raw logs ${directory:public}/ansible raw logs ${directory:public}/ansible
raw name {{ name }} raw name {{ name }}
raw python_executable ${buildout:executable}
[ansible-vm-promise] [ansible-vm-promise]
<= monitor-promise-base <= monitor-promise-base
......
...@@ -83,9 +83,9 @@ extra-context = ...@@ -83,9 +83,9 @@ extra-context =
raw dcron_executable_location ${dcron:location}/sbin/crond raw dcron_executable_location ${dcron:location}/sbin/crond
raw debian_amd64_netinst_location ${debian-amd64-bullseye-netinst.iso:target} raw debian_amd64_netinst_location ${debian-amd64-bullseye-netinst.iso:target}
raw whitelist_domains_default ${whitelist-domains-default:target} raw whitelist_domains_default ${whitelist-domains-default:target}
raw whitelist_firewall_download_controller ${whitelist-firewall-download-controller:target} raw whitelist_firewall_download_controller ${whitelist-firewall-download-controller:output}
raw image_download_controller ${image-download-controller:target} raw image_download_controller ${image-download-controller:output}
raw image_download_config_creator ${image-download-config-creator:target} raw image_download_config_creator ${image-download-config-creator:output}
raw logrotate_cfg ${template-logrotate-base:output} raw logrotate_cfg ${template-logrotate-base:output}
raw novnc_location ${noVNC:location} raw novnc_location ${noVNC:location}
raw netcat_bin ${netcat:location}/bin/netcat raw netcat_bin ${netcat:location}/bin/netcat
......
...@@ -61,9 +61,16 @@ scripts = ...@@ -61,9 +61,16 @@ scripts =
recipe = slapos.recipe.build:download recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/${:filename} url = ${:_profile_base_location_}/${:filename}
[template] [template-base]
recipe = slapos.recipe.template recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename} url = ${:_profile_base_location_}/${:filename}
[template-base-python]
<= template-base
output = ${buildout:parts-directory}/${:_buildout_section_name_}/${:_buildout_section_name_}.py
[template]
<= template-base
output = ${buildout:directory}/template.cfg output = ${buildout:directory}/template.cfg
[template-kvm] [template-kvm]
...@@ -118,13 +125,13 @@ context = ...@@ -118,13 +125,13 @@ context =
key template_apache_conf template-apache-conf:target key template_apache_conf template-apache-conf:target
[image-download-controller] [image-download-controller]
<= download-base <= template-base-python
[image-download-config-creator] [image-download-config-creator]
<= download-base <= template-base-python
[whitelist-firewall-download-controller] [whitelist-firewall-download-controller]
<= download-base <= template-base-python
[whitelist-domains-default] [whitelist-domains-default]
<= download-base <= download-base
......
#!/usr/bin/env python #!{{ python_executable }}
# Parse Ansible result log file and define if execution succeed or not # Parse Ansible result log file and define if execution succeed or not
......
#!/usr/bin/env python #!${buildout:executable}
import hashlib import hashlib
import json import json
......
#!/usr/bin/env python #!${buildout:executable}
import hashlib import hashlib
import json import json
......
#!/usr/bin/env python #!${buildout:executable}
import os import os
import subprocess import subprocess
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment