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/05/10 00:40:58 UTC
[2/3] incubator-mynewt-core git commit: bletiny - Add eddystone URL
support.
bletiny - Add eddystone URL support.
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/72007b57
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/72007b57
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/72007b57
Branch: refs/heads/develop
Commit: 72007b575dc439cd6e941d1b2c7904964c0ec847
Parents: 5516847
Author: Christopher Collins <cc...@apache.org>
Authored: Mon May 9 17:40:24 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Mon May 9 17:40:50 2016 -0700
----------------------------------------------------------------------
apps/bletiny/src/cmd.c | 113 ++++++++++++++++++++++++++++++++++++++++++-
apps/bletiny/src/main.c | 2 +-
2 files changed, 112 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/72007b57/apps/bletiny/src/cmd.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/cmd.c b/apps/bletiny/src/cmd.c
index 3a1ae76..420ed6a 100644
--- a/apps/bletiny/src/cmd.c
+++ b/apps/bletiny/src/cmd.c
@@ -27,6 +27,7 @@
#include "nimble/hci_common.h"
#include "host/ble_gap.h"
#include "host/ble_hs_adv.h"
+#include "host/ble_eddystone.h"
#include "../src/ble_l2cap_priv.h"
#include "../src/ble_hs_priv.h"
@@ -135,6 +136,94 @@ cmd_parse_conn_start_end(uint16_t *out_conn, uint16_t *out_start,
return 0;
}
+static int
+cmd_parse_eddystone_url(char *full_url, uint8_t *out_scheme, char *out_body,
+ uint8_t *out_body_len, uint8_t *out_suffix)
+{
+ static const struct {
+ char *s;
+ uint8_t scheme;
+ } schemes[] = {
+ { "http://www.", BLE_EDDYSTONE_URL_SCHEME_HTTP_WWW },
+ { "https://www.", BLE_EDDYSTONE_URL_SCHEME_HTTPS_WWW },
+ { "http://", BLE_EDDYSTONE_URL_SCHEME_HTTP },
+ { "https://", BLE_EDDYSTONE_URL_SCHEME_HTTPS },
+ };
+
+ static const struct {
+ char *s;
+ uint8_t code;
+ } suffixes[] = {
+ { ".com/", BLE_EDDYSTONE_URL_SUFFIX_COM_SLASH },
+ { ".org/", BLE_EDDYSTONE_URL_SUFFIX_ORG_SLASH },
+ { ".edu/", BLE_EDDYSTONE_URL_SUFFIX_EDU_SLASH },
+ { ".net/", BLE_EDDYSTONE_URL_SUFFIX_NET_SLASH },
+ { ".info/", BLE_EDDYSTONE_URL_SUFFIX_INFO_SLASH },
+ { ".biz/", BLE_EDDYSTONE_URL_SUFFIX_BIZ_SLASH },
+ { ".gov/", BLE_EDDYSTONE_URL_SUFFIX_GOV_SLASH },
+ { ".com", BLE_EDDYSTONE_URL_SUFFIX_COM },
+ { ".org", BLE_EDDYSTONE_URL_SUFFIX_ORG },
+ { ".edu", BLE_EDDYSTONE_URL_SUFFIX_EDU },
+ { ".net", BLE_EDDYSTONE_URL_SUFFIX_NET },
+ { ".info", BLE_EDDYSTONE_URL_SUFFIX_INFO },
+ { ".biz", BLE_EDDYSTONE_URL_SUFFIX_BIZ },
+ { ".gov", BLE_EDDYSTONE_URL_SUFFIX_GOV },
+ };
+
+ char *prefix;
+ char *suffix;
+ int full_url_len;
+ int prefix_len;
+ int suffix_len;
+ int suffix_idx;
+ int rc;
+ int i;
+
+ full_url_len = strlen(full_url);
+
+ rc = BLE_HS_EINVAL;
+ for (i = 0; i < sizeof schemes / sizeof schemes[0]; i++) {
+ prefix = schemes[i].s;
+ prefix_len = strlen(schemes[i].s);
+
+ if (full_url_len >= prefix_len &&
+ memcmp(full_url, prefix, prefix_len) == 0) {
+
+ *out_scheme = i;
+ rc = 0;
+ break;
+ }
+ }
+ if (rc != 0) {
+ return rc;
+ }
+
+ rc = BLE_HS_EINVAL;
+ for (i = 0; i < sizeof suffixes / sizeof suffixes[0]; i++) {
+ suffix = suffixes[i].s;
+ suffix_len = strlen(suffixes[i].s);
+
+ suffix_idx = full_url_len - suffix_len;
+ if (suffix_idx >= prefix_len &&
+ memcmp(full_url + suffix_idx, suffix, suffix_len) == 0) {
+
+ *out_suffix = i;
+ rc = 0;
+ break;
+ }
+ }
+ if (rc != 0) {
+ *out_suffix = BLE_EDDYSTONE_URL_SUFFIX_NONE;
+ *out_body_len = full_url_len - prefix_len;
+ } else {
+ *out_body_len = full_url_len - prefix_len - suffix_len;
+ }
+
+ memcpy(out_body, full_url + prefix_len, *out_body_len);
+
+ return 0;
+}
+
/*****************************************************************************
* $advertise *
*****************************************************************************/
@@ -1010,6 +1099,11 @@ cmd_set_adv_data(void)
uint16_t uuid16;
uint8_t uuid128[16];
uint8_t public_tgt_addr[BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN];
+ uint8_t eddystone_url_body_len;
+ uint8_t eddystone_url_suffix;
+ uint8_t eddystone_url_scheme;
+ char eddystone_url_body[BLE_EDDYSTONE_URL_MAX_LEN];
+ char *eddystone_url_full;
int svc_data_uuid16_len;
int svc_data_uuid32_len;
int svc_data_uuid128_len;
@@ -1224,13 +1318,28 @@ cmd_set_adv_data(void)
return rc;
}
- rc = bletiny_set_adv_data(&adv_fields);
+ eddystone_url_full = parse_arg_find("eddystone_url");
+ if (eddystone_url_full != NULL) {
+ rc = cmd_parse_eddystone_url(eddystone_url_full, &eddystone_url_scheme,
+ eddystone_url_body,
+ &eddystone_url_body_len,
+ &eddystone_url_suffix);
+ if (rc != 0) {
+ return rc;
+ }
+
+ rc = ble_eddystone_set_adv_data_url(&adv_fields, eddystone_url_scheme,
+ eddystone_url_body,
+ eddystone_url_body_len,
+ eddystone_url_suffix);
+ } else {
+ rc = bletiny_set_adv_data(&adv_fields);
+ }
if (rc != 0) {
console_printf("error setting advertisement data; rc=%d\n", rc);
return rc;
}
-
return 0;
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/72007b57/apps/bletiny/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/main.c b/apps/bletiny/src/main.c
index 2d55ef0..a2a557e 100755
--- a/apps/bletiny/src/main.c
+++ b/apps/bletiny/src/main.c
@@ -56,7 +56,7 @@
#define SHELL_TASK_PRIO (3)
#define SHELL_MAX_INPUT_LEN (128)
-#define SHELL_TASK_STACK_SIZE (OS_STACK_ALIGN(288))
+#define SHELL_TASK_STACK_SIZE (OS_STACK_ALIGN(312))
static bssnz_t os_stack_t shell_stack[SHELL_TASK_STACK_SIZE];
/* Our global device address (public) */