From bdc10744fb338ae197692713a0b48a7ccc36f566 Mon Sep 17 00:00:00 2001 From: JF Date: Sun, 26 Apr 2020 10:25:59 +0200 Subject: Add Nimble in libs directory --- .../nimble/host/util/include/host/util/util.h | 46 +++++++++++ src/libs/mynewt-nimble/nimble/host/util/pkg.yml | 29 +++++++ src/libs/mynewt-nimble/nimble/host/util/src/addr.c | 95 ++++++++++++++++++++++ src/libs/mynewt-nimble/nimble/host/util/syscfg.yml | 19 +++++ 4 files changed, 189 insertions(+) create mode 100644 src/libs/mynewt-nimble/nimble/host/util/include/host/util/util.h create mode 100644 src/libs/mynewt-nimble/nimble/host/util/pkg.yml create mode 100644 src/libs/mynewt-nimble/nimble/host/util/src/addr.c create mode 100644 src/libs/mynewt-nimble/nimble/host/util/syscfg.yml (limited to 'src/libs/mynewt-nimble/nimble/host/util') diff --git a/src/libs/mynewt-nimble/nimble/host/util/include/host/util/util.h b/src/libs/mynewt-nimble/nimble/host/util/include/host/util/util.h new file mode 100644 index 00000000..3f07c005 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/util/include/host/util/util.h @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef H_HOST_UTIL_ +#define H_HOST_UTIL_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Tries to configure the device with at least one Bluetooth address. + * Addresses are restored in a hardware-specific fashion. + * + * @param prefer_random Whether to attempt to restore a random address + * before checking if a public address has + * already been configured. + * + * @return 0 on success; + * BLE_HS_ENOADDR if the device does not have any + * available addresses. + * Other BLE host core code on error. + */ +int ble_hs_util_ensure_addr(int prefer_random); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/libs/mynewt-nimble/nimble/host/util/pkg.yml b/src/libs/mynewt-nimble/nimble/host/util/pkg.yml new file mode 100644 index 00000000..0f5f3a5d --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/util/pkg.yml @@ -0,0 +1,29 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +pkg.name: nimble/host/util +pkg.description: Supplementary utilities for the NimBLE host +pkg.author: "Apache Mynewt " +pkg.homepage: "http://mynewt.apache.org/" +pkg.keywords: + - ble + - bluetooth + +pkg.deps: + - nimble/host diff --git a/src/libs/mynewt-nimble/nimble/host/util/src/addr.c b/src/libs/mynewt-nimble/nimble/host/util/src/addr.c new file mode 100644 index 00000000..9b43d237 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/util/src/addr.c @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "host/ble_hs.h" +#include "host/util/util.h" + +#if MYNEWT_VAL(BLE_CONTROLLER) +#include "controller/ble_hw.h" +#endif + +static int +ble_hs_util_load_rand_addr(ble_addr_t *addr) +{ + /* XXX: It is unfortunate that the function to retrieve the random address + * is in the controller package. A host-only device ought to be able to + * automically restore a random address. + */ +#if MYNEWT_VAL(BLE_CONTROLLER) + int rc; + + rc = ble_hw_get_static_addr(addr); + if (rc == 0) { + return 0; + } +#endif + + return BLE_HS_ENOADDR; +} + +static int +ble_hs_util_ensure_rand_addr(void) +{ + ble_addr_t addr; + int rc; + + /* If we already have a random address, then we are done. */ + rc = ble_hs_id_copy_addr(BLE_ADDR_RANDOM, NULL, NULL); + if (rc == 0) { + return 0; + } + + /* Otherwise, try to load a random address. */ + rc = ble_hs_util_load_rand_addr(&addr); + if (rc != 0) { + return rc; + } + + /* Configure nimble to use the random address. */ + rc = ble_hs_id_set_rnd(addr.val); + if (rc != 0) { + return rc; + } + + return 0; +} + +int +ble_hs_util_ensure_addr(int prefer_random) +{ + int rc; + + if (prefer_random) { + /* Try to load a random address. */ + rc = ble_hs_util_ensure_rand_addr(); + if (rc == BLE_HS_ENOADDR) { + /* No random address; try to load a public address. */ + rc = ble_hs_id_copy_addr(BLE_ADDR_PUBLIC, NULL, NULL); + } + } else { + /* Try to load a public address. */ + rc = ble_hs_id_copy_addr(BLE_ADDR_PUBLIC, NULL, NULL); + if (rc == BLE_HS_ENOADDR) { + /* No public address; try to load a random address. */ + rc = ble_hs_util_ensure_rand_addr(); + } + } + + return rc; +} diff --git a/src/libs/mynewt-nimble/nimble/host/util/syscfg.yml b/src/libs/mynewt-nimble/nimble/host/util/syscfg.yml new file mode 100644 index 00000000..2cdd5746 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/util/syscfg.yml @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +syscfg.defs: -- cgit v1.2.3