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, &params);
     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, &params);
+    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)
 {