diff --git a/client/deps/cliparser/cliparser.c b/client/deps/cliparser/cliparser.c index f55b7a8f7..6c249e9cb 100644 --- a/client/deps/cliparser/cliparser.c +++ b/client/deps/cliparser/cliparser.c @@ -285,4 +285,26 @@ uint64_t arg_get_u64_hexstr_def(CLIParserContext *ctx, uint8_t paramnum, uint64_ return rv; } +int arg_get_u32_hexstr_def(CLIParserContext *ctx, uint8_t paramnum, uint32_t def, uint32_t *out) { + return arg_get_u32_hexstr_def_nlen(ctx, paramnum, def, out, 4); +} + +int arg_get_u32_hexstr_def_nlen(CLIParserContext *ctx, uint8_t paramnum, uint32_t def, uint32_t *out, uint8_t nlen) { + int n = 0; + uint8_t d[nlen]; + int res = CLIParamHexToBuf(arg_get_str(ctx, paramnum), d, sizeof(d), &n); + if (res == 0 && n == nlen) { + uint32_t rv = 0; + for (uint8_t i = 0; i < n; i++) { + rv <<= 8; + rv |= d[i]; + } + *out = rv; + return 1; + } else if (res == 0 && n) { + *out = def; + return 2; + } + return 0; +} diff --git a/client/deps/cliparser/cliparser.h b/client/deps/cliparser/cliparser.h index 996ad81ef..40fd5c2f7 100644 --- a/client/deps/cliparser/cliparser.h +++ b/client/deps/cliparser/cliparser.h @@ -68,4 +68,6 @@ int CLIParamHexToBuf(struct arg_str *argstr, uint8_t *data, int maxdatalen, int int CLIParamStrToBuf(struct arg_str *argstr, uint8_t *data, int maxdatalen, int *datalen); uint64_t arg_get_u64_hexstr_def(CLIParserContext *ctx, uint8_t paramnum, uint64_t def); +int arg_get_u32_hexstr_def(CLIParserContext *ctx, uint8_t paramnum, uint32_t def, uint32_t *out); +int arg_get_u32_hexstr_def_nlen(CLIParserContext *ctx, uint8_t paramnum, uint32_t def, uint32_t *out, uint8_t nlen); #endif