1
2 /*
3 * Copyright (C) 2021 Huawei Device Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "hci_cmd_failure_info_params.h"
18
19 #include "btstack.h"
20 #include "platform/include/list.h"
21
22 #include "hci/evt/hci_evt.h"
23 #include "hci/hci.h"
24 #include "hci/hci_def.h"
25
26 #include "hci_cmd_failure.h"
27
HciCmdOnReadLocalVersionInformationFailed(uint8_t status,const void * param)28 static void HciCmdOnReadLocalVersionInformationFailed(uint8_t status, const void *param)
29 {
30 HciReadLocalVersionInformationReturnParam returnParam = {
31 .status = status,
32 };
33
34 HciEventCallbacks *callbacks = NULL;
35 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
36 if (callbacks->readLocalVersionInformationComplete != NULL) {
37 callbacks->readLocalVersionInformationComplete(&returnParam);
38 }
39 HCI_FOREACH_EVT_CALLBACKS_END;
40 }
41
HciCmdOnReadLocalSupportedCommandsFailed(uint8_t status,const void * param)42 static void HciCmdOnReadLocalSupportedCommandsFailed(uint8_t status, const void *param)
43 {
44 HciReadLocalSupportedCommandsReturnParam returnParam = {
45 .status = status,
46 };
47
48 HciEventCallbacks *callbacks = NULL;
49 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
50 if (callbacks->readLocalSupportedCommandsComplete != NULL) {
51 callbacks->readLocalSupportedCommandsComplete(&returnParam);
52 }
53 HCI_FOREACH_EVT_CALLBACKS_END;
54 }
55
HciCmdOnReadLocalSupportedFeaturesFailed(uint8_t status,const void * param)56 static void HciCmdOnReadLocalSupportedFeaturesFailed(uint8_t status, const void *param)
57 {
58 HciReadLocalSupportedFeaturesReturnParam returnParam = {
59 .status = status,
60 };
61
62 HciEventCallbacks *callbacks = NULL;
63 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
64 if (callbacks->readLocalSupportedFeaturesComplete != NULL) {
65 callbacks->readLocalSupportedFeaturesComplete(&returnParam);
66 }
67 HCI_FOREACH_EVT_CALLBACKS_END;
68 }
69
HciCmdOnReadLocalExtendedFeaturesFailed(uint8_t status,const void * param)70 static void HciCmdOnReadLocalExtendedFeaturesFailed(uint8_t status, const void *param)
71 {
72 HciReadLocalExtendedFeaturesReturnParam returnParam = {
73 .status = status,
74 .pageNumber = ((HciReadLocalExtendedFeaturesParam *)param)->pageNumber,
75 };
76
77 HciEventCallbacks *callbacks = NULL;
78 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
79 if (callbacks->readLocalExtendedFeaturesComplete != NULL) {
80 callbacks->readLocalExtendedFeaturesComplete(&returnParam);
81 }
82 HCI_FOREACH_EVT_CALLBACKS_END;
83 }
84
HciCmdOnReadBufferSizeFailed(uint8_t status,const void * param)85 static void HciCmdOnReadBufferSizeFailed(uint8_t status, const void *param)
86 {
87 HciReadBufferSizeReturnParam returnParam = {
88 .status = status,
89 };
90
91 HciEventCallbacks *callbacks = NULL;
92 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
93 if (callbacks->readBufferSizeComplete != NULL) {
94 callbacks->readBufferSizeComplete(&returnParam);
95 }
96 HCI_FOREACH_EVT_CALLBACKS_END;
97 }
98
HciCmdOnReadBdAddrFailed(uint8_t status,const void * param)99 static void HciCmdOnReadBdAddrFailed(uint8_t status, const void *param)
100 {
101 HciReadBdAddrReturnParam returnParam = {
102 .status = status,
103 };
104
105 HciEventCallbacks *callbacks = NULL;
106 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
107 if (callbacks->readBdAddrComplete != NULL) {
108 callbacks->readBdAddrComplete(&returnParam);
109 }
110 HCI_FOREACH_EVT_CALLBACKS_END;
111 }
112
HciCmdOnReadDataBlockSizeFailed(uint8_t status,const void * param)113 static void HciCmdOnReadDataBlockSizeFailed(uint8_t status, const void *param)
114 {
115 HciReadDataBlockSizeReturnParam returnParam = {
116 .status = status,
117 };
118
119 HciEventCallbacks *callbacks = NULL;
120 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
121 if (callbacks->readDataBlockSizeComplete != NULL) {
122 callbacks->readDataBlockSizeComplete(&returnParam);
123 }
124 HCI_FOREACH_EVT_CALLBACKS_END;
125 }
126
HciCmdOnReadLocalSupportedCodecsFailed(uint8_t status,const void * param)127 static void HciCmdOnReadLocalSupportedCodecsFailed(uint8_t status, const void *param)
128 {
129 HciReadLocalSupportedCodecsReturnParam returnParam = {
130 .status = status,
131 };
132
133 HciEventCallbacks *callbacks = NULL;
134 HCI_FOREACH_EVT_CALLBACKS_START(callbacks);
135 if (callbacks->readLocalSupportedCodecsComplete != NULL) {
136 callbacks->readLocalSupportedCodecsComplete(&returnParam);
137 }
138 HCI_FOREACH_EVT_CALLBACKS_END;
139 }
140
141 static HciCmdOnFailedFunc g_funcMap[] = {
142 NULL, // 0x0000
143 HciCmdOnReadLocalVersionInformationFailed, // 0x0001
144 HciCmdOnReadLocalSupportedCommandsFailed, // 0x0002
145 HciCmdOnReadLocalSupportedFeaturesFailed, // 0x0003
146 HciCmdOnReadLocalExtendedFeaturesFailed, // 0x0004
147 HciCmdOnReadBufferSizeFailed, // 0x0005
148 NULL, // 0x0006
149 NULL, // 0x0007
150 NULL, // 0x0008
151 HciCmdOnReadBdAddrFailed, // 0x0009
152 HciCmdOnReadDataBlockSizeFailed, // 0x000A
153 HciCmdOnReadLocalSupportedCodecsFailed, // 0x000B
154 };
155
156 #define INNFORMATIONALPARAMETERS_OCF_MAX 0x000B
157
HciOnInformationalParametersCmdFailed(uint16_t opCode,uint8_t status,const void * param)158 void HciOnInformationalParametersCmdFailed(uint16_t opCode, uint8_t status, const void *param)
159 {
160 uint16_t ocf = GET_OCF(opCode);
161 if (ocf > INNFORMATIONALPARAMETERS_OCF_MAX) {
162 return;
163 }
164
165 HciCmdOnFailedFunc func = g_funcMap[ocf];
166 if (func != NULL) {
167 func(status, param);
168 }
169 }