xref: /nrf52832-nimble/packages/NimBLE-latest/apps/blemesh_shell/src/main.c (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*
2*042d53a7SEvalZero  * Licensed to the Apache Software Foundation (ASF) under one
3*042d53a7SEvalZero  * or more contributor license agreements.  See the NOTICE file
4*042d53a7SEvalZero  * distributed with this work for additional information
5*042d53a7SEvalZero  * regarding copyright ownership.  The ASF licenses this file
6*042d53a7SEvalZero  * to you under the Apache License, Version 2.0 (the
7*042d53a7SEvalZero  * "License"); you may not use this file except in compliance
8*042d53a7SEvalZero  * with the License.  You may obtain a copy of the License at
9*042d53a7SEvalZero  *
10*042d53a7SEvalZero  *  http://www.apache.org/licenses/LICENSE-2.0
11*042d53a7SEvalZero  *
12*042d53a7SEvalZero  * Unless required by applicable law or agreed to in writing,
13*042d53a7SEvalZero  * software distributed under the License is distributed on an
14*042d53a7SEvalZero  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15*042d53a7SEvalZero  * KIND, either express or implied.  See the License for the
16*042d53a7SEvalZero  * specific language governing permissions and limitations
17*042d53a7SEvalZero  * under the License.
18*042d53a7SEvalZero  */
19*042d53a7SEvalZero 
20*042d53a7SEvalZero #include <assert.h>
21*042d53a7SEvalZero #include "os/mynewt.h"
22*042d53a7SEvalZero #include "mesh/mesh.h"
23*042d53a7SEvalZero #include "console/console.h"
24*042d53a7SEvalZero #include "hal/hal_system.h"
25*042d53a7SEvalZero #include "hal/hal_gpio.h"
26*042d53a7SEvalZero #include "bsp/bsp.h"
27*042d53a7SEvalZero #include "shell/shell.h"
28*042d53a7SEvalZero 
29*042d53a7SEvalZero /* BLE */
30*042d53a7SEvalZero #include "nimble/ble.h"
31*042d53a7SEvalZero #include "host/ble_hs.h"
32*042d53a7SEvalZero #include "services/gap/ble_svc_gap.h"
33*042d53a7SEvalZero #include "mesh/glue.h"
34*042d53a7SEvalZero #include "mesh/testing.h"
35*042d53a7SEvalZero 
36*042d53a7SEvalZero 
net_recv_ev(uint8_t ttl,uint8_t ctl,uint16_t src,uint16_t dst,const void * payload,size_t payload_len)37*042d53a7SEvalZero void net_recv_ev(uint8_t ttl, uint8_t ctl, uint16_t src, uint16_t dst,
38*042d53a7SEvalZero                  const void *payload, size_t payload_len)
39*042d53a7SEvalZero {
40*042d53a7SEvalZero     console_printf("Received net packet: ttl 0x%02x ctl 0x%02x src 0x%04x "
41*042d53a7SEvalZero                    "dst 0x%04x " "payload_len %d\n", ttl, ctl, src, dst,
42*042d53a7SEvalZero                    payload_len);
43*042d53a7SEvalZero }
44*042d53a7SEvalZero 
model_bound_cb(u16_t addr,struct bt_mesh_model * model,u16_t key_idx)45*042d53a7SEvalZero static void model_bound_cb(u16_t addr, struct bt_mesh_model *model,
46*042d53a7SEvalZero                            u16_t key_idx)
47*042d53a7SEvalZero {
48*042d53a7SEvalZero     console_printf("Model bound: remote addr 0x%04x key_idx 0x%04x model %p\n",
49*042d53a7SEvalZero                    addr, key_idx, model);
50*042d53a7SEvalZero }
51*042d53a7SEvalZero 
model_unbound_cb(u16_t addr,struct bt_mesh_model * model,u16_t key_idx)52*042d53a7SEvalZero static void model_unbound_cb(u16_t addr, struct bt_mesh_model *model,
53*042d53a7SEvalZero                              u16_t key_idx)
54*042d53a7SEvalZero {
55*042d53a7SEvalZero     console_printf("Model unbound: remote addr 0x%04x key_idx 0x%04x "
56*042d53a7SEvalZero                    "model %p\n", addr, key_idx, model);
57*042d53a7SEvalZero }
58*042d53a7SEvalZero 
invalid_bearer_cb(u8_t opcode)59*042d53a7SEvalZero static void invalid_bearer_cb(u8_t opcode)
60*042d53a7SEvalZero {
61*042d53a7SEvalZero     console_printf("Invalid bearer: opcode 0x%02x\n", opcode);
62*042d53a7SEvalZero }
63*042d53a7SEvalZero 
incomp_timer_exp_cb(void)64*042d53a7SEvalZero static void incomp_timer_exp_cb(void)
65*042d53a7SEvalZero {
66*042d53a7SEvalZero     console_printf("Incomplete timer expired\n");
67*042d53a7SEvalZero }
68*042d53a7SEvalZero 
69*042d53a7SEvalZero static struct bt_test_cb bt_test_cb = {
70*042d53a7SEvalZero     .mesh_net_recv = net_recv_ev,
71*042d53a7SEvalZero     .mesh_model_bound = model_bound_cb,
72*042d53a7SEvalZero     .mesh_model_unbound = model_unbound_cb,
73*042d53a7SEvalZero     .mesh_prov_invalid_bearer = invalid_bearer_cb,
74*042d53a7SEvalZero     .mesh_trans_incomp_timer_exp = incomp_timer_exp_cb,
75*042d53a7SEvalZero };
76*042d53a7SEvalZero 
77*042d53a7SEvalZero static void
blemesh_on_reset(int reason)78*042d53a7SEvalZero blemesh_on_reset(int reason)
79*042d53a7SEvalZero {
80*042d53a7SEvalZero     BLE_HS_LOG(ERROR, "Resetting state; reason=%d\n", reason);
81*042d53a7SEvalZero }
82*042d53a7SEvalZero 
83*042d53a7SEvalZero static void
blemesh_on_sync(void)84*042d53a7SEvalZero blemesh_on_sync(void)
85*042d53a7SEvalZero {
86*042d53a7SEvalZero     console_printf("Bluetooth initialized\n");
87*042d53a7SEvalZero 
88*042d53a7SEvalZero     shell_register_default_module("mesh");
89*042d53a7SEvalZero 
90*042d53a7SEvalZero     if (IS_ENABLED(CONFIG_BT_TESTING)) {
91*042d53a7SEvalZero         bt_test_cb_register(&bt_test_cb);
92*042d53a7SEvalZero     }
93*042d53a7SEvalZero }
94*042d53a7SEvalZero 
95*042d53a7SEvalZero int
main(void)96*042d53a7SEvalZero main(void)
97*042d53a7SEvalZero {
98*042d53a7SEvalZero     /* Initialize OS */
99*042d53a7SEvalZero     sysinit();
100*042d53a7SEvalZero 
101*042d53a7SEvalZero     /* Initialize the NimBLE host configuration. */
102*042d53a7SEvalZero     ble_hs_cfg.reset_cb = blemesh_on_reset;
103*042d53a7SEvalZero     ble_hs_cfg.sync_cb = blemesh_on_sync;
104*042d53a7SEvalZero     ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
105*042d53a7SEvalZero 
106*042d53a7SEvalZero     hal_gpio_init_out(LED_2, 0);
107*042d53a7SEvalZero 
108*042d53a7SEvalZero     while (1) {
109*042d53a7SEvalZero         os_eventq_run(os_eventq_dflt_get());
110*042d53a7SEvalZero     }
111*042d53a7SEvalZero     return 0;
112*042d53a7SEvalZero }
113