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 --- .../bas/include/services/bas/ble_svc_bas.h | 31 +++++ .../mynewt-nimble/nimble/host/services/bas/pkg.yml | 34 ++++++ .../nimble/host/services/bas/src/ble_svc_bas.c | 127 +++++++++++++++++++++ .../nimble/host/services/bas/syscfg.yml | 34 ++++++ 4 files changed, 226 insertions(+) create mode 100644 src/libs/mynewt-nimble/nimble/host/services/bas/include/services/bas/ble_svc_bas.h create mode 100644 src/libs/mynewt-nimble/nimble/host/services/bas/pkg.yml create mode 100644 src/libs/mynewt-nimble/nimble/host/services/bas/src/ble_svc_bas.c create mode 100644 src/libs/mynewt-nimble/nimble/host/services/bas/syscfg.yml (limited to 'src/libs/mynewt-nimble/nimble/host/services/bas') diff --git a/src/libs/mynewt-nimble/nimble/host/services/bas/include/services/bas/ble_svc_bas.h b/src/libs/mynewt-nimble/nimble/host/services/bas/include/services/bas/ble_svc_bas.h new file mode 100644 index 00000000..2706b5d3 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/services/bas/include/services/bas/ble_svc_bas.h @@ -0,0 +1,31 @@ +/** + * 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_BLE_SVC_BAS_ +#define H_BLE_SVC_BAS_ + +/* 16 Bit Battery Service UUID */ +#define BLE_SVC_BAS_UUID16 0x180F + +/* 16 Bit Battery Service Characteristic UUIDs */ +#define BLE_SVC_BAS_CHR_UUID16_BATTERY_LEVEL 0x2A19 + +int ble_svc_bas_battery_level_set(uint8_t level); + +#endif diff --git a/src/libs/mynewt-nimble/nimble/host/services/bas/pkg.yml b/src/libs/mynewt-nimble/nimble/host/services/bas/pkg.yml new file mode 100644 index 00000000..afdc6942 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/services/bas/pkg.yml @@ -0,0 +1,34 @@ +# +# 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/services/bas +pkg.description: Battery Service +pkg.author: "Apache Mynewt " +pkg.homepage: "http://mynewt.apache.org/" +pkg.keywords: + - ble + - bluetooth + - bas + - nimble + +pkg.deps: + - nimble/host + +pkg.init: + ble_svc_bas_init: 'MYNEWT_VAL(BLE_SVC_BAS_SYSINIT_STAGE)' diff --git a/src/libs/mynewt-nimble/nimble/host/services/bas/src/ble_svc_bas.c b/src/libs/mynewt-nimble/nimble/host/services/bas/src/ble_svc_bas.c new file mode 100644 index 00000000..631519cf --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/services/bas/src/ble_svc_bas.c @@ -0,0 +1,127 @@ +/** + * 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 +#include + +#include "sysinit/sysinit.h" +#include "syscfg/syscfg.h" +#include "host/ble_hs.h" +#include "host/ble_gap.h" +#include "services/bas/ble_svc_bas.h" + +/* Characteristic value handles */ +#if MYNEWT_VAL(BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE) > 0 +static uint16_t ble_svc_bas_battery_handle; +#endif + +/* Battery level */ +uint8_t ble_svc_bas_battery_level; + +/* Access function */ +static int +ble_svc_bas_access(uint16_t conn_handle, uint16_t attr_handle, + struct ble_gatt_access_ctxt *ctxt, void *arg); + +static const struct ble_gatt_svc_def ble_svc_bas_defs[] = { + { + /*** Battery Service. */ + .type = BLE_GATT_SVC_TYPE_PRIMARY, + .uuid = BLE_UUID16_DECLARE(BLE_SVC_BAS_UUID16), + .characteristics = (struct ble_gatt_chr_def[]) { { + /*** Battery level characteristic */ + .uuid = BLE_UUID16_DECLARE(BLE_SVC_BAS_CHR_UUID16_BATTERY_LEVEL), + .access_cb = ble_svc_bas_access, +#if MYNEWT_VAL(BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE) > 0 + .val_handle = &ble_svc_bas_battery_handle, +#endif + .flags = BLE_GATT_CHR_F_READ | +#if MYNEWT_VAL(BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE) > 0 + BLE_GATT_CHR_F_NOTIFY | +#endif + MYNEWT_VAL(BLE_SVC_BAS_BATTERY_LEVEL_READ_PERM), + }, { + 0, /* No more characteristics in this service. */ + } }, + }, + + { + 0, /* No more services. */ + }, +}; + +/** + * BAS access function + */ +static int +ble_svc_bas_access(uint16_t conn_handle, uint16_t attr_handle, + struct ble_gatt_access_ctxt *ctxt, + void *arg) +{ + uint16_t uuid16 = ble_uuid_u16(ctxt->chr->uuid); + int rc; + + switch (uuid16) { + case BLE_SVC_BAS_CHR_UUID16_BATTERY_LEVEL: + assert(ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR); + rc = os_mbuf_append(ctxt->om, &ble_svc_bas_battery_level, + sizeof ble_svc_bas_battery_level); + return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; + + default: + assert(0); + return BLE_ATT_ERR_UNLIKELY; + } +} + + +/** + * Set the battery level, must be between 0 and 100. + * If greater than 100, it will be silently set to 100. + */ +int +ble_svc_bas_battery_level_set(uint8_t level) { + if (level > 100) + level = 100; + if (ble_svc_bas_battery_level != level) { + ble_svc_bas_battery_level = level; +#if MYNEWT_VAL(BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE) > 0 + ble_gatts_chr_updated(ble_svc_bas_battery_handle); +#endif + } + return 0; +} + +/** + * Initialize the Battery Service. + */ +void +ble_svc_bas_init(void) +{ + int rc; + + /* Ensure this function only gets called by sysinit. */ + SYSINIT_ASSERT_ACTIVE(); + + rc = ble_gatts_count_cfg(ble_svc_bas_defs); + SYSINIT_PANIC_ASSERT(rc == 0); + + rc = ble_gatts_add_svcs(ble_svc_bas_defs); + SYSINIT_PANIC_ASSERT(rc == 0); +} diff --git a/src/libs/mynewt-nimble/nimble/host/services/bas/syscfg.yml b/src/libs/mynewt-nimble/nimble/host/services/bas/syscfg.yml new file mode 100644 index 00000000..279930f1 --- /dev/null +++ b/src/libs/mynewt-nimble/nimble/host/services/bas/syscfg.yml @@ -0,0 +1,34 @@ +# 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: + BLE_SVC_BAS_BATTERY_LEVEL_READ_PERM: + description: > + Defines permissions for reading "Battery Level" characteristics. Can + be zero to allow read without extra permissions or combination of: + BLE_GATT_CHR_F_READ_ENC + BLE_GATT_CHR_F_READ_AUTHEN + BLE_GATT_CHR_F_READ_AUTHOR + value: 0 + BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE: + description: > + Set to 1 to support notification or 0 to disable it. + value: 1 + BLE_SVC_BAS_SYSINIT_STAGE: + description: > + Sysinit stage for the battery level service. + value: 303 -- cgit v1.2.3