1 /*
2  * Copyright (c) 2022 Codecoup
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_IAS_H_
8 #define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_IAS_H_
9 
10 /**
11  * @brief Immediate Alert Service (IAS)
12  * @defgroup bt_ias Immediate Alert Service (IAS)
13  * @ingroup bluetooth
14  * @{
15  *
16  * [Experimental] Users should note that the APIs can change
17  * as a part of ongoing development.
18  */
19 
20 #include <zephyr/bluetooth/conn.h>
21 #include <zephyr/sys/iterable_sections.h>
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 enum bt_ias_alert_lvl {
28 	/** No alerting should be done on device */
29 	BT_IAS_ALERT_LVL_NO_ALERT,
30 
31 	/** Device shall alert */
32 	BT_IAS_ALERT_LVL_MILD_ALERT,
33 
34 	/** Device should alert in strongest possible way */
35 	BT_IAS_ALERT_LVL_HIGH_ALERT,
36 };
37 
38 /** @brief Immediate Alert Service callback structure. */
39 struct bt_ias_cb {
40 	/**
41 	 * @brief Callback function to stop alert.
42 	 *
43 	 * This callback is called when peer commands to disable alert.
44 	 */
45 	void (*no_alert)(void);
46 
47 	/**
48 	 * @brief Callback function for alert level value.
49 	 *
50 	 * This callback is called when peer commands to alert.
51 	 */
52 	void (*mild_alert)(void);
53 
54 	/**
55 	 * @brief Callback function for alert level value.
56 	 *
57 	 * This callback is called when peer commands to alert in the strongest possible way.
58 	 */
59 	void (*high_alert)(void);
60 };
61 
62 /** @brief Method for stopping alert locally
63  *
64  *  @return Zero in case of success and error code in case of error.
65  */
66 int bt_ias_local_alert_stop(void);
67 
68 /**
69  *  @brief Register a callback structure for immediate alert events.
70  *
71  *  @param _name Name of callback structure.
72  */
73 #define BT_IAS_CB_DEFINE(_name)                                                                    \
74 	static const STRUCT_SECTION_ITERABLE(bt_ias_cb, _CONCAT(bt_ias_cb_, _name))
75 
76 struct bt_ias_client_cb {
77 	/** @brief Callback function for bt_ias_discover.
78 	 *
79 	 *  This callback is called when discovery procedure is complete.
80 	 *
81 	 *  @param conn Bluetooth connection object.
82 	 *  @param err 0 on success, ATT error or negative errno otherwise
83 	 */
84 	void (*discover)(struct bt_conn *conn, int err);
85 };
86 
87 /** @brief Set alert level
88  *
89  *  @param conn Bluetooth connection object
90  *  @param bt_ias_alert_lvl Level of alert to write
91  *
92  *  @return Zero in case of success and error code in case of error.
93  */
94 int bt_ias_client_alert_write(struct bt_conn *conn, enum bt_ias_alert_lvl);
95 
96 /** @brief Discover Immediate Alert Service
97  *
98  *  @param conn Bluetooth connection object
99  *
100  *  @return Zero in case of success and error code in case of error.
101  */
102 int bt_ias_discover(struct bt_conn *conn);
103 
104 /** @brief Register Immediate Alert Client callbacks
105  *
106  *  @param cb The callback structure
107  *
108  *  @return Zero in case of success and error code in case of error.
109  */
110 int bt_ias_client_cb_register(const struct bt_ias_client_cb *cb);
111 
112 #ifdef __cplusplus
113 }
114 #endif
115 
116 /**
117  * @}
118  */
119 
120 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_IAS_H_ */
121