/* * Copyright (C) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GAP_DEF_H #define GAP_DEF_H #include "gap.h" #include "gap_le.h" #include "alarm.h" #include "list.h" #ifdef __cplusplus extern "C" { #endif #define GAP_BREDR_SUPPORT #define GAP_LE_SUPPORT #define BT_ADDR_FMT "%02X:%02X:**:**:**:%02X" #define BT_ADDR_FMT_OUTPUT(addr) (addr)[5], (addr)[4], (addr)[0] #define BT_ADDR_NULL \ { \ {0}, 0 \ } #define BT_COD_SIZE 3 #define COD_UINT_TO_ARRAY(cod) \ { \ ((cod)&0xff), (((cod) >> 8) & 0xff), (((cod) >> 16) & 0xff) \ } #define COD_ARRAY_TO_UINT(cod) ((uint32_t)(cod)[0] | (uint32_t)((cod)[1] << 8) | (uint32_t)((cod)[2] << 16)) #define LAP_GENERAL_INQUIRY_ACCESS 0x9E8B33 #define LAP_LIMITED_INQUIRY_ACCESS 0x9E8B00 #define NO_SCANS_ENABLED 0 #define INQUIRY_SCAN_ENABLED_PAGE_SCAN_DISABLED 1 #define INQUIRY_SCAN_DISABLED_PAGE_SCAN_ENABLED 2 #define INQUIRY_SCAN_ENABLED_PAGE_SCAN_ENABLED 3 #define CURRENT_IAC_MAX_NUM 0x02 #define EXTENDED_SCAN_PHY_MAX_NUM 3 #define COD_LIMITED_DISCOVERABLE_BIT (1 << 13) #define GAP_EIR_FEC_REQUIRED 0x00 #define GAP_INVALID_ACL_HANDLE 0xFFFF #define GAP_HCI_DISC_REASON_AUTH_FAIL 0x05 #define GAP_DISC_ACL_WAIT_TIME 4000 #define GAP_USE_ACL_CONNECTION_TIME 30000 #define GAP_SEC_WAIT_ENCRYPT_TIME 2000 #define GAP_WAIT_EX_ADV_TERMINATED 1500 #define GAP_LINK_KEY_TYPE_UNKNOWN 0xFF #define AUTHENTICATION_UNKNOWN_MITM 0xFF #define AUTH_REQ_DEFAULT (SMP_AUTH_REQ_BONDING | SMP_AUTH_REQ_BIT_MITM | SMP_AUTH_REQ_BIT_SC) #define LE_KEY_TYPE_UNAUTHENTICATION SMP_AUTH_FLAG_NO #define LE_KEY_TYPE_AUTHENTICATION SMP_AUTH_FLAG_YES #define LE_KEY_TYPE_UNKNOWN 0xFF #ifdef GAP_BREDR_SUPPORT #define INQUIRY_RESULT_SAVE_MAX 40 #define UNSUPPORT_SECURE_CONNECTIONS 0x00 #define SUPPORT_SECURE_CONNECTIONS 0x01 #define GAP_PAIR_RETRY_COUNT 5 #define GAP_PAIR_RETRY_WAIT_TIME 500 enum ScanModeStatus { GAP_SCANMODE_STATUS_IDLE, GAP_SCANMODE_STATUS_CLOSING, GAP_SCANMODE_STATUS_SETTING, }; enum InquiryStatus { GAP_INQUIRY_STATUS_IDLE, GAP_INQUIRY_STATUS_START, GAP_INQUIRY_STATUS_CANCEL, }; enum RemoteNameStatus { GAP_REMOTE_NAME_STATUS_IDLE, GAP_REMOTE_NAME_STATUS_START, GAP_REMOTE_NAME_STATUS_CANCEL, }; enum DeviceSecurityStatus { GAP_DEV_SEC_STATUS_IDLE, GAP_DEV_SEC_STATUS_ACTION, GAP_DEV_SEC_STATUS_WAIT_DISC, }; enum DeviceAuthenticationStatus { GAP_AUTH_STATUS_IDLE, GAP_AUTH_STATUS_ACTION, GAP_AUTH_STATUS_WAIT_RETRY, GAP_AUTH_STATUS_RETRY, }; enum DeviceEncryptionStatus { GAP_ENC_STATUS_IDLE, GAP_ENC_STATUS_ACTION, }; enum DeviceSecurityEvent { GAP_SEC_EVENT_CONNECT_COMP, GAP_SEC_EVENT_FEATURE_COMP, GAP_SEC_EVENT_UNAUTH_SUCCESS, GAP_SEC_EVENT_AUTH_SUCCESS, GAP_SEC_EVENT_AUTH_FAILED, GAP_SEC_EVENT_ENC_SUCCESS, GAP_SEC_EVENT_ENC_FAILED, GAP_SEC_EVENT_WAIT_ENC_TIMEOUT, GAP_SEC_EVENT_ACL_DISCONNECT, }; enum SecurityRequestStatus { GAP_SEC_REQ_STATUS_WAIT_CONNECT, GAP_SEC_REQ_STATUS_WAIT_FEATURE, GAP_SEC_REQ_STATUS_WAIT_ENCRYPT, GAP_SEC_REQ_STATUS_WAIT_ACTION, GAP_SEC_REQ_STATUS_ACTION, GAP_SEC_REQ_STATUS_SUCCESS, GAP_SEC_REQ_STATUS_FAILED, }; enum EncryptionRequestStatus { GAP_SET_ENCRYPTION_STATUS_IDLE, GAP_SET_ENCRYPTION_STATUS_SETTING, }; enum LESecurityActionStatus { GAP_LE_SECURITY_STATUS_IDLE, GAP_LE_SECURITY_STATUS_PAIR, }; enum LEConnParamUpdateStatus { GAP_LE_CONN_PARAM_UPDATE_IDLE, GAP_LE_CONN_PARAM_UPDATE_RECV_L2CAP, GAP_LE_CONN_PARAM_UPDATE_RECV_HCI, }; typedef struct { uint8_t status; GapSetScanModeResultCallback callback; void *context; GapDiscoverModeInfo discoverMode; GapConnectableModeInfo connectableMode; } ScanModeBlock; typedef struct { BtAddr addr; uint8_t repetitionMode; uint16_t clockOffset; } InquiryResultInfo; typedef struct { uint8_t status; } InquiryBlock; typedef struct { uint8_t status; } RemoteNameBlock; typedef struct { List *registerlist; List *requestlist; } ProfileSecurityBlock; typedef struct { BtAddr addr; GapServiceSecurityInfo info; uint16_t securityMode; } ProfileSecurityInfo; typedef struct { List *devicelist; } ConnectionInfoBlock; typedef struct { BtAddr addr; bool needAuthentication; bool needUnauthentication; bool needEncryption; bool needAuthorization; bool needMITM; GapServiceSecurityInfo info; void *context; bool doCallback; GapSecurityResultCallback callback; uint8_t status; uint8_t hciStatus; uint8_t retryCount; Alarm *waitRetryalarm; } RequestSecInfo; typedef struct { BtAddr addr; Alarm *alarm; uint16_t handle; uint8_t status; uint8_t authenticationStatus; uint8_t encryptionStatus; uint8_t linkkeyType; uint8_t localIOCap; uint8_t remoteAuthReq; bool inDedicatedBonding; bool isAuthentication; bool isEncryption; bool supportSSP; RequestSecInfo *actionReq; Alarm *aclAlarm; Alarm *waitEncryptAlarm; } DeviceInfo; typedef struct { uint8_t status; GapEncryptionChangeCallback callback; void *context; } EncryptionBlock; typedef struct { bool isEnable; uint8_t bondableMode; uint32_t classOfDevice; GAP_SecurityMode secMode; GapOOBData oobData192; GapOOBData oobData256; bool keyMissingRetry; ScanModeBlock scanModeBlock; InquiryBlock inquiryBlock; RemoteNameBlock remoteNameBlock; ProfileSecurityBlock profileSecBlock; ConnectionInfoBlock connectionInfoBlock; EncryptionBlock encryptionBlock; } GapBredrMng; #endif #ifdef GAP_LE_SUPPORT typedef struct { BtAddr addr; BtAddr identityAddr; uint8_t role; uint8_t bondableMode; uint8_t minEncKeySize; GAP_LeSecMode1Level mode1Level; GAP_LeSecMode2Level mode2Level; uint8_t IRK[GAP_IRK_SIZE]; } LeLocalInfo; typedef struct { uint8_t result; GAP_LeSecurityStatus secReqStatus; GapLeRequestSecurityResult callback; void *context; } LeSecurityReq; typedef struct { uint8_t status; uint8_t id; } LeConnParamUpdateReq; typedef struct { BtAddr addr; uint16_t handle; uint8_t role; uint8_t securityStatus; uint8_t encryptionStatus; uint8_t pairMethod; uint8_t keyType; uint8_t keySize; bool isRemoteSecurityRequest; bool isLocalSecurityRequest; BtAddr peerAddr; BtAddr ownAddr; Alarm *alarm; bool ownAddrUpdated; LeSecurityReq *securityReq; LeConnParamUpdateReq *paramUpdateReq; bool localSigningExists; bool remoteSigningExists; LeSignKey localSigningInfo; LeSignKey remoteSigningInfo; } LeDeviceInfo; typedef struct { List *deviceList; } LeConnectionInfoBlock; typedef struct { bool isPairing; BtAddr addr; } LeBondBlock; typedef struct { List *RequestList; } LeSignatureBlock; typedef struct { struct { bool processing; GenResPriAddrResult callback; void *context; } generationInfo; List *reportRPAResolveList; } LeRandomAddressBlock; typedef struct { uint8_t advHandle; uint8_t randomAddress[BT_ADDRESS_SIZE]; } LeExAdvInfo; typedef struct { List *exAdvInfoList; uint8_t exAdvMaxNumber; uint16_t exAdvDataMaxLen; } LeExAdvBlock; typedef struct { bool isEnable; LeLocalInfo local; LeBondBlock bondBlock; LeConnectionInfoBlock connectionInfoBlock; LeSignatureBlock signatureBlock; LeRandomAddressBlock randomAddressBlock; LeExAdvBlock exAdvBlock; } GapLeMng; #endif typedef struct { int traceLevel; #ifdef GAP_BREDR_SUPPORT GapBredrMng bredr; #endif #ifdef GAP_LE_SUPPORT GapLeMng le; #endif } GapMng; #ifdef __cplusplus } #endif #endif