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:
Andrzej Kaczmarek
2019-06-17 13:33:31 +02:00
parent 60b92eb0b2
commit 2881fe789e
2 changed files with 49 additions and 0 deletions
+1
View File
@@ -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,
+48
View File
@@ -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)
{