Skip to content

Commit 0856b97

Browse files
Damian-NordicMaureenHelm
authored andcommitted
settings: add shell commands to write and delete settings
Existing settings shell allows for listing and reading settings only. Add the following two commands: settings delete <key> settings write <key> <value-encoded-in-hex> Signed-off-by: Damian Krolik <[email protected]>
1 parent 43b77a2 commit 0856b97

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

subsys/settings/src/settings_shell.c

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static int cmd_list(const struct shell *shell_ptr, size_t argc, char *argv[])
5353
shell_error(shell_ptr, "Failed to load settings: %d", err);
5454
}
5555

56-
return 0;
56+
return err;
5757
}
5858

5959
struct settings_read_callback_params {
@@ -106,19 +106,56 @@ static int cmd_read(const struct shell *shell_ptr, size_t argc, char *argv[])
106106
err = settings_load_subtree_direct(name, settings_read_callback, &params);
107107

108108
if (err) {
109-
shell_error(shell_ptr, "Failed to load settings: %d", err);
109+
shell_error(shell_ptr, "Failed to load setting: %d", err);
110110
} else if (!params.value_found) {
111+
err = -ENOENT;
111112
shell_error(shell_ptr, "Setting not found");
112113
}
113114

114-
return 0;
115+
return err;
116+
}
117+
118+
static int cmd_write(const struct shell *shell_ptr, size_t argc, char *argv[])
119+
{
120+
int err;
121+
uint8_t buffer[CONFIG_SHELL_CMD_BUFF_SIZE / 2];
122+
size_t buffer_len;
123+
124+
buffer_len = hex2bin(argv[2], strlen(argv[2]), buffer, sizeof(buffer));
125+
126+
if (buffer_len == 0) {
127+
shell_error(shell_ptr, "Failed to parse hex value");
128+
return -EINVAL;
129+
}
130+
131+
err = settings_save_one(argv[1], buffer, buffer_len);
132+
133+
if (err) {
134+
shell_error(shell_ptr, "Failed to write setting: %d", err);
135+
}
136+
137+
return err;
138+
}
139+
140+
static int cmd_delete(const struct shell *shell_ptr, size_t argc, char *argv[])
141+
{
142+
int err;
143+
144+
err = settings_delete(argv[1]);
145+
146+
if (err) {
147+
shell_error(shell_ptr, "Failed to delete setting: %d", err);
148+
}
149+
150+
return err;
115151
}
116152

117153
SHELL_STATIC_SUBCMD_SET_CREATE(settings_cmds,
118154
SHELL_CMD_ARG(list, NULL, "[<subtree>]", cmd_list, 1, 1),
119155
SHELL_CMD_ARG(read, NULL, "<name>", cmd_read, 2, 0),
120-
SHELL_SUBCMD_SET_END
121-
);
156+
SHELL_CMD_ARG(write, NULL, "<name> <hex>", cmd_write, 3, 0),
157+
SHELL_CMD_ARG(delete, NULL, "<name>", cmd_delete, 2, 0),
158+
SHELL_SUBCMD_SET_END);
122159

123160
static int cmd_settings(const struct shell *shell_ptr, size_t argc, char **argv)
124161
{

0 commit comments

Comments
 (0)