mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-09-17 22:49:55 +00:00
apps/btshell: Add parse_arg_addr to parse BLE address
We already have parse_arg_mac which parses MAC address, but new API
allows to include ":p" or ":r" ("-p"/"-r") at the end of address string
which indicates address type. This can speed up typing commands since
there is no need to enter long parameters with address type separately.
This commit is contained in:
@@ -53,6 +53,7 @@ int parse_arg_kv_dflt(char *name, const struct kv_pair *kvs, int def_val,
|
||||
int parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len);
|
||||
int parse_arg_byte_stream_exact_length(char *name, uint8_t *dst, int len);
|
||||
int parse_arg_mac(char *name, uint8_t *dst);
|
||||
int parse_arg_addr(char *name, ble_addr_t *addr);
|
||||
int parse_arg_uuid(char *name, ble_uuid_any_t *uuid);
|
||||
int parse_arg_all(int argc, char **argv);
|
||||
int parse_eddystone_url(char *full_url, uint8_t *out_scheme, char *out_body,
|
||||
|
||||
@@ -511,6 +511,54 @@ parse_arg_mac(char *name, uint8_t *dst)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
parse_arg_addr(char *name, ble_addr_t *addr)
|
||||
{
|
||||
char *arg;
|
||||
size_t len;
|
||||
uint8_t addr_type;
|
||||
bool addr_type_found;
|
||||
int rc;
|
||||
|
||||
arg = parse_arg_peek(name);
|
||||
if (!arg) {
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
len = strlen(arg);
|
||||
if (len < 2) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
addr_type_found = false;
|
||||
if ((arg[len - 2] == ':') || (arg[len - 2] == '-')) {
|
||||
if (tolower(arg[len - 1]) == 'p') {
|
||||
addr_type = BLE_ADDR_PUBLIC;
|
||||
addr_type_found = true;
|
||||
} else if (tolower(arg[len - 1]) == 'r') {
|
||||
addr_type = BLE_ADDR_RANDOM;
|
||||
addr_type_found = true;
|
||||
}
|
||||
|
||||
if (addr_type_found) {
|
||||
arg[len - 2] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
rc = parse_arg_mac(name, addr->val);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (addr_type_found) {
|
||||
addr->type = addr_type;
|
||||
} else {
|
||||
rc = EAGAIN;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
parse_arg_uuid(char *str, ble_uuid_any_t *uuid)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user