You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/07/24 19:02:49 UTC
[3/3] incubator-mynewt-core git commit: bletiny - Allow setting of
local random address.
bletiny - Allow setting of local random address.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/195c7d62
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/195c7d62
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/195c7d62
Branch: refs/heads/develop
Commit: 195c7d62e6bba1c9e17bd87c6c924e0867475fed
Parents: bbd43f1
Author: Christopher Collins <cc...@apache.org>
Authored: Sun Jul 24 11:51:37 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Sun Jul 24 12:02:05 2016 -0700
----------------------------------------------------------------------
apps/bletiny/src/bletiny.h | 3 +-
apps/bletiny/src/cmd.c | 73 +++++++++++++++++++++++++++++++++--------
apps/bletiny/src/parse.c | 24 +++++++++++---
3 files changed, 81 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/195c7d62/apps/bletiny/src/bletiny.h
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/bletiny.h b/apps/bletiny/src/bletiny.h
index 44831be..b8e4864 100644
--- a/apps/bletiny/src/bletiny.h
+++ b/apps/bletiny/src/bletiny.h
@@ -88,7 +88,8 @@ extern struct log bletiny_log;
const struct cmd_entry *parse_cmd_find(const struct cmd_entry *cmds,
char *name);
struct kv_pair *parse_kv_find(struct kv_pair *kvs, char *name);
-char *parse_arg_find(char *key);
+int parse_arg_find_idx(const char *key);
+char *parse_arg_extract(const char *key);
long parse_arg_long_bounds(char *name, long min, long max, int *out_status);
long parse_arg_long_bounds_default(char *name, long min, long max,
long dflt, int *out_status);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/195c7d62/apps/bletiny/src/cmd.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/cmd.c b/apps/bletiny/src/cmd.c
index 4733076..7671253 100644
--- a/apps/bletiny/src/cmd.c
+++ b/apps/bletiny/src/cmd.c
@@ -1341,7 +1341,7 @@ cmd_set_adv_data(void)
return rc;
}
- adv_fields.name = (uint8_t *)parse_arg_find("name");
+ adv_fields.name = (uint8_t *)parse_arg_extract("name");
if (adv_fields.name != NULL) {
adv_fields.name_len = strlen((char *)adv_fields.name);
}
@@ -1470,7 +1470,7 @@ cmd_set_adv_data(void)
return rc;
}
- eddystone_url_full = parse_arg_find("eddystone_url");
+ eddystone_url_full = parse_arg_extract("eddystone_url");
if (eddystone_url_full != NULL) {
rc = cmd_parse_eddystone_url(eddystone_url_full, &eddystone_url_scheme,
eddystone_url_body,
@@ -1568,11 +1568,60 @@ cmd_set_sm_data(void)
return 0;
}
+static struct kv_pair cmd_set_addr_types[] = {
+ { "public", BLE_ADDR_TYPE_PUBLIC },
+ { "random", BLE_ADDR_TYPE_RANDOM },
+ { NULL }
+};
+
+static int
+cmd_set_addr(void)
+{
+ uint8_t addr[6];
+ int addr_type;
+ int rc;
+
+ addr_type = parse_arg_kv_default("addr_type", cmd_set_addr_types,
+ BLE_ADDR_TYPE_PUBLIC, &rc);
+ if (rc != 0) {
+ console_printf("invalid 'addr_type' parameter\n");
+ return rc;
+ }
+
+ rc = parse_arg_mac("addr", addr);
+ if (rc != 0) {
+ return rc;
+ }
+
+ switch (addr_type) {
+ case BLE_ADDR_TYPE_PUBLIC:
+ /* We shouldn't be writing to the controller's address (g_dev_addr).
+ * There is no standard way to set the local public address, so this is
+ * our only option at the moment.
+ */
+ memcpy(g_dev_addr, addr, 6);
+ ble_hs_id_set_pub(g_dev_addr);
+ break;
+
+ case BLE_ADDR_TYPE_RANDOM:
+ rc = ble_hs_id_set_rnd(addr);
+ if (rc != 0) {
+ return rc;
+ }
+ break;
+
+ default:
+ assert(0);
+ return BLE_HS_EUNKNOWN;
+ }
+
+ return 0;
+}
+
static int
cmd_set(int argc, char **argv)
{
uint16_t mtu;
- uint8_t addr[6];
uint8_t irk[16];
int good;
int rc;
@@ -1589,16 +1638,14 @@ cmd_set(int argc, char **argv)
good = 0;
- rc = parse_arg_mac("addr", addr);
- if (rc == 0) {
+ rc = parse_arg_find_idx("addr");
+ if (rc != -1) {
+ rc = cmd_set_addr();
+ if (rc != 0) {
+ return rc;
+ }
+
good = 1;
- /* XXX: There are a lot of problems with this. This command probably
- * needs to be removed.
- */
- memcpy(g_dev_addr, addr, 6);
- ble_hs_id_set_pub(g_dev_addr);
- } else if (rc != ENOENT) {
- return rc;
}
mtu = parse_arg_uint16("mtu", &rc);
@@ -2149,7 +2196,7 @@ cmd_passkey(int argc, char **argv)
break;
case BLE_SM_IOACT_NUMCMP:
- yesno = parse_arg_find("yesno");
+ yesno = parse_arg_extract("yesno");
if (yesno == NULL) {
return EINVAL;
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/195c7d62/apps/bletiny/src/parse.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/parse.c b/apps/bletiny/src/parse.c
index 77fdace..d951d3d 100644
--- a/apps/bletiny/src/parse.c
+++ b/apps/bletiny/src/parse.c
@@ -72,8 +72,22 @@ parse_kv_find(struct kv_pair *kvs, char *name)
return NULL;
}
+int
+parse_arg_find_idx(const char *key)
+{
+ int i;
+
+ for (i = 0; i < cmd_num_args; i++) {
+ if (strcmp(cmd_args[i][0], key) == 0) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
char *
-parse_arg_find(char *key)
+parse_arg_extract(const char *key)
{
int i;
@@ -111,7 +125,7 @@ parse_arg_long_bounds(char *name, long min, long max, int *out_status)
char *sval;
long lval;
- sval = parse_arg_find(name);
+ sval = parse_arg_extract(name);
if (sval == NULL) {
*out_status = ENOENT;
return 0;
@@ -154,7 +168,7 @@ parse_arg_uint64_bounds(char *name, uint64_t min, uint64_t max, int *out_status)
char *sval;
uint64_t lval;
- sval = parse_arg_find(name);
+ sval = parse_arg_extract(name);
if (sval == NULL) {
*out_status = ENOENT;
return 0;
@@ -252,7 +266,7 @@ parse_arg_kv(char *name, struct kv_pair *kvs, int *out_status)
struct kv_pair *kv;
char *sval;
- sval = parse_arg_find(name);
+ sval = parse_arg_extract(name);
if (sval == NULL) {
*out_status = ENOENT;
return -1;
@@ -324,7 +338,7 @@ parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len)
{
char *sval;
- sval = parse_arg_find(name);
+ sval = parse_arg_extract(name);
if (sval == NULL) {
return ENOENT;
}