summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fw/app/CMakeLists.txt7
-rw-r--r--fw/app/boards/nucleo_f767zi.conf1
-rw-r--r--fw/app/meson.build14
-rw-r--r--fw/app/src/http.c16
-rw-r--r--fw/app/src/index.html17
l---------fw/app/src/simple.css1
-rw-r--r--fw/btl/meson.build14
-rw-r--r--fw/meson.build11
-rwxr-xr-xtools/deploy.py58
-rw-r--r--web/index.html26
10 files changed, 147 insertions, 18 deletions
diff --git a/fw/app/CMakeLists.txt b/fw/app/CMakeLists.txt
index 1a9d1cf..1a63b77 100644
--- a/fw/app/CMakeLists.txt
+++ b/fw/app/CMakeLists.txt
@@ -42,6 +42,13 @@ generate_inc_file_for_target(
generate_inc_file_for_target(
app
+ src/simple.css
+ ${ZEPHYR_BINARY_DIR}/include/generated/simple.css.gz.inc
+ --gzip
+)
+
+generate_inc_file_for_target(
+ app
src/iot-contact.js
${ZEPHYR_BINARY_DIR}/include/generated/iot-contact.js.gz.inc
--gzip
diff --git a/fw/app/boards/nucleo_f767zi.conf b/fw/app/boards/nucleo_f767zi.conf
index 7f92421..ca69a03 100644
--- a/fw/app/boards/nucleo_f767zi.conf
+++ b/fw/app/boards/nucleo_f767zi.conf
@@ -3,6 +3,7 @@
# obtain one at https://mozilla.org/MPL/2.0/.
CONFIG_IOT_CONTACT_REMOTE_UPDATE=y
+CONFIG_IOT_CONTACT_NETWORK_HACK=y
CONFIG_BOOTLOADER_MCUBOOT=y
diff --git a/fw/app/meson.build b/fw/app/meson.build
index 8d84209..ddd5aa6 100644
--- a/fw/app/meson.build
+++ b/fw/app/meson.build
@@ -43,3 +43,17 @@ application_signed = custom_target(
install: true,
install_dir: '/',
)
+
+flash_application = custom_target(
+ build_always_stale: true,
+ build_by_default: false,
+ command: [
+ 'st-flash',
+ '--connect-under-reset',
+ 'write',
+ meson.current_build_dir() / 'application.signed.bin',
+ '0x8040000',
+ ],
+ depends: application_signed,
+ output: ['flash'],
+)
diff --git a/fw/app/src/http.c b/fw/app/src/http.c
index e206f86..08b59c1 100644
--- a/fw/app/src/http.c
+++ b/fw/app/src/http.c
@@ -34,6 +34,21 @@ struct http_resource_detail_static index_resource_detail = {
.static_data_len = sizeof(index_html_gz),
};
+static const uint8_t css_gz[] = {
+ #include "simple.css.gz.inc"
+};
+
+struct http_resource_detail_static css_resource_detail = {
+ .common = {
+ .type = HTTP_RESOURCE_TYPE_STATIC,
+ .bitmask_of_supported_http_methods = BIT(HTTP_GET),
+ .content_encoding = "gzip",
+ .content_type = "text/css",
+ },
+ .static_data = css_gz,
+ .static_data_len = sizeof(css_gz),
+};
+
static const uint8_t js_html_gz[] = {
#include "iot-contact.js.gz.inc"
};
@@ -95,6 +110,7 @@ HTTP_SERVICE_DEFINE(http_service, NULL, &http_port, 1, 10, NULL, NULL);
HTTP_RESOURCE_DEFINE(index_resource, http_service, "/", &index_resource_detail);
HTTP_RESOURCE_DEFINE(websocket_resource, http_service, "/", &websocket_resource_detail);
HTTP_RESOURCE_DEFINE(favicon_resource, http_service, "/favicon.ico", &favicon_resource_detail);
+HTTP_RESOURCE_DEFINE(css_resource, http_service, "/simple.css", &css_resource_detail);
HTTP_RESOURCE_DEFINE(js_resource, http_service, "/iot-contact.js", &js_resource_detail);
int init_http_server(void) {
diff --git a/fw/app/src/index.html b/fw/app/src/index.html
index 5817818..d4ccd45 100644
--- a/fw/app/src/index.html
+++ b/fw/app/src/index.html
@@ -8,14 +8,19 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
- <title>iot-contact</title>
+ <title>IoT contact</title>
+ <link rel="stylesheet" type="text/css" href="simple.css">
<script type="text/javascript" src="/iot-contact.js"></script>
</head>
<body>
- <h4>iot-contact</h4>
- <p>
- <label for="heartbeat">Heartbeat</label>
- <meter id="heartbeat" min="0" max="1" value="0"></meter>
- </p>
+ <header>
+ <h1>IoT contact</h1>
+ </header>
+ <main>
+ <p class="notice">
+ <label for="heartbeat">Heartbeat</label>
+ <meter id="heartbeat" min="0" max="1" value="0"></meter>
+ </p>
+ </main>
</body>
</html>
diff --git a/fw/app/src/simple.css b/fw/app/src/simple.css
new file mode 120000
index 0000000..5483eb1
--- /dev/null
+++ b/fw/app/src/simple.css
@@ -0,0 +1 @@
+../../../simple.css/simple.css \ No newline at end of file
diff --git a/fw/btl/meson.build b/fw/btl/meson.build
index c22ba3c..8ca1eb3 100644
--- a/fw/btl/meson.build
+++ b/fw/btl/meson.build
@@ -26,3 +26,17 @@ bootloader = custom_target('bootloader',
install: true,
install_dir: '/',
)
+
+flash_bootloader = custom_target(
+ build_always_stale: true,
+ build_by_default: false,
+ command: [
+ 'st-flash',
+ '--connect-under-reset',
+ 'write',
+ meson.current_build_dir() / 'bootloader.bin',
+ '0x8000000',
+ ],
+ depends: bootloader,
+ output: ['flash'],
+)
diff --git a/fw/meson.build b/fw/meson.build
index 8194827..f61058c 100644
--- a/fw/meson.build
+++ b/fw/meson.build
@@ -7,3 +7,14 @@ subdir('rtos')
subdir('app')
subdir('btl')
subdir('sim')
+
+erase = custom_target(
+ build_always_stale: true,
+ build_by_default: false,
+ command: [
+ 'st-flash',
+ '--connect-under-reset',
+ 'erase',
+ ],
+ output: ['erase'],
+)
diff --git a/tools/deploy.py b/tools/deploy.py
new file mode 100755
index 0000000..26048e8
--- /dev/null
+++ b/tools/deploy.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+
+
+import argparse
+import subprocess
+import pathlib
+
+
+SCRIPT = pathlib.Path(__file__)
+SOURCE_ROOT = SCRIPT.parent.parent.resolve()
+ARTIFACTS_DEFAULT = SOURCE_ROOT / "build" / "artifacts"
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(
+ description="Use OpenSSH and rsync to deploy artifacts",
+ )
+
+ parser.add_argument(
+ "-a",
+ "--artifacts",
+ default=ARTIFACTS_DEFAULT,
+ help="local path to artifacts folder",
+ )
+ parser.add_argument(
+ "-H", "--host", default="cloud", help="target `Host` name from ~/.ssh/config"
+ )
+ parser.add_argument(
+ "-p",
+ "--path",
+ default="/srv/http/deploy.xengineering.eu/public/git/iot-contact/main/",
+ help="remote path to destination folder on server",
+ )
+ parser.add_argument(
+ "-d",
+ "--dry-run",
+ action="store_true",
+ help="do not execute command and instead print it",
+ )
+
+ args = parser.parse_args()
+
+ command = [
+ "rsync",
+ "-av",
+ "--delete",
+ f"{str(pathlib.Path(args.artifacts).resolve())}/",
+ f"{args.host}:{args.path}",
+ ]
+
+ if args.dry_run:
+ print(command)
+ else:
+ subprocess.run(command, shell=False, check=True)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/web/index.html b/web/index.html
index db5ee03..1f23096 100644
--- a/web/index.html
+++ b/web/index.html
@@ -7,19 +7,21 @@
<title>IoT contact</title>
</head>
<body>
- <h1>IoT contact</h1>
+ <main>
+ <h1>IoT contact</h1>
- <h4>Printed circuit board</h4>
- <ul>
- <li><a href="schematic.pdf">schematic.pdf</a></li>
- <li><a href="bill-of-materials.csv">bill-of-materials.csv</a></li>
- </ul>
+ <h4>Printed circuit board</h4>
+ <ul>
+ <li><a href="schematic.pdf">schematic.pdf</a></li>
+ <li><a href="bill-of-materials.csv">bill-of-materials.csv</a></li>
+ </ul>
- <h4>Firmware</h4>
- <ul>
- <li><a href="application.signed.bin">application.signed.bin</a></li>
- <li><a href="bootloader.bin">bootloader.bin</a></li>
- <li><a href="simulation-linux-amd64.exe">simulation-linux-amd64.exe</a></li>
- </ul>
+ <h4>Firmware</h4>
+ <ul>
+ <li><a href="application.signed.bin">application.signed.bin</a></li>
+ <li><a href="bootloader.bin">bootloader.bin</a></li>
+ <li><a href="simulation-linux-amd64.exe">simulation-linux-amd64.exe</a></li>
+ </ul>
+ </main>
</body>
</html>