/*
|
* 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.
|
*/
|
|
/* Bluetooth: Mesh Generic OnOff, Generic Level, Lighting & Vendor Models
|
*
|
* Copyright (c) 2018 Vikrant More
|
*
|
* SPDX-License-Identifier: Apache-2.0
|
*/
|
|
#include "console/console.h"
|
|
#include "common.h"
|
#include "ble_mesh.h"
|
#include "device_composition.h"
|
|
#define OOB_AUTH_ENABLE 1
|
|
#ifdef OOB_AUTH_ENABLE
|
|
static int output_number(bt_mesh_output_action_t action, uint32_t number)
|
{
|
printk("OOB Number: %lu\n", number);
|
return 0;
|
}
|
|
static int output_string(const char *str)
|
{
|
printk("OOB String: %s\n", str);
|
return 0;
|
}
|
|
#endif
|
|
static void prov_complete(uint16_t net_idx, uint16_t addr)
|
{
|
printk("Local node provisioned, primary address 0x%04x\n", addr);
|
}
|
|
static void prov_reset(void)
|
{
|
bt_mesh_prov_enable(BT_MESH_PROV_ADV | BT_MESH_PROV_GATT);
|
}
|
|
static uint8_t dev_uuid[16] = MYNEWT_VAL(BLE_MESH_DEV_UUID);
|
|
static const struct bt_mesh_prov prov = {
|
.uuid = dev_uuid,
|
|
#ifdef OOB_AUTH_ENABLE
|
|
.output_size = 6,
|
.output_actions = BT_MESH_DISPLAY_NUMBER | BT_MESH_DISPLAY_STRING,
|
.output_number = output_number,
|
.output_string = output_string,
|
|
#endif
|
|
.complete = prov_complete,
|
.reset = prov_reset,
|
};
|
|
void blemesh_on_reset(int reason)
|
{
|
BLE_HS_LOG(ERROR, "Resetting state; reason=%d\n", reason);
|
}
|
|
void blemesh_on_sync(void)
|
{
|
int err;
|
ble_addr_t addr;
|
|
console_printf("Bluetooth initialized\n");
|
|
/* Use NRPA */
|
err = ble_hs_id_gen_rnd(1, &addr);
|
assert(err == 0);
|
err = ble_hs_id_set_rnd(addr.val);
|
assert(err == 0);
|
|
err = bt_mesh_init(addr.type, &prov, &comp);
|
if (err) {
|
console_printf("Initializing mesh failed (err %d)\n", err);
|
return;
|
}
|
|
if (IS_ENABLED(CONFIG_SETTINGS)) {
|
settings_load();
|
}
|
|
if (bt_mesh_is_provisioned()) {
|
console_printf("Mesh network restored from flash\n");
|
}
|
|
bt_mesh_prov_enable(BT_MESH_PROV_GATT | BT_MESH_PROV_ADV);
|
|
console_printf("Mesh initialized\n");
|
|
bt_initialized();
|
}
|