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/01/23 04:20:04 UTC
[7/8] incubator-mynewt-larva git commit: bleshell - Allow conn params.
bleshell - Allow conn params.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/e0cdc6f1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/e0cdc6f1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/e0cdc6f1
Branch: refs/heads/master
Commit: e0cdc6f1cacd70f7af4409d38e6606784fe5ec08
Parents: 4bd7f86
Author: Christopher Collins <cc...@gmail.com>
Authored: Fri Jan 22 19:08:24 2016 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Fri Jan 22 19:19:45 2016 -0800
----------------------------------------------------------------------
project/bleshell/src/bleshell_priv.h | 8 ++-
project/bleshell/src/cmd.c | 103 +++++++++++++++++++++++++++++-
project/bleshell/src/main.c | 39 +++++++++--
project/bleshell/src/parse.c | 16 +++++
4 files changed, 157 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/e0cdc6f1/project/bleshell/src/bleshell_priv.h
----------------------------------------------------------------------
diff --git a/project/bleshell/src/bleshell_priv.h b/project/bleshell/src/bleshell_priv.h
index 625e672..a3de9d7 100644
--- a/project/bleshell/src/bleshell_priv.h
+++ b/project/bleshell/src/bleshell_priv.h
@@ -7,6 +7,8 @@
#include "host/ble_gatt.h"
struct ble_gap_white_entry;
struct ble_hs_adv_fields;
+struct ble_gap_conn_upd_params;
+struct ble_gap_conn_crt_params;
#define BLESHELL_MAX_CONNS 8
@@ -70,6 +72,7 @@ char *parse_arg_find(char *key);
long parse_arg_long_bounds(char *name, long min, long max, int *out_status);
long parse_arg_long(char *name, int *staus);
uint16_t parse_arg_uint16(char *name, int *status);
+uint16_t parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status);
int parse_arg_kv(char *name, struct kv_pair *kvs);
int parse_arg_byte_stream(char *name, int max_len, uint8_t *dst, int *out_len);
int parse_arg_mac(char *name, uint8_t *dst);
@@ -105,7 +108,8 @@ int bleshell_write_reliable(uint16_t conn_handle, struct ble_gatt_attr *attrs,
int num_attrs);
int bleshell_adv_start(int disc, int conn, uint8_t *peer_addr, int addr_type);
int bleshell_adv_stop(void);
-int bleshell_conn_initiate(int addr_type, uint8_t *peer_addr);
+int bleshell_conn_initiate(int addr_type, uint8_t *peer_addr,
+ struct ble_gap_conn_crt_params *params);
int bleshell_conn_cancel(void);
int bleshell_term_conn(uint16_t conn_handle);
int bleshell_wl_set(struct ble_gap_white_entry *white_list,
@@ -113,5 +117,7 @@ int bleshell_wl_set(struct ble_gap_white_entry *white_list,
int bleshell_scan(uint32_t dur_ms, uint8_t disc_mode, uint8_t scan_type,
uint8_t filter_policy);
int bleshell_set_adv_data(struct ble_hs_adv_fields *adv_fields);
+int bleshell_update_conn(uint16_t conn_handle,
+ struct ble_gap_conn_upd_params *params);
#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/e0cdc6f1/project/bleshell/src/cmd.c
----------------------------------------------------------------------
diff --git a/project/bleshell/src/cmd.c b/project/bleshell/src/cmd.c
index a99d9a9..84b1d96 100644
--- a/project/bleshell/src/cmd.c
+++ b/project/bleshell/src/cmd.c
@@ -205,6 +205,7 @@ static struct kv_pair cmd_conn_addr_types[] = {
static int
cmd_conn(int argc, char **argv)
{
+ struct ble_gap_conn_crt_params params;
uint8_t peer_addr[6];
int addr_type;
int rc;
@@ -233,7 +234,49 @@ cmd_conn(int argc, char **argv)
memset(peer_addr, 0, sizeof peer_addr);
}
- rc = bleshell_conn_initiate(addr_type, peer_addr);
+ params.scan_itvl = parse_arg_uint16_dflt("scan_itvl", 0x0010, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.scan_window = parse_arg_uint16_dflt("scan_window", 0x0010, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.itvl_min = parse_arg_uint16_dflt(
+ "itvl_min", BLE_GAP_INITIAL_CONN_ITVL_MIN, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.itvl_max = parse_arg_uint16_dflt(
+ "itvl_max", BLE_GAP_INITIAL_CONN_ITVL_MAX, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.latency = parse_arg_uint16_dflt("latency", 0, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.supervision_timeout = parse_arg_uint16_dflt("timeout", 0x0100, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.min_ce_len = parse_arg_uint16_dflt("min_ce_len", 0x0010, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.max_ce_len = parse_arg_uint16_dflt("max_ce_len", 0x0300, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ rc = bleshell_conn_initiate(addr_type, peer_addr, ¶ms);
if (rc != 0) {
return rc;
}
@@ -797,6 +840,63 @@ cmd_term(int argc, char **argv)
}
/*****************************************************************************
+ * $update connection parameters *
+ *****************************************************************************/
+
+static int
+cmd_update(int argc, char **argv)
+{
+ struct ble_gap_conn_upd_params params;
+ uint16_t conn_handle;
+ int rc;
+
+ conn_handle = parse_arg_uint16("conn", &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.itvl_min = parse_arg_uint16_dflt(
+ "itvl_min", BLE_GAP_INITIAL_CONN_ITVL_MIN, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.itvl_max = parse_arg_uint16_dflt(
+ "itvl_max", BLE_GAP_INITIAL_CONN_ITVL_MAX, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.latency = parse_arg_uint16_dflt("latency", 0, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.supervision_timeout = parse_arg_uint16_dflt("timeout", 0x0100, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.min_ce_len = parse_arg_uint16_dflt("min_ce_len", 0x0010, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ params.max_ce_len = parse_arg_uint16_dflt("max_ce_len", 0x0300, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ rc = bleshell_update_conn(conn_handle, ¶ms);
+ if (rc != 0) {
+ console_printf("error updating connection; rc=%d\n", rc);
+ return rc;
+ }
+
+ return 0;
+}
+
+/*****************************************************************************
* $white list *
*****************************************************************************/
@@ -962,6 +1062,7 @@ static struct cmd_entry cmd_b_entries[] = {
{ "show", cmd_show },
{ "set", cmd_set },
{ "term", cmd_term },
+ { "update", cmd_update },
{ "wl", cmd_wl },
{ "write", cmd_write },
{ NULL, NULL }
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/e0cdc6f1/project/bleshell/src/main.c
----------------------------------------------------------------------
diff --git a/project/bleshell/src/main.c b/project/bleshell/src/main.c
index aeb3cda..eee88f6 100755
--- a/project/bleshell/src/main.c
+++ b/project/bleshell/src/main.c
@@ -128,6 +128,17 @@ bleshell_print_bytes(uint8_t *bytes, int len)
}
}
+static void
+bleshell_print_conn_desc(struct ble_gap_conn_desc *desc)
+{
+ console_printf("handle=%d peer_addr_type=%d peer_addr=",
+ desc->conn_handle, desc->peer_addr_type);
+ bleshell_print_bytes(desc->peer_addr, 6);
+ console_printf(" conn_itvl=%d conn_latency=%d supervision_timeout=%d",
+ desc->conn_itvl, desc->conn_latency,
+ desc->supervision_timeout);
+}
+
static int
bleshell_conn_find_idx(uint16_t handle)
{
@@ -658,12 +669,9 @@ bleshell_on_connect(int event, int status, struct ble_gap_conn_ctxt *ctxt,
switch (event) {
case BLE_GAP_EVENT_CONN:
- console_printf("connection complete; handle=%d status=%d "
- "peer_addr=%02x:%02x:%02x:%02x:%02x:%02x\n",
- ctxt->desc.conn_handle, status,
- ctxt->desc.peer_addr[0], ctxt->desc.peer_addr[1],
- ctxt->desc.peer_addr[2], ctxt->desc.peer_addr[3],
- ctxt->desc.peer_addr[4], ctxt->desc.peer_addr[5]);
+ console_printf("connection complete; status=%d ", status);
+ bleshell_print_conn_desc(&ctxt->desc);
+ console_printf("\n");
if (status == 0) {
bleshell_conn_add(&ctxt->desc);
@@ -683,6 +691,12 @@ bleshell_on_connect(int event, int status, struct ble_gap_conn_ctxt *ctxt,
}
break;
+
+ case BLE_GAP_EVENT_CONN_UPDATED:
+ console_printf("connection updated; status=%d ", status);
+ bleshell_print_conn_desc(&ctxt->desc);
+ console_printf("\n");
+ break;
}
return 0;
@@ -908,7 +922,8 @@ bleshell_adv_start(int disc, int conn, uint8_t *peer_addr, int addr_type)
}
int
-bleshell_conn_initiate(int addr_type, uint8_t *peer_addr)
+bleshell_conn_initiate(int addr_type, uint8_t *peer_addr,
+ struct ble_gap_conn_crt_params *params)
{
int rc;
@@ -965,6 +980,16 @@ bleshell_set_adv_data(struct ble_hs_adv_fields *adv_fields)
return rc;
}
+int
+bleshell_update_conn(uint16_t conn_handle,
+ struct ble_gap_conn_upd_params *params)
+{
+ int rc;
+
+ rc = ble_gap_conn_update_params(conn_handle, params);
+ return rc;
+}
+
/**
* BLE test task
*
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/e0cdc6f1/project/bleshell/src/parse.c
----------------------------------------------------------------------
diff --git a/project/bleshell/src/parse.c b/project/bleshell/src/parse.c
index 986e1c4..3d6817f 100644
--- a/project/bleshell/src/parse.c
+++ b/project/bleshell/src/parse.c
@@ -137,6 +137,22 @@ parse_arg_uint16(char *name, int *out_status)
return parse_arg_long_bounds(name, 0, UINT16_MAX, out_status);
}
+uint16_t
+parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status)
+{
+ uint16_t val;
+ int rc;
+
+ val = parse_arg_uint16(name, &rc);
+ if (rc == ENOENT) {
+ val = dflt;
+ rc = 0;
+ }
+
+ *out_status = rc;
+ return val;
+}
+
int
parse_arg_kv(char *name, struct kv_pair *kvs)
{