xref: /btstack/src/ble/gatt-service/scan_parameters_service_client.h (revision 78ae886b05c3548330154c3839b12bf1a5c6c3ed)
1*78ae886bSMilanka Ringwald /*
2*78ae886bSMilanka Ringwald  * Copyright (C) 2021 BlueKitchen GmbH
3*78ae886bSMilanka Ringwald  *
4*78ae886bSMilanka Ringwald  * Redistribution and use in source and binary forms, with or without
5*78ae886bSMilanka Ringwald  * modification, are permitted provided that the following conditions
6*78ae886bSMilanka Ringwald  * are met:
7*78ae886bSMilanka Ringwald  *
8*78ae886bSMilanka Ringwald  * 1. Redistributions of source code must retain the above copyright
9*78ae886bSMilanka Ringwald  *    notice, this list of conditions and the following disclaimer.
10*78ae886bSMilanka Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*78ae886bSMilanka Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*78ae886bSMilanka Ringwald  *    documentation and/or other materials provided with the distribution.
13*78ae886bSMilanka Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*78ae886bSMilanka Ringwald  *    contributors may be used to endorse or promote products derived
15*78ae886bSMilanka Ringwald  *    from this software without specific prior written permission.
16*78ae886bSMilanka Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*78ae886bSMilanka Ringwald  *    personal benefit and not for any commercial purpose or for
18*78ae886bSMilanka Ringwald  *    monetary gain.
19*78ae886bSMilanka Ringwald  *
20*78ae886bSMilanka Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*78ae886bSMilanka Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*78ae886bSMilanka Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*78ae886bSMilanka Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24*78ae886bSMilanka Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*78ae886bSMilanka Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*78ae886bSMilanka Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*78ae886bSMilanka Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*78ae886bSMilanka Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*78ae886bSMilanka Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*78ae886bSMilanka Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*78ae886bSMilanka Ringwald  * SUCH DAMAGE.
32*78ae886bSMilanka Ringwald  *
33*78ae886bSMilanka Ringwald  * Please inquire about commercial licensing options at
34*78ae886bSMilanka Ringwald  * [email protected]
35*78ae886bSMilanka Ringwald  *
36*78ae886bSMilanka Ringwald  */
37*78ae886bSMilanka Ringwald 
38*78ae886bSMilanka Ringwald #ifndef SCAN_PARAMAETERS_SERVICE_CLIENT_H
39*78ae886bSMilanka Ringwald #define SCAN_PARAMAETERS_SERVICE_CLIENT_H
40*78ae886bSMilanka Ringwald 
41*78ae886bSMilanka Ringwald #include <stdint.h>
42*78ae886bSMilanka Ringwald #include "btstack_defines.h"
43*78ae886bSMilanka Ringwald #include "bluetooth.h"
44*78ae886bSMilanka Ringwald #include "ble/gatt_client.h"
45*78ae886bSMilanka Ringwald #include "btstack_linked_list.h"
46*78ae886bSMilanka Ringwald 
47*78ae886bSMilanka Ringwald #if defined __cplusplus
48*78ae886bSMilanka Ringwald extern "C" {
49*78ae886bSMilanka Ringwald #endif
50*78ae886bSMilanka Ringwald 
51*78ae886bSMilanka Ringwald typedef enum {
52*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_IDLE,
53*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE,
54*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_SERVICE_RESULT,
55*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_CHARACTERISTIC,
56*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_CHARACTERISTIC_RESULT,
57*78ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_CONNECTED
58*78ae886bSMilanka Ringwald } scan_parameters_service_client_state_t;
59*78ae886bSMilanka Ringwald 
60*78ae886bSMilanka Ringwald 
61*78ae886bSMilanka Ringwald typedef struct {
62*78ae886bSMilanka Ringwald     btstack_linked_item_t item;
63*78ae886bSMilanka Ringwald 
64*78ae886bSMilanka Ringwald     hci_con_handle_t con_handle;
65*78ae886bSMilanka Ringwald     uint16_t cid;
66*78ae886bSMilanka Ringwald     scan_parameters_service_client_state_t  state;
67*78ae886bSMilanka Ringwald     btstack_packet_handler_t client_handler;
68*78ae886bSMilanka Ringwald 
69*78ae886bSMilanka Ringwald     // service
70*78ae886bSMilanka Ringwald     uint16_t start_handle;
71*78ae886bSMilanka Ringwald     uint16_t end_handle;
72*78ae886bSMilanka Ringwald 
73*78ae886bSMilanka Ringwald     // characteristic
74*78ae886bSMilanka Ringwald     uint16_t scan_interval_window_value_handle;
75*78ae886bSMilanka Ringwald     bool     scan_interval_window_value_update;
76*78ae886bSMilanka Ringwald } scan_parameters_service_client_t;
77*78ae886bSMilanka Ringwald 
78*78ae886bSMilanka Ringwald /* API_START */
79*78ae886bSMilanka Ringwald 
80*78ae886bSMilanka Ringwald /**
81*78ae886bSMilanka Ringwald  * @brief Initialize Scan Parameters Service.
82*78ae886bSMilanka Ringwald  */
83*78ae886bSMilanka Ringwald void scan_parameters_service_client_init(void);
84*78ae886bSMilanka Ringwald 
85*78ae886bSMilanka Ringwald /**
86*78ae886bSMilanka Ringwald  * @brief Connect to Scan Parameters Service of remote device.
87*78ae886bSMilanka Ringwald  *
88*78ae886bSMilanka Ringwald  * The GATTSERVICE_SUBEVENT_SCAN_PARAMETERS_SERVICE_CONNECTED event completes the request.
89*78ae886bSMilanka Ringwald  * Its status is set to ERROR_CODE_SUCCESS if remote service and SCAN_INTERVAL_WINDOW characteristic are found.
90*78ae886bSMilanka Ringwald  * Other status codes of this event:
91*78ae886bSMilanka Ringwald  * - GATT_CLIENT_IN_WRONG_STATE: client in wrong state
92*78ae886bSMilanka Ringwald  * - ERROR_CODE_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE: service or characteristic not found
93*78ae886bSMilanka Ringwald  * - ATT errors, see bluetooth.h
94*78ae886bSMilanka Ringwald  *
95*78ae886bSMilanka Ringwald  * @param con_handle
96*78ae886bSMilanka Ringwald  * @param packet_handler
97*78ae886bSMilanka Ringwald  * @param scan_parameters_cid
98*78ae886bSMilanka Ringwald  * @return status ERROR_CODE_SUCCESS on success, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER if client with con_handle not found
99*78ae886bSMilanka Ringwald  */
100*78ae886bSMilanka Ringwald uint8_t scan_parameters_service_client_connect(hci_con_handle_t con_handle,  btstack_packet_handler_t packet_handler, uint16_t * scan_parameters_cid);
101*78ae886bSMilanka Ringwald 
102*78ae886bSMilanka Ringwald /**
103*78ae886bSMilanka Ringwald  * @brief Set Scan Parameters Service. It will update all connected devices.
104*78ae886bSMilanka Ringwald  * @param scan_interval
105*78ae886bSMilanka Ringwald  * @param scan_window
106*78ae886bSMilanka Ringwald  */
107*78ae886bSMilanka Ringwald void scan_parameters_service_client_set(uint16_t scan_interval, uint16_t scan_window);
108*78ae886bSMilanka Ringwald 
109*78ae886bSMilanka Ringwald /**
110*78ae886bSMilanka Ringwald  * @brief Disconnect from Scan Parameters Service.
111*78ae886bSMilanka Ringwald  * @param scan_parameters_cid
112*78ae886bSMilanka Ringwald  * @return status ERROR_CODE_SUCCESS on success, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER if client with con_handle is not found
113*78ae886bSMilanka Ringwald  */
114*78ae886bSMilanka Ringwald uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_cid);
115*78ae886bSMilanka Ringwald 
116*78ae886bSMilanka Ringwald 
117*78ae886bSMilanka Ringwald /**
118*78ae886bSMilanka Ringwald  * @brief De-initialize Scan Parameters Service.
119*78ae886bSMilanka Ringwald  */
120*78ae886bSMilanka Ringwald void scan_parameters_service_client_deinit(void);
121*78ae886bSMilanka Ringwald 
122*78ae886bSMilanka Ringwald /* API_END */
123*78ae886bSMilanka Ringwald 
124*78ae886bSMilanka Ringwald #if defined __cplusplus
125*78ae886bSMilanka Ringwald }
126*78ae886bSMilanka Ringwald #endif
127*78ae886bSMilanka Ringwald 
128*78ae886bSMilanka Ringwald #endif
129