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/13 20:55:43 UTC
[30/50] [abbrv] incubator-mynewt-core git commit: bletiny/bleprph -
Use new GAP event callback API.
bletiny/bleprph - Use new GAP event callback API.
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/1c8a135f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/1c8a135f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/1c8a135f
Branch: refs/heads/develop
Commit: 1c8a135fa2cc1225afe80e1674cdcf33772d9253
Parents: 27445b8
Author: Christopher Collins <cc...@apache.org>
Authored: Thu Jul 7 13:44:58 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Mon Jul 11 16:43:34 2016 -0700
----------------------------------------------------------------------
apps/bleprph/src/main.c | 27 +++---
apps/bletiny/src/bletiny.h | 3 +-
apps/bletiny/src/cmd.c | 32 +++++--
apps/bletiny/src/main.c | 184 +++++++++++++++++++++++-----------------
apps/bletiny/src/parse.c | 16 ++++
5 files changed, 161 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c8a135f/apps/bleprph/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bleprph/src/main.c b/apps/bleprph/src/main.c
index 9e3a9b5..f73f2bf 100755
--- a/apps/bleprph/src/main.c
+++ b/apps/bleprph/src/main.c
@@ -86,8 +86,7 @@ uint8_t bleprph_reconnect_addr[6];
uint8_t bleprph_pref_conn_params[8];
uint8_t bleprph_gatt_service_changed[4];
-static int bleprph_gap_event(int event, struct ble_gap_event_ctxt *ctxt,
- void *arg);
+static int bleprph_gap_event(struct ble_gap_event *event, void *arg);
/**
* Logs information about a connection to the console.
@@ -193,26 +192,26 @@ bleprph_advertise(void)
* particular GAP event being signalled.
*/
static int
-bleprph_gap_event(int event, struct ble_gap_event_ctxt *ctxt, void *arg)
+bleprph_gap_event(struct ble_gap_event *event, void *arg)
{
- switch (event) {
+ switch (event->type) {
case BLE_GAP_EVENT_CONNECT:
/* A new connection was established or a connection attempt failed. */
BLEPRPH_LOG(INFO, "connection %s; status=%d ",
- ctxt->connect.status == 0 ? "established" : "failed",
- ctxt->connect.status);
- bleprph_print_conn_desc(ctxt->desc);
+ event->connect.status == 0 ? "established" : "failed",
+ event->connect.status);
+ bleprph_print_conn_desc(&event->connect.conn);
BLEPRPH_LOG(INFO, "\n");
- if (ctxt->connect.status != 0) {
+ if (event->connect.status != 0) {
/* Connection failed; resume advertising. */
bleprph_advertise();
}
return 0;
case BLE_GAP_EVENT_DISCONNECT:
- BLEPRPH_LOG(INFO, "disconnect; reason=%d ", ctxt->disconnect.reason);
- bleprph_print_conn_desc(ctxt->desc);
+ BLEPRPH_LOG(INFO, "disconnect; reason=%d ", event->disconnect.reason);
+ bleprph_print_conn_desc(&event->disconnect.conn);
BLEPRPH_LOG(INFO, "\n");
/* Connection terminated; resume advertising. */
@@ -222,16 +221,16 @@ bleprph_gap_event(int event, struct ble_gap_event_ctxt *ctxt, void *arg)
case BLE_GAP_EVENT_CONN_UPDATE:
/* The central has updated the connection parameters. */
BLEPRPH_LOG(INFO, "connection updated; status=%d ",
- ctxt->conn_update.status);
- bleprph_print_conn_desc(ctxt->desc);
+ event->conn_update.status);
+ bleprph_print_conn_desc(&event->conn_update.conn);
BLEPRPH_LOG(INFO, "\n");
return 0;
case BLE_GAP_EVENT_ENC_CHANGE:
/* Encryption has been enabled or disabled for this connection. */
BLEPRPH_LOG(INFO, "encryption change event; status=%d ",
- ctxt->enc_change.status);
- bleprph_print_conn_desc(ctxt->desc);
+ event->enc_change.status);
+ bleprph_print_conn_desc(&event->enc_change.conn);
BLEPRPH_LOG(INFO, "\n");
return 0;
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c8a135f/apps/bletiny/src/bletiny.h
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/bletiny.h b/apps/bletiny/src/bletiny.h
index d6051bf..95a0706 100644
--- a/apps/bletiny/src/bletiny.h
+++ b/apps/bletiny/src/bletiny.h
@@ -106,6 +106,7 @@ long parse_arg_long(char *name, int *staus);
uint8_t parse_arg_bool(char *name, int *status);
uint8_t parse_arg_bool_default(char *name, uint8_t dflt, int *out_status);
uint8_t parse_arg_uint8(char *name, int *status);
+uint8_t parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status);
uint16_t parse_arg_uint16(char *name, int *status);
uint16_t parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status);
uint32_t parse_arg_uint32(char *name, int *out_status);
@@ -161,7 +162,7 @@ int bletiny_conn_initiate(uint8_t own_addr_type,
uint8_t peer_addr_type, uint8_t *peer_addr,
struct ble_gap_conn_params *params);
int bletiny_conn_cancel(void);
-int bletiny_term_conn(uint16_t conn_handle);
+int bletiny_term_conn(uint16_t conn_handle, uint8_t reason);
int bletiny_wl_set(struct ble_gap_white_entry *white_list,
int white_list_count);
int bletiny_scan(uint8_t own_addr_type, int32_t duration_ms,
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c8a135f/apps/bletiny/src/cmd.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/cmd.c b/apps/bletiny/src/cmd.c
index eee8f22..6043aeb 100644
--- a/apps/bletiny/src/cmd.c
+++ b/apps/bletiny/src/cmd.c
@@ -29,6 +29,7 @@
#include "host/ble_hs_adv.h"
#include "host/ble_sm.h"
#include "host/ble_eddystone.h"
+#include "host/ble_hs_id.h"
#include "../src/ble_l2cap_priv.h"
#include "../src/ble_hs_priv.h"
@@ -1004,13 +1005,24 @@ cmd_scan(int argc, char **argv)
static int
cmd_show_addr(int argc, char **argv)
{
- uint8_t *id_addr;
- uint8_t id_addr_type;
+ uint8_t id_addr[6];
+ int rc;
- id_addr = ble_hs_pvcy_our_id_addr(&id_addr_type);
+ console_printf("public_id_addr=");
+ rc = ble_hs_id_copy_addr(BLE_ADDR_TYPE_PUBLIC, id_addr, NULL);
+ if (rc == 0) {
+ print_addr(id_addr);
+ } else {
+ console_printf("none");
+ }
- console_printf("id_addr_type=%d id_addr=", id_addr_type);
- print_addr(id_addr);
+ console_printf(" random_id_addr=");
+ rc = ble_hs_id_copy_addr(BLE_ADDR_TYPE_RANDOM, id_addr, NULL);
+ if (rc == 0) {
+ print_addr(id_addr);
+ } else {
+ console_printf("none");
+ }
console_printf("\n");
return 0;
@@ -1576,7 +1588,7 @@ cmd_set(int argc, char **argv)
* needs to be removed.
*/
memcpy(g_dev_addr, addr, 6);
- ble_gap_init_identity_addr(g_dev_addr);
+ ble_hs_id_set_pub(g_dev_addr);
} else if (rc != ENOENT) {
return rc;
}
@@ -1615,6 +1627,7 @@ static int
cmd_term(int argc, char **argv)
{
uint16_t conn_handle;
+ uint8_t reason;
int rc;
conn_handle = parse_arg_uint16("conn", &rc);
@@ -1622,7 +1635,12 @@ cmd_term(int argc, char **argv)
return rc;
}
- rc = bletiny_term_conn(conn_handle);
+ reason = parse_arg_uint8_dflt("reason", BLE_ERR_REM_USER_CONN_TERM, &rc);
+ if (rc != 0) {
+ return rc;
+ }
+
+ rc = bletiny_term_conn(conn_handle, reason);
if (rc != 0) {
console_printf("error terminating connection; rc=%d\n", rc);
return rc;
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c8a135f/apps/bletiny/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/main.c b/apps/bletiny/src/main.c
index 02f8566..b8a1fbe 100755
--- a/apps/bletiny/src/main.c
+++ b/apps/bletiny/src/main.c
@@ -51,8 +51,8 @@
* app uses some of nimble's internal details for logging.
*/
#include "../src/ble_hs_conn_priv.h"
-#include "../src/ble_hci_util_priv.h"
#include "../src/ble_hs_atomic_priv.h"
+#include "../src/ble_hci_priv.h"
#define BSWAP16(x) ((uint16_t)(((x) << 8) | (((x) & 0xff00) >> 8)))
@@ -679,11 +679,15 @@ static int
bletiny_on_mtu(uint16_t conn_handle, const struct ble_gatt_error *error,
uint16_t mtu, void *arg)
{
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else {
+ switch (error->status) {
+ case 0:
console_printf("mtu exchange complete: conn_handle=%d mtu=%d\n",
conn_handle, mtu);
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -769,15 +773,21 @@ static int
bletiny_on_disc_s(uint16_t conn_handle, const struct ble_gatt_error *error,
const struct ble_gatt_svc *service, void *arg)
{
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else if (service != NULL) {
+ switch (error->status) {
+ case 0:
bletiny_svc_add(conn_handle, service);
- } else {
+ break;
+
+ case BLE_HS_EDONE:
console_printf("service discovery successful\n");
if (bletiny_full_disc_prev_chr_def > 0) {
bletiny_disc_full_chrs(conn_handle);
}
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -791,15 +801,21 @@ bletiny_on_disc_c(uint16_t conn_handle, const struct ble_gatt_error *error,
svc_start_handle = (intptr_t)arg;
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else if (chr != NULL) {
+ switch (error->status) {
+ case 0:
bletiny_chr_add(conn_handle, svc_start_handle, chr);
- } else {
+ break;
+
+ case BLE_HS_EDONE:
console_printf("characteristic discovery successful\n");
if (bletiny_full_disc_prev_chr_def > 0) {
bletiny_disc_full_chrs(conn_handle);
}
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -810,15 +826,21 @@ bletiny_on_disc_d(uint16_t conn_handle, const struct ble_gatt_error *error,
uint16_t chr_def_handle, const struct ble_gatt_dsc *dsc,
void *arg)
{
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else if (dsc != NULL) {
+ switch (error->status) {
+ case 0:
bletiny_dsc_add(conn_handle, chr_def_handle, dsc);
- } else {
+ break;
+
+ case BLE_HS_EDONE:
console_printf("descriptor discovery successful\n");
if (bletiny_full_disc_prev_chr_def > 0) {
bletiny_disc_full_dscs(conn_handle);
}
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -828,16 +850,22 @@ static int
bletiny_on_read(uint16_t conn_handle, const struct ble_gatt_error *error,
const struct ble_gatt_attr *attr, void *arg)
{
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else if (attr != NULL) {
+ switch (error->status) {
+ case 0:
console_printf("characteristic read; conn_handle=%d "
"attr_handle=%d len=%d value=", conn_handle,
attr->handle, attr->value_len);
print_bytes(attr->value, attr->value_len);
console_printf("\n");
- } else {
+ break;
+
+ case BLE_HS_EDONE:
console_printf("characteristic read complete\n");
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -845,16 +873,20 @@ bletiny_on_read(uint16_t conn_handle, const struct ble_gatt_error *error,
static int
bletiny_on_write(uint16_t conn_handle, const struct ble_gatt_error *error,
- const struct ble_gatt_attr *attr, void *arg)
+ const struct ble_gatt_attr *attr, void *arg)
{
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else {
+ switch (error->status) {
+ case 0:
console_printf("characteristic write complete; conn_handle=%d "
"attr_handle=%d len=%d value=", conn_handle,
attr->handle, attr->value_len);
print_bytes(attr->value, attr->value_len);
console_printf("\n");
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
@@ -868,9 +900,8 @@ bletiny_on_write_reliable(uint16_t conn_handle,
{
int i;
- if (error != NULL) {
- bletiny_print_error(NULL, conn_handle, error);
- } else {
+ switch (error->status) {
+ case 0:
console_printf("characteristic write reliable complete; "
"conn_handle=%d", conn_handle);
@@ -880,38 +911,60 @@ bletiny_on_write_reliable(uint16_t conn_handle,
print_bytes(attrs[i].value, attrs[i].value_len);
}
console_printf("\n");
+ break;
+
+ default:
+ bletiny_print_error(NULL, conn_handle, error);
+ break;
}
return 0;
}
static int
-bletiny_gap_event(int event, struct ble_gap_event_ctxt *ctxt, void *arg)
+bletiny_gap_event(struct ble_gap_event *event, void *arg)
{
int conn_idx;
- switch (event) {
+ switch (event->type) {
case BLE_GAP_EVENT_CONNECT:
console_printf("connection %s; status=%d ",
- ctxt->connect.status == 0 ? "established" : "failed",
- ctxt->connect.status);
- print_conn_desc(ctxt->desc);
+ event->connect.status == 0 ? "established" : "failed",
+ event->connect.status);
+ print_conn_desc(&event->connect.conn);
- if (ctxt->connect.status == 0) {
- bletiny_conn_add(ctxt->desc);
+ if (event->connect.status == 0) {
+ bletiny_conn_add(&event->connect.conn);
}
return 0;
case BLE_GAP_EVENT_DISCONNECT:
- console_printf("disconnect; reason=%d ", ctxt->disconnect.reason);
- print_conn_desc(ctxt->desc);
+ console_printf("disconnect; reason=%d ", event->disconnect.reason);
+ print_conn_desc(&event->disconnect.conn);
- conn_idx = bletiny_conn_find_idx(ctxt->desc->conn_handle);
+ conn_idx = bletiny_conn_find_idx(event->disconnect.conn.conn_handle);
if (conn_idx != -1) {
bletiny_conn_delete_idx(conn_idx);
}
return 0;
+ case BLE_GAP_EVENT_DISC:
+ console_printf("received advertisement; event_type=%d addr_type=%d "
+ "addr=", event->disc.event_type,
+ event->disc.addr_type);
+ print_addr(event->disc.addr);
+ console_printf(" length_data=%d rssi=%d data=",
+ event->disc.length_data, event->disc.rssi);
+ print_bytes(event->disc.data, event->disc.length_data);
+ console_printf(" fields:\n");
+ bletiny_print_adv_fields(event->disc.fields);
+ console_printf("\n");
+ return 0;
+
+ case BLE_GAP_EVENT_DISC_COMPLETE:
+ console_printf("scanning finished\n");
+ return 0;
+
case BLE_GAP_EVENT_ADV_COMPLETE:
console_printf("advertising complete.\n");
return 0;
@@ -922,39 +975,39 @@ bletiny_gap_event(int event, struct ble_gap_event_ctxt *ctxt, void *arg)
case BLE_GAP_EVENT_CONN_UPDATE:
console_printf("connection updated; status=%d ",
- ctxt->conn_update.status);
- print_conn_desc(ctxt->desc);
+ event->conn_update.status);
+ print_conn_desc(&event->conn_update.conn);
return 0;
case BLE_GAP_EVENT_CONN_UPDATE_REQ:
console_printf("connection update request\n");
- *ctxt->conn_update_req.self_params =
- *ctxt->conn_update_req.peer_params;
+ *event->conn_update_req.self_params =
+ *event->conn_update_req.peer_params;
return 0;
case BLE_GAP_EVENT_PASSKEY_ACTION:
console_printf("passkey action event; action=%d",
- ctxt->passkey_action.action);
- if (ctxt->passkey_action.action == BLE_SM_IOACT_NUMCMP) {
+ event->passkey.params.action);
+ if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
console_printf(" numcmp=%lu",
- (unsigned long)ctxt->passkey_action.numcmp);
+ (unsigned long)event->passkey.params.numcmp);
}
console_printf("\n");
return 0;
case BLE_GAP_EVENT_ENC_CHANGE:
console_printf("encryption change event; status=%d ",
- ctxt->enc_change.status);
- print_conn_desc(ctxt->desc);
+ event->enc_change.status);
+ print_conn_desc(&event->enc_change.conn);
return 0;
case BLE_GAP_EVENT_NOTIFY:
console_printf("notification event; attr_handle=%d indication=%d "
"len=%d data=",
- ctxt->notify.attr_handle, ctxt->notify.indication,
- ctxt->notify.attr_len);
+ event->notify.attr_handle, event->notify.indication,
+ event->notify.attr_len);
- print_bytes(ctxt->notify.attr_data, ctxt->notify.attr_len);
+ print_bytes(event->notify.attr_data, event->notify.attr_len);
console_printf("\n");
return 0;
@@ -970,33 +1023,6 @@ bletiny_on_l2cap_update(int status, void *arg)
}
static void
-bletiny_on_scan(int event, int status, struct ble_gap_disc_desc *desc,
- void *arg)
-{
- switch (event) {
- case BLE_GAP_EVENT_DISC_SUCCESS:
- console_printf("received advertisement; event_type=%d addr_type=%d "
- "addr=", desc->event_type, desc->addr_type);
- print_addr(desc->addr);
- console_printf(" length_data=%d rssi=%d data=", desc->length_data,
- desc->rssi);
- print_bytes(desc->data, desc->length_data);
- console_printf(" fields:\n");
- bletiny_print_adv_fields(desc->fields);
- console_printf("\n");
- break;
-
- case BLE_GAP_EVENT_DISC_COMPLETE:
- console_printf("scanning finished; status=%d\n", status);
- break;
-
- default:
- assert(0);
- break;
- }
-}
-
-static void
bletiny_tx_timer_cb(void *arg)
{
int i;
@@ -1284,11 +1310,11 @@ bletiny_conn_cancel(void)
}
int
-bletiny_term_conn(uint16_t conn_handle)
+bletiny_term_conn(uint16_t conn_handle, uint8_t reason)
{
int rc;
- rc = ble_gap_terminate(conn_handle);
+ rc = ble_gap_terminate(conn_handle, reason);
return rc;
}
@@ -1308,7 +1334,7 @@ bletiny_scan(uint8_t own_addr_type, int32_t duration_ms,
int rc;
rc = ble_gap_disc(own_addr_type, duration_ms, disc_params,
- bletiny_on_scan, NULL);
+ bletiny_gap_event, NULL);
return rc;
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c8a135f/apps/bletiny/src/parse.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/parse.c b/apps/bletiny/src/parse.c
index f12ef10..77fdace 100644
--- a/apps/bletiny/src/parse.c
+++ b/apps/bletiny/src/parse.c
@@ -214,6 +214,22 @@ parse_arg_uint64(char *name, int *out_status)
return parse_arg_uint64_bounds(name, 0, UINT64_MAX, out_status);
}
+uint8_t
+parse_arg_uint8_dflt(char *name, uint8_t dflt, int *out_status)
+{
+ uint8_t val;
+ int rc;
+
+ val = parse_arg_uint8(name, &rc);
+ if (rc == ENOENT) {
+ val = dflt;
+ rc = 0;
+ }
+
+ *out_status = rc;
+ return val;
+}
+
uint16_t
parse_arg_uint16_dflt(char *name, uint16_t dflt, int *out_status)
{