Skip to content

Commit 6656a0b

Browse files
maxd-nordicnordicjm
authored andcommitted
samples: cellular: nrf_cloud_rest_device_message: runtime log level
Add runtime log level handling to nRF Cloud Device Message sample. This is motivated by a support request on DevZone. Signed-off-by: Maximilian Deubel <[email protected]>
1 parent 0c7a734 commit 6656a0b

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ Bluetooth Fast Pair samples
253253
Cellular samples
254254
----------------
255255

256-
|no_changes_yet_note|
256+
* :ref:`nrf_cloud_rest_cell_location` sample:
257+
258+
* Added:
259+
260+
* Runtime setting of the log level for the nRF Cloud logging feature.
257261

258262
Cryptography samples
259263
--------------------

samples/cellular/nrf_cloud_rest_device_message/src/main.c

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,76 @@ static void modem_time_wait(void)
304304
LOG_INF("Network time obtained");
305305
}
306306

307+
/* For simplicity, just build the JSON string here and add the interval with snprintk */
308+
#define REP_CTRL_TMPLT "{\"" NRF_CLOUD_JSON_KEY_REP "\":{" \
309+
"\"" NRF_CLOUD_JSON_KEY_CTRL "\":{" \
310+
"\"" NRF_CLOUD_JSON_KEY_LOG "\":%lu}}}"
311+
312+
/* The transform is just a dotted string of the JSON keys */
313+
#define TRANSFORM_DESIRED_LOG_LVL NRF_CLOUD_JSON_KEY_STATE "." \
314+
NRF_CLOUD_JSON_KEY_DES "." \
315+
NRF_CLOUD_JSON_KEY_CTRL "." \
316+
NRF_CLOUD_JSON_KEY_LOG
317+
318+
/* Size of the template plus three additional chars for the number value */
319+
#define REP_CTRL_BUFF_SZ (sizeof(REP_CTRL_TMPLT) + 3)
320+
321+
static void check_desired_log_level(void)
322+
{
323+
/* Ensure the reported section gets sent once */
324+
static bool reported_sent;
325+
static char ctrl_buf[REP_CTRL_BUFF_SZ];
326+
long desired_log_level = -1;
327+
bool update_reported = false;
328+
int err;
329+
330+
/* Check if there is a value in the desired config */
331+
err = nrf_cloud_rest_shadow_transform_request(&rest_ctx, device_id,
332+
TRANSFORM_DESIRED_LOG_LVL);
333+
if (err) {
334+
LOG_ERR("Failed to request desired log level, error: %u", err);
335+
} else if ((rest_ctx.response_len == 0) || !rest_ctx.response) {
336+
LOG_DBG("No desired log level exists");
337+
desired_log_level = nrf_cloud_log_control_get();
338+
} else {
339+
char *endptr;
340+
341+
/* Parse the desired log level */
342+
desired_log_level = strtol(rest_ctx.response, &endptr, 10);
343+
if ((endptr == rest_ctx.response) || (errno)) {
344+
LOG_ERR("Failed to parse desired log level value");
345+
}
346+
}
347+
348+
/* Validate desired log level */
349+
LOG_INF("Desired log level: %ld", desired_log_level);
350+
351+
if (desired_log_level < LOG_LEVEL_NONE || desired_log_level > LOG_LEVEL_DBG) {
352+
LOG_ERR("Invalid desired log level: %ld", desired_log_level);
353+
desired_log_level = nrf_cloud_log_control_get();
354+
} else {
355+
update_reported = (desired_log_level != nrf_cloud_log_control_get());
356+
}
357+
nrf_cloud_log_control_set(desired_log_level);
358+
359+
if (update_reported || !reported_sent) {
360+
/* Format the JSON for the reported config */
361+
err = snprintk(ctrl_buf, REP_CTRL_BUFF_SZ, REP_CTRL_TMPLT, desired_log_level);
362+
363+
if ((err < 0) || (err >= REP_CTRL_BUFF_SZ)) {
364+
LOG_ERR("Could not format reported config JSON");
365+
} else {
366+
/* Update the shadow's reported config with the log level value */
367+
err = nrf_cloud_rest_shadow_state_update(&rest_ctx, device_id, ctrl_buf);
368+
if (!err) {
369+
reported_sent = true;
370+
} else {
371+
LOG_ERR("Failed to update reported config, error: %d", err);
372+
}
373+
}
374+
}
375+
}
376+
307377
static int setup(void)
308378
{
309379
int err = 0;
@@ -362,6 +432,8 @@ static int setup(void)
362432
#endif
363433
nrf_cloud_log_enable(nrf_cloud_log_control_get() != LOG_LEVEL_NONE);
364434

435+
check_desired_log_level();
436+
365437
return 0;
366438
}
367439

@@ -429,5 +501,6 @@ int main(void)
429501

430502
while (1) {
431503
send_message_on_button();
504+
check_desired_log_level();
432505
}
433506
}

0 commit comments

Comments
 (0)