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