10f7fd6c1SMilanka Ringwald /* 20f7fd6c1SMilanka Ringwald * Copyright (C) 2021 BlueKitchen GmbH 30f7fd6c1SMilanka Ringwald * 40f7fd6c1SMilanka Ringwald * Redistribution and use in source and binary forms, with or without 50f7fd6c1SMilanka Ringwald * modification, are permitted provided that the following conditions 60f7fd6c1SMilanka Ringwald * are met: 70f7fd6c1SMilanka Ringwald * 80f7fd6c1SMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 90f7fd6c1SMilanka Ringwald * notice, this list of conditions and the following disclaimer. 100f7fd6c1SMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 110f7fd6c1SMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 120f7fd6c1SMilanka Ringwald * documentation and/or other materials provided with the distribution. 130f7fd6c1SMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 140f7fd6c1SMilanka Ringwald * contributors may be used to endorse or promote products derived 150f7fd6c1SMilanka Ringwald * from this software without specific prior written permission. 160f7fd6c1SMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 170f7fd6c1SMilanka Ringwald * personal benefit and not for any commercial purpose or for 180f7fd6c1SMilanka Ringwald * monetary gain. 190f7fd6c1SMilanka Ringwald * 200f7fd6c1SMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 210f7fd6c1SMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 220f7fd6c1SMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 230f7fd6c1SMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 240f7fd6c1SMilanka Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 250f7fd6c1SMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 260f7fd6c1SMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 270f7fd6c1SMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 280f7fd6c1SMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 290f7fd6c1SMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 300f7fd6c1SMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 310f7fd6c1SMilanka Ringwald * SUCH DAMAGE. 320f7fd6c1SMilanka Ringwald * 330f7fd6c1SMilanka Ringwald * Please inquire about commercial licensing options at 340f7fd6c1SMilanka Ringwald * [email protected] 350f7fd6c1SMilanka Ringwald * 360f7fd6c1SMilanka Ringwald */ 370f7fd6c1SMilanka Ringwald #ifndef MOCK_GATT_CLIENT_H 380f7fd6c1SMilanka Ringwald #define MOCK_GATT_CLIENT_H 390f7fd6c1SMilanka Ringwald 400f7fd6c1SMilanka Ringwald #include <stdint.h> 410f7fd6c1SMilanka Ringwald 420f7fd6c1SMilanka Ringwald #if defined __cplusplus 430f7fd6c1SMilanka Ringwald extern "C" { 440f7fd6c1SMilanka Ringwald #endif 450f7fd6c1SMilanka Ringwald 460f7fd6c1SMilanka Ringwald #include "ble/gatt_client.h" 470f7fd6c1SMilanka Ringwald 487da2c1baSMilanka Ringwald typedef struct { 497da2c1baSMilanka Ringwald btstack_linked_item_t item; 5076cdba3eSMilanka Ringwald uint16_t start_group_handle; 5176cdba3eSMilanka Ringwald uint16_t end_group_handle; 527da2c1baSMilanka Ringwald uint16_t uuid16; 537dbac955SMatthias Ringwald uint8_t uuid128[16]; 547e693ad3SMilanka Ringwald 557da2c1baSMilanka Ringwald btstack_linked_list_t characteristics; 567da2c1baSMilanka Ringwald } mock_gatt_client_service_t; 577da2c1baSMilanka Ringwald 587da2c1baSMilanka Ringwald typedef struct { 597da2c1baSMilanka Ringwald btstack_linked_item_t item; 6076cdba3eSMilanka Ringwald uint16_t start_handle; 617da2c1baSMilanka Ringwald uint16_t value_handle; 6276cdba3eSMilanka Ringwald uint16_t end_handle; 6376cdba3eSMilanka Ringwald uint16_t properties; 647da2c1baSMilanka Ringwald uint16_t uuid16; 657dbac955SMatthias Ringwald uint8_t uuid128[16]; 667da2c1baSMilanka Ringwald btstack_linked_list_t descriptors; 6776cdba3eSMilanka Ringwald 6876cdba3eSMilanka Ringwald uint8_t * value_buffer; 6976cdba3eSMilanka Ringwald uint16_t value_len; 7076cdba3eSMilanka Ringwald 717e693ad3SMilanka Ringwald uint8_t notification_status_code; 7276cdba3eSMilanka Ringwald gatt_client_notification_t * notification; 737da2c1baSMilanka Ringwald } mock_gatt_client_characteristic_t; 747da2c1baSMilanka Ringwald 757da2c1baSMilanka Ringwald typedef struct { 767da2c1baSMilanka Ringwald btstack_linked_item_t item; 7776cdba3eSMilanka Ringwald uint16_t handle; 787da2c1baSMilanka Ringwald uint16_t uuid16; 797dbac955SMatthias Ringwald uint8_t uuid128[16]; 8076cdba3eSMilanka Ringwald 8176cdba3eSMilanka Ringwald uint8_t * value_buffer; 8276cdba3eSMilanka Ringwald uint16_t value_len; 837da2c1baSMilanka Ringwald } mock_gatt_client_characteristic_descriptor_t; 847da2c1baSMilanka Ringwald 857da2c1baSMilanka Ringwald 860f7fd6c1SMilanka Ringwald void mock_gatt_client_reset(void); 870f7fd6c1SMilanka Ringwald 887e693ad3SMilanka Ringwald void mock_gatt_client_emit_dummy_event(void); 897e693ad3SMilanka Ringwald void mock_gatt_client_emit_complete(uint8_t status); 907e693ad3SMilanka Ringwald 91ec1a0daeSMilanka Ringwald void mock_gatt_client_set_att_error_discover_primary_services(void); 92ec1a0daeSMilanka Ringwald void mock_gatt_client_set_att_error_discover_characteristics(void); 93e92f7a17SMilanka Ringwald void mock_gatt_client_set_att_error_read_value_characteristics(void); 94ec1a0daeSMilanka Ringwald void mock_gatt_client_set_att_error_discover_characteristic_descriptors(void); 95ec1a0daeSMilanka Ringwald 967e693ad3SMilanka Ringwald void mock_gatt_client_enable_notification(mock_gatt_client_characteristic_t * characteristic, bool command_allowed); 977dbac955SMatthias Ringwald void mock_gatt_client_send_notification(mock_gatt_client_characteristic_t * characteristic, const uint8_t * value_buffer, uint16_t value_len); 987dbac955SMatthias Ringwald void mock_gatt_client_send_notification_with_handle(mock_gatt_client_characteristic_t * characteristic, uint16_t value_handle, const uint8_t * value_buffer, uint16_t value_len); 997dbac955SMatthias Ringwald void mock_gatt_client_send_notification(mock_gatt_client_characteristic_t * characteristic, const uint8_t * value_buffer, uint16_t value_len); 1007dbac955SMatthias Ringwald void mock_gatt_client_send_indication_with_handle(mock_gatt_client_characteristic_t * characteristic, uint16_t value_handle, const uint8_t * value_buffer, uint16_t value_len); 1017e693ad3SMilanka Ringwald 1027e693ad3SMilanka Ringwald 10376cdba3eSMilanka Ringwald mock_gatt_client_service_t * mock_gatt_client_add_primary_service_uuid16(uint16_t service_uuid); 1047dbac955SMatthias Ringwald mock_gatt_client_service_t * mock_gatt_client_add_primary_service_uuid128(const uint8_t * service_uuid); 10576cdba3eSMilanka Ringwald mock_gatt_client_characteristic_t * mock_gatt_client_add_characteristic_uuid16(uint16_t characteristic_uuid, uint16_t properties); 1067dbac955SMatthias Ringwald mock_gatt_client_characteristic_t * mock_gatt_client_add_characteristic_uuid128(const uint8_t * characteristic_uuid, uint16_t properties); 10776cdba3eSMilanka Ringwald mock_gatt_client_characteristic_descriptor_t * mock_gatt_client_add_characteristic_descriptor_uuid16(uint16_t descriptor_uuid); 1087dbac955SMatthias Ringwald mock_gatt_client_characteristic_descriptor_t * mock_gatt_client_add_characteristic_descriptor_uuid128(const uint8_t * descriptor_uuid); 10976cdba3eSMilanka Ringwald 1107e693ad3SMilanka Ringwald void mock_gatt_client_set_descriptor_characteristic_value(mock_gatt_client_characteristic_descriptor_t * descriptor, uint8_t * value_buffer, uint16_t value_len); 1117e693ad3SMilanka Ringwald void mock_gatt_client_set_characteristic_value(mock_gatt_client_characteristic_t * characteristic, uint8_t * value_buffer, uint16_t value_len); 1127da2c1baSMilanka Ringwald 113af770404SMilanka Ringwald void mock_gatt_client_run(void); 1147e693ad3SMilanka Ringwald void mock_gatt_client_run_once(void); 1157e693ad3SMilanka Ringwald 1167e693ad3SMilanka Ringwald 11776cdba3eSMilanka Ringwald void mock_gatt_client_dump_services(void); 1180f7fd6c1SMilanka Ringwald 119*500d8180SMilanka Ringwald void mock_hci_emit_event(uint8_t * packet, uint16_t size); 120*500d8180SMilanka Ringwald 121*500d8180SMilanka Ringwald void mock_hci_emit_le_connection_complete(uint8_t address_type, const bd_addr_t address, hci_con_handle_t con_handle, uint8_t status); 122*500d8180SMilanka Ringwald void mock_hci_emit_connection_encrypted(hci_con_handle_t con_handle, uint8_t encrypted); 123*500d8180SMilanka Ringwald void mock_hci_emit_disconnection_complete(hci_con_handle_t con_handle, uint8_t reason); 124*500d8180SMilanka Ringwald 1250f7fd6c1SMilanka Ringwald #if defined __cplusplus 1260f7fd6c1SMilanka Ringwald } 1270f7fd6c1SMilanka Ringwald #endif 1280f7fd6c1SMilanka Ringwald 1290f7fd6c1SMilanka Ringwald #endif 1300f7fd6c1SMilanka Ringwald 131