1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef GAP_INTERNAL_H
17 #define GAP_INTERNAL_H
18 
19 #include "gap_def.h"
20 
21 #include "btm.h"
22 #include "hci/hci.h"
23 #include "hci/hci_error.h"
24 #include "l2cap_le_if.h"
25 #include "smp/smp.h"
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 void GapChangeHCIAddr(BtAddr *addr, const HciBdAddr *hciAddr, uint8_t addrType);
32 bool GapIsEmptyAddr(const uint8_t *addr);
33 bool GapAddrCompare(const BtAddr *addr1, const BtAddr *addr2);
34 bool GapCompareChannelID(GAP_SecMultiplexingProtocol protocolID, GapSecChannel channelID1, GapSecChannel channelID2);
35 
36 void GapRegisterHciEventCallbacks(void);
37 void GapDeregisterHciEventCallbacks(void);
38 void GapRegisterBtmAclCallbacks(void);
39 void GapDeregisterBtmAclCallbacks(void);
40 void GapIsRemoteDeviceSupportHostSecureSimplePairingAsync(const BtAddr *addr);
41 
42 void GapRegisterSmCallbacks(void);
43 void GapDeregisterSmCallbacks(void);
44 
45 void GapRegisterL2capCallbacks(void);
46 void GapDeregisterL2capCallbacks(void);
47 void GapLeConnectionParameterUpdateReq(uint16_t aclHandle, const L2capLeConnectionParameter *param);
48 void GapLeConnectionParameterUpdateRsp(uint16_t aclHandle, uint8_t id, uint16_t result);
49 
50 #ifdef GAP_BREDR_SUPPORT
51 
52 bool GapIsBredrEnable(void);
53 ScanModeBlock *GapGetScanModeBlock(void);
54 InquiryBlock *GapGetInquiryBlock(void);
55 RemoteNameBlock *GapGetRemoteNameBlock(void);
56 GAP_SecurityMode *GapGetSecurityMode(void);
57 ProfileSecurityBlock *GapGetProfileSecurityBlock(void);
58 ConnectionInfoBlock *GapGetConnectionInfoBlock(void);
59 EncryptionBlock *GapGetEncryptionBlock(void);
60 bool GapIsBondMode(void);
61 bool GapFindConnectionDeviceByAddr(void *nodeData, void *param);
62 bool GapFindConnectionDeviceByHandle(void *nodeData, void *param);
63 bool GapFindCmpListData(void *nodeData, void *param);
64 void GapStopUseAclConnection(void *dev);
65 void GapStartUseAclConnection(DeviceInfo *device, uint64_t timeMs);
66 int GapReadNewLocalOOBData(void);
67 bool GapIsKeyMissingRetry(void);
68 
69 void GapAclConnectionComplete(const BtmAclConnectCompleteParam *param, void *context);
70 void GapAclDisconnectionComplete(uint8_t status, uint16_t connectionHandle, uint8_t reason, void *context);
71 void GapWriteScanEnableComplete(const HciWriteScanEnableReturnParam *param);
72 void GapWriteInquiryScanActivityComplete(const HciWriteInquiryScanActivityReturnParam *param);
73 void GapWriteInquiryScanTypeComplete(const HciWriteInquiryScanTypeReturnParam *param);
74 void GapWriteCurrentIACLAPComplete(const HciWriteCurrentIacLapReturnParam *param);
75 void GapWritePageScanActivityComplete(const HciWritePageScanActivityReturnParam *param);
76 void GapWritePageScanTypeComplete(const HciWritePageScanTypeReturnParam *param);
77 void GapWriteClassOfDeviceComplete(const HciWriteClassofDeviceReturnParam *param);
78 void GapSetExtendedInquiryResponseComplete(const HciWriteExtendedInquiryResponseReturnParam *param);
79 
80 void GapInquiryCancelComplete(const HciInquiryCancelReturnParam *param);
81 void GapGetRemoteNameCancelComplete(const HciRemoteNameRequestCancelReturnParam *param);
82 void GapOnInquiryComplete(const HciInquiryCompleteEventParam *eventParam);
83 void GapOnInquiryResult(const HciInquiryResultEventParam *eventParam);
84 void GapOnInquiryResultRssi(const HciInquiryResultWithRssiEventParam *eventParam);
85 void GapOnEntendedInquiryResult(const HciExtendedInquiryResultEventParam *eventParam);
86 void GapOnGetRemoteNameComplete(const HciRemoteNameRequestCompleteEventParam *eventParam);
87 
88 void GapAuthenticationClearInfo(RequestSecInfo *reqInfo);
89 void GapAuthenticationRetry(DeviceInfo *deviceInfo, RequestSecInfo *reqInfo, uint8_t hciStatus);
90 void GapRequestSecurityProcess(void);
91 void GapUpdateSecurityRequest(DeviceInfo *devInfo, enum DeviceSecurityEvent event, uint8_t hciStatus);
92 void GapRemoteDeviceSupportHostSecureSimplePairingCallback(const BtAddr *addr, bool support);
93 void GapDoAuthenticationCallback(const void *req);
94 void GapDoSecurityCallback(void *req);
95 
96 void GapLinkKeyRequestReplyComplete(const HciLinkKeyRequestReplyReturnParam *param);
97 void GapLinkKeyRequestNegativeReplyComplete(const HciLinkKeyRequestNegativeReplyReturnParam *param);
98 void GapPINCodeRequestReplyComplete(const HciPinCodeRequestReplyReturnParam *param);
99 void GapPINCodeRequestNegativeReplyComplete(const HciPinCodeRequestNegativeReplyReturnParam *param);
100 void GapIOCapabilityRequestReplyComplete(const HciIOCapabilityRequestReplyReturnParam *param);
101 void GapIOCapabilityRequestNegativeReplyComplete(const HciIoCapabilityRequestNegativeReplyReturnParam *param);
102 void GapOnIOCapabilityResponseEvent(const HciIoCapabilityResponseEventParam *eventParam);
103 void GapUserConfirmationRequestReplyComplete(const HciUserConfirmationRequestReplyReturnParam *param);
104 void GapUserConfirmationRequestNegativeReplyComplete(const HciUserConfirmationRequestNegativeReplyReturnParam *param);
105 void GapUserPasskeyRequestReplyComplete(const HciUserPasskeyRequestReplyReturnParam *param);
106 void GapUserPasskeyRequestNegativeReplyComplete(const HciUserPasskeyRequestNegativeReplyReturnParam *param);
107 void GapRemoteOOBDataRequestReplyComplete(const HciRemoteOobDataRequestReplyReturnParam *param);
108 void GapRemoteOOBExtendedDataRequestReplyComplete(const HciRemoteOobExtendedDataRequestReplyReturnParam *param);
109 void GapRemoteOOBDataRequestNegativeReplyComplete(const HciRemoteOobDataRequestNegativeReplyReturnParam *param);
110 void GapReadLocalOobDataComplete(const HciReadLocalOOBDataReturnParam *param);
111 void GapOnSimplePairingComplete(const HciSimplePairingCompleteEventParam *eventParam);
112 void GapReadLocalOobExtendedDataComplete(const HciReadLocalOobExtendedDataReturnParam *param);
113 void GapReadLocalOobDataComplete(const HciReadLocalOOBDataReturnParam *param);
114 void GapOnAuthenticationComplete(const HciAuthenticationCompleteEventParam *eventParam);
115 void GapOnEncryptionChangeEvent(const HciEncryptionChangeEventParam *eventParam);
116 void GapOnPINCodeRequestEvent(const HciPinCodeRequestEventParam *eventParam);
117 void GapOnLinkKeyRequestEvent(const HciLinkKeyRequestEventParam *eventParam);
118 void GapOnLinkKeyNotificationEvent(const HciLinkKeyNotificationEventParam *eventParam);
119 void GapOnEncryptionKeyRefreshComplete(const HciEncryptionKeyRefreshCompleteEventParam *eventParam);
120 void GapOnIOCapabilityRequestEvent(const HciIoCapabilityRequestEventParam *eventParam);
121 void GapOnUserConfirmationRequestEvent(const HciUserConfirmationRequestEventParam *eventParam);
122 void GapOnUserPasskeyRequestEvent(const HciUserPasskeyRequestEventParam *eventParam);
123 void GapOnRemoteOOBDataRequestEvent(const HciRemoteOobDataRequestEventParam *eventParam);
124 void GapRemoteOOBDataRequestReplyComplete(const HciRemoteOobDataRequestReplyReturnParam *param);
125 void GapRemoteOOBExtendedDataRequestReplyComplete(const HciRemoteOobExtendedDataRequestReplyReturnParam *param);
126 void GapOnUserPasskeyNotificationEvent(const HciUserPasskeyNotificationEventParam *eventParam);
127 void GapOnUserPasskeyRequestEvent(const HciUserPasskeyRequestEventParam *eventParam);
128 #endif
129 
130 #ifdef GAP_LE_SUPPORT
131 
132 bool GapIsLeEnable(void);
133 bool GapLeRolesCheck(uint8_t role);
134 void GapFreeLeDeviceInfo(void *data);
135 void GapFreeLeSignatureRequest(void *data);
136 void GapFreeReportRPAResolveInfo(void *data);
137 LeBondBlock *GapGetLeBondBlock(void);
138 LeConnectionInfoBlock *GapGetLeConnectionInfoBlock(void);
139 LeSignatureBlock *GapGetLeSignatureBlock(void);
140 LeRandomAddressBlock *GapGetLeRandomAddressBlock(void);
141 LeExAdvBlock *GapGetLeExAdvBlock(void);
142 bool GapIsLeBondableMode(void);
143 LeLocalInfo *GapGetLeLocalInfo(void);
144 bool GapAddrIsResolvablePrivateAddress(const BtAddr *addr);
145 bool GapAddrIsStaticAddress(const BtAddr *addr);
146 bool GapAddrIsPublicAddress(const BtAddr *addr);
147 bool GapAddrIsIdentityAddress(const BtAddr *addr);
148 bool GapFindLeConnectionDeviceByAddr(void *nodeData, void *param);
149 bool GapFindLeConnectionDeviceByHandle(void *nodeData, void *param);
150 
151 void GapLeReadMaximumAdvertisingDataLengthComplete(const HciLeReadMaximumAdvertisingDataLengthReturnParam *param);
152 void GapLeReadNumberofSupportedAdvertisingSetsComplete(
153     const HciLeReadNumberofSupportedAdvertisingSetsReturnParam *param);
154 void GapLeSetAdvertisingSetRandomAddressComplete(const HciLeSetAdvertisingSetRandomAddressReturnParam *param);
155 void GapLeSetExtendedAdvertisingParametersComplete(const HciLeSetExtendedAdvertisingParametersReturnParam *param);
156 void GapLeSetExtendedAdvertisingDataComplete(const HciLeSetExtendedAdvertisingDataReturnParam *param);
157 void GapLeSetExtendedScanResponseDataComplete(const HciLeSetExtendedScanResponseDataReturnParam *param);
158 void GapLeSetExtendedAdvertisingEnableComplete(const HciLeSetExtendedAdvertisingEnableReturnParam *param);
159 void GapOnLeScanRequestReceivedEvent(const HciLeScanRequestReceivedEventParam *eventParam);
160 void GapLeRemoveAdvertisingSetComplete(const HciLeRemoveAdvertisingSetReturnParam *param);
161 void GapLeClearAdvertisingSetsComplete(const HciLeClearAdvertisingSetsReturnParam *param);
162 void GapOnLeAdvertisingSetTerminated(const HciLeAdvertisingSetTerminatedEventParam *eventParam);
163 void GapLeAdvSetParamComplete(const HciLeSetAdvertisingParametersReturnParam *param);
164 void GapLeAdvReadTxPowerComplete(const HciLeReadAdvertisingChannelTxPowerReturnParam *param);
165 void GapLeAdvSetDataComplete(const HciLeSetAdvertisingDataReturnParam *param);
166 void GapLeAdvSetScanRspDataComplete(const HciLeSetScanResponseDataReturnParam *param);
167 void GapLeAdvSetEnableComplete(const HciLeSetAdvertisingEnableReturnParam *param);
168 
169 void GapLeScanSetParamComplete(const HciLeSetExtendedScanParametersReturnParam *param);
170 void GapOnLeAdvertisingReportEvent(const HciLeAdvertisingReportEventParam *eventParam);
171 void GapLeScanSetEnableComplete(const HciLeSetScanEnableReturnParam *param);
172 void GapOnLeExtendedAdvertisingReportEvent(const HciLeExtendedAdvertisingReportEventParam *eventParam);
173 void GapOnLeDirectedAdvertisingReport(const HciLeDirectedAdvertisingReportEventParam *eventParam);
174 void GapOnLeScanTimeoutEvent(const void *eventParam);
175 void GapLeSetExtendedScanParametersComplete(const HciLeSetExtendedScanParametersReturnParam *param);
176 void GapLeSetExtendedScanEnableComplete(const HciLeSetExtendedScanEnableReturnParam *param);
177 void GapGenerateRPAResult(uint8_t status, const uint8_t *addr);
178 void GapResolveRPAResult(uint8_t status, bool result, const uint8_t *addr, const uint8_t *irk);
179 
180 int GapLeRequestSecurityProcess(LeDeviceInfo *deviceInfo);
181 void GapLeDoPair(const void *addr);
182 void GapLeAuthenticationRequest(uint16_t handle, uint8_t pairMethod, const uint8_t *displayValue);
183 void GapLePairResult(uint16_t handle, uint8_t status, const SMP_PairResult *result);
184 void GapLeRemotePairRequest(uint16_t handle, const SMP_PairParam *param);
185 void GapLeRemotePairResponse(uint16_t handle, const SMP_PairParam *param);
186 void GapLeRemoteSecurityRequest(uint16_t handle, uint8_t authReq);
187 void GapLeLongTermKeyRequest(uint16_t handle, const uint8_t *random, uint16_t ediv);
188 void GapLeEncryptionComplete(uint16_t handle, uint8_t status);
189 void GapLeGenerateSignatureResult(uint8_t status, const uint8_t *sign);
190 int GapRequestSigningAlgorithmInfo(const BtAddr *addr);
191 void GapClearPairingStatus(const BtAddr *addr);
192 void GapDoPairResultCallback(const BtAddr *addr, uint8_t status);
193 
194 void GapWriteAuthenticatedPayloadTimeoutComplete(const HciWriteAuthenticatedPayloadTimeoutReturnParam *param);
195 void GapOnAuthenticatedPayloadTimeoutExpiredEvent(const HciAuthenticatedPayloadTimeoutExpiredEventParam *eventParam);
196 void GapLeSetHostChannelClassificationComplete(const HciLeSetHostChannelClassificationReturnParam *param);
197 void GapLeReadChannelMapComplete(const HciLeReadChannelMapReturnParam *param);
198 void GapLeRemoteConnectionParameterRequestReplyComplete(
199     const HciLeRemoteConnectionParameterRequestReplyReturnParam *param);
200 void GapLeRemoteConnectionParameterRequestNegativeReplyComplete(
201     const HciLeRemoteConnectionParameterRequestNegativeReplyReturnParam *param);
202 void GapOnLeConnectionUpdateCompleteEvent(const HciLeConnectionUpdateCompleteEventParam *eventParam);
203 void GapOnLeRemoteConnectionParameterRequestEvent(const HciLeRemoteConnectionParameterRequestEventParam *eventParam);
204 bool GapLeDeviceNeedBond(const LeDeviceInfo *deviceInfo);
205 void GapLeConnectionComplete(
206     uint8_t status, uint16_t connectionHandle, const BtAddr *addr, uint8_t role, void *context);
207 void GapLeDisconnectionComplete(uint8_t status, uint16_t connectionHandle, uint8_t reason, void *context);
208 
209 void GapReceiveL2capParameterUpdateReq(
210     uint16_t aclHandle, uint8_t id, const L2capLeConnectionParameter *param, void *ctx);
211 void GapReceiveL2capParameterUpdateRsp(uint16_t aclHandle, uint16_t result, void *ctx);
212 
213 #endif
214 
215 #ifdef __cplusplus
216 }
217 #endif
218 
219 #endif