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;