|  | /** @file | 
|  | *  @brief Bluetooth Mesh Health Server Model APIs. | 
|  | */ | 
|  |  | 
|  | /* | 
|  | * Copyright (c) 2017 Intel Corporation | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  | #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEALTH_SRV_H_ | 
|  | #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEALTH_SRV_H_ | 
|  |  | 
|  | /** | 
|  | * @brief Bluetooth Mesh Health Server Model | 
|  | * @defgroup bt_mesh_health_srv Bluetooth Mesh Health Server Model | 
|  | * @ingroup bt_mesh | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** Callback function for the Health Server model */ | 
|  | struct bt_mesh_health_srv_cb { | 
|  | /** @brief Callback for fetching current faults. | 
|  | * | 
|  | *  Fault values may either be defined by the specification, or by a | 
|  | *  vendor. Vendor specific faults should be interpreted in the context | 
|  | *  of the accompanying Company ID. Specification defined faults may be | 
|  | *  reported for any Company ID, and the same fault may be presented | 
|  | *  for multiple Company IDs. | 
|  | * | 
|  | *  All faults shall be associated with at least one Company ID, | 
|  | *  representing the device vendor or some other vendor whose vendor | 
|  | *  specific fault values are used. | 
|  | * | 
|  | *  If there are multiple Company IDs that have active faults, | 
|  | *  return only the faults associated with one of them at the time. | 
|  | *  To report faults for multiple Company IDs, interleave which Company | 
|  | *  ID is reported for each call. | 
|  | * | 
|  | *  @param model       Health Server model instance to get faults of. | 
|  | *  @param test_id     Test ID response buffer. | 
|  | *  @param company_id  Company ID response buffer. | 
|  | *  @param faults      Array to fill with current faults. | 
|  | *  @param fault_count The number of faults the fault array can fit. | 
|  | *                     Should be updated to reflect the number of faults | 
|  | *                     copied into the array. | 
|  | * | 
|  | *  @return 0 on success, or (negative) error code otherwise. | 
|  | */ | 
|  | int (*fault_get_cur)(struct bt_mesh_model *model, u8_t *test_id, | 
|  | u16_t *company_id, u8_t *faults, | 
|  | u8_t *fault_count); | 
|  |  | 
|  | /** @brief Callback for fetching all registered faults. | 
|  | * | 
|  | *  Registered faults are all past and current faults since the last | 
|  | *  call to @c fault_clear. Only faults associated with the given | 
|  | *  Company ID should be reported. | 
|  | * | 
|  | *  Fault values may either be defined by the specification, or by a | 
|  | *  vendor. Vendor specific faults should be interpreted in the context | 
|  | *  of the accompanying Company ID. Specification defined faults may be | 
|  | *  reported for any Company ID, and the same fault may be presented | 
|  | *  for multiple Company IDs. | 
|  | * | 
|  | *  @param model       Health Server model instance to get faults of. | 
|  | *  @param company_id  Company ID to get faults for. | 
|  | *  @param test_id     Test ID response buffer. | 
|  | *  @param faults      Array to fill with registered faults. | 
|  | *  @param fault_count The number of faults the fault array can fit. | 
|  | *                     Should be updated to reflect the number of faults | 
|  | *                     copied into the array. | 
|  | * | 
|  | *  @return 0 on success, or (negative) error code otherwise. | 
|  | */ | 
|  | int (*fault_get_reg)(struct bt_mesh_model *model, u16_t company_id, | 
|  | u8_t *test_id, u8_t *faults, | 
|  | u8_t *fault_count); | 
|  |  | 
|  | /** @brief Clear all registered faults associated with the given Company | 
|  | * ID. | 
|  | * | 
|  | *  @param model      Health Server model instance to clear faults of. | 
|  | *  @param company_id Company ID to clear faults for. | 
|  | * | 
|  | *  @return 0 on success, or (negative) error code otherwise. | 
|  | */ | 
|  | int (*fault_clear)(struct bt_mesh_model *model, u16_t company_id); | 
|  |  | 
|  | /** @brief Run a self-test. | 
|  | * | 
|  | *  The Health server may support up to 256 self-tests for each Company | 
|  | *  ID. The behavior for all test IDs are vendor specific, and should be | 
|  | *  interpreted based on the accompanying Company ID. Test failures | 
|  | *  should result in changes to the fault array. | 
|  | * | 
|  | *  @param model      Health Server model instance to run test for. | 
|  | *  @param test_id    Test ID to run. | 
|  | *  @param company_id Company ID to run test for. | 
|  | * | 
|  | *  @return 0 if the test execution was started successfully, or | 
|  | * (negative) error code otherwise. Note that the fault array will not | 
|  | * be reported back to the client if the test execution didn't start. | 
|  | */ | 
|  | int (*fault_test)(struct bt_mesh_model *model, u8_t test_id, | 
|  | u16_t company_id); | 
|  |  | 
|  | /** @brief Start calling attention to the device. | 
|  | * | 
|  | *  The attention state is used to map an element address to a | 
|  | *  physical device. When this callback is called, the device should | 
|  | *  start some physical procedure meant to call attention to itself, | 
|  | *  like blinking, buzzing, vibrating or moving. If there are multiple | 
|  | *  Health server instances on the device, the attention state should | 
|  | *  also help identify the specific element the server is in. | 
|  | * | 
|  | *  The attention calling behavior should continue until the @c attn_off | 
|  | *  callback is called. | 
|  | * | 
|  | *  @param model Health Server model to start the attention state of. | 
|  | */ | 
|  | void (*attn_on)(struct bt_mesh_model *model); | 
|  |  | 
|  | /** @brief Stop the attention state. | 
|  | * | 
|  | *  Any physical activity started to call attention to the device should | 
|  | *  be stopped. | 
|  | * | 
|  | *  @param model | 
|  | */ | 
|  | void (*attn_off)(struct bt_mesh_model *model); | 
|  | }; | 
|  |  | 
|  | /** @def BT_MESH_HEALTH_PUB_DEFINE | 
|  | * | 
|  | *  A helper to define a health publication context | 
|  | * | 
|  | *  @param _name       Name given to the publication context variable. | 
|  | *  @param _max_faults Maximum number of faults the element can have. | 
|  | */ | 
|  | #define BT_MESH_HEALTH_PUB_DEFINE(_name, _max_faults) \ | 
|  | BT_MESH_MODEL_PUB_DEFINE(_name, NULL, (1 + 3 + (_max_faults))) | 
|  |  | 
|  | /** Mesh Health Server Model Context */ | 
|  | struct bt_mesh_health_srv { | 
|  | /** Composition data model entry pointer. */ | 
|  | struct bt_mesh_model *model; | 
|  |  | 
|  | /** Optional callback struct */ | 
|  | const struct bt_mesh_health_srv_cb *cb; | 
|  |  | 
|  | /** Attention Timer state */ | 
|  | struct k_delayed_work attn_timer; | 
|  | }; | 
|  |  | 
|  | /** @def BT_MESH_MODEL_HEALTH_SRV | 
|  | * | 
|  | *  Define a new health server model. Note that this API needs to be | 
|  | *  repeated for each element that the application wants to have a | 
|  | *  health server model on. Each instance also needs a unique | 
|  | *  bt_mesh_health_srv and bt_mesh_model_pub context. | 
|  | * | 
|  | *  @param srv Pointer to a unique struct bt_mesh_health_srv. | 
|  | *  @param pub Pointer to a unique struct bt_mesh_model_pub. | 
|  | * | 
|  | *  @return New mesh model instance. | 
|  | */ | 
|  | #define BT_MESH_MODEL_HEALTH_SRV(srv, pub)                                     \ | 
|  | BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_HEALTH_SRV, bt_mesh_health_srv_op,   \ | 
|  | pub, srv, &bt_mesh_health_srv_cb) | 
|  |  | 
|  | /** @brief Notify the stack that the fault array state of the given element has | 
|  | *  changed. | 
|  | * | 
|  | *  This prompts the Health server on this element to publish the current fault | 
|  | *  array if periodic publishing is disabled. | 
|  | * | 
|  | *  @param elem Element to update the fault state of. | 
|  | * | 
|  | *  @return 0 on success, or (negative) error code otherwise. | 
|  | */ | 
|  | int bt_mesh_fault_update(struct bt_mesh_elem *elem); | 
|  |  | 
|  | /** @cond INTERNAL_HIDDEN */ | 
|  | extern const struct bt_mesh_model_op bt_mesh_health_srv_op[]; | 
|  | extern const struct bt_mesh_model_cb bt_mesh_health_srv_cb; | 
|  | /** @endcond */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @} | 
|  | */ | 
|  |  | 
|  | #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEALTH_SRV_H_ */ |