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