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