1 /** @file 2 * @brief Bluetooth Mesh Health Server Model APIs. 3 */ 4 5 /* 6 * Copyright (c) 2017 Intel Corporation 7 * 8 * SPDX-License-Identifier: Apache-2.0 9 */ 10 #ifndef _BLE_MESH_HEALTH_SRV_H_ 11 #define _BLE_MESH_HEALTH_SRV_H_ 12 13 #include "mesh_access.h" 14 15 /** 16 * @brief Bluetooth Mesh Health Server Model 17 * @defgroup bt_mesh_health_srv Bluetooth Mesh Health Server Model 18 * @ingroup bt_mesh 19 * @{ 20 */ 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 struct bt_mesh_health_srv_cb { 27 /* Clear registered faults */ 28 void (*fault_clear)(struct bt_mesh_model *model, uint16_t company_id); 29 30 /* Run a specific test */ 31 void (*fault_test)(struct bt_mesh_model *model, uint8_t test_id, 32 uint16_t company_id); 33 34 /* Attention on */ 35 void (*attn_on)(struct bt_mesh_model *model, uint8_t time); 36 37 /* Attention off */ 38 void (*attn_off)(struct bt_mesh_model *model); 39 }; 40 41 /** @def BLE_MESH_HEALTH_PUB_DEFINE 42 * 43 * A helper to define a health publication context 44 * 45 * @param _name Name given to the publication context variable. 46 * @param _max_faults Maximum number of faults the element can have. 47 */ 48 #define BLE_MESH_HEALTH_PUB_DEFINE(_name, _max_faults) \ 49 BLE_MESH_MODEL_PUB_DEFINE(_name, NULL, (1 + 3 + (_max_faults))) 50 51 struct bt_mesh_health_test { 52 uint8_t id_count; /* Number of Health self-test ID */ 53 const uint8_t *test_ids; /* Array of Health self-test IDs */ 54 uint16_t company_id; /* Company ID used to identify the Health Fault state */ 55 uint8_t prev_test_id; /* Most currently performed test id */ 56 uint8_t curr_faults[32]; /* Array of current faults */ 57 uint8_t reg_faults[32]; /* Array of registered faults */ 58 } __attribute__((packed)); 59 60 /** Mesh Health Server Model Context */ 61 struct bt_mesh_health_srv { 62 struct bt_mesh_model *model; 63 64 /* Optional callback struct */ 65 struct bt_mesh_health_srv_cb cb; 66 67 /* Attention Timer state */ 68 struct k_delayed_work attn_timer; 69 70 /* Attention Timer start flag */ 71 bool attn_timer_start; 72 73 /* Health Server fault test */ 74 struct bt_mesh_health_test test; 75 }; 76 77 extern const struct bt_mesh_model_op bt_mesh_health_srv_op[]; 78 extern const struct bt_mesh_model_cb bt_mesh_health_srv_cb; 79 80 /** @def BLE_MESH_MODEL_HEALTH_SRV 81 * 82 * Define a new health server model. Note that this API needs to be 83 * repeated for each element which the application wants to have a 84 * health server model on. Each instance also needs a unique 85 * bt_mesh_health_srv and bt_mesh_model_pub context. 86 * 87 * @param srv Pointer to a unique struct bt_mesh_health_srv. 88 * @param pub Pointer to a unique struct bt_mesh_model_pub. 89 * 90 * @return New mesh model instance. 91 */ 92 #define BLE_MESH_MODEL_HEALTH_SRV(srv, pub) \ 93 BLE_MESH_MODEL_CB(BLE_MESH_MODEL_ID_HEALTH_SRV, \ 94 bt_mesh_health_srv_op, pub, srv, &bt_mesh_health_srv_cb) 95 96 int bt_mesh_fault_update(struct bt_mesh_elem *elem); 97 98 #ifdef __cplusplus 99 } 100 #endif 101 102 /** 103 * @} 104 */ 105 106 #endif /* __BLE_MESH_HEALTH_SRV_H */ 107