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 #ifndef BTM_SNOOP_FILTER_H 16 #define BTM_SNOOP_FILTER_H 17 18 #include <stdint.h> 19 20 #include "btstack.h" 21 22 #include "platform/include/list.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 #define HCI_LINK_CONTROL_COMMAND_MAX_NUM 0x0045 29 #define HCI_LINK_POLICY_COMMAND_MAX_NUM 0x0011 30 #define HCI_CONTTOLLER_AND_BASEBAND_COMMAND_MAX_NUM 0x0081 31 #define HCI_INFORMATIONAL_PARAMETERS_COMMAND_MAX_NUM 0x000B 32 #define HCI_STATUS_PARAMETERS_COMMAND_MAX_NUM 0x000D 33 #define HCI_LE_CONTROLLER_COMMAND_MAX_NUM 0x004E 34 35 #define HCI_EVENT_MAX_NUM 0x58 36 #define HCI_LE_EVENT_MAX_NUM (0x14 + 1) 37 38 typedef void (*BtmFilterFunc)(uint8_t *param); 39 40 typedef struct { 41 uint8_t module; 42 uint8_t rfcommScn; 43 uint16_t l2capPsm; 44 bool isLocal; 45 BtAddr remoteAddr; 46 } BtmSnoopFilterInfo; 47 48 void BtmInitSnoopFilter(void); 49 void BtmCloseSnoopFilter(void); 50 void BtmEnableSnoopFilter(void); 51 void BtmDisableSnoopFilter(void); 52 void BtmHciFilter(uint8_t type, const uint8_t **data, uint16_t originalLength, uint16_t *includedLength); 53 54 List *BtmGetFilterInfoList(void); 55 bool BtmFindFilterInfoByInfoUsePsm(void *nodeData, void *info); 56 bool BtmFindFilterInfoByInfoUseScn(void *nodeData, void *info); 57 void BtmChangeIncludeLength(uint16_t *includedLength, uint16_t len); 58 uint8_t *BtmCreateFilterBuffer(const uint16_t *includedLength, const uint8_t *data); 59 void BtmFilterData(uint8_t *data, uint8_t length); 60 void BtmFilterAddress(uint8_t *addr, uint8_t length); 61 62 void BtmFilterHciCmd(const uint8_t **data, uint16_t originalLength, uint16_t *includedLength); 63 void BtmFilterHciCmdCompleteEvt(const uint8_t **data, uint16_t originalLength, uint16_t *includedLength); 64 65 void HciEvtFilter(const uint8_t **data, uint16_t originalLength, uint16_t *includedLength); 66 67 void BtmEnableSnoopFilterAcl(void); 68 void BtmDisableSnoopFilterAcl(void); 69 void BtmFilterCheckAndSaveAclConnInfo(const uint8_t **data, uint16_t originalLength); 70 void BtmFilterAclData(uint8_t type, const uint8_t **data, uint16_t originalLength, uint16_t *includedLength); 71 72 #ifdef __cplusplus 73 } 74 #endif 75 76 #endif