You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2019/06/17 11:33:36 UTC
[mynewt-nimble] 01/02: apps/btshell: Add parse_arg_addr to parse
BLE address
This is an automated email from the ASF dual-hosted git repository.
andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit 2881fe789e8f36af38ee9defaad1146581e2f6ab
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Jun 11 01:32:51 2019 +0200
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.
---
apps/btshell/src/cmd.h | 1 +
apps/btshell/src/parse.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/apps/btshell/src/cmd.h b/apps/btshell/src/cmd.h
index a3b6feb..96b9e9b 100644
--- a/apps/btshell/src/cmd.h
+++ b/apps/btshell/src/cmd.h
@@ -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,
diff --git a/apps/btshell/src/parse.c b/apps/btshell/src/parse.c
index 37e065c..db79b45 100644
--- a/apps/btshell/src/parse.c
+++ b/apps/btshell/src/parse.c
@@ -512,6 +512,54 @@ parse_arg_mac(char *name, uint8_t *dst)
}
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)
{
uint16_t uuid16;