1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "stack/include/btm_client_interface.h"
17 
18 #include <bluetooth/log.h>
19 
20 #include "security_client_callbacks.h"
21 #include "stack/btm/btm_ble_int.h"
22 #include "stack/include/acl_api.h"
23 #include "stack/include/btm_api.h"
24 #include "stack/include/btm_ble_api.h"
25 
26 struct btm_client_interface_t btm_client_interface = {
27     .lifecycle =
28         {
29             .BTM_PmRegister = ::BTM_PmRegister,
30             .BTM_GetHCIConnHandle = ::BTM_GetHCIConnHandle,
31             .BTM_VendorSpecificCommand = ::BTM_VendorSpecificCommand,
32             .ACL_RegisterClient = ::ACL_RegisterClient,
33             .ACL_UnregisterClient = ::ACL_UnregisterClient,
34             .btm_init = ::btm_init,
35             .btm_free = ::btm_free,
36             .btm_ble_init = ::btm_ble_init,
37             .btm_ble_free = ::btm_ble_free,
38             .BTM_reset_complete = ::BTM_reset_complete,
39         },
40 
41     // Acl peer and lifecycle
42     .peer =
43         {
44             .BTM_IsAclConnectionUp = ::BTM_IsAclConnectionUp,
45             .BTM_ReadConnectedTransportAddress =
46                 ::BTM_ReadConnectedTransportAddress,
47             .BTM_CancelRemoteDeviceName = ::BTM_CancelRemoteDeviceName,
48             .BTM_ReadRemoteDeviceName = ::BTM_ReadRemoteDeviceName,
49             .BTM_ReadRemoteFeatures = ::BTM_ReadRemoteFeatures,
50             .BTM_ReadDevInfo = ::BTM_ReadDevInfo,
51             .BTM_GetMaxPacketSize = ::BTM_GetMaxPacketSize,
52             .BTM_ReadRemoteVersion = ::BTM_ReadRemoteVersion,
53             .BTM_GetPeerDeviceTypeFromFeatures =
54                 ::BTM_GetPeerDeviceTypeFromFeatures,
55             .BTM_RequestPeerSCA = ::BTM_RequestPeerSCA,
56             .BTM_GetPeerSCA = ::BTM_GetPeerSCA,
57             .BTM_IsPhy2mSupported = ::BTM_IsPhy2mSupported,
58         },
59 
60     .link_policy =
61         {
62             .BTM_GetRole = ::BTM_GetRole,
63             .BTM_SetPowerMode = ::BTM_SetPowerMode,
64             .BTM_SetSsrParams = ::BTM_SetSsrParams,
65             .BTM_SwitchRoleToCentral = ::BTM_SwitchRoleToCentral,
66             .BTM_block_role_switch_for = ::BTM_block_role_switch_for,
67             .BTM_block_sniff_mode_for = ::BTM_block_sniff_mode_for,
68             .BTM_default_unblock_role_switch =
69                 ::BTM_default_unblock_role_switch,
70             .BTM_unblock_role_switch_for = ::BTM_unblock_role_switch_for,
71             .BTM_unblock_sniff_mode_for = ::BTM_unblock_sniff_mode_for,
72             .BTM_WritePageTimeout = ::BTM_WritePageTimeout,
73         },
74 
75     .link_controller =
76         {
77             .BTM_GetLinkSuperTout = ::BTM_GetLinkSuperTout,
78             .BTM_ReadRSSI = ::BTM_ReadRSSI,
79         },
80 
81     .security = get_security_client_interface(),
82 
83     .ble =
84         {
85             .BTM_BleGetEnergyInfo = ::BTM_BleGetEnergyInfo,
86             .BTM_BleObserve = ::BTM_BleObserve,
87             .BTM_SetBleDataLength = ::BTM_SetBleDataLength,
88             .BTM_BleReadControllerFeatures = ::BTM_BleReadControllerFeatures,
89             .BTM_BleSetPhy = ::BTM_BleSetPhy,
90             .BTM_BleSetPrefConnParams = ::BTM_BleSetPrefConnParams,
91             .BTM_UseLeLink = ::BTM_UseLeLink,
92             .BTM_IsRemoteVersionReceived = ::BTM_IsRemoteVersionReceived,
93             .BTM_SetConsolidationCallback = ::BTM_SetConsolidationCallback,
94         },
95 
96     .sco =
97         {
98             .BTM_CreateSco = ::BTM_CreateSco,
99             .BTM_RegForEScoEvts = ::BTM_RegForEScoEvts,
100             .BTM_RemoveSco = ::BTM_RemoveSco,
101             .BTM_WriteVoiceSettings = ::BTM_WriteVoiceSettings,
102             .BTM_EScoConnRsp = ::BTM_EScoConnRsp,
103             .BTM_GetNumScoLinks = ::BTM_GetNumScoLinks,
104             .BTM_SetEScoMode = ::BTM_SetEScoMode,
105             .BTM_GetScoDebugDump = ::BTM_GetScoDebugDump,
106             .BTM_IsScoActiveByBdaddr = ::BTM_IsScoActiveByBdaddr,
107         },
108 
109     .local =
110         {
111             .BTM_ReadLocalDeviceName = ::BTM_ReadLocalDeviceName,
112             .BTM_ReadLocalDeviceNameFromController =
113                 ::BTM_ReadLocalDeviceNameFromController,
114             .BTM_SetLocalDeviceName = ::BTM_SetLocalDeviceName,
115             .BTM_SetDeviceClass = ::BTM_SetDeviceClass,
116             .BTM_IsDeviceUp = ::BTM_IsDeviceUp,
117             .BTM_ReadDeviceClass = ::BTM_ReadDeviceClass,
118         },
119 
120     .eir =
121         {
122             .BTM_WriteEIR = ::BTM_WriteEIR,
123             .BTM_GetEirSupportedServices = ::BTM_GetEirSupportedServices,
124             .BTM_GetEirUuidList = ::BTM_GetEirUuidList,
125             .BTM_AddEirService = ::BTM_AddEirService,
126             .BTM_RemoveEirService = ::BTM_RemoveEirService,
127         },
128     .db =
129         {
130             .BTM_InqDbRead = ::BTM_InqDbRead,
131             .BTM_InqDbFirst = ::BTM_InqDbFirst,
132             .BTM_InqDbNext = ::BTM_InqDbNext,
133             .BTM_ClearInqDb = ::BTM_ClearInqDb,
134         },
135 };
136 
get_btm_client_interface()137 struct btm_client_interface_t& get_btm_client_interface() {
138   return btm_client_interface;
139 }
140