12531c97eSMatthias Ringwald /* 22531c97eSMatthias Ringwald * Copyright (C) 2014 BlueKitchen GmbH 32531c97eSMatthias Ringwald * 42531c97eSMatthias Ringwald * Redistribution and use in source and binary forms, with or without 52531c97eSMatthias Ringwald * modification, are permitted provided that the following conditions 62531c97eSMatthias Ringwald * are met: 72531c97eSMatthias Ringwald * 82531c97eSMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 92531c97eSMatthias Ringwald * notice, this list of conditions and the following disclaimer. 102531c97eSMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 112531c97eSMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 122531c97eSMatthias Ringwald * documentation and/or other materials provided with the distribution. 132531c97eSMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 142531c97eSMatthias Ringwald * contributors may be used to endorse or promote products derived 152531c97eSMatthias Ringwald * from this software without specific prior written permission. 162531c97eSMatthias Ringwald * 4. Any redistribution, use, or modification is done solely for 172531c97eSMatthias Ringwald * personal benefit and not for any commercial purpose or for 182531c97eSMatthias Ringwald * monetary gain. 192531c97eSMatthias Ringwald * 202531c97eSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 212531c97eSMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 222531c97eSMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 232531c97eSMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 242531c97eSMatthias Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 252531c97eSMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 262531c97eSMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 272531c97eSMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 282531c97eSMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 292531c97eSMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 302531c97eSMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 312531c97eSMatthias Ringwald * SUCH DAMAGE. 322531c97eSMatthias Ringwald * 332531c97eSMatthias Ringwald * Please inquire about commercial licensing options at 342531c97eSMatthias Ringwald * [email protected] 352531c97eSMatthias Ringwald * 362531c97eSMatthias Ringwald */ 372531c97eSMatthias Ringwald 382531c97eSMatthias Ringwald /* 392531c97eSMatthias Ringwald * hci_cmd.c 402531c97eSMatthias Ringwald * 412531c97eSMatthias Ringwald * Created by Matthias Ringwald on 7/23/09. 422531c97eSMatthias Ringwald */ 432531c97eSMatthias Ringwald 442531c97eSMatthias Ringwald #include "daemon_cmds.h" 452531c97eSMatthias Ringwald #include "hci.h" 462531c97eSMatthias Ringwald 472531c97eSMatthias Ringwald // calculate combined ogf/ocf value 482531c97eSMatthias Ringwald #define OPCODE(ogf, ocf) (ocf | ogf << 10) 492531c97eSMatthias Ringwald 502531c97eSMatthias Ringwald // BTstack commands 512531c97eSMatthias Ringwald const hci_cmd_t btstack_get_state = { 522531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_GET_STATE), "" 532531c97eSMatthias Ringwald }; 542531c97eSMatthias Ringwald 552531c97eSMatthias Ringwald /** 562531c97eSMatthias Ringwald * @param power_mode (0 = off, 1 = on) 572531c97eSMatthias Ringwald */ 582531c97eSMatthias Ringwald const hci_cmd_t btstack_set_power_mode = { 592531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_SET_POWER_MODE), "1" 602531c97eSMatthias Ringwald }; 612531c97eSMatthias Ringwald 622531c97eSMatthias Ringwald /** 632531c97eSMatthias Ringwald * @param acl_capture_mode (0 = off, 1 = on) 642531c97eSMatthias Ringwald */ 652531c97eSMatthias Ringwald const hci_cmd_t btstack_set_acl_capture_mode = { 662531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_SET_ACL_CAPTURE_MODE), "1" 672531c97eSMatthias Ringwald }; 682531c97eSMatthias Ringwald 692531c97eSMatthias Ringwald const hci_cmd_t btstack_get_version = { 702531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_GET_VERSION), "" 712531c97eSMatthias Ringwald }; 722531c97eSMatthias Ringwald 732531c97eSMatthias Ringwald const hci_cmd_t btstack_get_system_bluetooth_enabled = { 742531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_GET_SYSTEM_BLUETOOTH_ENABLED), "" 752531c97eSMatthias Ringwald }; 762531c97eSMatthias Ringwald 772531c97eSMatthias Ringwald /** 782531c97eSMatthias Ringwald * @param bluetooth_enabled_flag (0 = off, 1 = on, only used by btstack config) 792531c97eSMatthias Ringwald */ 802531c97eSMatthias Ringwald const hci_cmd_t btstack_set_system_bluetooth_enabled = { 812531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_SET_SYSTEM_BLUETOOTH_ENABLED), "1" 822531c97eSMatthias Ringwald }; 832531c97eSMatthias Ringwald 842531c97eSMatthias Ringwald /** 852531c97eSMatthias Ringwald * @param discoverable_flag (0 = off, 1 = on) 862531c97eSMatthias Ringwald */ 872531c97eSMatthias Ringwald const hci_cmd_t btstack_set_discoverable = { 882531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_SET_DISCOVERABLE), "1" 892531c97eSMatthias Ringwald }; 902531c97eSMatthias Ringwald 912531c97eSMatthias Ringwald /** 922531c97eSMatthias Ringwald * @param bluetooth_enabled_flag (0 = off, 1 = on, only used by btstack config) 932531c97eSMatthias Ringwald */ 942531c97eSMatthias Ringwald const hci_cmd_t btstack_set_bluetooth_enabled = { 952531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, BTSTACK_SET_BLUETOOTH_ENABLED), "1" 962531c97eSMatthias Ringwald }; 972531c97eSMatthias Ringwald 982531c97eSMatthias Ringwald /** 992531c97eSMatthias Ringwald * @param bd_addr (48) 1002531c97eSMatthias Ringwald * @param psm (16) 1012531c97eSMatthias Ringwald */ 1022531c97eSMatthias Ringwald const hci_cmd_t l2cap_create_channel_cmd = { 1032531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_CREATE_CHANNEL), "B2" 1042531c97eSMatthias Ringwald }; 1052531c97eSMatthias Ringwald 1062531c97eSMatthias Ringwald /** 1072531c97eSMatthias Ringwald * @param bd_addr (48) 1082531c97eSMatthias Ringwald * @param psm (16) 1092531c97eSMatthias Ringwald * @param mtu (16) 1102531c97eSMatthias Ringwald */ 1112531c97eSMatthias Ringwald const hci_cmd_t l2cap_create_channel_mtu_cmd = { 1122531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_CREATE_CHANNEL_MTU), "B22" 1132531c97eSMatthias Ringwald // @param bd_addr(48), psm (16), mtu (16) 1142531c97eSMatthias Ringwald }; 1152531c97eSMatthias Ringwald 1162531c97eSMatthias Ringwald /** 1172531c97eSMatthias Ringwald * @param channel (16) 1182531c97eSMatthias Ringwald * @param reason (16) 1192531c97eSMatthias Ringwald */ 1202531c97eSMatthias Ringwald const hci_cmd_t l2cap_disconnect_cmd = { 1212531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_DISCONNECT), "21" 1222531c97eSMatthias Ringwald }; 1232531c97eSMatthias Ringwald 1242531c97eSMatthias Ringwald /** 1252531c97eSMatthias Ringwald * @param psm (16) 1262531c97eSMatthias Ringwald * @param mtu (16) 1272531c97eSMatthias Ringwald */ 1282531c97eSMatthias Ringwald const hci_cmd_t l2cap_register_service_cmd = { 1292531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_REGISTER_SERVICE), "22" 1302531c97eSMatthias Ringwald }; 1312531c97eSMatthias Ringwald 1322531c97eSMatthias Ringwald /** 1332531c97eSMatthias Ringwald * @param psm (16) 1342531c97eSMatthias Ringwald */ 1352531c97eSMatthias Ringwald const hci_cmd_t l2cap_unregister_service_cmd = { 1362531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_UNREGISTER_SERVICE), "2" 1372531c97eSMatthias Ringwald }; 1382531c97eSMatthias Ringwald 1392531c97eSMatthias Ringwald /** 1402531c97eSMatthias Ringwald * @param source_cid (16) 1412531c97eSMatthias Ringwald */ 1422531c97eSMatthias Ringwald const hci_cmd_t l2cap_accept_connection_cmd = { 1432531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_ACCEPT_CONNECTION), "2" 1442531c97eSMatthias Ringwald }; 1452531c97eSMatthias Ringwald 1462531c97eSMatthias Ringwald /** 1472531c97eSMatthias Ringwald * @param source_cid (16) 148*7ef6a7bbSMatthias Ringwald * @param reason (deprecated) 1492531c97eSMatthias Ringwald */ 1502531c97eSMatthias Ringwald const hci_cmd_t l2cap_decline_connection_cmd = { 1512531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, L2CAP_DECLINE_CONNECTION), "21" 1522531c97eSMatthias Ringwald }; 1532531c97eSMatthias Ringwald 1542531c97eSMatthias Ringwald 1552531c97eSMatthias Ringwald /** 1562531c97eSMatthias Ringwald * @param service_record 1572531c97eSMatthias Ringwald */ 1582531c97eSMatthias Ringwald const hci_cmd_t sdp_register_service_record_cmd = { 1592531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, SDP_REGISTER_SERVICE_RECORD), "S" 1602531c97eSMatthias Ringwald }; 1612531c97eSMatthias Ringwald 1622531c97eSMatthias Ringwald /** 1632531c97eSMatthias Ringwald * @param service_record_handle 1642531c97eSMatthias Ringwald */ 1652531c97eSMatthias Ringwald const hci_cmd_t sdp_unregister_service_record_cmd = { 1662531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, SDP_UNREGISTER_SERVICE_RECORD), "4" 1672531c97eSMatthias Ringwald }; 1682531c97eSMatthias Ringwald 1692531c97eSMatthias Ringwald /** 1702531c97eSMatthias Ringwald * @param bd_addr 1712531c97eSMatthias Ringwald * @param service_search_pattern 1722531c97eSMatthias Ringwald */ 1732531c97eSMatthias Ringwald const hci_cmd_t sdp_client_query_rfcomm_services_cmd = { 1742531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, SDP_CLIENT_QUERY_RFCOMM_SERVICES), "BS" 1752531c97eSMatthias Ringwald }; 1762531c97eSMatthias Ringwald 1772531c97eSMatthias Ringwald /** 1782531c97eSMatthias Ringwald * @param bd_addr 1792531c97eSMatthias Ringwald * @param service_search_pattern 1802531c97eSMatthias Ringwald * @param attribute_ID_list 1812531c97eSMatthias Ringwald */ 1822531c97eSMatthias Ringwald const hci_cmd_t sdp_client_query_services_cmd = { 1832531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, SDP_CLIENT_QUERY_SERVICES), "BSS" 1842531c97eSMatthias Ringwald }; 1852531c97eSMatthias Ringwald 1862531c97eSMatthias Ringwald /** 1872531c97eSMatthias Ringwald * @param bd_addr 1882531c97eSMatthias Ringwald * @param server_channel 1892531c97eSMatthias Ringwald */ 1902531c97eSMatthias Ringwald const hci_cmd_t rfcomm_create_channel_cmd = { 1912531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_CREATE_CHANNEL), "B1" 1922531c97eSMatthias Ringwald }; 1932531c97eSMatthias Ringwald 1942531c97eSMatthias Ringwald /** 1952531c97eSMatthias Ringwald * @param bd_addr 1962531c97eSMatthias Ringwald * @param server_channel 1972531c97eSMatthias Ringwald * @param mtu 1982531c97eSMatthias Ringwald * @param credits 1992531c97eSMatthias Ringwald */ 2002531c97eSMatthias Ringwald const hci_cmd_t rfcomm_create_channel_with_initial_credits_cmd = { 2012531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_CREATE_CHANNEL_WITH_CREDITS), "B121" 2022531c97eSMatthias Ringwald }; 2032531c97eSMatthias Ringwald 2042531c97eSMatthias Ringwald /** 2052531c97eSMatthias Ringwald * @param rfcomm_cid 2062531c97eSMatthias Ringwald * @param credits 2072531c97eSMatthias Ringwald */ 2082531c97eSMatthias Ringwald const hci_cmd_t rfcomm_grants_credits_cmd = { 2092531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_GRANT_CREDITS), "21" 2102531c97eSMatthias Ringwald }; 2112531c97eSMatthias Ringwald 2122531c97eSMatthias Ringwald /** 2132531c97eSMatthias Ringwald * @param rfcomm_cid 2142531c97eSMatthias Ringwald * @param reason 2152531c97eSMatthias Ringwald */ 2162531c97eSMatthias Ringwald const hci_cmd_t rfcomm_disconnect_cmd = { 2172531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_DISCONNECT), "21" 2182531c97eSMatthias Ringwald }; 2192531c97eSMatthias Ringwald 2202531c97eSMatthias Ringwald /** 2212531c97eSMatthias Ringwald * @param server_channel 2222531c97eSMatthias Ringwald * @param mtu 2232531c97eSMatthias Ringwald */ 2242531c97eSMatthias Ringwald const hci_cmd_t rfcomm_register_service_cmd = { 2252531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_REGISTER_SERVICE), "12" 2262531c97eSMatthias Ringwald }; 2272531c97eSMatthias Ringwald 2282531c97eSMatthias Ringwald /** 2292531c97eSMatthias Ringwald * @param server_channel 2302531c97eSMatthias Ringwald * @param mtu 2312531c97eSMatthias Ringwald * @param initial_credits 2322531c97eSMatthias Ringwald */ 2332531c97eSMatthias Ringwald const hci_cmd_t rfcomm_register_service_with_initial_credits_cmd = { 2342531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_REGISTER_SERVICE_WITH_CREDITS), "121" 2352531c97eSMatthias Ringwald }; 2362531c97eSMatthias Ringwald 2372531c97eSMatthias Ringwald /** 2382531c97eSMatthias Ringwald * @param service_channel 2392531c97eSMatthias Ringwald */ 2402531c97eSMatthias Ringwald const hci_cmd_t rfcomm_unregister_service_cmd = { 2412531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_UNREGISTER_SERVICE), "2" 2422531c97eSMatthias Ringwald }; 2432531c97eSMatthias Ringwald 2442531c97eSMatthias Ringwald /** 2452531c97eSMatthias Ringwald * @param source_cid 2462531c97eSMatthias Ringwald */ 2472531c97eSMatthias Ringwald const hci_cmd_t rfcomm_accept_connection_cmd = { 2482531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_ACCEPT_CONNECTION), "2" 2492531c97eSMatthias Ringwald }; 2502531c97eSMatthias Ringwald 2512531c97eSMatthias Ringwald 2522531c97eSMatthias Ringwald /** 2532531c97eSMatthias Ringwald * @param source_cid 2542531c97eSMatthias Ringwald * @param reason 2552531c97eSMatthias Ringwald */ 2562531c97eSMatthias Ringwald const hci_cmd_t rfcomm_decline_connection_cmd = { 2572531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_DECLINE_CONNECTION), "21" 2582531c97eSMatthias Ringwald }; 2592531c97eSMatthias Ringwald 2602531c97eSMatthias Ringwald // request persistent rfcomm channel number for named service 2612531c97eSMatthias Ringwald /** 2622531c97eSMatthias Ringwald * @param named_service 2632531c97eSMatthias Ringwald */ 2642531c97eSMatthias Ringwald const hci_cmd_t rfcomm_persistent_channel_for_service_cmd = { 2652531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, RFCOMM_PERSISTENT_CHANNEL), "N" 2662531c97eSMatthias Ringwald }; 2672531c97eSMatthias Ringwald 2682531c97eSMatthias Ringwald /** 2692531c97eSMatthias Ringwald * @param handle 2702531c97eSMatthias Ringwald */ 2712531c97eSMatthias Ringwald const hci_cmd_t gap_disconnect_cmd = { 2722531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_DISCONNECT), "H" 2732531c97eSMatthias Ringwald }; 2742531c97eSMatthias Ringwald 2752531c97eSMatthias Ringwald /** 2762531c97eSMatthias Ringwald */ 2772531c97eSMatthias Ringwald const hci_cmd_t gap_le_scan_start = { 2782531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_LE_SCAN_START), "" 2792531c97eSMatthias Ringwald }; 2802531c97eSMatthias Ringwald 2812531c97eSMatthias Ringwald /** 2822531c97eSMatthias Ringwald */ 2832531c97eSMatthias Ringwald const hci_cmd_t gap_le_scan_stop = { 2842531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_LE_SCAN_STOP), "" 2852531c97eSMatthias Ringwald }; 2862531c97eSMatthias Ringwald 2872531c97eSMatthias Ringwald /** 2882531c97eSMatthias Ringwald * @param scan_type 2892531c97eSMatthias Ringwald * @param scan_interval 2902531c97eSMatthias Ringwald * @param scan_window 2912531c97eSMatthias Ringwald */ 2922531c97eSMatthias Ringwald const hci_cmd_t gap_le_set_scan_parameters = { 2932531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_LE_SET_SCAN_PARAMETERS), "122" 2942531c97eSMatthias Ringwald }; 2952531c97eSMatthias Ringwald 2962531c97eSMatthias Ringwald /** 2972531c97eSMatthias Ringwald * @param peer_address_type 2982531c97eSMatthias Ringwald * @param peer_address 2992531c97eSMatthias Ringwald */ 3002531c97eSMatthias Ringwald const hci_cmd_t gap_le_connect_cmd = { 3012531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_LE_CONNECT), "1B" 3022531c97eSMatthias Ringwald }; 3032531c97eSMatthias Ringwald 3042531c97eSMatthias Ringwald /** 3052531c97eSMatthias Ringwald * @param peer_address_type 3062531c97eSMatthias Ringwald * @param peer_address 3072531c97eSMatthias Ringwald */ 3082531c97eSMatthias Ringwald const hci_cmd_t gap_le_connect_cancel_cmd = { 3092531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GAP_LE_CONNECT_CANCEL), "" 3102531c97eSMatthias Ringwald }; 3112531c97eSMatthias Ringwald 3122531c97eSMatthias Ringwald /** 3132531c97eSMatthias Ringwald * @param handle 3142531c97eSMatthias Ringwald */ 3152531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_primary_services_cmd = { 3162531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_ALL_PRIMARY_SERVICES), "H" 3172531c97eSMatthias Ringwald }; 3182531c97eSMatthias Ringwald 3192531c97eSMatthias Ringwald /** 3202531c97eSMatthias Ringwald * @param handle 3212531c97eSMatthias Ringwald * @param uuid16 3222531c97eSMatthias Ringwald */ 3232531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_primary_services_by_uuid16_cmd = { 3242531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_PRIMARY_SERVICES_BY_UUID16), "H2" 3252531c97eSMatthias Ringwald }; 3262531c97eSMatthias Ringwald 3272531c97eSMatthias Ringwald /** 3282531c97eSMatthias Ringwald * @param handle 3292531c97eSMatthias Ringwald * @param uuid128 3302531c97eSMatthias Ringwald */ 3312531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_primary_services_by_uuid128_cmd = { 3322531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_PRIMARY_SERVICES_BY_UUID128), "HU" 3332531c97eSMatthias Ringwald }; 3342531c97eSMatthias Ringwald 3352531c97eSMatthias Ringwald /** 3362531c97eSMatthias Ringwald * @param handle 3372531c97eSMatthias Ringwald * @param service 3382531c97eSMatthias Ringwald */ 3392531c97eSMatthias Ringwald const hci_cmd_t gatt_find_included_services_for_service_cmd = { 3402531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_FIND_INCLUDED_SERVICES_FOR_SERVICE), "HX" 3412531c97eSMatthias Ringwald }; 3422531c97eSMatthias Ringwald 3432531c97eSMatthias Ringwald /** 3442531c97eSMatthias Ringwald * @param handle 3452531c97eSMatthias Ringwald * @param service 3462531c97eSMatthias Ringwald */ 3472531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_characteristics_for_service_cmd = { 3482531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_CHARACTERISTICS_FOR_SERVICE), "HX" 3492531c97eSMatthias Ringwald }; 3502531c97eSMatthias Ringwald 3512531c97eSMatthias Ringwald /** 3522531c97eSMatthias Ringwald * @param handle 3532531c97eSMatthias Ringwald * @param service 3542531c97eSMatthias Ringwald * @param uuid128 3552531c97eSMatthias Ringwald */ 3562531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_characteristics_for_service_by_uuid128_cmd = { 3572531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_CHARACTERISTICS_FOR_SERVICE_BY_UUID128), "HXU" 3582531c97eSMatthias Ringwald }; 3592531c97eSMatthias Ringwald 3602531c97eSMatthias Ringwald /** 3612531c97eSMatthias Ringwald * @param handle 3622531c97eSMatthias Ringwald * @param characteristic 3632531c97eSMatthias Ringwald */ 3642531c97eSMatthias Ringwald const hci_cmd_t gatt_discover_characteristic_descriptors_cmd = { 3652531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_DISCOVER_CHARACTERISTIC_DESCRIPTORS), "HY" 3662531c97eSMatthias Ringwald }; 3672531c97eSMatthias Ringwald 3682531c97eSMatthias Ringwald /** 3692531c97eSMatthias Ringwald * @param handle 3702531c97eSMatthias Ringwald * @param characteristic 3712531c97eSMatthias Ringwald */ 3722531c97eSMatthias Ringwald const hci_cmd_t gatt_read_value_of_characteristic_cmd = { 3732531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_READ_VALUE_OF_CHARACTERISTIC), "HY" 3742531c97eSMatthias Ringwald }; 3752531c97eSMatthias Ringwald 3762531c97eSMatthias Ringwald /** 3772531c97eSMatthias Ringwald * @param handle 3782531c97eSMatthias Ringwald * @param characteristic 3792531c97eSMatthias Ringwald */ 3802531c97eSMatthias Ringwald const hci_cmd_t gatt_read_long_value_of_characteristic_cmd = { 3812531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_READ_LONG_VALUE_OF_CHARACTERISTIC), "HY" 3822531c97eSMatthias Ringwald }; 3832531c97eSMatthias Ringwald 3842531c97eSMatthias Ringwald /** 3852531c97eSMatthias Ringwald * @param handle 3862531c97eSMatthias Ringwald * @param characteristic 3872531c97eSMatthias Ringwald * @param data_length 3882531c97eSMatthias Ringwald * @param data 3892531c97eSMatthias Ringwald */ 3902531c97eSMatthias Ringwald const hci_cmd_t gatt_write_value_of_characteristic_without_response_cmd = { 3912531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_VALUE_OF_CHARACTERISTIC_WITHOUT_RESPONSE), "HYLV" 3922531c97eSMatthias Ringwald }; 3932531c97eSMatthias Ringwald 3942531c97eSMatthias Ringwald /** 3952531c97eSMatthias Ringwald * @param handle 3962531c97eSMatthias Ringwald * @param characteristic 3972531c97eSMatthias Ringwald * @param data_length 3982531c97eSMatthias Ringwald * @param data 3992531c97eSMatthias Ringwald */ 4002531c97eSMatthias Ringwald const hci_cmd_t gatt_write_value_of_characteristic_cmd = { 4012531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_VALUE_OF_CHARACTERISTIC), "HYLV" 4022531c97eSMatthias Ringwald }; 4032531c97eSMatthias Ringwald 4042531c97eSMatthias Ringwald /** 4052531c97eSMatthias Ringwald * @param handle 4062531c97eSMatthias Ringwald * @param characteristic 4072531c97eSMatthias Ringwald * @param data_length 4082531c97eSMatthias Ringwald * @param data 4092531c97eSMatthias Ringwald */ 4102531c97eSMatthias Ringwald const hci_cmd_t gatt_write_long_value_of_characteristic_cmd = { 4112531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_LONG_VALUE_OF_CHARACTERISTIC), "HYLV" 4122531c97eSMatthias Ringwald }; 4132531c97eSMatthias Ringwald 4142531c97eSMatthias Ringwald /** 4152531c97eSMatthias Ringwald * @param handle 4162531c97eSMatthias Ringwald * @param characteristic 4172531c97eSMatthias Ringwald * @param data_length 4182531c97eSMatthias Ringwald * @param data 4192531c97eSMatthias Ringwald */ 4202531c97eSMatthias Ringwald const hci_cmd_t gatt_reliable_write_long_value_of_characteristic_cmd = { 4212531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_RELIABLE_WRITE_LONG_VALUE_OF_CHARACTERISTIC), "HYLV" 4222531c97eSMatthias Ringwald }; 4232531c97eSMatthias Ringwald 4242531c97eSMatthias Ringwald /** 4252531c97eSMatthias Ringwald * @param handle 4262531c97eSMatthias Ringwald * @param descriptor 4272531c97eSMatthias Ringwald */ 4282531c97eSMatthias Ringwald const hci_cmd_t gatt_read_characteristic_descriptor_cmd = { 4292531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_READ_CHARACTERISTIC_DESCRIPTOR), "HZ" 4302531c97eSMatthias Ringwald }; 4312531c97eSMatthias Ringwald 4322531c97eSMatthias Ringwald /** 4332531c97eSMatthias Ringwald * @param handle 4342531c97eSMatthias Ringwald * @param descriptor 4352531c97eSMatthias Ringwald */ 4362531c97eSMatthias Ringwald const hci_cmd_t gatt_read_long_characteristic_descriptor_cmd = { 4372531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_READ_LONG_CHARACTERISTIC_DESCRIPTOR), "HZ" 4382531c97eSMatthias Ringwald }; 4392531c97eSMatthias Ringwald 4402531c97eSMatthias Ringwald /** 4412531c97eSMatthias Ringwald * @param handle 4422531c97eSMatthias Ringwald * @param descriptor 4432531c97eSMatthias Ringwald * @param data_length 4442531c97eSMatthias Ringwald * @param data 4452531c97eSMatthias Ringwald */ 4462531c97eSMatthias Ringwald const hci_cmd_t gatt_write_characteristic_descriptor_cmd = { 4472531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_CHARACTERISTIC_DESCRIPTOR), "HZLV" 4482531c97eSMatthias Ringwald }; 4492531c97eSMatthias Ringwald 4502531c97eSMatthias Ringwald /** 4512531c97eSMatthias Ringwald * @param handle 4522531c97eSMatthias Ringwald * @param descriptor 4532531c97eSMatthias Ringwald * @param data_length 4542531c97eSMatthias Ringwald * @param data 4552531c97eSMatthias Ringwald */ 4562531c97eSMatthias Ringwald const hci_cmd_t gatt_write_long_characteristic_descriptor_cmd = { 4572531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_LONG_CHARACTERISTIC_DESCRIPTOR), "HZLV" 4582531c97eSMatthias Ringwald }; 4592531c97eSMatthias Ringwald 4602531c97eSMatthias Ringwald /** 4612531c97eSMatthias Ringwald * @param handle 4622531c97eSMatthias Ringwald * @param characteristic 4632531c97eSMatthias Ringwald * @param configuration 4642531c97eSMatthias Ringwald */ 4652531c97eSMatthias Ringwald const hci_cmd_t gatt_write_client_characteristic_configuration_cmd = { 4662531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_WRITE_CLIENT_CHARACTERISTIC_CONFIGURATION), "HY2" 4672531c97eSMatthias Ringwald }; 4682531c97eSMatthias Ringwald 4692531c97eSMatthias Ringwald /** 4702531c97eSMatthias Ringwald * @param handle 4712531c97eSMatthias Ringwald */ 4722531c97eSMatthias Ringwald const hci_cmd_t gatt_get_mtu = { 4732531c97eSMatthias Ringwald OPCODE(OGF_BTSTACK, GATT_GET_MTU), "H" 4742531c97eSMatthias Ringwald }; 475