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 AVCTP_CTRL_L2CAP_H
16 #define AVCTP_CTRL_L2CAP_H
17 #include "avctp_int.h"
18 #include "l2cap_if.h"
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 typedef struct {
24     uint16_t lcid;
25     uint8_t id;
26     L2capConnectionInfo info;
27     uint16_t lpsm;
28     void *ctx;
29 } AvctRecvConnectionReqCallbackTskParam;
30 
31 typedef struct {
32     uint16_t lcid;
33     L2capConnectionInfo info;
34     uint16_t result;
35     uint16_t status;
36     void *ctx;
37 } AvctRecvConnectionRspCallbackTskParam;
38 
39 typedef struct {
40     uint16_t lcid;
41     uint8_t id;
42     L2capConfigInfo cfg;
43     void *ctx;
44 } AvctRecvConfigReqCallbackTskParam;
45 
46 typedef struct {
47     uint16_t lcid;
48     L2capConfigInfo cfg;
49     uint16_t result;
50     void *ctx;
51 } AvctRecvConfigRspCallbackTskParam;
52 
53 typedef struct {
54     uint16_t lcid;
55     uint8_t id;
56     void *ctx;
57 } AvctRecvDisconnectionReqCallbackTskParam;
58 
59 typedef struct {
60     uint16_t lcid;
61     void *ctx;
62 } AvctRecvDisconnectionRspCallbackTskParam;
63 
64 typedef struct {
65     uint16_t lcid;
66     uint8_t reason;
67     void *ctx;
68 } AvctDisconnectAbnormalCallbackTskParam;
69 
70 typedef struct {
71     uint16_t lcid;
72     Packet *pkt;
73     void *ctx;
74 } AvctRecvDataCallbackTskParam;
75 
76 typedef struct {
77     uint16_t lcid;
78     uint8_t isBusy;
79     void *ctx;
80 } AvctRemoteBusyCallbackTskParam;
81 
82 typedef struct {
83     BtAddr addr;
84     uint16_t lcid;
85     int result;
86     void *context;
87 } AvctCtrlL2CIFConnectReqCallbackTskParam;
88 
89 /* Connection Request packets received */
90 void AvctRecvConnectionReqCallback(
91     uint16_t lcid, uint8_t id, const L2capConnectionInfo *info, uint16_t lpsm, void *ctx);
92 void AvctRecvConnectionReqCallbackTsk(void *context);
93 void AvctRecvConnectionReqCBack(uint16_t lcid, uint8_t id, const L2capConnectionInfo *info, uint16_t lpsm, void *ctx);
94 /* Connection Response packet received */
95 void AvctRecvConnectionRspCallback(
96     uint16_t lcid, const L2capConnectionInfo *info, uint16_t result, uint16_t status, void *ctx);
97 void AvctRecvConnectionRspCallbackTsk(void *context);
98 void AvctRecvConnectionRspCBack(
99     uint16_t lcid, const L2capConnectionInfo *info, uint16_t result, uint16_t status, void *ctx);
100 /* Configuration Request packet received */
101 void AvctRecvConfigRspCallback(uint16_t lcid, const L2capConfigInfo *cfg, uint16_t result, void *ctx);
102 void AvctRecvConfigReqCallback(uint16_t lcid, uint8_t id, const L2capConfigInfo *cfg, void *ctx);
103 void AvctRecvConfigReqCallbackTsk(void *context);
104 void AvctRecvConfigReqCBack(uint16_t lcid, uint8_t id, const L2capConfigInfo *cfg, void *ctx);
105 /* Configuration Response packet received */
106 void AvctRecvDisconnectionReqCallback(uint16_t lcid, uint8_t id, void *ctx);
107 void AvctRecvDisconnectionReqCallbackTsk(void *context);
108 void AvctRecvConfigRspCallbackTsk(void *context);
109 void AvctRecvConfigRspCBack(uint16_t lcid, const L2capConfigInfo *cfg, uint16_t result, void *ctx);
110 /* Disconnection Request packet received */
111 void AvctRecvDisconnectionReqCallback(uint16_t lcid, uint8_t id, void *ctx);
112 void AvctRecvDisconnectionReqCallbackTsk(void *context);
113 void AvctRecvDisconnectionReqCBack(uint16_t lcid, uint8_t id, void *ctx);
114 /* Disconnection Response packet received */
115 void AvctRecvDisconnectionRspCallback(uint16_t lcid, void *ctx);
116 void AvctRecvDisconnectionRspCallbackTsk(void *context);
117 void AvctRecvDisconnectionRspCBack(uint16_t lcid, void *ctx);
118 /* Disconnected abnormal, such as acl disconnected or link loss */
119 void AvctDisconnectAbnormalCallback(uint16_t lcid, uint8_t reason, void *ctx);
120 void AvctDisconnectAbnormalCallbackTsk(void *context);
121 void AvctDisconnectAbnormalCBack(uint16_t lcid, uint8_t reason, void *ctx);
122 /* L2cap data packet received */
123 void AvctRecvDataCallback(uint16_t lcid, Packet *pkt, void *ctx);
124 void AvctRecvDataCallbackTsk(void *context);
125 void AvctRecvDataCBack(uint16_t lcid, Packet *pkt, void *ctx);
126 /* In Enhanced Retransmission mode, when RNR received or tx_window overflow */
127 void AvctRemoteBusyCallback(uint16_t lcid, uint8_t isBusy, void *ctx);
128 void AvctRemoteBusyCallbackTsk(void *context);
129 void AvctRemoteBusyCBack(uint16_t lcid, uint8_t isBusy, void *ctx);
130 
131 void AvctCtrlL2CIFConnectReqCallbackTsk(void *context);
132 void AvctCtrlConnectResult(const BtAddr *addr, uint16_t lcid, int result, void *context);
133 extern void AvctRecvConnectionReqAct(const BtAddr *addr, uint16_t aclHandle, uint16_t lcid, uint8_t id, uint16_t psm);
134 extern void AvctCtrlL2CIFConnectReqCallback(const BtAddr *addr, uint16_t lcid, int result, void *context);
135 
136 extern const L2capService G_AVCT_L2C_SVR;
137 
138 #ifdef __cplusplus
139 }
140 #endif
141 #endif /* AVCTP_CTRL_L2CAP_H */