summaryrefslogtreecommitdiff
path: root/fw/app/src
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-04-15 22:12:54 +0200
committerxengineering <me@xengineering.eu>2025-04-16 18:03:40 +0200
commitf4faa103108356bcf53fb7c8829e95f012b21a4a (patch)
treef0f8e40c0a66090fd027ac31bf5ce213aaf97b63 /fw/app/src
parentd25c8e08ce6a977977e38365ace9af16acf09195 (diff)
downloadiot-contact-f4faa103108356bcf53fb7c8829e95f012b21a4a.tar
iot-contact-f4faa103108356bcf53fb7c8829e95f012b21a4a.tar.zst
iot-contact-f4faa103108356bcf53fb7c8829e95f012b21a4a.zip
fw: app: http: Add working GET /settings.json
Diffstat (limited to 'fw/app/src')
-rw-r--r--fw/app/src/http.c14
-rw-r--r--fw/app/src/settings.c29
-rw-r--r--fw/app/src/settings.h11
-rw-r--r--fw/app/src/syslog.c11
4 files changed, 60 insertions, 5 deletions
diff --git a/fw/app/src/http.c b/fw/app/src/http.c
index 081629b..83a3568 100644
--- a/fw/app/src/http.c
+++ b/fw/app/src/http.c
@@ -13,6 +13,7 @@
#include <zephyr/net/http/service.h>
#include <zephyr/net/http/status.h>
+#include "settings.h"
#include "ws.h"
@@ -98,9 +99,16 @@ static int settings_handler(
struct http_response_ctx *response_ctx,
void *user_data
) {
- static const char dummy[] = "{\"syslog\":{\"target\":{\"ip\":\"fe80::1\"}}}\n";
- response_ctx->body = (const uint8_t *)dummy;
- response_ctx->body_len = sizeof(dummy) - 1;
+ static char buffer[100];
+
+ int ret = settings_to_json(buffer, sizeof(buffer));
+ if (ret < 0) {
+ LOG_ERR("Could not serialize payload for settings request");
+ return ret;
+ }
+
+ response_ctx->body = (const uint8_t *)buffer;
+ response_ctx->body_len = ret;
response_ctx->final_chunk = true;
response_ctx->status = HTTP_200_OK;
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c
index 799322e..89f2f88 100644
--- a/fw/app/src/settings.c
+++ b/fw/app/src/settings.c
@@ -5,10 +5,14 @@
*/
+#include <stdio.h>
+
#include <zephyr/init.h>
#include <zephyr/logging/log.h>
#include <zephyr/settings/settings.h>
+#include "settings.h"
+
LOG_MODULE_DECLARE(settings);
@@ -31,3 +35,28 @@ int init_settings(void) {
return 0;
}
SYS_INIT(init_settings, APPLICATION, 50);
+
+int settings_to_json(void *buffer, size_t len)
+{
+ static const char format[] = "{\"syslog\":{\"target\":{\"ip\":\"%s\"}}}\n";
+
+ char ip[100];
+ int ret = settings_runtime_get("syslog/target/ip", ip, sizeof(ip));
+ if (ret < 0) {
+ LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret);
+ return ret;
+ }
+
+ ret = snprintf(buffer, len, format, ip);
+
+ if (ret >= len) {
+ LOG_ERR("Buffer too small to serialize settings as JSON");
+ return -ENOMEM;
+ }
+
+ if (ret < 0) {
+ LOG_ERR("Failed to serialize settings as JSON");
+ }
+
+ return ret;
+}
diff --git a/fw/app/src/settings.h b/fw/app/src/settings.h
new file mode 100644
index 0000000..a5cf2ac
--- /dev/null
+++ b/fw/app/src/settings.h
@@ -0,0 +1,11 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+
+#include <stddef.h>
+
+
+int settings_to_json(void *buffer, size_t data);
diff --git a/fw/app/src/syslog.c b/fw/app/src/syslog.c
index 47b2edb..700547b 100644
--- a/fw/app/src/syslog.c
+++ b/fw/app/src/syslog.c
@@ -7,6 +7,7 @@
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
+#include <string.h>
#include <string.h>
#include <zephyr/init.h>
@@ -33,7 +34,7 @@ LOG_MODULE_REGISTER(syslog);
struct net_mgmt_event_callback l4_cb;
static K_SEM_DEFINE(network_connected, 0, 1);
-static char target_ip[IPV6_STRLEN_MAX] = "2001:db8::2";
+static char target_ip[IPV6_STRLEN_MAX + 1] = "2001:db8::2";
void l4_event_handler(
struct net_mgmt_event_callback *cb,
@@ -145,7 +146,13 @@ int syslog_handle_export(int (*cb)(const char *name, const void *value,
int syslog_handle_get(const char *name, char *val, int val_len_max)
{
- LOG_WRN("Settings get not implemented");
+ const char* next = NULL;
+
+ if (settings_name_steq(name, "target/ip", &next) && !next) {
+ size_t len = strnlen(target_ip, sizeof(target_ip));
+ memcpy(val, target_ip, MIN(len, val_len_max));
+ }
+
return 0;
}