xref: /btstack/src/ble/gatt-service/scan_parameters_service_client.h (revision b3f0de517d6a490a73c880d91b683cc84b68c631)
178ae886bSMilanka Ringwald /*
278ae886bSMilanka Ringwald  * Copyright (C) 2021 BlueKitchen GmbH
378ae886bSMilanka Ringwald  *
478ae886bSMilanka Ringwald  * Redistribution and use in source and binary forms, with or without
578ae886bSMilanka Ringwald  * modification, are permitted provided that the following conditions
678ae886bSMilanka Ringwald  * are met:
778ae886bSMilanka Ringwald  *
878ae886bSMilanka Ringwald  * 1. Redistributions of source code must retain the above copyright
978ae886bSMilanka Ringwald  *    notice, this list of conditions and the following disclaimer.
1078ae886bSMilanka Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
1178ae886bSMilanka Ringwald  *    notice, this list of conditions and the following disclaimer in the
1278ae886bSMilanka Ringwald  *    documentation and/or other materials provided with the distribution.
1378ae886bSMilanka Ringwald  * 3. Neither the name of the copyright holders nor the names of
1478ae886bSMilanka Ringwald  *    contributors may be used to endorse or promote products derived
1578ae886bSMilanka Ringwald  *    from this software without specific prior written permission.
1678ae886bSMilanka Ringwald  * 4. Any redistribution, use, or modification is done solely for
1778ae886bSMilanka Ringwald  *    personal benefit and not for any commercial purpose or for
1878ae886bSMilanka Ringwald  *    monetary gain.
1978ae886bSMilanka Ringwald  *
2078ae886bSMilanka Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
2178ae886bSMilanka Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2278ae886bSMilanka Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2378ae886bSMilanka Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
2478ae886bSMilanka Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2578ae886bSMilanka Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2678ae886bSMilanka Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2778ae886bSMilanka Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2878ae886bSMilanka Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2978ae886bSMilanka Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
3078ae886bSMilanka Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3178ae886bSMilanka Ringwald  * SUCH DAMAGE.
3278ae886bSMilanka Ringwald  *
3378ae886bSMilanka Ringwald  * Please inquire about commercial licensing options at
3478ae886bSMilanka Ringwald  * [email protected]
3578ae886bSMilanka Ringwald  *
3678ae886bSMilanka Ringwald  */
3778ae886bSMilanka Ringwald 
3878ae886bSMilanka Ringwald #ifndef SCAN_PARAMAETERS_SERVICE_CLIENT_H
3978ae886bSMilanka Ringwald #define SCAN_PARAMAETERS_SERVICE_CLIENT_H
4078ae886bSMilanka Ringwald 
4178ae886bSMilanka Ringwald #include <stdint.h>
4278ae886bSMilanka Ringwald #include "btstack_defines.h"
4378ae886bSMilanka Ringwald #include "bluetooth.h"
4478ae886bSMilanka Ringwald #include "ble/gatt_client.h"
4578ae886bSMilanka Ringwald #include "btstack_linked_list.h"
4678ae886bSMilanka Ringwald 
4778ae886bSMilanka Ringwald #if defined __cplusplus
4878ae886bSMilanka Ringwald extern "C" {
4978ae886bSMilanka Ringwald #endif
5078ae886bSMilanka Ringwald 
5178ae886bSMilanka Ringwald typedef enum {
5278ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_IDLE,
5378ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE,
5478ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_SERVICE_RESULT,
5578ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_CHARACTERISTIC,
5678ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_CHARACTERISTIC_RESULT,
57*b3f0de51SMilanka Ringwald #ifdef ENABLE_TESTING_SUPPORT
58*b3f0de51SMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_CCC,
59*b3f0de51SMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_CCC,
60*b3f0de51SMilanka Ringwald #endif
61*b3f0de51SMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_CONFIGURE_NOTIFICATIONS,
62*b3f0de51SMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_NOTIFICATIONS_CONFIGURED,
63*b3f0de51SMilanka Ringwald 
6478ae886bSMilanka Ringwald     SCAN_PARAMETERS_SERVICE_CLIENT_STATE_CONNECTED
6578ae886bSMilanka Ringwald } scan_parameters_service_client_state_t;
6678ae886bSMilanka Ringwald 
6778ae886bSMilanka Ringwald 
6878ae886bSMilanka Ringwald typedef struct {
6978ae886bSMilanka Ringwald     btstack_linked_item_t item;
7078ae886bSMilanka Ringwald 
7178ae886bSMilanka Ringwald     hci_con_handle_t con_handle;
7278ae886bSMilanka Ringwald     uint16_t cid;
7378ae886bSMilanka Ringwald     scan_parameters_service_client_state_t  state;
7478ae886bSMilanka Ringwald     btstack_packet_handler_t client_handler;
7578ae886bSMilanka Ringwald 
7678ae886bSMilanka Ringwald     // service
7778ae886bSMilanka Ringwald     uint16_t start_handle;
7878ae886bSMilanka Ringwald     uint16_t end_handle;
7978ae886bSMilanka Ringwald 
8078ae886bSMilanka Ringwald     // characteristic
8178ae886bSMilanka Ringwald     uint16_t scan_interval_window_value_handle;
82*b3f0de51SMilanka Ringwald 
83*b3f0de51SMilanka Ringwald     uint16_t scan_refresh_value_handle;
84*b3f0de51SMilanka Ringwald     uint16_t scan_refresh_end_handle;
85*b3f0de51SMilanka Ringwald     uint16_t scan_refresh_properties;
86*b3f0de51SMilanka Ringwald 
8778ae886bSMilanka Ringwald     bool     scan_interval_window_value_update;
88*b3f0de51SMilanka Ringwald 
89*b3f0de51SMilanka Ringwald     gatt_client_notification_t notification_listener;
9078ae886bSMilanka Ringwald } scan_parameters_service_client_t;
9178ae886bSMilanka Ringwald 
9278ae886bSMilanka Ringwald /* API_START */
9378ae886bSMilanka Ringwald 
9478ae886bSMilanka Ringwald /**
9578ae886bSMilanka Ringwald  * @brief Initialize Scan Parameters Service.
9678ae886bSMilanka Ringwald  */
9778ae886bSMilanka Ringwald void scan_parameters_service_client_init(void);
9878ae886bSMilanka Ringwald 
9978ae886bSMilanka Ringwald /**
100*b3f0de51SMilanka Ringwald  * @brief Set Scan Parameters Service. It will update all connected devices.
101*b3f0de51SMilanka Ringwald  * @param scan_interval
102*b3f0de51SMilanka Ringwald  * @param scan_window
103*b3f0de51SMilanka Ringwald  */
104*b3f0de51SMilanka Ringwald void scan_parameters_service_client_set(uint16_t scan_interval, uint16_t scan_window);
105*b3f0de51SMilanka Ringwald 
106*b3f0de51SMilanka Ringwald /**
10778ae886bSMilanka Ringwald  * @brief Connect to Scan Parameters Service of remote device.
10878ae886bSMilanka Ringwald  *
10978ae886bSMilanka Ringwald  * The GATTSERVICE_SUBEVENT_SCAN_PARAMETERS_SERVICE_CONNECTED event completes the request.
11078ae886bSMilanka Ringwald  * Its status is set to ERROR_CODE_SUCCESS if remote service and SCAN_INTERVAL_WINDOW characteristic are found.
11178ae886bSMilanka Ringwald  * Other status codes of this event:
11278ae886bSMilanka Ringwald  * - GATT_CLIENT_IN_WRONG_STATE: client in wrong state
11378ae886bSMilanka Ringwald  * - ERROR_CODE_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE: service or characteristic not found
11478ae886bSMilanka Ringwald  * - ATT errors, see bluetooth.h
11578ae886bSMilanka Ringwald  *
11678ae886bSMilanka Ringwald  * @param con_handle
11778ae886bSMilanka Ringwald  * @param packet_handler
11878ae886bSMilanka Ringwald  * @param scan_parameters_cid
11978ae886bSMilanka Ringwald  * @return status ERROR_CODE_SUCCESS on success, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER if client with con_handle not found
12078ae886bSMilanka Ringwald  */
12178ae886bSMilanka 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);
12278ae886bSMilanka Ringwald 
12378ae886bSMilanka Ringwald /**
124*b3f0de51SMilanka Ringwald  * @brief Enable notifications
125*b3f0de51SMilanka Ringwald  * @param scan_parameters_cid
126*b3f0de51SMilanka Ringwald  * @return status ERROR_CODE_SUCCESS on success, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER if client with con_handle is not found
12778ae886bSMilanka Ringwald  */
128*b3f0de51SMilanka Ringwald uint8_t scan_parameters_service_client_enable_notifications(uint16_t scan_parameters_cid);
12978ae886bSMilanka Ringwald 
13078ae886bSMilanka Ringwald /**
13178ae886bSMilanka Ringwald  * @brief Disconnect from Scan Parameters Service.
13278ae886bSMilanka Ringwald  * @param scan_parameters_cid
13378ae886bSMilanka Ringwald  * @return status ERROR_CODE_SUCCESS on success, otherwise ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER if client with con_handle is not found
13478ae886bSMilanka Ringwald  */
13578ae886bSMilanka Ringwald uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_cid);
13678ae886bSMilanka Ringwald 
13778ae886bSMilanka Ringwald 
13878ae886bSMilanka Ringwald /**
13978ae886bSMilanka Ringwald  * @brief De-initialize Scan Parameters Service.
14078ae886bSMilanka Ringwald  */
14178ae886bSMilanka Ringwald void scan_parameters_service_client_deinit(void);
14278ae886bSMilanka Ringwald 
14378ae886bSMilanka Ringwald /* API_END */
14478ae886bSMilanka Ringwald 
14578ae886bSMilanka Ringwald #if defined __cplusplus
14678ae886bSMilanka Ringwald }
14778ae886bSMilanka Ringwald #endif
14878ae886bSMilanka Ringwald 
14978ae886bSMilanka Ringwald #endif
150