xref: /btstack/test/mock/mock_gatt_client.h (revision 500d8180fa32d9bb205d49465fb0f7fa20250313)
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