| /* |
| * Copyright (c) 2023 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/bluetooth/mesh.h> |
| |
| #include "net.h" |
| #include "statistic.h" |
| |
| static struct bt_mesh_statistic stat; |
| |
| void bt_mesh_stat_get(struct bt_mesh_statistic *st) |
| { |
| memcpy(st, &stat, sizeof(struct bt_mesh_statistic)); |
| } |
| |
| void bt_mesh_stat_reset(void) |
| { |
| memset(&stat, 0, sizeof(struct bt_mesh_statistic)); |
| } |
| |
| void bt_mesh_stat_planned_count(struct bt_mesh_adv_ctx *ctx) |
| { |
| if (ctx->tag == BT_MESH_ADV_TAG_LOCAL) { |
| stat.tx_local_planned++; |
| } else if (ctx->tag == BT_MESH_ADV_TAG_RELAY) { |
| stat.tx_adv_relay_planned++; |
| } else if (ctx->tag == BT_MESH_ADV_TAG_FRIEND) { |
| stat.tx_friend_planned++; |
| } |
| } |
| |
| void bt_mesh_stat_succeeded_count(struct bt_mesh_adv_ctx *ctx) |
| { |
| if (ctx->tag == BT_MESH_ADV_TAG_LOCAL) { |
| stat.tx_local_succeeded++; |
| } else if (ctx->tag == BT_MESH_ADV_TAG_RELAY) { |
| stat.tx_adv_relay_succeeded++; |
| } else if (ctx->tag == BT_MESH_ADV_TAG_FRIEND) { |
| stat.tx_friend_succeeded++; |
| } |
| } |
| |
| void bt_mesh_stat_rx(enum bt_mesh_net_if net_if) |
| { |
| switch (net_if) { |
| case BT_MESH_NET_IF_ADV: |
| stat.rx_adv++; |
| break; |
| case BT_MESH_NET_IF_LOCAL: |
| stat.rx_loopback++; |
| break; |
| case BT_MESH_NET_IF_PROXY: |
| case BT_MESH_NET_IF_PROXY_CFG: |
| stat.rx_proxy++; |
| break; |
| default: |
| stat.rx_uknown++; |
| break; |
| } |
| } |