0
|
1 /*
|
|
2 +-----------------------------------------------------------------------------
|
|
3 | Project : GSM-F&D (8411)
|
|
4 | Modul : ACI_BAT
|
|
5 +-----------------------------------------------------------------------------
|
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
|
7 | All rights reserved.
|
|
8 |
|
|
9 | This file is confidential and a trade secret of Texas
|
|
10 | Instruments Berlin, AG
|
|
11 | The receipt of or possession of this file does not convey
|
|
12 | any rights to reproduce or disclose its contents or to
|
|
13 | manufacture, use, or sell anything it may describe, in
|
|
14 | whole, or in part, without the specific written consent of
|
|
15 | Texas Instruments Berlin, AG.
|
|
16 +-----------------------------------------------------------------------------
|
|
17 | Purpose : This Modul is the main entry point of BAT at ACI.
|
|
18 |
|
|
19 +-----------------------------------------------------------------------------
|
|
20 */
|
|
21
|
|
22 #ifndef ACI_BAT_C
|
|
23 #define ACI_BAT_C
|
|
24
|
|
25 /*==== INCLUDES ===================================================*/
|
|
26 #include "aci_all.h"
|
|
27 #include "aci_mem.h"
|
|
28 #include "aci_cmh.h"
|
|
29 #include "ati_cmd.h"
|
|
30 #include "dti.h" /* functionality of the dti library */
|
|
31
|
|
32 #include "aci.h"
|
|
33 #include "aci_lst.h"
|
|
34
|
|
35 #include "psa_psi.h"
|
|
36 #include "cmh_psi.h"
|
|
37 #include "ati_src_psi.h"
|
|
38 #include "sap_dti.h"
|
|
39 #include "psa.h"
|
|
40 #include "cmh.h"
|
|
41
|
|
42 #include "aci_bat_cmh.h"
|
|
43 #include "aci_bat.h"
|
|
44 #include "aci_bat_err.h"
|
|
45 #include "aci_bat_cb.h" /* for rBAT_OK */
|
|
46 #include "aci_bat_ext.h"
|
|
47
|
|
48 #include "l2p_types.h"
|
|
49 #include "l2p.h"
|
|
50 #include "bat_ctrl.h"
|
|
51 #include "aci_cmd.h"
|
|
52
|
|
53 #include "ati_ext_mech.h"
|
|
54
|
|
55 #ifdef _SIMULATION_
|
|
56 #include "gdd_aci.h"
|
|
57 #endif
|
|
58
|
|
59 /*==== CONSTANTS ==================================================*/
|
|
60
|
|
61 #define BAT_BIT_12 0x1000
|
|
62 #define BAT_BIT_15 0x8000
|
|
63 #define BAT_CTRL_CHANNEL 0xFE
|
|
64
|
|
65 #define MAX_NORMAL_BUFFER_LEN (100-4) /* Since Malloc uses 4 additional internal bytes of the Blocks */
|
|
66 #ifdef GPRS
|
|
67 #define MAX_LARGE_BUFFER_LEN (600-4)
|
|
68 #else
|
|
69 #define MAX_LARGE_BUFFER_LEN (400-4)
|
|
70 #endif
|
|
71
|
|
72 #define BAT_MTU_SIZE 300
|
|
73
|
|
74 /*==== TYPES ======================================================*/
|
|
75 typedef struct
|
|
76 {
|
|
77 T_ACI_BAT_RSLT (*fptr)(T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_send *cmd); /* BAT wrapper func */
|
|
78 } BATCommand;
|
|
79
|
|
80 typedef struct
|
|
81 {
|
|
82 T_ACI_DTI_PRC_PSI *psi_src; /* remember which PSI source currently active */
|
|
83 BOOL l2p_configured;
|
|
84 U32 l2p_mem[(L2P_CONTROL_BLOCK_HDR_SIZE+3)/4];
|
|
85 U8 l2p_id; /* L2P calls this bat_id, for us it is a unique l2p_id */
|
|
86 } T_ACI_BAT_GLOBALS;
|
|
87
|
|
88 /*==== EXPORT =====================================================*/
|
|
89
|
|
90 /*==== VARIABLES ==================================================*/
|
|
91
|
|
92 LOCAL T_ACI_BAT_GLOBALS aci_bat_globs[CMD_SRC_MAX];
|
|
93 LOCAL BOOL aci_bat_first_time = TRUE;
|
|
94
|
|
95
|
|
96 /* basic BAT commands, which are always supported */
|
|
97 #define BAT_BAS(batFoo) {BAT_##batFoo}
|
|
98
|
|
99 /* default extended BAT commands, which are always supported
|
|
100 * c = command type --> s=set, t=test, q=query
|
|
101 */
|
|
102 #define BAT_DEF(c,batFoo) {c##BAT_##batFoo}
|
|
103
|
|
104 #ifdef FAX_AND_DATA
|
|
105 #define BAT_FAD(c,batFoo) {c##BAT_##batFoo}
|
|
106 #else
|
|
107 #define BAT_FAD(c,batFoo) {0}
|
|
108 #endif
|
|
109
|
|
110 #ifdef SIM_TOOLKIT
|
|
111 #define BAT_STK(c,batFoo) {c##BAT_##batFoo}
|
|
112 #else
|
|
113 #define BAT_STK(c,batFoo) {0}
|
|
114 #endif
|
|
115
|
|
116 #ifdef GPRS
|
|
117 #define BAT_GPR(c,batFoo) {c##BAT_##batFoo}
|
|
118 #else
|
|
119 #define BAT_GPR(c,batFoo) {0}
|
|
120 #endif
|
|
121
|
|
122 #if defined(FF_WAP) || defined(FF_TCP_IP) || defined(FF_SAT_E)
|
|
123 #define BAT_PPP(c,batFoo) {c##BAT_##batFoo}
|
|
124 #else
|
|
125 #define BAT_PPP(c,batFoo) {0}
|
|
126 #endif
|
|
127
|
|
128 /*
|
|
129 * all the set commands are in range of 0x0000..0x0nnn
|
|
130 * T_BAT_ctrl_params types is used as index to the table
|
|
131 */
|
|
132 #pragma message( __TODO__"Currently No Support for Wide Chars !" )
|
|
133
|
|
134 /* expand the macro by hand: BAT_DEF(s,PercentALS) --> sBAT_PercentALS */
|
|
135 LOCAL const BATCommand bat_cmds [] =
|
|
136 {
|
|
137 BAT_DEF(s,PercentALS), /* BAT_CMD_SET_PERCENT_ALS = 0x0 */
|
|
138 BAT_DEF(s,PercentBAND), /* BAT_CMD_SET_PERCENT_BAND = 0x1 */
|
|
139 BAT_BAS(ANDC), /* BAT_CMD_ANDC = 0x2 */
|
|
140 BAT_DEF(s,PlusCACM), /* BAT_CMD_SET_PLUS_CACM = 0x3 */
|
|
141 BAT_DEF(s,PlusCAMM), /* BAT_CMD_SET_PLUS_CAMM = 0x4 */
|
|
142 BAT_DEF(s,PlusCAOC), /* BAT_CMD_SET_PLUS_CAOC = 0x5 */
|
|
143 BAT_DEF(s,PercentCBHZ), /* BAT_CMD_SET_PERCENT_CBHZ = 0x6 */
|
|
144 BAT_DEF(s,PlusCBST), /* BAT_CMD_SET_PLUS_CBST = 0x7 */
|
|
145 BAT_DEF(s,PercentCCBS), /* BAT_CMD_SET_PERCENT_CCBS = 0x8 */
|
|
146 BAT_DEF(s,PlusCCFC), /* BAT_CMD_SET_PLUS_CCFC = 0x9 */
|
|
147 BAT_DEF(s,PlusCCLK), /* BAT_CMD_SET_PLUS_CCLK = 0xa */
|
|
148 BAT_DEF(s,PlusCCUG), /* BAT_CMD_SET_PLUS_CCUG = 0xb */
|
|
149 BAT_DEF(s,PlusCCWA), /* BAT_CMD_SET_PLUS_CCWA = 0xc */
|
|
150 BAT_DEF(s,PlusCCWA), /* BAT_CMD_SET_PLUS_CCWA_W = 0xd */
|
|
151 BAT_DEF(s,PlusCFUN), /* BAT_CMD_SET_PLUS_CFUN = 0xe */
|
|
152 BAT_GPR(s,PercentCGAATT), /* BAT_CMD_SET_PERCENT_CGAATT = 0xf */
|
|
153 BAT_GPR(s,PlusCGACT), /* BAT_CMD_SET_PLUS_CGACT = 0x10 */
|
|
154 BAT_GPR(s,PlusCGANS), /* BAT_CMD_SET_PLUS_CGANS = 0x11 */
|
|
155 BAT_GPR(s,PlusCGATT), /* BAT_CMD_SET_PLUS_CGATT = 0x12 */
|
|
156 BAT_GPR(s,PercentCGCLASS), /* BAT_CMD_SET_PERCENT_CGCLASS = 0x13 */
|
|
157 BAT_GPR(s,PlusCGCLASS), /* BAT_CMD_SET_PLUS_CGCLASS = 0x14 */
|
|
158 BAT_GPR(s,PlusCGDATA), /* BAT_CMD_SET_PLUS_CGDATA = 0x15 */
|
|
159 BAT_GPR(s,PlusCGDCONT), /* BAT_CMD_SET_PLUS_CGDCONT = 0x16 */
|
|
160 BAT_GPR(s,PercentCGMM), /* BAT_CMD_SET_PERCENT_CGMM = 0x17 */
|
|
161 BAT_GPR(s,PlusCGPADDR), /* BAT_CMD_SET_PLUS_CGPADDR = 0x18 */
|
|
162 BAT_GPR(s,PercentCGPCO), /* BAT_CMD_SET_PERCENT_CGPCO = 0x19 */
|
|
163 BAT_GPR(s,PercentCGPPP), /* BAT_CMD_SET_PERCENT_CGPPP = 0x1a */
|
|
164 BAT_GPR(s,PlusCGQMIN), /* BAT_CMD_SET_PLUS_CGQMIN = 0x1b */
|
|
165 BAT_GPR(s,PlusCGQREQ), /* BAT_CMD_SET_PLUS_CGQREQ = 0x1c */
|
|
166 BAT_GPR(s,PlusCGSMS), /* BAT_CMD_SET_PLUS_CGSMS = 0x1d */
|
|
167 BAT_DEF(s,PercentCHLD), /* BAT_CMD_SET_PERCENT_CHLD = 0x1e */
|
|
168 BAT_DEF(s,PercentCHPL), /* BAT_CMD_SET_PERCENT_CHPL = 0x1f */
|
|
169 BAT_DEF(s,PercentCHPL), /* BAT_CMD_SET_PERCENT_CHPL_W = 0x20 */
|
|
170 BAT_DEF(s,PlusCIND), /* BAT_CMD_SET_PLUS_CIND = 0x21 */
|
|
171 BAT_DEF(s,PlusCLAN), /* BAT_CMD_SET_PLUS_CLAN = 0x22 */
|
|
172 BAT_DEF(s,PlusCLCK), /* BAT_CMD_SET_PLUS_CLCK = 0x23 */
|
|
173 BAT_DEF(s,PlusCLIR), /* BAT_CMD_SET_PLUS_CLIR = 0x24 */
|
|
174 BAT_DEF(s,PlusCLVL), /* BAT_CMD_SET_PLUS_CLVL = 0x25 */
|
|
175 BAT_DEF(s,PlusCMER), /* BAT_CMD_SET_PLUS_CMER = 0x26 */
|
|
176 BAT_DEF(s,PlusCMGC), /* BAT_CMD_SET_PLUS_CMGC = 0x27 */
|
|
177 BAT_DEF(s,PlusCMGD), /* BAT_CMD_SET_PLUS_CMGD = 0x28 */
|
|
178 BAT_DEF(s,PlusCMGL), /* BAT_CMD_SET_PLUS_CMGL = 0x29 */
|
|
179 BAT_DEF(s,PlusCMGL), /* BAT_CMD_SET_PLUS_CMGL_W = 0x2a */
|
|
180 BAT_DEF(s,PlusCMGR), /* BAT_CMD_SET_PLUS_CMGR = 0x2b */
|
|
181 BAT_DEF(s,PlusCMGR), /* BAT_CMD_SET_PLUS_CMGR_W = 0x2c */
|
|
182 BAT_DEF(s,PlusCMGS), /* BAT_CMD_SET_PLUS_CMGS = 0x2d */
|
|
183 BAT_DEF(s,PlusCMGW), /* BAT_CMD_SET_PLUS_CMGW = 0x2e */
|
|
184 BAT_DEF(s,PlusCMOD), /* BAT_CMD_SET_PLUS_CMOD = 0x2f */
|
|
185 BAT_DEF(s,PlusCMSS), /* BAT_CMD_SET_PLUS_CMSS = 0x30 */
|
|
186 BAT_DEF(s,PlusCMUT), /* BAT_CMD_SET_PLUS_CMUT = 0x31 */
|
|
187 BAT_DEF(s,PlusCMUX), /* BAT_CMD_SET_PLUS_CMUX = 0x32 */
|
|
188 BAT_DEF(s,PlusCNMA), /* BAT_CMD_SET_PLUS_CNMA = 0x33 */
|
|
189 BAT_DEF(s,PlusCNMI), /* BAT_CMD_SET_PLUS_CNMI = 0x34 */
|
|
190 BAT_DEF(s,PercentCOPS), /* BAT_CMD_SET_PERCENT_COPS = 0x35 */
|
|
191 BAT_DEF(s,PlusCOPS), /* BAT_CMD_SET_PLUS_COPS = 0x36 */
|
|
192 BAT_DEF(s,PercentCOPS), /* BAT_CMD_SET_PERCENT_COPS_W = 0x37 */
|
|
193 BAT_DEF(s,PercentCPALS), /* BAT_CMD_SET_PERCENT_CPALS = 0x38 */
|
|
194 BAT_DEF(s,PercentCPALS), /* BAT_CMD_SET_PERCENT_CPALS_W = 0x39 */
|
|
195 BAT_DEF(s,PlusCPBF), /* BAT_CMD_SET_PLUS_CPBF = 0x3a */
|
|
196 BAT_DEF(s,PlusCPBF), /* BAT_CMD_SET_PLUS_CPBF_W = 0x3b */
|
|
197 BAT_DEF(s,PlusCPBR), /* BAT_CMD_SET_PLUS_CPBR = 0x3c */
|
|
198 BAT_DEF(s,PlusCPBR), /* BAT_CMD_SET_PLUS_CPBR_W = 0x3d */
|
|
199 BAT_DEF(s,PlusCPBS), /* BAT_CMD_SET_PLUS_CPBS = 0x3e */
|
|
200 BAT_DEF(s,PlusCPBW), /* BAT_CMD_SET_PLUS_CPBW = 0x3f */
|
|
201 BAT_DEF(s,PlusCPBW), /* BAT_CMD_SET_PLUS_CPBW_W = 0x40 */
|
|
202 BAT_DEF(s,PercentCPCFU), /* BAT_CMD_SET_PERCENT_CPCFU = 0x41 */
|
|
203 BAT_DEF(s,PercentCPHS), /* BAT_CMD_SET_PERCENT_CPHS = 0x42 */
|
|
204 BAT_DEF(s,PlusCPIN), /* BAT_CMD_SET_PLUS_CPIN = 0x43 */
|
|
205 BAT_DEF(s,PercentCPMB), /* BAT_CMD_SET_PERCENT_CPMB = 0x44 */
|
|
206 BAT_DEF(s,PercentCPMBW), /* BAT_CMD_SET_PERCENT_CPMBW = 0x45 */
|
|
207 BAT_DEF(s,PercentCPMBW), /* BAT_CMD_SET_PERCENT_CPMBW_W = 0x46 */
|
|
208 BAT_DEF(s,PercentCPMB), /* BAT_CMD_SET_PERCENT_CPMB_W = 0x47 */
|
|
209 BAT_DEF(s,PlusCPMS), /* BAT_CMD_SET_PLUS_CPMS = 0x48 */
|
|
210 BAT_DEF(s,PercentCPNUMS), /* BAT_CMD_SET_PERCENT_CPNUMS = 0x49 */
|
|
211 BAT_DEF(s,PercentCPNUMS), /* BAT_CMD_SET_PERCENT_CPNUMS_W = 0x4a */
|
|
212 BAT_DEF(s,PlusCPOL), /* BAT_CMD_SET_PLUS_CPOL = 0x4b */
|
|
213 BAT_DEF(s,PlusCPOL), /* BAT_CMD_SET_PLUS_CPOL_W = 0x4c */
|
|
214 BAT_DEF(s,PercentCPRSM), /* BAT_CMD_SET_PERCENT_CPRSM = 0x4d */
|
|
215 BAT_DEF(s,PlusCPUC), /* BAT_CMD_SET_PLUS_CPUC = 0x4e */
|
|
216 BAT_DEF(s,PlusCPUC), /* BAT_CMD_SET_PLUS_CPUC_W = 0x4f */
|
|
217 BAT_DEF(s,PercentCPVWI), /* BAT_CMD_SET_PERCENT_CPVWI = 0x50 */
|
|
218 BAT_DEF(s,PlusCPWD), /* BAT_CMD_SET_PLUS_CPWD = 0x51 */
|
|
219 BAT_DEF(s,PlusCRES), /* BAT_CMD_SET_PLUS_CRES = 0x52 */
|
|
220 BAT_DEF(s,PlusCRLP), /* BAT_CMD_SET_PLUS_CRLP = 0x53 */
|
|
221 BAT_DEF(s,PlusCRSM), /* BAT_CMD_SET_PLUS_CRSM = 0x54 */
|
|
222 BAT_DEF(s,PlusCSAS), /* BAT_CMD_SET_PLUS_CSAS = 0x55 */
|
|
223 BAT_DEF(s,PlusCSCA), /* BAT_CMD_SET_PLUS_CSCA = 0x56 */
|
|
224 BAT_DEF(s,PlusCSCB), /* BAT_CMD_SET_PLUS_CSCB = 0x57 */
|
|
225 BAT_DEF(s,PlusCSCS), /* BAT_CMD_SET_PLUS_CSCS = 0x58 */
|
|
226 BAT_DEF(s,PlusCSIM), /* BAT_CMD_SET_PLUS_CSIM = 0x59 */
|
|
227 BAT_DEF(s,PlusCSMS), /* BAT_CMD_SET_PLUS_CSMS = 0x5a */
|
|
228 BAT_DEF(s,PlusCSNS), /* BAT_CMD_SET_PLUS_CSNS = 0x5b */
|
|
229 BAT_DEF(s,PlusCSTA), /* BAT_CMD_SET_PLUS_CSTA = 0x5c */
|
|
230 BAT_DEF(s,PlusCSVM), /* BAT_CMD_SET_PLUS_CSVM = 0x5d */
|
|
231 BAT_DEF(s,PlusCTFR), /* BAT_CMD_SET_PLUS_CTFR = 0x5e */
|
|
232 BAT_DEF(s,PercentCTTY), /* BAT_CMD_SET_PERCENT_CTTY = 0x5f */
|
|
233 BAT_DEF(s,PlusCTZU), /* BAT_CMD_SET_PLUS_CTZU = 0x60 */
|
|
234 BAT_DEF(s,PlusCUSD), /* BAT_CMD_SET_PLUS_CUSD = 0x61 */
|
|
235 BAT_DEF(s,PlusCUSD), /* BAT_CMD_SET_PLUS_CUSD_W = 0x62 */
|
|
236 BAT_DEF(s,PercentCUST), /* BAT_CMD_SET_PERCENT_CUST = 0x63 */
|
|
237 BAT_DEF(s,PercentCWUP), /* BAT_CMD_SET_PERCENT_CWUP = 0x64 */
|
|
238 BAT_BAS(D), /* BAT_CMD_AT_D = 0x65 */
|
|
239 BAT_DEF(s,PercentDATA), /* BAT_CMD_SET_PERCENT_DATA = 0x66 */
|
|
240 BAT_DEF(s,PercentDINF), /* BAT_CMD_SET_PERCENT_DINF = 0x67 */
|
|
241 BAT_DEF(s,PlusDS), /* BAT_CMD_SET_PLUS_DS = 0x68 */
|
|
242 BAT_BAS(D), /* BAT_CMD_AT_D_W = 0x69 */
|
|
243 BAT_DEF(s,PercentEFRSLT), /* BAT_CMD_SET_PERCENT_EFRSLT = 0x6a */
|
|
244 BAT_DEF(s,PercentEM), /* BAT_CMD_SET_PERCENT_EM = 0x6b */
|
|
245 BAT_FAD(s,PlusFAP), /* BAT_CMD_SET_PLUS_FAP = 0x6c */
|
|
246 BAT_FAD(s,PlusFBO), /* BAT_CMD_SET_PLUS_FBO = 0x6d */
|
|
247 BAT_FAD(s,PlusFBU), /* BAT_CMD_SET_PLUS_FBU = 0x6e */
|
|
248 BAT_FAD(s,PlusFCC), /* BAT_CMD_SET_PLUS_FCC = 0x6f */
|
|
249 BAT_FAD(s,PlusFCLASS), /* BAT_CMD_SET_PLUS_FCLASS = 0x70 */
|
|
250 BAT_FAD(s,PlusFCQ), /* BAT_CMD_SET_PLUS_FCQ = 0x71 */
|
|
251 BAT_FAD(s,PlusFCR), /* BAT_CMD_SET_PLUS_FCR = 0x72 */
|
|
252 BAT_FAD(s,PlusFCT), /* BAT_CMD_SET_PLUS_FCT = 0x73 */
|
|
253 BAT_FAD(s,PlusFEA), /* BAT_CMD_SET_PLUS_FEA = 0x74 */
|
|
254 BAT_FAD(s,PlusFFC), /* BAT_CMD_SET_PLUS_FFC = 0x75 */
|
|
255 BAT_FAD(s,PlusFIE), /* BAT_CMD_SET_PLUS_FIE = 0x76 */
|
|
256 BAT_FAD(s,PlusFIS), /* BAT_CMD_SET_PLUS_FIS = 0x77 */
|
|
257 BAT_FAD(s,PlusFIT), /* BAT_CMD_SET_PLUS_FIT = 0x78 */
|
|
258 BAT_FAD(s,PlusFLI), /* BAT_CMD_SET_PLUS_FLI = 0x79 */
|
|
259 BAT_FAD(s,PlusFLO), /* BAT_CMD_SET_PLUS_FLO = 0x7a */
|
|
260 BAT_FAD(s,PlusFLP), /* BAT_CMD_SET_PLUS_FLP = 0x7b */
|
|
261 BAT_FAD(s,PlusFMS), /* BAT_CMD_SET_PLUS_FMS = 0x7c */
|
|
262 BAT_FAD(s,PlusFNS), /* BAT_CMD_SET_PLUS_FNS = 0x7d */
|
|
263 BAT_FAD(s,PlusFPA), /* BAT_CMD_SET_PLUS_FPA = 0x7e */
|
|
264 BAT_FAD(s,PlusFPI), /* BAT_CMD_SET_PLUS_FPI = 0x7f */
|
|
265 BAT_FAD(s,PlusFPS), /* BAT_CMD_SET_PLUS_FPS = 0x80 */
|
|
266 BAT_FAD(s,PlusFPW), /* BAT_CMD_SET_PLUS_FPW = 0x81 */
|
|
267 BAT_FAD(s,PlusFRQ), /* BAT_CMD_SET_PLUS_FRQ = 0x82 */
|
|
268 BAT_FAD(s,PlusFSA), /* BAT_CMD_SET_PLUS_FSA = 0x83 */
|
|
269 BAT_FAD(s,PlusFSP), /* BAT_CMD_SET_PLUS_FSP = 0x84 */
|
|
270 BAT_DEF(s,PlusICF), /* BAT_CMD_SET_PLUS_ICF = 0x85 */
|
|
271 BAT_DEF(s,PlusIFC), /* BAT_CMD_SET_PLUS_IFC = 0x86 */
|
|
272 BAT_DEF(s,PlusIPR), /* BAT_CMD_SET_PLUS_IPR = 0x87 */
|
|
273 BAT_DEF(s,PercentPBCF), /* BAT_CMD_SET_PERCENT_PBCF = 0x88 */
|
|
274 BAT_PPP(s,PercentPPP), /* BAT_CMD_SET_PERCENT_PPP = 0x89 */
|
|
275 BAT_DEF(s,PercentPVRF), /* BAT_CMD_SET_PERCENT_PVRF = 0x8a */
|
|
276 BAT_DEF(s,PercentRDL), /* BAT_CMD_SET_PERCENT_RDL = 0x8b */
|
|
277 BAT_DEF(s,PercentRDLB), /* BAT_CMD_SET_PERCENT_RDLB = 0x8c */
|
|
278 BAT_STK(s,PercentSATC), /* BAT_CMD_SET_PERCENT_SATC = 0x8d */
|
|
279 BAT_STK(s,PercentSATCC), /* BAT_CMD_SET_PERCENT_SATCC = 0x8e */
|
|
280 BAT_STK(s,PercentSATE), /* BAT_CMD_SET_PERCENT_SATE = 0x8f */
|
|
281 BAT_STK(s,PercentSATR), /* BAT_CMD_SET_PERCENT_SATR = 0x80 */
|
|
282 BAT_STK(s,PercentSATT), /* BAT_CMD_SET_PERCENT_SATT = 0x91 */
|
|
283 BAT_GPR(s,PercentSNCNT), /* BAT_CMD_SET_PERCENT_SNCNT = 0x92 */
|
|
284 BAT_DEF(s,PercentVTS), /* BAT_CMD_SET_PERCENT_VTS = 0x93 */
|
|
285 BAT_DEF(s,PlusVTS), /* BAT_CMD_SET_PLUS_VTS = 0x94 */
|
|
286 BAT_DEF(s,PlusWS46), /* BAT_CMD_SET_PLUS_WS46 = 0x95 */
|
|
287 BAT_DEF(s,PercentCPINF), /* BAT_CMD_SET_PERCENT_CPINF = 0x96 */
|
|
288 BAT_DEF(s,PercentCMGR), /* BAT_CMD_SET_PERCENT_CMGR = 0x97 */
|
|
289 BAT_DEF(s,PercentCMGL), /* BAT_CMD_SET_PERCENT_CMGL = 0x98 */
|
|
290 BAT_DEF(s,PercentCTZV) /* BAT_CMD_SET_PERCENT_CTZV = 0x99 */
|
|
291 };
|
|
292
|
|
293 LOCAL const BATCommand bat_cmds_without_params [] =
|
|
294 {
|
|
295 BAT_BAS(A), /* BAT_CMD_AT_A = 0x1000 */
|
|
296 BAT_DEF(s,PlusCBC), /* BAT_CMD_SET_PLUS_CBC = 0x1001 */
|
|
297 BAT_DEF(s,PlusCEER), /* BAT_CMD_SET_PLUS_CEER = 0x1002 */
|
|
298 BAT_DEF(s,PlusCIMI), /* BAT_CMD_SET_PLUS_CIMI = 0x1003 */
|
|
299 BAT_DEF(s,PlusCNUM), /* BAT_CMD_SET_PLUS_CNUM = 0x1004 */
|
|
300 BAT_DEF(s,PlusCNUM), /* BAT_CMD_SET_PLUS_CNUM_W = 0x1005 */
|
|
301 BAT_DEF(s,PlusCPAS), /* BAT_CMD_SET_PLUS_CPAS = 0x1006 */
|
|
302 BAT_DEF(s,PlusCSQ), /* BAT_CMD_SET_PLUS_CSQ = 0x1007 */
|
|
303 BAT_BAS(ANDF), /* BAT_CMD_ANDF = 0x1008 */
|
|
304 BAT_BAS(H), /* BAT_CMD_AT_H = 0x1009 */
|
|
305 BAT_BAS(O), /* BAT_CMD_AT_O = 0x100a */
|
|
306 BAT_BAS(Z), /* BAT_CMD_AT_Z = 0x100b */
|
|
307 BAT_DEF(q,PercentALS), /* BAT_CMD_QUE_PERCENT_ALS = 0x100c */
|
|
308 BAT_DEF(t,PercentALS), /* BAT_CMD_TST_PERCENT_ALS = 0x100d */
|
|
309 BAT_DEF(q,PercentATR), /* BAT_CMD_QUE_PERCENT_ATR = 0x100e */
|
|
310 BAT_DEF(q,PercentBAND), /* BAT_CMD_QUE_PERCENT_BAND = 0x100f */
|
|
311 BAT_DEF(t,PercentBAND), /* BAT_CMD_TST_PERCENT_BAND = 0x1010 */
|
|
312 BAT_DEF(q,PlusCACM), /* BAT_CMD_QUE_PLUS_CACM = 0x1011 */
|
|
313 BAT_DEF(q,PlusCAMM), /* BAT_CMD_QUE_PLUS_CAMM = 0x1012 */
|
|
314 BAT_DEF(q,PercentCBHZ), /* BAT_CMD_QUE_PERCENT_CBHZ = 0x1013 */
|
|
315 BAT_DEF(t,PercentCBHZ), /* BAT_CMD_TST_PERCENT_CBHZ = 0x1014 */
|
|
316 BAT_DEF(q,PlusCBST), /* BAT_CMD_QUE_PLUS_CBST = 0x1015 */
|
|
317 BAT_DEF(q,PercentCCBS), /* BAT_CMD_QUE_PERCENT_CCBS = 0x1016 */
|
|
318 BAT_DEF(q,PlusCCLK), /* BAT_CMD_QUE_PLUS_CCLK = 0x1017 */
|
|
319 BAT_DEF(q,PlusCCUG), /* BAT_CMD_QUE_PLUS_CCUG = 0x1018 */
|
|
320 BAT_DEF(q,PlusCFUN), /* BAT_CMD_QUE_PLUS_CFUN = 0x1019 */
|
|
321 BAT_GPR(q,PercentCGAATT), /* BAT_CMD_QUE_PERCENT_CGAATT = 0x101a */
|
|
322 BAT_GPR(q,PlusCGACT), /* BAT_CMD_QUE_PLUS_CGACT = 0x101b */
|
|
323 BAT_GPR(q,PlusCGATT), /* BAT_CMD_QUE_PLUS_CGATT = 0x101c */
|
|
324 BAT_GPR(q,PercentCGCLASS), /* BAT_CMD_QUE_PERCENT_CGCLASS = 0x101d */
|
|
325 BAT_GPR(q,PlusCGCLASS), /* BAT_CMD_QUE_PLUS_CGCLASS = 0x101e */
|
|
326 BAT_GPR(q,PlusCGDCONT), /* BAT_CMD_QUE_PLUS_CGDCONT = 0x101f */
|
|
327 BAT_GPR(t,PlusCGPADDR), /* BAT_CMD_TST_PLUS_CGPADDR = 0x1020 */
|
|
328 BAT_GPR(q,PercentCGPPP), /* BAT_CMD_QUE_PERCENT_CGPPP = 0x1021 */
|
|
329 BAT_GPR(q,PlusCGQMIN), /* BAT_CMD_QUE_PLUS_CGQMIN = 0x1022 */
|
|
330 BAT_GPR(q,PlusCGQREQ), /* BAT_CMD_QUE_PLUS_CGQREQ = 0x1023 */
|
|
331 BAT_GPR(q,PercentCGREG), /* BAT_CMD_QUE_PERCENT_CGREG = 0x1024 */
|
|
332 BAT_GPR(q,PlusCGREG), /* BAT_CMD_QUE_PLUS_CGREG = 0x1025 */
|
|
333 BAT_GPR(q,PlusCGSMS), /* BAT_CMD_QUE_PLUS_CGSMS = 0x1026 */
|
|
334 BAT_DEF(q,PlusCIND), /* BAT_CMD_QUE_PLUS_CIND = 0x1027 */
|
|
335 BAT_DEF(q,PlusCLAN), /* BAT_CMD_QUE_PLUS_CLAN = 0x1028 */
|
|
336 BAT_DEF(t,PlusCLAN), /* BAT_CMD_TST_PLUS_CLAN = 0x1029 */
|
|
337 BAT_DEF(q,PlusCLCC), /* BAT_CMD_QUE_PLUS_CLCC = 0x102a */
|
|
338 BAT_DEF(q,PlusCLIP), /* BAT_CMD_QUE_PLUS_CLIP = 0x102b */
|
|
339 BAT_DEF(q,PlusCLIP), /* BAT_CMD_QUE_PLUS_CLIP_W = 0x102c */
|
|
340 BAT_DEF(q,PlusCLIR), /* BAT_CMD_QUE_PLUS_CLIR = 0x102d */
|
|
341 BAT_DEF(q,PlusCLVL), /* BAT_CMD_QUE_PLUS_CLVL = 0x102e */
|
|
342 BAT_DEF(q,PlusCMER), /* BAT_CMD_QUE_PLUS_CMER = 0x102f */
|
|
343 BAT_DEF(q,PlusCMOD), /* BAT_CMD_QUE_PLUS_CMOD = 0x1030 */
|
|
344 BAT_DEF(q,PlusCMUT), /* BAT_CMD_QUE_PLUS_CMUT = 0x1031 */
|
|
345 BAT_DEF(q,PlusCMUX), /* BAT_CMD_QUE_PLUS_CMUX = 0x1032 */
|
|
346 BAT_DEF(q,PercentCNAP), /* BAT_CMD_QUE_PERCENT_CNAP = 0x1033 */
|
|
347 BAT_DEF(q,PlusCNMI), /* BAT_CMD_QUE_PLUS_CNMI = 0x1034 */
|
|
348 BAT_DEF(q,PlusCOLP), /* BAT_CMD_QUE_PLUS_COLP = 0x1035 */
|
|
349 BAT_DEF(q,PlusCOLP), /* BAT_CMD_QUE_PLUS_COLP_W = 0x1036 */
|
|
350 BAT_DEF(q,PercentCOPS), /* BAT_CMD_QUE_PERCENT_COPS = 0x1037 */
|
|
351 BAT_DEF(t,PercentCOPS), /* BAT_CMD_TST_PERCENT_COPS = 0x1038 */
|
|
352 BAT_DEF(q,PlusCOPS), /* BAT_CMD_QUE_PLUS_COPS = 0x1039 */
|
|
353 BAT_DEF(t,PlusCOPS), /* BAT_CMD_TST_PLUS_COPS = 0x103a */
|
|
354 BAT_DEF(q,PercentCOPS), /* BAT_CMD_QUE_PERCENT_COPS_W = 0x103b */
|
|
355 BAT_DEF(t,PercentCOPS), /* BAT_CMD_TST_PERCENT_COPS_W = 0x103c */
|
|
356 BAT_DEF(q,PercentCPALS), /* BAT_CMD_QUE_PERCENT_CPALS = 0x103d */
|
|
357 BAT_DEF(q,PercentCPALS), /* BAT_CMD_QUE_PERCENT_CPALS_W = 0x103e */
|
|
358 BAT_DEF(t,PlusCPBF), /* BAT_CMD_TST_PLUS_CPBF = 0x103f */
|
|
359 BAT_DEF(t,PlusCPBF), /* BAT_CMD_TST_PLUS_CPBF_W = 0x1040 */
|
|
360 BAT_DEF(t,PlusCPBR), /* BAT_CMD_TST_PLUS_CPBR = 0x1041 */
|
|
361 BAT_DEF(t,PlusCPBR), /* BAT_CMD_TST_PLUS_CPBR_W = 0x1042 */
|
|
362 BAT_DEF(q,PercentCPBS), /* BAT_CMD_QUE_PERCENT_CPBS = 0x1043 */
|
|
363 BAT_DEF(q,PlusCPBS), /* BAT_CMD_QUE_PLUS_CPBS = 0x1044 */
|
|
364 BAT_DEF(t,PlusCPBW), /* BAT_CMD_TST_PLUS_CPBW = 0x1045 */
|
|
365 BAT_DEF(t,PlusCPBW), /* BAT_CMD_TST_PLUS_CPBW_W = 0x1046 */
|
|
366 BAT_DEF(q,PercentCPHS), /* BAT_CMD_QUE_PERCENT_CPHS = 0x1047 */
|
|
367 BAT_DEF(q,PlusCPIN), /* BAT_CMD_QUE_PLUS_CPIN = 0x1048 */
|
|
368 BAT_DEF(q,PercentCPINF), /* BAT_CMD_QUE_PERCENT_CPINF = 0x1049 */
|
|
369 BAT_DEF(q,PercentCPMB), /* BAT_CMD_QUE_PERCENT_CPMB = 0x104a */
|
|
370 BAT_DEF(t,PercentCPMBW), /* BAT_CMD_TST_PERCENT_CPMBW = 0x104b */
|
|
371 BAT_DEF(t,PercentCPMBW), /* BAT_CMD_TST_PERCENT_CPMBW_W = 0x104c */
|
|
372 BAT_DEF(q,PlusCPMS), /* BAT_CMD_QUE_PLUS_CPMS = 0x104d */
|
|
373 BAT_DEF(t,PercentCPNUMS), /* BAT_CMD_TST_PERCENT_CPNUMS = 0x104e */
|
|
374 BAT_DEF(t,PercentCPNUMS), /* BAT_CMD_TST_PERCENT_CPNUMS_W = 0x104f */
|
|
375 BAT_DEF(q,PlusCPOL), /* BAT_CMD_QUE_PLUS_CPOL = 0x1050 */
|
|
376 BAT_DEF(t,PlusCPOL), /* BAT_CMD_TST_PLUS_CPOL = 0x1051 */
|
|
377 BAT_DEF(q,PlusCPOL), /* BAT_CMD_QUE_PLUS_CPOL_W = 0x1052 */
|
|
378 BAT_DEF(t,PlusCPOL), /* BAT_CMD_TST_PLUS_CPOL_W = 0x1053 */
|
|
379 BAT_DEF(q,PercentCPOPN), /* BAT_CMD_QUE_PERCENT_CPOPN = 0x1054 */
|
|
380 BAT_DEF(q,PercentCPRSM), /* BAT_CMD_QUE_PERCENT_CPRSM = 0x1055 */
|
|
381 BAT_DEF(q,PlusCPUC), /* BAT_CMD_QUE_PLUS_CPUC = 0x1056 */
|
|
382 BAT_DEF(q,PlusCPUC), /* BAT_CMD_QUE_PLUS_CPUC_W = 0x1057 */
|
|
383 BAT_DEF(q,PercentCREG), /* BAT_CMD_QUE_PERCENT_CREG = 0x1058 */
|
|
384 BAT_DEF(t,PlusCRES), /* BAT_CMD_TST_PLUS_CRES = 0x1059 */
|
|
385 BAT_DEF(q,PlusCRLP), /* BAT_CMD_QUE_PLUS_CRLP = 0x105a */
|
|
386 BAT_DEF(t,PlusCSAS), /* BAT_CMD_TST_PLUS_CSAS = 0x105b */
|
|
387 BAT_DEF(q,PlusCSCA), /* BAT_CMD_QUE_PLUS_CSCA = 0x105c */
|
|
388 BAT_DEF(q,PlusCSCB), /* BAT_CMD_QUE_PLUS_CSCB = 0x105d */
|
|
389 BAT_DEF(q,PlusCSCS), /* BAT_CMD_QUE_PLUS_CSCS = 0x105e */
|
|
390 BAT_DEF(q,PlusCSMS), /* BAT_CMD_QUE_PLUS_CSMS = 0x105f */
|
|
391 BAT_DEF(q,PlusCSNS), /* BAT_CMD_QUE_PLUS_CSNS = 0x1060 */
|
|
392 BAT_DEF(q,PercentCSQ), /* BAT_CMD_QUE_PERCENT_CSQ = 0x1061 */
|
|
393 BAT_DEF(q,PlusCSTA), /* BAT_CMD_QUE_PLUS_CSTA = 0x1062 */
|
|
394 BAT_DEF(q,PlusCSVM), /* BAT_CMD_QUE_PLUS_CSVM = 0x1063 */
|
|
395 BAT_DEF(q,PercentCTTY), /* BAT_CMD_QUE_PERCENT_CTTY = 0x1064 */
|
|
396 BAT_DEF(q,PlusCTZU), /* BAT_CMD_QUE_PLUS_CTZU = 0x1065 */
|
|
397 BAT_DEF(q,PercentCUST), /* BAT_CMD_QUE_PERCENT_CUST = 0x1066 */
|
|
398 BAT_DEF(q,PercentDATA), /* BAT_CMD_QUE_PERCENT_DATA = 0x1067 */
|
|
399 BAT_DEF(q,PlusDS), /* BAT_CMD_QUE_PLUS_DS = 0x1068 */
|
|
400 BAT_FAD(q,PlusFAP), /* BAT_CMD_QUE_PLUS_FAP = 0x1069 */
|
|
401 BAT_FAD(q,PlusFBO), /* BAT_CMD_QUE_PLUS_FBO = 0x106a */
|
|
402 BAT_FAD(q,PlusFBS), /* BAT_CMD_QUE_PLUS_FBS = 0x106b */
|
|
403 BAT_FAD(q,PlusFBU), /* BAT_CMD_QUE_PLUS_FBU = 0x106c */
|
|
404 BAT_FAD(q,PlusFCC), /* BAT_CMD_QUE_PLUS_FCC = 0x106d */
|
|
405 BAT_FAD(q,PlusFCLASS), /* BAT_CMD_QUE_PLUS_FCLASS = 0x106e */
|
|
406 BAT_FAD(q,PlusFCQ), /* BAT_CMD_QUE_PLUS_FCQ = 0x106f */
|
|
407 BAT_FAD(q,PlusFCR), /* BAT_CMD_QUE_PLUS_FCR = 0x1070 */
|
|
408 BAT_FAD(q,PlusFCS), /* BAT_CMD_QUE_PLUS_FCS = 0x1071 */
|
|
409 BAT_FAD(q,PlusFCT), /* BAT_CMD_QUE_PLUS_FCT = 0x1072 */
|
|
410 NULL, /* BAT_CMD_QUE_PLUS_FEA = 0x1073 */
|
|
411 BAT_FAD(q,PlusFFC), /* BAT_CMD_QUE_PLUS_FFC = 0x1074 */
|
|
412 BAT_FAD(q,PlusFHS), /* BAT_CMD_QUE_PLUS_FHS = 0x1075 */
|
|
413 BAT_FAD(q,PlusFIE), /* BAT_CMD_QUE_PLUS_FIE = 0x1076 */
|
|
414 BAT_FAD(q,PlusFIS), /* BAT_CMD_QUE_PLUS_FIS = 0x1077 */
|
|
415 BAT_FAD(q,PlusFIT), /* BAT_CMD_QUE_PLUS_FIT = 0x1078 */
|
|
416 BAT_FAD(q,PlusFLI), /* BAT_CMD_QUE_PLUS_FLI = 0x1079 */
|
|
417 BAT_FAD(q,PlusFLO), /* BAT_CMD_QUE_PLUS_FLO = 0x107a */
|
|
418 BAT_FAD(q,PlusFLP), /* BAT_CMD_QUE_PLUS_FLP = 0x107b */
|
|
419 BAT_FAD(q,PlusFMS), /* BAT_CMD_QUE_PLUS_FMS = 0x107c */
|
|
420 BAT_FAD(q,PlusFNS), /* BAT_CMD_QUE_PLUS_FNS = 0x107d */
|
|
421 BAT_FAD(q,PlusFPA), /* BAT_CMD_QUE_PLUS_FPA = 0x107e */
|
|
422 BAT_FAD(q,PlusFPI), /* BAT_CMD_QUE_PLUS_FPI = 0x107f */
|
|
423 BAT_FAD(q,PlusFPS), /* BAT_CMD_QUE_PLUS_FPS = 0x1080 */
|
|
424 BAT_FAD(q,PlusFPW), /* BAT_CMD_QUE_PLUS_FPW = 0x1081 */
|
|
425 BAT_FAD(q,PlusFRQ), /* BAT_CMD_QUE_PLUS_FRQ = 0x1082 */
|
|
426 BAT_FAD(q,PlusFSA), /* BAT_CMD_QUE_PLUS_FSA = 0x1083 */
|
|
427 BAT_FAD(q,PlusFSP), /* BAT_CMD_QUE_PLUS_FSP = 0x1084 */
|
|
428 BAT_DEF(q,PlusICF), /* BAT_CMD_QUE_PLUS_ICF = 0x1085 */
|
|
429 BAT_DEF(q,PlusIFC), /* BAT_CMD_QUE_PLUS_IFC = 0x1086 */
|
|
430 NULL, /* BAT_CMD_QUE_PERCENT_IMEI = 0x1087 */
|
|
431 BAT_DEF(q,PlusIPR), /* BAT_CMD_QUE_PLUS_IPR = 0x1088 */
|
|
432 BAT_DEF(q,PercentPBCF), /* BAT_CMD_QUE_PERCENT_PBCF = 0x1089 */
|
|
433 BAT_PPP(q,PercentPPP), /* BAT_CMD_QUE_PERCENT_PPP = 0x108a */
|
|
434 BAT_DEF(q,PercentPVRF), /* BAT_CMD_QUE_PERCENT_PVRF = 0x108b */
|
|
435 BAT_DEF(q,PercentRDL), /* BAT_CMD_QUE_PERCENT_RDL = 0x108c */
|
|
436 BAT_DEF(q,PercentRDLB), /* BAT_CMD_QUE_PERCENT_RDLB = 0x108d */
|
|
437 BAT_STK(q,PercentSATC), /* BAT_CMD_QUE_PERCENT_SATC = 0x108e */
|
|
438 BAT_STK(q,PercentSATCC), /* BAT_CMD_QUE_PERCENT_SATCC = 0x108f */
|
|
439 BAT_GPR(q,PercentSNCNT), /* BAT_CMD_QUE_PERCENT_SNCNT = 0x1090 */
|
|
440 BAT_DEF(q,PlusWS46), /* BAT_CMD_QUE_PLUS_WS46 = 0x1091 */
|
|
441 BAT_DEF(q,PlusCDIP), /* BAT_CMD_QUE_PLUS_CDIP = 0x1092 */
|
|
442 BAT_DEF(s,PlusCGMI), /* BAT_CMD_SET_PLUS_CGMI = 0x1093 */
|
|
443 BAT_DEF(s,PlusCGMM), /* BAT_CMD_SET_PLUS_CGMM = 0x1094 */
|
|
444 BAT_DEF(s,PlusCGMR), /* BAT_CMD_SET_PLUS_CGMR = 0x1095 */
|
|
445 BAT_DEF(s,PlusCGSN) /* BAT_CMD_SET_PLUS_CGSN = 0x1096 */
|
|
446 };
|
|
447
|
|
448
|
|
449 typedef struct
|
|
450 {
|
|
451 size_t size;
|
|
452 } T_map_response_2_size;
|
|
453
|
|
454 static T_map_response_2_size response_2_size[] =
|
|
455 {
|
|
456 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_AT_OK = 0x0 */
|
|
457 {sizeof(T_BAT_res_at_connect)}, /* BAT_RES_AT_CONNECT = 0x1 */
|
|
458 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_AT_NO_CARRIER_FINAL = 0x2 */
|
|
459 {sizeof(T_BAT_res_plus_cme_error)}, /* BAT_RES_PLUS_CME_ERROR = 0x3 */
|
|
460 {sizeof(T_BAT_res_plus_cms_error)}, /* BAT_RES_PLUS_CMS_ERROR = 0x4 */
|
|
461 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_AT_BUSY = 0x5 */
|
|
462 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_AT_CHANNEL_BUSY = 0x6 */
|
|
463 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_AT_NO_ANSWER = 0x7 */
|
|
464 {sizeof(T_BAT_res_plus_ext_error)}, /* BAT_RES_PLUS_EXT_ERROR = 0x8 */
|
|
465 {sizeof(T_BAT_res_que_percent_als)}, /* BAT_RES_QUE_PERCENT_ALS = 0x9 */
|
|
466 {sizeof(T_BAT_res_tst_percent_als)}, /* BAT_RES_TST_PERCENT_ALS = 0xa */
|
|
467 {sizeof(T_BAT_res_que_percent_atr)}, /* BAT_RES_QUE_PERCENT_ATR = 0xb */
|
|
468 {sizeof(T_BAT_res_que_percent_band)}, /* BAT_RES_QUE_PERCENT_BAND = 0xc */
|
|
469 {sizeof(T_BAT_res_tst_percent_band)}, /* BAT_RES_TST_PERCENT_BAND = 0xd */
|
|
470 {sizeof(T_BAT_res_que_plus_cacm)}, /* BAT_RES_QUE_PLUS_CACM = 0xe */
|
|
471 {sizeof(T_BAT_res_que_plus_camm)}, /* BAT_RES_QUE_PLUS_CAMM = 0xf */
|
|
472 {sizeof(T_BAT_res_set_plus_caoc)}, /* BAT_RES_SET_PLUS_CAOC = 0x10 */
|
|
473 {sizeof(T_BAT_res_set_plus_cbc)}, /* BAT_RES_SET_PLUS_CBC = 0x11 */
|
|
474 {sizeof(T_BAT_res_que_percent_cbhz)}, /* BAT_RES_QUE_PERCENT_CBHZ = 0x12 */
|
|
475 {sizeof(T_BAT_res_tst_percent_cbhz)}, /* BAT_RES_TST_PERCENT_CBHZ = 0x13 */
|
|
476 {sizeof(T_BAT_res_que_plus_cbst)}, /* BAT_RES_QUE_PLUS_CBST = 0x14 */
|
|
477 {sizeof(T_BAT_res_que_percent_ccbs)}, /* BAT_RES_QUE_PERCENT_CCBS = 0x15 */
|
|
478 {sizeof(T_BAT_res_set_plus_ccfc)}, /* BAT_RES_SET_PLUS_CCFC = 0x16 */
|
|
479 {sizeof(T_BAT_res_que_plus_cclk)}, /* BAT_RES_QUE_PLUS_CCLK = 0x17 */
|
|
480 {sizeof(T_BAT_res_que_plus_ccug)}, /* BAT_RES_QUE_PLUS_CCUG = 0x18 */
|
|
481 {sizeof(T_BAT_res_set_plus_ccwa)}, /* BAT_RES_SET_PLUS_CCWA = 0x19 */
|
|
482 {sizeof(T_BAT_res_set_plus_ccwa_w)}, /* BAT_RES_SET_PLUS_CCWA_W = 0x1a */
|
|
483 {sizeof(T_BAT_res_set_plus_ceer)}, /* BAT_RES_SET_PLUS_CEER = 0x1b */
|
|
484 {sizeof(T_BAT_res_que_plus_cfun)}, /* BAT_RES_QUE_PLUS_CFUN = 0x1c */
|
|
485 {sizeof(T_BAT_res_que_percent_cgaatt)}, /* BAT_RES_QUE_PERCENT_CGAATT = 0x1d */
|
|
486 {sizeof(T_BAT_res_que_plus_cgact)}, /* BAT_RES_QUE_PLUS_CGACT = 0x1e */
|
|
487 {sizeof(T_BAT_res_que_plus_cgatt)}, /* BAT_RES_QUE_PLUS_CGATT = 0x1f */
|
|
488 {sizeof(T_BAT_res_que_percent_cgclass)}, /* BAT_RES_QUE_PERCENT_CGCLASS = 0x20 */
|
|
489 {sizeof(T_BAT_res_que_plus_cgclass)}, /* BAT_RES_QUE_PLUS_CGCLASS = 0x21 */
|
|
490 {sizeof(T_BAT_res_que_plus_cgdcont)}, /* BAT_RES_QUE_PLUS_CGDCONT = 0x22 */
|
|
491 {sizeof(T_BAT_res_set_plus_cgpaddr)}, /* BAT_RES_SET_PLUS_CGPADDR = 0x23 */
|
|
492 {sizeof(T_BAT_res_tst_plus_cgpaddr)}, /* BAT_RES_TST_PLUS_CGPADDR = 0x24 */
|
|
493 {sizeof(T_BAT_res_set_percent_cgpco)}, /* BAT_RES_SET_PERCENT_CGPCO = 0x25 */
|
|
494 {sizeof(T_BAT_res_que_percent_cgppp)}, /* BAT_RES_QUE_PERCENT_CGPPP = 0x26 */
|
|
495 {sizeof(T_BAT_res_que_plus_cgqmin)}, /* BAT_RES_QUE_PLUS_CGQMIN = 0x27 */
|
|
496 {sizeof(T_BAT_res_que_plus_cgqreq)}, /* BAT_RES_QUE_PLUS_CGQREQ = 0x28 */
|
|
497 {sizeof(T_BAT_res_que_percent_cgreg)}, /* BAT_RES_QUE_PERCENT_CGREG = 0x29 */
|
|
498 {sizeof(T_BAT_res_que_plus_cgreg)}, /* BAT_RES_QUE_PLUS_CGREG = 0x2a */
|
|
499 {sizeof(T_BAT_res_que_plus_cgsms)}, /* BAT_RES_QUE_PLUS_CGSMS = 0x2b */
|
|
500 {sizeof(T_BAT_res_set_percent_chpl)}, /* BAT_RES_SET_PERCENT_CHPL = 0x2c */
|
|
501 {sizeof(T_BAT_res_set_percent_chpl_w)}, /* BAT_RES_SET_PERCENT_CHPL_W = 0x2d */
|
|
502 {sizeof(T_BAT_res_set_plus_cimi)}, /* BAT_RES_SET_PLUS_CIMI = 0x2e */
|
|
503 {sizeof(T_BAT_res_que_plus_cind)}, /* BAT_RES_QUE_PLUS_CIND = 0x2f */
|
|
504 {sizeof(T_BAT_res_que_plus_clan)}, /* BAT_RES_QUE_PLUS_CLAN = 0x30 */
|
|
505 {sizeof(T_BAT_res_tst_plus_clan)}, /* BAT_RES_TST_PLUS_CLAN = 0x31 */
|
|
506 {sizeof(T_BAT_res_que_plus_clcc)}, /* BAT_RES_QUE_PLUS_CLCC = 0x32 */
|
|
507 {sizeof(T_BAT_res_set_plus_clck)}, /* BAT_RES_SET_PLUS_CLCK = 0x33 */
|
|
508 {sizeof(T_BAT_res_que_plus_clip)}, /* BAT_RES_QUE_PLUS_CLIP = 0x34 */
|
|
509 {sizeof(T_BAT_res_que_plus_clip_w)}, /* BAT_RES_QUE_PLUS_CLIP_W = 0x35 */
|
|
510 {sizeof(T_BAT_res_que_plus_clir)}, /* BAT_RES_QUE_PLUS_CLIR = 0x36 */
|
|
511 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_SET_PLUS_CLVL = 0x37 */
|
|
512 {sizeof(T_BAT_res_que_plus_clvl)}, /* BAT_RES_QUE_PLUS_CLVL = 0x38 */
|
|
513 {sizeof(T_BAT_res_que_plus_cmer)}, /* BAT_RES_QUE_PLUS_CMER = 0x39 */
|
|
514 {sizeof(T_BAT_res_set_plus_cmgc)}, /* BAT_RES_SET_PLUS_CMGC = 0x3a */
|
|
515 {sizeof(T_BAT_res_set_plus_cmgl)}, /* BAT_RES_SET_PLUS_CMGL = 0x3b */
|
|
516 {sizeof(T_BAT_res_set_plus_cmgl_w)}, /* BAT_RES_SET_PLUS_CMGL_W = 0x3c */
|
|
517 {sizeof(T_BAT_res_set_plus_cmgr)}, /* BAT_RES_SET_PLUS_CMGR = 0x3d */
|
|
518 {sizeof(T_BAT_res_set_plus_cmgr_w)}, /* BAT_RES_SET_PLUS_CMGR_W = 0x3e */
|
|
519 {sizeof(T_BAT_res_set_plus_cmgs)}, /* BAT_RES_SET_PLUS_CMGS = 0x3f */
|
|
520 {sizeof(T_BAT_res_set_plus_cmgw)}, /* BAT_RES_SET_PLUS_CMGW = 0x40 */
|
|
521 {sizeof(T_BAT_res_que_plus_cmod)}, /* BAT_RES_QUE_PLUS_CMOD = 0x41 */
|
|
522 {sizeof(T_BAT_res_que_plus_cmut)}, /* BAT_RES_QUE_PLUS_CMUT = 0x42 */
|
|
523 {sizeof(T_BAT_res_que_plus_cmux)}, /* BAT_RES_QUE_PLUS_CMUX = 0x43 */
|
|
524 {sizeof(T_BAT_res_que_percent_cnap)}, /* BAT_RES_QUE_PERCENT_CNAP = 0x44 */
|
|
525 {sizeof(T_BAT_res_que_plus_cnmi)}, /* BAT_RES_QUE_PLUS_CNMI = 0x45 */
|
|
526 {sizeof(T_BAT_res_set_plus_cnum)}, /* BAT_RES_SET_PLUS_CNUM = 0x46 */
|
|
527 {sizeof(T_BAT_res_set_plus_cnum_w)}, /* BAT_RES_SET_PLUS_CNUM_W = 0x47 */
|
|
528 {sizeof(T_BAT_res_que_plus_colp)}, /* BAT_RES_QUE_PLUS_COLP = 0x48 */
|
|
529 {sizeof(T_BAT_res_que_plus_colp_w)}, /* BAT_RES_QUE_PLUS_COLP_W = 0x49 */
|
|
530 {sizeof(T_BAT_res_que_percent_cops)}, /* BAT_RES_QUE_PERCENT_COPS = 0x4a */
|
|
531 {sizeof(T_BAT_res_tst_percent_cops)}, /* BAT_RES_TST_PERCENT_COPS = 0x4b */
|
|
532 {sizeof(T_BAT_res_que_plus_cops)}, /* BAT_RES_QUE_PLUS_COPS = 0x4c */
|
|
533 {sizeof(T_BAT_res_tst_plus_cops)}, /* BAT_RES_TST_PLUS_COPS = 0x4d */
|
|
534 {sizeof(T_BAT_res_que_percent_cops_w)}, /* BAT_RES_QUE_PERCENT_COPS_W = 0x4e */
|
|
535 {sizeof(T_BAT_res_tst_percent_cops_w)}, /* BAT_RES_TST_PERCENT_COPS_W = 0x4f */
|
|
536 {sizeof(T_BAT_res_set_percent_cpals)}, /* BAT_RES_SET_PERCENT_CPALS = 0x50 */
|
|
537 {sizeof(T_BAT_res_que_percent_cpals)}, /* BAT_RES_QUE_PERCENT_CPALS = 0x51 */
|
|
538 {sizeof(T_BAT_res_set_percent_cpals_w)}, /* BAT_RES_SET_PERCENT_CPALS_W = 0x52 */
|
|
539 {sizeof(T_BAT_res_que_percent_cpals_w)}, /* BAT_RES_QUE_PERCENT_CPALS_W = 0x53 */
|
|
540 {sizeof(T_BAT_res_set_plus_cpas)}, /* BAT_RES_SET_PLUS_CPAS = 0x54 */
|
|
541 {sizeof(T_BAT_res_set_plus_cpbf)}, /* BAT_RES_SET_PLUS_CPBF = 0x55 */
|
|
542 {sizeof(T_BAT_res_tst_plus_cpbf)}, /* BAT_RES_TST_PLUS_CPBF = 0x56 */
|
|
543 {sizeof(T_BAT_res_set_plus_cpbf_w)}, /* BAT_RES_SET_PLUS_CPBF_W = 0x57 */
|
|
544 {sizeof(T_BAT_res_tst_plus_cpbf_w)}, /* BAT_RES_TST_PLUS_CPBF_W = 0x58 */
|
|
545 {sizeof(T_BAT_res_set_plus_cpbr)}, /* BAT_RES_SET_PLUS_CPBR = 0x59 */
|
|
546 {sizeof(T_BAT_res_tst_plus_cpbr)}, /* BAT_RES_TST_PLUS_CPBR = 0x5a */
|
|
547 {sizeof(T_BAT_res_set_plus_cpbr_w)}, /* BAT_RES_SET_PLUS_CPBR_W = 0x5b */
|
|
548 {sizeof(T_BAT_res_tst_plus_cpbr_w)}, /* BAT_RES_TST_PLUS_CPBR_W = 0x5c */
|
|
549 {sizeof(T_BAT_res_que_percent_cpbs)}, /* BAT_RES_QUE_PERCENT_CPBS = 0x5d */
|
|
550 {sizeof(T_BAT_res_que_plus_cpbs)}, /* BAT_RES_QUE_PLUS_CPBS = 0x5e */
|
|
551 {sizeof(T_BAT_res_tst_plus_cpbw)}, /* BAT_RES_TST_PLUS_CPBW = 0x5f */
|
|
552 {sizeof(T_BAT_res_tst_plus_cpbw_w)}, /* BAT_RES_TST_PLUS_CPBW_W = 0x60 */
|
|
553 {sizeof(T_BAT_res_set_percent_cpcfu)}, /* BAT_RES_SET_PERCENT_CPCFU = 0x61 */
|
|
554 {sizeof(T_BAT_res_que_percent_cphs)}, /* BAT_RES_QUE_PERCENT_CPHS = 0x62 */
|
|
555 {sizeof(T_BAT_res_que_plus_cpin)}, /* BAT_RES_QUE_PLUS_CPIN = 0x63 */
|
|
556 {sizeof(T_BAT_res_que_percent_cpinf)}, /* BAT_RES_QUE_PERCENT_CPINF = 0x64 */
|
|
557 {sizeof(T_BAT_res_set_percent_cpmb)}, /* BAT_RES_SET_PERCENT_CPMB = 0x65 */
|
|
558 {sizeof(T_BAT_res_que_percent_cpmb)}, /* BAT_RES_QUE_PERCENT_CPMB = 0x66 */
|
|
559 {sizeof(T_BAT_res_tst_percent_cpmbw)}, /* BAT_RES_TST_PERCENT_CPMBW = 0x67 */
|
|
560 {sizeof(T_BAT_res_tst_percent_cpmbw_w)}, /* BAT_RES_TST_PERCENT_CPMBW_W = 0x68 */
|
|
561 {sizeof(T_BAT_res_set_percent_cpmb_w)}, /* BAT_RES_SET_PERCENT_CPMB_W = 0x69 */
|
|
562 {sizeof(T_BAT_res_set_plus_cpms)}, /* BAT_RES_SET_PLUS_CPMS = 0x6a */
|
|
563 {sizeof(T_BAT_res_que_plus_cpms)}, /* BAT_RES_QUE_PLUS_CPMS = 0x6b */
|
|
564 {sizeof(T_BAT_res_set_percent_cpnums)}, /* BAT_RES_SET_PERCENT_CPNUMS = 0x6c */
|
|
565 {sizeof(T_BAT_res_tst_percent_cpnums)}, /* BAT_RES_TST_PERCENT_CPNUMS = 0x6d */
|
|
566 {sizeof(T_BAT_res_set_percent_cpnums_w)},/* BAT_RES_SET_PERCENT_CPNUMS_W = 0x6e */
|
|
567 {sizeof(T_BAT_res_tst_percent_cpnums_w)},/* BAT_RES_TST_PERCENT_CPNUMS_W = 0x6f */
|
|
568 {sizeof(T_BAT_res_que_plus_cpol)}, /* BAT_RES_QUE_PLUS_CPOL = 0x70 */
|
|
569 {sizeof(T_BAT_res_tst_plus_cpol)}, /* BAT_RES_TST_PLUS_CPOL = 0x71 */
|
|
570 {sizeof(T_BAT_res_que_plus_cpol_w)}, /* BAT_RES_QUE_PLUS_CPOL_W = 0x72 */
|
|
571 {sizeof(T_BAT_res_tst_plus_cpol_w)}, /* BAT_RES_TST_PLUS_CPOL_W = 0x73 */
|
|
572 {sizeof(T_BAT_res_que_percent_cpopn)}, /* BAT_RES_QUE_PERCENT_CPOPN = 0x74 */
|
|
573 {sizeof(T_BAT_res_que_percent_cprsm)}, /* BAT_RES_QUE_PERCENT_CPRSM = 0x75 */
|
|
574 {sizeof(T_BAT_res_que_plus_cpuc)}, /* BAT_RES_QUE_PLUS_CPUC = 0x76 */
|
|
575 {sizeof(T_BAT_res_que_plus_cpuc_w)}, /* BAT_RES_QUE_PLUS_CPUC_W = 0x77 */
|
|
576 {sizeof(T_BAT_res_set_percent_cpvwi)}, /* BAT_RES_SET_PERCENT_CPVWI = 0x78 */
|
|
577 {sizeof(T_BAT_res_que_percent_creg)}, /* BAT_RES_QUE_PERCENT_CREG = 0x79 */
|
|
578 {sizeof(T_BAT_res_tst_plus_cres)}, /* BAT_RES_TST_PLUS_CRES = 0x7a */
|
|
579 {sizeof(T_BAT_res_que_plus_crlp)}, /* BAT_RES_QUE_PLUS_CRLP = 0x7b */
|
|
580 {sizeof(T_BAT_res_set_plus_crsm)}, /* BAT_RES_SET_PLUS_CRSM = 0x7c */
|
|
581 {sizeof(T_BAT_res_tst_plus_csas)}, /* BAT_RES_TST_PLUS_CSAS = 0x7d */
|
|
582 {sizeof(T_BAT_res_que_plus_csca)}, /* BAT_RES_QUE_PLUS_CSCA = 0x7e */
|
|
583 {sizeof(T_BAT_res_que_plus_cscb)}, /* BAT_RES_QUE_PLUS_CSCB = 0x7f */
|
|
584 {sizeof(T_BAT_res_que_plus_cscs)}, /* BAT_RES_QUE_PLUS_CSCS = 0x80 */
|
|
585 {sizeof(T_BAT_res_set_plus_csim)}, /* BAT_RES_SET_PLUS_CSIM = 0x81 */
|
|
586 {sizeof(T_BAT_res_que_plus_csms)}, /* BAT_RES_QUE_PLUS_CSMS = 0x82 */
|
|
587 {sizeof(T_BAT_res_que_plus_csns)}, /* BAT_RES_QUE_PLUS_CSNS = 0x83 */
|
|
588 {sizeof(T_BAT_res_que_percent_csq)}, /* BAT_RES_QUE_PERCENT_CSQ = 0x84 */
|
|
589 {sizeof(T_BAT_res_set_plus_csq)}, /* BAT_RES_SET_PLUS_CSQ = 0x85 */
|
|
590 {sizeof(T_BAT_res_que_plus_csta)}, /* BAT_RES_QUE_PLUS_CSTA = 0x86 */
|
|
591 {sizeof(T_BAT_res_que_plus_csvm)}, /* BAT_RES_QUE_PLUS_CSVM = 0x87 */
|
|
592 {sizeof(T_BAT_res_que_percent_ctty)}, /* BAT_RES_QUE_PERCENT_CTTY = 0x88 */
|
|
593 {sizeof(T_BAT_res_que_plus_ctzu)}, /* BAT_RES_QUE_PLUS_CTZU = 0x89 */
|
|
594 {sizeof(T_BAT_res_que_percent_cust)}, /* BAT_RES_QUE_PERCENT_CUST = 0x8a */
|
|
595 {sizeof(T_BAT_res_que_percent_data)}, /* BAT_RES_QUE_PERCENT_DATA = 0x8b */
|
|
596 {sizeof(T_BAT_res_set_percent_dinf)}, /* BAT_RES_SET_PERCENT_DINF = 0x8c */
|
|
597 {sizeof(T_BAT_res_que_plus_ds)}, /* BAT_RES_QUE_PLUS_DS = 0x8d */
|
|
598 {sizeof(T_BAT_res_que_plus_fap)}, /* BAT_RES_QUE_PLUS_FAP = 0x8e */
|
|
599 {sizeof(T_BAT_res_que_plus_fbo)}, /* BAT_RES_QUE_PLUS_FBO = 0x8f */
|
|
600 {sizeof(T_BAT_res_que_plus_fbs)}, /* BAT_RES_QUE_PLUS_FBS = 0x90 */
|
|
601 {sizeof(T_BAT_res_que_plus_fbu)}, /* BAT_RES_QUE_PLUS_FBU = 0x91 */
|
|
602 {sizeof(T_BAT_res_que_plus_fcc)}, /* BAT_RES_QUE_PLUS_FCC = 0x92 */
|
|
603 {sizeof(T_BAT_res_que_plus_fclass)}, /* BAT_RES_QUE_PLUS_FCLASS = 0x93 */
|
|
604 {sizeof(T_BAT_res_que_plus_fcq)}, /* BAT_RES_QUE_PLUS_FCQ = 0x94 */
|
|
605 {sizeof(T_BAT_res_que_plus_fcr)}, /* BAT_RES_QUE_PLUS_FCR = 0x95 */
|
|
606 {sizeof(T_BAT_res_que_plus_fcs)}, /* BAT_RES_QUE_PLUS_FCS = 0x96 */
|
|
607 {sizeof(T_BAT_res_que_plus_fct)}, /* BAT_RES_QUE_PLUS_FCT = 0x97 */
|
|
608 {sizeof(T_BAT_res_que_plus_fea)}, /* BAT_RES_QUE_PLUS_FEA = 0x98 */
|
|
609 {sizeof(T_BAT_res_que_plus_ffc)}, /* BAT_RES_QUE_PLUS_FFC = 0x99 */
|
|
610 {sizeof(T_BAT_res_que_plus_fhs)}, /* BAT_RES_QUE_PLUS_FHS = 0x9a */
|
|
611 {sizeof(T_BAT_res_que_plus_fie)}, /* BAT_RES_QUE_PLUS_FIE = 0x9b */
|
|
612 {sizeof(T_BAT_res_que_plus_fis)}, /* BAT_RES_QUE_PLUS_FIS = 0x9c */
|
|
613 {sizeof(T_BAT_res_que_plus_fit)}, /* BAT_RES_QUE_PLUS_FIT = 0x9d */
|
|
614 {sizeof(T_BAT_res_que_plus_fli)}, /* BAT_RES_QUE_PLUS_FLI = 0x9e */
|
|
615 {sizeof(T_BAT_res_que_plus_flo)}, /* BAT_RES_QUE_PLUS_FLO = 0x9f */
|
|
616 {sizeof(T_BAT_res_que_plus_flp)}, /* BAT_RES_QUE_PLUS_FLP = 0xa0 */
|
|
617 {sizeof(T_BAT_res_que_plus_fms)}, /* BAT_RES_QUE_PLUS_FMS = 0xa1 */
|
|
618 {sizeof(T_BAT_res_que_plus_fns)}, /* BAT_RES_QUE_PLUS_FNS = 0xa2 */
|
|
619 {sizeof(T_BAT_res_que_plus_fpa)}, /* BAT_RES_QUE_PLUS_FPA = 0xa3 */
|
|
620 {sizeof(T_BAT_res_que_plus_fpi)}, /* BAT_RES_QUE_PLUS_FPI = 0xa4 */
|
|
621 {sizeof(T_BAT_res_que_plus_fps)}, /* BAT_RES_QUE_PLUS_FPS = 0xa5 */
|
|
622 {sizeof(T_BAT_res_que_plus_fpw)}, /* BAT_RES_QUE_PLUS_FPW = 0xa6 */
|
|
623 {sizeof(T_BAT_res_que_plus_frq)}, /* BAT_RES_QUE_PLUS_FRQ = 0xa7 */
|
|
624 {sizeof(T_BAT_res_que_plus_fsa)}, /* BAT_RES_QUE_PLUS_FSA = 0xa8 */
|
|
625 {sizeof(T_BAT_res_que_plus_fsp)}, /* BAT_RES_QUE_PLUS_FSP = 0xa9 */
|
|
626 {sizeof(T_BAT_res_que_plus_icf)}, /* BAT_RES_QUE_PLUS_ICF = 0xaa */
|
|
627 {sizeof(T_BAT_res_que_plus_ifc)}, /* BAT_RES_QUE_PLUS_IFC = 0xab */
|
|
628 {sizeof(T_BAT_res_que_percent_imei)}, /* BAT_RES_QUE_PERCENT_IMEI = 0xac */
|
|
629 {sizeof(T_BAT_res_que_plus_ipr)}, /* BAT_RES_QUE_PLUS_IPR = 0xad */
|
|
630 {sizeof(T_BAT_res_que_percent_pbcf)}, /* BAT_RES_QUE_PERCENT_PBCF = 0xae */
|
|
631 {sizeof(T_BAT_res_que_percent_ppp)}, /* BAT_RES_QUE_PERCENT_PPP = 0xaf */
|
|
632 {sizeof(T_BAT_res_que_percent_pvrf)}, /* BAT_RES_QUE_PERCENT_PVRF = 0xb0 */
|
|
633 {sizeof(T_BAT_res_que_percent_rdl)}, /* BAT_RES_QUE_PERCENT_RDL = 0xb1 */
|
|
634 {sizeof(T_BAT_res_que_percent_rdlb)}, /* BAT_RES_QUE_PERCENT_RDLB = 0xb2 */
|
|
635 {sizeof(T_BAT_res_que_percent_satc)}, /* BAT_RES_QUE_PERCENT_SATC = 0xb3 */
|
|
636 {sizeof(T_BAT_res_que_percent_satcc)}, /* BAT_RES_QUE_PERCENT_SATCC = 0xb4 */
|
|
637 {sizeof(T_BAT_res_set_percent_sate)}, /* BAT_RES_SET_PERCENT_SATE = 0xb5 */
|
|
638 {sizeof(T_BAT_res_que_plus_ws46)}, /* BAT_RES_QUE_PLUS_WS46 = 0xb6 */
|
|
639 {sizeof(T_BAT_res_que_plus_cdip)}, /* BAT_RES_QUE_PLUS_CDIP = 0xb7 */
|
|
640 {sizeof(T_BAT_res_set_percent_cmgr)}, /* BAT_RES_SET_PERCENT_CMGR = 0xb8 */
|
|
641 {sizeof(T_BAT_res_set_percent_cmgl)}, /* BAT_RES_SET_PERCENT_CMGL = 0xb9 */
|
|
642 {sizeof(T_BAT_res_set_plus_cmss)}, /* BAT_RES_SET_PLUS_CMSS = 0xba */
|
|
643 {sizeof(T_BAT_res_set_plus_cgmi)}, /* BAT_RES_SET_PLUS_CGMI = 0xbb */
|
|
644 {sizeof(T_BAT_res_set_plus_cgmm)}, /* BAT_RES_SET_PLUS_CGMM = 0xbc */
|
|
645 {sizeof(T_BAT_res_set_plus_cgmr)}, /* BAT_RES_SET_PLUS_CGMR = 0xbd */
|
|
646 {sizeof(T_BAT_res_set_plus_cgsn)} /* BAT_RES_SET_PLUS_CGSN = 0xbe */
|
|
647 };
|
|
648
|
|
649 static T_map_response_2_size unsolicited_2_size[] =
|
|
650 {
|
|
651 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_UNS_AT_BUSY = 0x1000 */
|
|
652 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_UNS_AT_NO_ANSWER = 0x1001 */
|
|
653 {sizeof(T_BAT_res_uns_plus_cbm)}, /* BAT_RES_UNS_PLUS_CBM = 0x1002 */
|
|
654 {sizeof(T_BAT_res_uns_plus_cbmi)}, /* BAT_RES_UNS_PLUS_CBMI = 0x1003 */
|
|
655 {sizeof(T_BAT_res_uns_percent_ccbs)}, /* BAT_RES_UNS_PERCENT_CCBS = 0x1004 */
|
|
656 {sizeof(T_BAT_res_uns_plus_cccm)}, /* BAT_RES_UNS_PLUS_CCCM = 0x1005 */
|
|
657 {sizeof(T_BAT_res_uns_percent_cccn)}, /* BAT_RES_UNS_PERCENT_CCCN = 0x1006 */
|
|
658 {sizeof(T_BAT_res_uns_plus_ccwa)}, /* BAT_RES_UNS_PLUS_CCWA = 0x1007 */
|
|
659 {sizeof(T_BAT_res_uns_plus_ccwa_w)}, /* BAT_RES_UNS_PLUS_CCWA_W = 0x1008 */
|
|
660 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_UNS_PLUS_CCWE = 0x1009 */
|
|
661 {sizeof(T_BAT_res_uns_plus_cdip)}, /* BAT_RES_UNS_PLUS_CDIP = 0x100a */
|
|
662 {sizeof(T_BAT_res_uns_plus_cds)}, /* BAT_RES_UNS_PLUS_CDS = 0x100b */
|
|
663 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_UNS_PLUS_CCWV = 0x100c */
|
|
664 {sizeof(T_BAT_res_uns_percent_cgev)}, /* BAT_RES_UNS_PERCENT_CGEV = 0x100d */
|
|
665 {sizeof(T_BAT_res_uns_plus_cgev)}, /* BAT_RES_UNS_PLUS_CGEV = 0x100e */
|
|
666 {sizeof(T_BAT_res_uns_percent_cgreg)}, /* BAT_RES_UNS_PERCENT_CGREG = 0x100f */
|
|
667 {sizeof(T_BAT_res_uns_plus_cgreg)}, /* BAT_RES_UNS_PLUS_CGREG = 0x1010 */
|
|
668 {sizeof(T_BAT_res_uns_plus_clae)}, /* BAT_RES_UNS_PLUS_CLAE = 0x1011 */
|
|
669 {sizeof(T_BAT_res_uns_plus_clav)}, /* BAT_RES_UNS_PLUS_CLAV = 0x1012 */
|
|
670 {sizeof(T_BAT_res_uns_plus_clip)}, /* BAT_RES_UNS_PLUS_CLIP = 0x1013 */
|
|
671 {sizeof(T_BAT_res_uns_plus_clip_w)}, /* BAT_RES_UNS_PLUS_CLIP_W = 0x1014 */
|
|
672 {sizeof(T_BAT_res_uns_plus_cmt)}, /* BAT_RES_UNS_PLUS_CMT = 0x1015 */
|
|
673 {sizeof(T_BAT_res_uns_plus_cmti)}, /* BAT_RES_UNS_PLUS_CMTI = 0x1016 */
|
|
674 {sizeof(T_BAT_res_uns_plus_cmt_w)}, /* BAT_RES_UNS_PLUS_CMT_W = 0x1017 */
|
|
675 {sizeof(T_BAT_res_uns_percent_cnap)}, /* BAT_RES_UNS_PERCENT_CNAP = 0x1018 */
|
|
676 {sizeof(T_BAT_res_uns_plus_colp)}, /* BAT_RES_UNS_PLUS_COLP = 0x1019 */
|
|
677 {sizeof(T_BAT_res_uns_plus_colp_w)}, /* BAT_RES_UNS_PLUS_COLP_W = 0x101a */
|
|
678 {sizeof(T_BAT_res_uns_percent_cpi)}, /* BAT_RES_UNS_PERCENT_CPI = 0x101b */
|
|
679 {sizeof(T_BAT_res_uns_percent_cpi_w)}, /* BAT_RES_UNS_PERCENT_CPI_W = 0x101c */
|
|
680 {sizeof(T_BAT_res_uns_percent_cpri)}, /* BAT_RES_UNS_PERCENT_CPRI = 0x101d */
|
|
681 {sizeof(T_BAT_res_uns_percent_cproam)}, /* BAT_RES_UNS_PERCENT_CPROAM = 0x101e */
|
|
682 {sizeof(T_BAT_res_uns_percent_cpvwi)}, /* BAT_RES_UNS_PERCENT_CPVWI = 0x101f */
|
|
683 {sizeof(T_BAT_res_uns_plus_cr)}, /* BAT_RES_UNS_PLUS_CR = 0x1020 */
|
|
684 {sizeof(T_BAT_res_uns_percent_creg)}, /* BAT_RES_UNS_PERCENT_CREG = 0x1021 */
|
|
685 {sizeof(T_BAT_res_uns_plus_cring)}, /* BAT_RES_UNS_PLUS_CRING = 0x1022 */
|
|
686 {sizeof(T_BAT_res_uns_percent_csq)}, /* BAT_RES_UNS_PERCENT_CSQ = 0x1023 */
|
|
687 {sizeof(T_BAT_res_uns_plus_cssi)}, /* BAT_RES_UNS_PLUS_CSSI = 0x1024 */
|
|
688 {sizeof(T_BAT_res_uns_percent_cssn)}, /* BAT_RES_UNS_PERCENT_CSSN = 0x1025 */
|
|
689 {sizeof(T_BAT_res_uns_plus_cssu)}, /* BAT_RES_UNS_PLUS_CSSU = 0x1026 */
|
|
690 {sizeof(T_BAT_res_uns_percent_cstat)}, /* BAT_RES_UNS_PERCENT_CSTAT = 0x1027 */
|
|
691 {sizeof(T_BAT_res_uns_percent_ctyi)}, /* BAT_RES_UNS_PERCENT_CTYI = 0x1028 */
|
|
692 {sizeof(T_BAT_res_uns_plus_ctzr)}, /* BAT_RES_UNS_PLUS_CTZR = 0x1029 */
|
|
693 {sizeof(T_BAT_res_uns_percent_ctzv)}, /* BAT_RES_UNS_PERCENT_CTZV = 0x102a */
|
|
694 {sizeof(T_BAT_res_uns_plus_ctzv)}, /* BAT_RES_UNS_PLUS_CTZV = 0x102b */
|
|
695 {sizeof(T_BAT_res_uns_percent_ctzv_w)}, /* BAT_RES_UNS_PERCENT_CTZV_W = 0x102c */
|
|
696 {sizeof(T_BAT_res_uns_plus_cusd)}, /* BAT_RES_UNS_PLUS_CUSD = 0x102d */
|
|
697 {sizeof(T_BAT_res_uns_plus_cusd_w)}, /* BAT_RES_UNS_PLUS_CUSD_W = 0x102e */
|
|
698 {sizeof(T_BAT_no_parameter)}, /* BAT_RES_UNS_AT_NO_CARRIER = 0x102f */
|
|
699 {sizeof(T_BAT_res_uns_plus_fhs)}, /* BAT_RES_UNS_PLUS_FHS = 0x1030 */
|
|
700 {sizeof(T_BAT_res_uns_plus_ilrr)}, /* BAT_RES_UNS_PLUS_ILRR = 0x1031 */
|
|
701 {sizeof(T_BAT_res_uns_percent_rdl)}, /* BAT_RES_UNS_PERCENT_RDL = 0x1032 */
|
|
702 {sizeof(T_BAT_res_uns_percent_rdlb)}, /* BAT_RES_UNS_PERCENT_RDLB = 0x1033 */
|
|
703 {sizeof(T_BAT_res_uns_percent_sata)}, /* BAT_RES_UNS_PERCENT_SATA = 0x1034 */
|
|
704 {sizeof(T_BAT_res_uns_percent_sati)}, /* BAT_RES_UNS_PERCENT_SATI = 0x1035 */
|
|
705 {sizeof(T_BAT_res_uns_percent_satn)}, /* BAT_RES_UNS_PERCENT_SATN = 0x1036 */
|
|
706 {sizeof(T_BAT_res_uns_percent_simef)}, /* BAT_RES_UNS_PERCENT_SIMEF = 0x1037 */
|
|
707 {sizeof(T_BAT_res_uns_percent_simins)}, /* BAT_RES_UNS_PERCENT_SIMINS = 0x1038 */
|
|
708 {sizeof(T_BAT_res_uns_percent_simrem)}, /* BAT_RES_UNS_PERCENT_SIMREM = 0x1039 */
|
|
709 {sizeof(T_BAT_res_uns_percent_sncnt)} /* BAT_RES_UNS_PERCENT_SNCNT = 0x103a */
|
|
710 };
|
|
711
|
|
712 typedef struct
|
|
713 {
|
|
714 T_BAT_ctrl_params bat;
|
|
715 T_ACI_AT_CMD aci;
|
|
716 } T_map_batcmd_to_acicmd;
|
|
717 /*
|
|
718 * only asynchronous commands are listed (interaction with PS)
|
|
719 */
|
|
720 #define CMD_MAP_NOT_PRESENT -1
|
|
721 T_map_batcmd_to_acicmd map_batcmd_to_acicmd [] =
|
|
722 {
|
|
723 {BAT_CMD_SET_PLUS_CFUN, AT_CMD_CFUN},
|
|
724 {BAT_CMD_SET_PERCENT_BAND, AT_CMD_BAND},
|
|
725 {BAT_CMD_SET_PLUS_CPIN, AT_CMD_CPIN},
|
|
726 {BAT_CMD_QUE_PLUS_CPIN, AT_CMD_CPIN},
|
|
727 {BAT_CMD_QUE_PERCENT_CPINF, AT_CMD_CPIN},
|
|
728 {BAT_CMD_SET_PLUS_CPBW, AT_CMD_CPBW},
|
|
729 {BAT_CMD_TST_PERCENT_COPS, AT_CMD_P_COPS},
|
|
730 {BAT_CMD_TST_PLUS_COPS, AT_CMD_COPS},
|
|
731 {BAT_CMD_SET_PERCENT_COPS, AT_CMD_P_COPS},
|
|
732 {BAT_CMD_SET_PLUS_COPS, AT_CMD_COPS},
|
|
733 {BAT_CMD_AT_D, AT_CMD_D},
|
|
734 {BAT_CMD_AT_A, AT_CMD_A},
|
|
735 {BAT_CMD_AT_Z, AT_CMD_Z},
|
|
736 {BAT_CMD_SET_PERCENT_CHLD, AT_CMD_CHLD},
|
|
737 {BAT_CMD_SET_PLUS_CTFR, AT_CMD_CTFR},
|
|
738 {BAT_CMD_SET_PERCENT_VTS, AT_CMD_VTS},
|
|
739 {BAT_CMD_SET_PLUS_VTS, AT_CMD_VTS},
|
|
740 {BAT_CMD_QUE_PLUS_CLIR, AT_CMD_CLIR},
|
|
741 {BAT_CMD_SET_PLUS_CLIR, AT_CMD_CLIR},
|
|
742 {BAT_CMD_QUE_PLUS_CLIP, AT_CMD_CLIP},
|
|
743 {BAT_CMD_QUE_PLUS_COLP, AT_CMD_COLP},
|
|
744 {BAT_CMD_SET_PLUS_CCFC, AT_CMD_CCFC},
|
|
745 {BAT_CMD_SET_PLUS_CLCK, AT_CMD_CLCK},
|
|
746 {BAT_CMD_SET_PLUS_CCWA, AT_CMD_CCWA},
|
|
747 {BAT_CMD_SET_PLUS_CPWD, AT_CMD_CPWD},
|
|
748 {BAT_CMD_SET_PLUS_CUSD, AT_CMD_CUSD},
|
|
749 {BAT_CMD_SET_PLUS_CMGD, AT_CMD_CMGD},
|
|
750 {BAT_CMD_SET_PLUS_CMGW, AT_CMD_CMGW},
|
|
751 {BAT_CMD_SET_PLUS_CMGS, AT_CMD_CMGS},
|
|
752 {BAT_CMD_SET_PLUS_CMSS, AT_CMD_CMSS},
|
|
753 {BAT_CMD_SET_PLUS_CSCA, AT_CMD_CSCA},
|
|
754 {BAT_CMD_QUE_PLUS_CSCA, AT_CMD_CSCA},
|
|
755 {BAT_CMD_SET_PLUS_CGATT, AT_CMD_CGATT},
|
|
756 {BAT_CMD_QUE_PLUS_CGATT, AT_CMD_CGATT},
|
|
757 {BAT_CMD_QUE_PERCENT_CGCLASS, AT_CMD_P_CGCLASS},
|
|
758 {BAT_CMD_QUE_PLUS_CGCLASS, AT_CMD_CGCLASS},
|
|
759 {BAT_CMD_SET_PERCENT_CGCLASS, AT_CMD_P_CGCLASS},
|
|
760 {BAT_CMD_SET_PLUS_CGCLASS, AT_CMD_CGCLASS},
|
|
761 {BAT_CMD_SET_PLUS_CGACT, AT_CMD_CGACT},
|
|
762 {BAT_CMD_QUE_PLUS_CGACT, AT_CMD_CGACT},
|
|
763 {BAT_CMD_SET_PLUS_CGDATA, AT_CMD_CGDATA},
|
|
764 {BAT_CMD_SET_PLUS_CGANS, AT_CMD_CGANS},
|
|
765 {BAT_CMD_SET_PLUS_CGSMS, AT_CMD_CGSMS},
|
|
766 {BAT_CMD_QUE_PLUS_CGSMS, AT_CMD_CGSMS},
|
|
767 {CMD_MAP_NOT_PRESENT, AT_CMD_NONE}
|
|
768 };
|
|
769
|
|
770
|
|
771
|
|
772 /*==== LOCAL FUNCTONS =============================================*/
|
|
773 LOCAL void aci_bat_init_globs(void);
|
|
774 LOCAL void aci_bat_queue_put (T_aci_bat_queue *que, T_BAT_cmd_send *cmd, U8 client_id, U16 dataSize);
|
|
775 LOCAL BOOL aci_bat_queue_get (T_aci_bat_queue *que, T_BAT_cmd_send *cmd, U8 *client_id);
|
|
776 LOCAL T_aci_bat_queue *aci_bat_queue_create (void);
|
|
777 LOCAL void aci_bat_queue_remove (T_aci_bat_queue *que);
|
|
778
|
|
779
|
|
780 LOCAL void *aci_bat_give_l2p_rx_buf_cb (U8 batId);
|
|
781 LOCAL void *aci_bat_give_l2p_tx_buf_cb (U8 batId, U16 dataSize, void **seg_hdr_ptr, U16 *totalSize, U16 *segSize);
|
|
782 LOCAL void aci_bat_free_data_buffer (T_ACI_DTI_DATA_BUF *data_buffer);
|
|
783 LOCAL T_desc2 *aci_bat_get_new_buffer (BOOL large_type, U16 *max_buffer_size);
|
|
784 LOCAL BOOL aci_bat_buffer_dti_data (T_ACI_DTI_PRC_PSI *src_infos_psi, T_desc2 *data);
|
|
785 LOCAL void aci_bat_send_dti_data (T_ACI_DTI_PRC_PSI *src_infos_psi, T_desc2 *data);
|
|
786 LOCAL void *aci_bat_l2p_next_seg_cb (U8 batId , void *last_seg_hdr, void **seg_hdr_ptr, U16 *segSize);
|
|
787 LOCAL int aci_bat_l2p_send_frame_cb (U8 batId);
|
|
788 LOCAL void aci_bat_l2p_msg_rxd_cb (U8 batId, U8 muxId, U32 dataTag, void *dataPtr, U16 dataSize);
|
|
789
|
|
790 LOCAL int aci_bat_get_size (T_BAT_ctrl_response ctrl_response);
|
|
791 LOCAL void aci_bat_init_max_client_maintenance (T_ACI_DTI_PRC_PSI *src_infos_psi, U8 num_clients);
|
|
792 LOCAL void aci_bat_clean_client_maintenance (T_ACI_DTI_PRC_PSI *src_infos_psi, U8 client);
|
|
793 LOCAL BOOL aci_bat_bootstrap_l2p (T_ACI_DTI_PRC_PSI *src_infos_psi, T_DTI2_DATA_IND *dti_data_ind);
|
|
794 LOCAL BOOL aci_bat_abort (T_ACI_DTI_PRC_PSI *src_infos_psi, U8 client_id);
|
|
795 LOCAL T_ACI_AT_CMD map_cmd_id (T_BAT_ctrl_params cmd);
|
|
796
|
|
797 /*------------------------------------------------------------------------------
|
|
798 * prepare unique identifiers for L2P_Configure, BATLib starts with 0, we start with 0x80
|
|
799 */
|
|
800 LOCAL void aci_bat_init_globs(void)
|
|
801 {
|
|
802 int i;
|
|
803 for (i=0; i<CMD_SRC_MAX; i++)
|
|
804 {
|
|
805 aci_bat_globs[i].l2p_configured = FALSE;
|
|
806 aci_bat_globs[i].l2p_id = 0x80+i;
|
|
807 aci_bat_globs[i].psi_src = NULL;
|
|
808 memset(aci_bat_globs[i].l2p_mem, 0x00, L2P_CONTROL_BLOCK_HDR_SIZE);
|
|
809 }
|
|
810 }
|
|
811
|
|
812
|
|
813 /*------------------------------------------------------------------------------
|
|
814 * received BAT commands cannot be processed, make it pending
|
|
815 */
|
|
816 LOCAL void aci_bat_queue_put (T_aci_bat_queue *que, T_BAT_cmd_send *cmd, U8 client_id, U16 dataSize)
|
|
817 {
|
|
818 T_aci_bat_queue_entry *qe;
|
|
819
|
|
820 ACI_MALLOC(qe, sizeof (T_aci_bat_queue_entry));
|
|
821
|
|
822 qe->next = 0;
|
|
823 qe->cmd.ctrl_params = cmd->ctrl_params;
|
|
824 qe->client_id = client_id;
|
|
825
|
|
826 /* due to union params, we can use any pointer. will be freed in aci_bat_run_cmd() */
|
|
827 ACI_MALLOC(qe->cmd.params.ptr_andc, dataSize);
|
|
828 memcpy (qe->cmd.params.ptr_andc, cmd->params.ptr_andc, dataSize);
|
|
829
|
|
830 if (que->first)
|
|
831 {
|
|
832 que->last->next = qe;
|
|
833 }
|
|
834 else
|
|
835 {
|
|
836 que->first = qe;
|
|
837 }
|
|
838 que->last = qe;
|
|
839 }
|
|
840
|
|
841 /*------------------------------------------------------------------------------
|
|
842 * get pending BAT command of a client queue
|
|
843 */
|
|
844 LOCAL BOOL aci_bat_queue_get (T_aci_bat_queue *que, T_BAT_cmd_send *cmd, U8 *client_id)
|
|
845 {
|
|
846 T_aci_bat_queue_entry *qe;
|
|
847
|
|
848 if (!que)
|
|
849 {
|
|
850 return (FALSE);
|
|
851 }
|
|
852
|
|
853 qe = que->first;
|
|
854 if (!qe)
|
|
855 {
|
|
856 return (FALSE);
|
|
857 }
|
|
858 cmd->ctrl_params = qe->cmd.ctrl_params;
|
|
859 cmd->params = qe->cmd.params;
|
|
860 *client_id = qe->client_id;
|
|
861
|
|
862 que->first = qe->next;
|
|
863
|
|
864 if (que->first EQ NULL)
|
|
865 {
|
|
866 que->last = NULL;
|
|
867 }
|
|
868
|
|
869 ACI_MFREE(qe);
|
|
870
|
|
871 return (TRUE);
|
|
872 }
|
|
873
|
|
874 /*------------------------------------------------------------------------------
|
|
875 * aci_bat_queue_create
|
|
876 */
|
|
877 LOCAL T_aci_bat_queue *aci_bat_queue_create (void)
|
|
878 {
|
|
879 T_aci_bat_queue *que;
|
|
880
|
|
881 ACI_MALLOC(que, sizeof (T_aci_bat_queue));
|
|
882
|
|
883 if (que EQ NULL)
|
|
884 {
|
|
885 return 0;
|
|
886 }
|
|
887 que->first = 0;
|
|
888 return que;
|
|
889 }
|
|
890
|
|
891 /*------------------------------------------------------------------------------
|
|
892 * aci_bat_queue_remove
|
|
893 */
|
|
894 LOCAL void aci_bat_queue_remove (T_aci_bat_queue *que)
|
|
895 {
|
|
896 T_BAT_cmd_send dummy1 = {0};
|
|
897 U8 dummy2 = 0;
|
|
898
|
|
899 while (aci_bat_queue_get (que, &dummy1, &dummy2))
|
|
900 {
|
|
901 ;
|
|
902 }
|
|
903 if (que)
|
|
904 {
|
|
905 ACI_MFREE (que);
|
|
906 }
|
|
907 }
|
|
908
|
|
909
|
|
910 /*------------------------------------------------------------------------------
|
|
911 * get the response size needed for L2P to know how many bytes to send
|
|
912 */
|
|
913 LOCAL int aci_bat_get_size (T_BAT_ctrl_response ctrl_response)
|
|
914 {
|
|
915 if (BITFIELD_CHECK(ctrl_response, BAT_BIT_12)) /* 0x1000 */
|
|
916 {
|
|
917 return (unsolicited_2_size[ctrl_response - BAT_BIT_12].size);
|
|
918 }
|
|
919 else
|
|
920 {
|
|
921 return (response_2_size[ctrl_response].size);
|
|
922 }
|
|
923 }
|
|
924
|
|
925 /*------------------------------------------------------------------------------
|
|
926 * init max BAT clients maintance for a PSI source
|
|
927 */
|
|
928 LOCAL void aci_bat_init_max_client_maintenance(T_ACI_DTI_PRC_PSI *src_infos_psi, U8 num_clients)
|
|
929 {
|
|
930 int i;
|
|
931 ACI_MALLOC(src_infos_psi->bat_client, num_clients * sizeof(T_bat_aci_client_maintain));
|
|
932 src_infos_psi->queue = aci_bat_queue_create();
|
|
933 src_infos_psi->max_clients = num_clients;
|
|
934 for (i=0; i< num_clients; i++)
|
|
935 {
|
|
936 src_infos_psi->bat_client[i].opened = FALSE;
|
|
937 src_infos_psi->bat_client[i].curCmd = (T_BAT_ctrl_params)-1;
|
|
938 src_infos_psi->bat_client[i].send_data = (T_desc2 *)NULL;
|
|
939 }
|
|
940 }
|
|
941
|
|
942 /*------------------------------------------------------------------------------
|
|
943 * clean up the whole clients maintenance for a PSI source
|
|
944 */
|
|
945 LOCAL void aci_bat_clean_client_maintenance(T_ACI_DTI_PRC_PSI *src_infos_psi, U8 client)
|
|
946 {
|
|
947 BOOL all_closed = TRUE;
|
|
948 int i = 0;
|
|
949
|
|
950 src_infos_psi->bat_client[client].curCmd = (T_BAT_ctrl_params)-1;
|
|
951 src_infos_psi->bat_client[client].opened = FALSE;
|
|
952
|
|
953 for (i=0; i< src_infos_psi->max_clients; i++)
|
|
954 {
|
|
955 if (src_infos_psi->bat_client[i].opened == TRUE)
|
|
956 {
|
|
957 all_closed = FALSE;
|
|
958 break;
|
|
959 }
|
|
960 }
|
|
961 if (all_closed)
|
|
962 {
|
|
963 aci_bat_queue_remove(src_infos_psi->queue);
|
|
964 L2P_Remove(aci_bat_globs[src_infos_psi->srcId].l2p_id);
|
|
965 ACI_MFREE(src_infos_psi->bat_client);
|
|
966 aci_bat_globs[src_infos_psi->srcId].l2p_configured = FALSE;
|
|
967 }
|
|
968
|
|
969 all_closed = TRUE;
|
|
970 for (i=0; i< CMD_SRC_MAX; i++)
|
|
971 {
|
|
972 if (aci_bat_globs[i].l2p_configured NEQ FALSE)
|
|
973 {
|
|
974 all_closed = FALSE;
|
|
975 break;
|
|
976 }
|
|
977 }
|
|
978 if (all_closed)
|
|
979 {
|
|
980 aci_bat_first_time = TRUE;
|
|
981 }
|
|
982 }
|
|
983
|
|
984
|
|
985 /*------------------------------------------------------------------------------
|
|
986 * pick out from the very first received DTI_DATA_IND the L2P protocol id.
|
|
987 * our client (BAT lib at Application or ATI) defined the L2P protocol
|
|
988 */
|
|
989
|
|
990 LOCAL BOOL aci_bat_bootstrap_l2p (T_ACI_DTI_PRC_PSI *src_infos_psi, T_DTI2_DATA_IND *dti_data_ind)
|
|
991 {
|
|
992 U16 tot_len;
|
|
993 U8 protocol_id = 0;
|
|
994 T_L2P_STATUS l2p_status = L2P_STAT_UNKNOWN_ERROR;
|
|
995 T_L2P_FRAME_CONTROL_BYTES *l2p_header = (T_L2P_FRAME_CONTROL_BYTES *)NULL;
|
|
996 T_desc2 *p_desc;
|
|
997
|
|
998 tot_len = dti_data_ind->desc_list2.list_len;
|
|
999 p_desc = (T_desc2 *)dti_data_ind->desc_list2.first;
|
|
1000
|
|
1001 if (p_desc NEQ NULL)
|
|
1002 {
|
|
1003 if( p_desc->len > tot_len)
|
|
1004 {
|
|
1005 TRACE_EVENT("aci_bat_bootstrap_l2p(): invalid dti_data_ind");
|
|
1006 return (FALSE);
|
|
1007 }
|
|
1008
|
|
1009 l2p_header = (T_L2P_FRAME_CONTROL_BYTES *)p_desc->buffer;
|
|
1010 protocol_id = l2p_header->protocol_id;
|
|
1011
|
|
1012
|
|
1013 TRACE_EVENT_P3("aci_bat_bootstrap_l2p(): protocol_id = %d, src_id = %d, l2p_id = 0x%02X",
|
|
1014 protocol_id, src_infos_psi->srcId, aci_bat_globs[src_infos_psi->srcId].l2p_id);
|
|
1015
|
|
1016
|
|
1017 l2p_status = L2P_Configure(aci_bat_globs[src_infos_psi->srcId].l2p_id, /* what L2P maintains as bat_id */
|
|
1018 (void *)(aci_bat_globs[src_infos_psi->srcId].l2p_mem), /* memory for the internal L2P maintenance */
|
|
1019 (T_L2P_SUPPORTED_PROTOCOLS)protocol_id,
|
|
1020 BAT_MTU_SIZE, /* replace replace GDD_DIO_MTU_SIZE */
|
|
1021 aci_bat_give_l2p_tx_buf_cb, /* L2P needs callbacks */
|
|
1022 aci_bat_give_l2p_rx_buf_cb,
|
|
1023 aci_bat_l2p_next_seg_cb,
|
|
1024 aci_bat_l2p_send_frame_cb,
|
|
1025 aci_bat_l2p_msg_rxd_cb);
|
|
1026
|
|
1027 switch (l2p_status)
|
|
1028 {
|
|
1029 case (L2P_STAT_SUCCESS):
|
|
1030 return (TRUE);
|
|
1031 default: /* any error */
|
|
1032 TRACE_EVENT_P1("aci_bat_bootstrap_l2p(): L2P error = %d", l2p_status);
|
|
1033 return (FALSE);
|
|
1034 }
|
|
1035 }
|
|
1036 return (FALSE);
|
|
1037 }
|
|
1038
|
|
1039 /*------------------------------------------------------------------------------
|
|
1040 * L2P wants always to have the BAT_MTU_SIZE memory for the received data
|
|
1041 * it rebuilds from L2P fragments and T_desc2 segements the complete BAT command
|
|
1042 * We will free the memory in aci_bat_l2p_msg_rxd_cb()
|
|
1043 * From the batId we derive the src_id by substract 0x80, see aci_bat_init_globs()
|
|
1044 */
|
|
1045 LOCAL void *aci_bat_give_l2p_rx_buf_cb (U8 batId)
|
|
1046 {
|
|
1047 U8 src_id = batId-0x80;
|
|
1048 TRACE_FUNCTION("aci_bat_give_l2p_rx_buf_cb()");
|
|
1049
|
|
1050 if (batId EQ aci_bat_globs[src_id].l2p_id)
|
|
1051 {
|
|
1052 T_ACI_DTI_PRC_PSI *src_infos_psi = aci_bat_globs[src_id].psi_src;
|
|
1053
|
|
1054 ACI_MALLOC(src_infos_psi->rcv_data, BAT_MTU_SIZE);
|
|
1055
|
|
1056 return (src_infos_psi->rcv_data);
|
|
1057 }
|
|
1058 else
|
|
1059 {
|
|
1060 TRACE_ERROR("aci_bat_give_l2p_rx_buf_cb(): L2P used wrong identifier");
|
|
1061 return (NULL);
|
|
1062 }
|
|
1063 }
|
|
1064
|
|
1065 /*------------------------------------------------------------------------------
|
|
1066 * L2P wants to have some memory to transmit data. It is called only for the first segment.
|
|
1067 * dataSize is what L2P requests from us
|
|
1068 * with totalSize we tell L2P what we got from the memory pool
|
|
1069 * segSize ist the size of the first segment
|
|
1070 * seg_hdr_ptr is the pointer to T_desc2, but casted to void
|
|
1071 * returned is T_desc2.buffer
|
|
1072 * PSI will free the memory
|
|
1073 * From the batId we derive the src_id by substract 0x80, see aci_bat_init_globs()
|
|
1074 */
|
|
1075 LOCAL void *aci_bat_give_l2p_tx_buf_cb (U8 batId, U16 dataSize, void **seg_hdr_ptr, U16 *totalSize, U16 *segSize)
|
|
1076 {
|
|
1077 U8 src_id = batId-0x80;
|
|
1078 TRACE_FUNCTION("aci_bat_give_l2p_tx_buf_cb()");
|
|
1079
|
|
1080 if (batId EQ aci_bat_globs[src_id].l2p_id)
|
|
1081 {
|
|
1082 T_desc2 *send_data;
|
|
1083 U16 send_len = (U16)(sizeof(T_desc2) - 1 + dataSize);
|
|
1084
|
|
1085 T_ACI_DTI_PRC_PSI *src_infos_psi = aci_bat_globs[src_id].psi_src;
|
|
1086
|
|
1087 ACI_MALLOC(send_data, send_len);
|
|
1088
|
|
1089 send_data->next = (U32)NULL;
|
|
1090 send_data->len = dataSize;
|
|
1091 send_data->size = dataSize;
|
|
1092 send_data->offset = 0;
|
|
1093
|
|
1094 *seg_hdr_ptr = (void *)send_data;
|
|
1095 *totalSize = send_len;
|
|
1096 *segSize = send_len;
|
|
1097 TRACE_EVENT_P2("aci_bat_give_l2p_tx_buf_cb(): L2P requested %i bytes and got %i bytes", dataSize, send_len);
|
|
1098
|
|
1099 /* for control and broadcast channel we must not maintain the first T_desc2
|
|
1100 * in the client array, because it were just too large, BAT_CTRL_CHANNEL = 0xFE)
|
|
1101 */
|
|
1102 if (src_infos_psi->active_client >= BAT_CTRL_CHANNEL)
|
|
1103 {
|
|
1104 src_infos_psi->send_data = send_data;
|
|
1105 }
|
|
1106 else
|
|
1107 {
|
|
1108 src_infos_psi->bat_client[src_infos_psi->active_client].send_data = send_data;
|
|
1109 }
|
|
1110
|
|
1111 return ((void *)send_data->buffer);
|
|
1112 }
|
|
1113 else
|
|
1114 {
|
|
1115 TRACE_ERROR("aci_bat_give_l2p_tx_buf_cb(): L2P used wrong identifier");
|
|
1116 return (NULL);
|
|
1117 }
|
|
1118 }
|
|
1119
|
|
1120 /*------------------------------------------------------------------------------
|
|
1121 *
|
|
1122 */
|
|
1123 LOCAL void *aci_bat_l2p_next_seg_cb (U8 batId, void *last_seg_hdr, void **seg_hdr_ptr, U16 *segSize)
|
|
1124 {
|
|
1125 T_desc2 *segment;
|
|
1126
|
|
1127 TRACE_FUNCTION("aci_bat_l2p_next_seg_cb()");
|
|
1128
|
|
1129 segment = (T_desc2 *)last_seg_hdr;
|
|
1130 segment = (T_desc2 *)segment->next;
|
|
1131 *seg_hdr_ptr = segment;
|
|
1132 *segSize = segment->size;
|
|
1133
|
|
1134 return ((void *)segment->buffer);
|
|
1135 }
|
|
1136
|
|
1137 /*------------------------------------------------------------------------------
|
|
1138 *
|
|
1139 */
|
|
1140 LOCAL T_desc2 *aci_bat_get_new_buffer (BOOL large_type, U16 *max_buffer_size)
|
|
1141 {
|
|
1142 T_desc2 *new_buffer;
|
|
1143
|
|
1144 if (large_type EQ TRUE)
|
|
1145 {
|
|
1146 *max_buffer_size = MAX_LARGE_BUFFER_LEN;
|
|
1147 }
|
|
1148 else
|
|
1149 {
|
|
1150 *max_buffer_size = MAX_NORMAL_BUFFER_LEN;
|
|
1151 }
|
|
1152 ACI_MALLOC (new_buffer, *max_buffer_size);
|
|
1153 *max_buffer_size -= (sizeof(T_desc2) - 1);
|
|
1154 new_buffer->next = (ULONG)NULL;
|
|
1155 new_buffer->len = 0;
|
|
1156 new_buffer->size = *max_buffer_size;
|
|
1157 new_buffer->offset = 0;
|
|
1158
|
|
1159 return (new_buffer);
|
|
1160 }
|
|
1161
|
|
1162 LOCAL void aci_bat_free_data_buffer (T_ACI_DTI_DATA_BUF *data_buffer)
|
|
1163 {
|
|
1164 T_desc2 *p_desc, *p_desc_next;
|
|
1165
|
|
1166 if (data_buffer->data_list EQ NULL)
|
|
1167 {
|
|
1168 return;
|
|
1169 }
|
|
1170
|
|
1171 p_desc = data_buffer->data_list;
|
|
1172 if (p_desc NEQ NULL)
|
|
1173 {
|
|
1174 p_desc_next = (T_desc2 *)p_desc->next;
|
|
1175 }
|
|
1176
|
|
1177 while (p_desc NEQ NULL)
|
|
1178 {
|
|
1179 ACI_MFREE (p_desc);
|
|
1180
|
|
1181 p_desc = p_desc_next;
|
|
1182 if (p_desc NEQ NULL)
|
|
1183 {
|
|
1184 p_desc_next = (T_desc2 *)p_desc->next;
|
|
1185 }
|
|
1186 }
|
|
1187
|
|
1188 data_buffer->data_list = NULL;
|
|
1189 data_buffer->max_buffer_size = 0;
|
|
1190 data_buffer->create_time = 0;
|
|
1191 }
|
|
1192
|
|
1193
|
|
1194 /*------------------------------------------------------------------------------
|
|
1195 *
|
|
1196 */
|
|
1197 LOCAL BOOL aci_bat_buffer_dti_data (T_ACI_DTI_PRC_PSI *src_infos_psi, T_desc2 *data)
|
|
1198 {
|
|
1199 T_desc2 *tmp;
|
|
1200 T_TIME current_time;
|
|
1201
|
|
1202 static i = 0;
|
|
1203
|
|
1204 TRACE_FUNCTION("aci_bat_buffer_dti_data()");
|
|
1205
|
|
1206 if (src_infos_psi->data_buffer.data_list EQ NULL)
|
|
1207 {
|
|
1208 src_infos_psi->data_buffer.data_list = data; /* the first buffered resp/ind */
|
|
1209 /* store the creation time for the data buffer */
|
|
1210 vsi_t_time (VSI_CALLER &src_infos_psi->data_buffer.create_time);
|
|
1211 }
|
|
1212 else
|
|
1213 {
|
|
1214 /*
|
|
1215 * check whether the buffered resp/ind are already too long buffered
|
|
1216 * this avoids eating up all the memory
|
|
1217 */
|
|
1218 vsi_t_time (VSI_CALLER ¤t_time);
|
|
1219 if ((current_time - src_infos_psi->data_buffer.create_time) > MAX_DATA_BUFFER_LIFE_TIME)
|
|
1220 {
|
|
1221 TRACE_EVENT_P1 ("[WRN] aci_bat_buffer_dti_data(): life time expired, buffer deleted (%d)",
|
|
1222 current_time - src_infos_psi->data_buffer.create_time);
|
|
1223 aci_bat_free_data_buffer (&src_infos_psi->data_buffer);
|
|
1224 /* send an error to BAT Lib */
|
|
1225 return (FALSE);
|
|
1226 }
|
|
1227
|
|
1228 /*
|
|
1229 * we still can buffer further resp/ind
|
|
1230 */
|
|
1231 tmp = src_infos_psi->data_buffer.data_list;
|
|
1232 while ((T_desc2*)tmp->next NEQ NULL)
|
|
1233 {
|
|
1234 tmp = (T_desc2*)tmp->next;
|
|
1235 }
|
|
1236 tmp->next = (U32)data; /* append the current resp/ind */
|
|
1237 i++;
|
|
1238 }
|
|
1239 return (TRUE);
|
|
1240 }
|
|
1241
|
|
1242
|
|
1243 /*------------------------------------------------------------------------------
|
|
1244 *
|
|
1245 */
|
|
1246 LOCAL void aci_bat_send_dti_data (T_ACI_DTI_PRC_PSI *src_infos_psi, T_desc2 *data)
|
|
1247 {
|
|
1248 U16 data_len = 0;
|
|
1249 T_desc2 *next_data;
|
|
1250 TRACE_FUNCTION("aci_bat_send_dti_data");
|
|
1251
|
|
1252 {
|
|
1253 PALLOC_DESC2(dti_data_ind, DTI2_DATA_IND);
|
|
1254
|
|
1255 next_data = data;
|
|
1256
|
|
1257 while (next_data NEQ NULL)
|
|
1258 {
|
|
1259 data_len += next_data->len;
|
|
1260 next_data = (T_desc2*)next_data->next;
|
|
1261 }
|
|
1262
|
|
1263 dti_data_ind->desc_list2.list_len = data_len;
|
|
1264 dti_data_ind->desc_list2.first = (U32)data;
|
|
1265 dti_data_ind->parameters.p_id = 0; /*dummy_ubyte; */
|
|
1266
|
|
1267 dti_data_ind->parameters.st_lines.st_flow = DTI_FLOW_OFF;
|
|
1268 dti_data_ind->parameters.st_lines.st_line_sb = DTI_SB_ON;
|
|
1269 dti_data_ind->parameters.st_lines.st_line_sa = DTI_SA_ON;
|
|
1270 dti_data_ind->parameters.st_lines.st_break_len = DTI_BREAK_OFF;
|
|
1271 #ifdef _SIMULATION_
|
|
1272 if (src_infos_psi->devId NEQ DIO_DATA_PKT)
|
|
1273 {
|
|
1274 gdd_aci_write_bat(src_infos_psi->srcId, &(dti_data_ind->desc_list2)); /* special GDD adapter between BATLib and BATModule */
|
|
1275 PFREE(dti_data_ind);
|
|
1276 }
|
|
1277 else
|
|
1278 { /* this is for the acibat_test suite, which does not use the ATI as application */
|
|
1279 dti_send_data (aci_hDTI,
|
|
1280 src_infos_psi->srcId,
|
|
1281 (U8)DTI_ENTITY_PSI,
|
|
1282 ACI_DTI_DN_CHANNEL,
|
|
1283 dti_data_ind);
|
|
1284 }
|
|
1285 #else
|
|
1286 dti_send_data (aci_hDTI,
|
|
1287 src_infos_psi->srcId,
|
|
1288 (U8)DTI_ENTITY_PSI,
|
|
1289 ACI_DTI_DN_CHANNEL,
|
|
1290 dti_data_ind);
|
|
1291 #endif
|
|
1292 }
|
|
1293 }
|
|
1294
|
|
1295
|
|
1296 /*------------------------------------------------------------------------------
|
|
1297 * L2P has a frame ready for sending.
|
|
1298 * We have to send a DTI2_DATA_IND primitive to PSI
|
|
1299 * the pointer of the first T_desc2 is maintained in src_infos_psi.
|
|
1300 * From the batId we derive the src_id by substract 0x80, see aci_bat_init_globs()
|
|
1301 */
|
|
1302 LOCAL int aci_bat_l2p_send_frame_cb (U8 batId)
|
|
1303 {
|
|
1304 U8 src_id = batId-0x80;
|
|
1305 T_desc2 *data;
|
|
1306 T_ACI_DTI_PRC_PSI *src_infos_psi = aci_bat_globs[src_id].psi_src;
|
|
1307
|
|
1308 TRACE_FUNCTION("aci_bat_l2p_send_frame_cb()");
|
|
1309
|
|
1310 if (src_infos_psi->active_client >= BAT_CTRL_CHANNEL)
|
|
1311 {
|
|
1312 data = src_infos_psi->send_data;
|
|
1313 }
|
|
1314 else
|
|
1315 {
|
|
1316 data = src_infos_psi->bat_client[src_infos_psi->active_client].send_data;
|
|
1317 }
|
|
1318
|
|
1319 if ((aci_src_dti_params[src_infos_psi->srcId].isDtiConnected) AND
|
|
1320 (aci_src_dti_params[src_infos_psi->srcId].dtxState EQ READY))
|
|
1321 {
|
|
1322 aci_bat_send_dti_data (src_infos_psi, data);
|
|
1323 }
|
|
1324 else
|
|
1325 {
|
|
1326 /* buffer data, will be send in sig_dti_tx_buffer_ready_ind() */
|
|
1327 if (aci_bat_buffer_dti_data (src_infos_psi, data) EQ FALSE)
|
|
1328 {
|
|
1329 return (1); /* any value larger than 0 tells L2P that there is a problem */
|
|
1330 }
|
|
1331 }
|
|
1332
|
|
1333 return (0); /* what L2P expects */
|
|
1334 }
|
|
1335
|
|
1336 /*------------------------------------------------------------------------------
|
|
1337 * L2P signals that our payload has been completely received (BAT command request or control signal)
|
|
1338 * control signal is immediately processed , commands are queued first
|
|
1339 * From the batId we derive the src_id by substract 0x80, see aci_bat_init_globs()
|
|
1340 */
|
|
1341 LOCAL void aci_bat_l2p_msg_rxd_cb (U8 batId , U8 muxId, U32 dataTag, void *dataPtr, U16 dataSize)
|
|
1342 {
|
|
1343 U8 src_id = batId-0x80;
|
|
1344 TRACE_FUNCTION("aci_bat_l2p_msg_rxd_cb()");
|
|
1345
|
|
1346 if (batId EQ aci_bat_globs[src_id].l2p_id)
|
|
1347 {
|
|
1348 T_ACI_DTI_PRC_PSI *src_infos_psi = aci_bat_globs[src_id].psi_src;
|
|
1349
|
|
1350 dataSize = dataSize; /* has no meaning for aci_bat */
|
|
1351
|
|
1352 if (BITFIELD_CHECK(dataTag, BAT_BIT_13)) /* 0x2000 - 0x3FFF = customer commands */
|
|
1353 {
|
|
1354 aci_bat_rcv_custom (src_id, muxId, dataTag, dataPtr, dataSize);
|
|
1355 /* free the requested L2P RX buffer, see aci_bat_give_l2p_rx_buf_cb */
|
|
1356 if (src_infos_psi->rcv_data)
|
|
1357 {
|
|
1358 ACI_MFREE(src_infos_psi->rcv_data);
|
|
1359 }
|
|
1360 }
|
|
1361 else if (BITFIELD_CHECK(dataTag, BAT_BIT_15)) /* 0x8000 = BAT Lib control cmd*/
|
|
1362 {
|
|
1363 T_BATC_signal signal;
|
|
1364 signal.ctrl_params = (T_BATC_ctrl_params)dataTag; /* this is the important thing */
|
|
1365 /* due to union of pointers, we can use any pointer, just to make the compiler happy */
|
|
1366 signal.params.ptr_max_clients = (T_BATC_max_clients *)dataPtr;
|
|
1367 aci_bat_ctrl_rcv(src_infos_psi, &signal);
|
|
1368 /* free the requested L2P RX buffer, see aci_bat_give_l2p_rx_buf_cb */
|
|
1369 if (src_infos_psi->rcv_data)
|
|
1370 {
|
|
1371 ACI_MFREE(src_infos_psi->rcv_data);
|
|
1372 }
|
|
1373 }
|
|
1374 else /* binary AT command */
|
|
1375 {
|
|
1376 U8 client_id = 0xFF;
|
|
1377 T_BAT_cmd_send cmd;
|
|
1378 cmd.ctrl_params = dataTag;
|
|
1379 cmd.params.ptr_at_a = (T_BAT_no_parameter *)dataPtr; /* we can use any pointer, don't worry */
|
|
1380 TRACE_EVENT_P1("command identifier: = 0x%04X", dataTag);
|
|
1381 TRACE_BINDUMP(aci_handle, TC_USER4, "BAT COMMAND PARAMETER 2", (U8 *)dataPtr, 4);
|
|
1382
|
|
1383 /* in case of no memory, ACI goes sleeping until there is enough */
|
|
1384 aci_bat_queue_put(src_infos_psi->queue, &cmd, muxId, dataSize);
|
|
1385
|
|
1386 /* free the requested L2P RX buffer, see aci_bat_give_l2p_rx_buf_cb */
|
|
1387 if (src_infos_psi->rcv_data)
|
|
1388 {
|
|
1389 ACI_MFREE(src_infos_psi->rcv_data);
|
|
1390 }
|
|
1391 if (src_infos_psi->run_cmd EQ FALSE)
|
|
1392 {
|
|
1393 aci_bat_run_cmd (src_infos_psi);
|
|
1394 }
|
|
1395 else
|
|
1396 {
|
|
1397 TRACE_EVENT_P1("aci_bat_l2p_msg_rxd_cb(): there is a cmd running, put 0x%04X in queue", cmd.ctrl_params);
|
|
1398 }
|
|
1399 }
|
|
1400 }
|
|
1401 else
|
|
1402 {
|
|
1403 TRACE_ERROR("aci_bat_l2p_msg_rxd_cb(): L2P used wrong identifier");
|
|
1404 }
|
|
1405 }
|
|
1406
|
|
1407
|
|
1408 /*------------------------------------------------------------------------------
|
|
1409 * AT command identifier is different in BAT and ACI. Need to map it.
|
|
1410 */
|
|
1411 LOCAL T_ACI_AT_CMD map_cmd_id (T_BAT_ctrl_params cmd)
|
|
1412 {
|
|
1413 int i = 0;
|
|
1414
|
|
1415 while (map_batcmd_to_acicmd[i].aci NEQ AT_CMD_NONE)
|
|
1416 {
|
|
1417 if (cmd EQ map_batcmd_to_acicmd[i].bat)
|
|
1418 {
|
|
1419 return (map_batcmd_to_acicmd[i].aci);
|
|
1420 }
|
|
1421 i++;
|
|
1422 }
|
|
1423 return (AT_CMD_NONE);
|
|
1424 }
|
|
1425
|
|
1426 /*------------------------------------------------------------------------------
|
|
1427 * BAT Lib sent command abort request for a particular client
|
|
1428 */
|
|
1429 LOCAL BOOL aci_bat_abort (T_ACI_DTI_PRC_PSI *src_infos_psi, U8 client_id)
|
|
1430 {
|
|
1431 T_ACI_RETURN ret = AT_FAIL;
|
|
1432 T_ACI_AT_CMD AciCurCmd = map_cmd_id ( src_infos_psi->bat_client[client_id].curCmd);
|
|
1433
|
|
1434 ret = sAT_Abort (src_infos_psi->srcId, AciCurCmd);
|
|
1435 switch (ret)
|
|
1436 {
|
|
1437 case (AT_EXCT):
|
|
1438 {
|
|
1439 /*
|
|
1440 * in aci_bat_ctrl_rcv() we check for BATC_ABORT_CMD to suppress any response.
|
|
1441 * only call control needs some time to abort (disconnet the call).
|
|
1442 * command handler of call control emits the OK via R_AT (rBAT_OK).
|
|
1443 * in rBAT_OK we have to check again for BATC_ABORT_COMMAND_CNF and send then
|
|
1444 * a
|
|
1445 */
|
|
1446 src_infos_psi->bat_client[client_id].curCmd = (T_BAT_ctrl_params)BATC_ABORT_CMD;
|
|
1447 return(TRUE);
|
|
1448 }
|
|
1449 case ( AT_CMPL ):
|
|
1450 {
|
|
1451 src_infos_psi->bat_client[client_id].curCmd = (T_BAT_ctrl_params)-1;
|
|
1452 return(TRUE);
|
|
1453 }
|
|
1454 default:
|
|
1455 {
|
|
1456 switch (src_infos_psi->bat_client[client_id].curCmd)
|
|
1457 {
|
|
1458 case ( BAT_CMD_SET_PLUS_CMGC ):
|
|
1459 case ( BAT_CMD_SET_PLUS_CNMI ):
|
|
1460 case ( BAT_CMD_SET_PLUS_CSMS ):
|
|
1461 case ( BAT_CMD_SET_PLUS_CMGD ):
|
|
1462 case ( BAT_CMD_SET_PLUS_CMGR ):
|
|
1463 case ( BAT_CMD_SET_PLUS_CMGR_W ):
|
|
1464 case ( BAT_CMD_SET_PLUS_CMGW ):
|
|
1465 case ( BAT_CMD_SET_PLUS_CMGS ):
|
|
1466 case ( BAT_CMD_SET_PLUS_CMSS ):
|
|
1467 case ( BAT_CMD_SET_PLUS_CPMS ):
|
|
1468 /* case ( AT_CMD_CSMP ): not supported by BAT ? */
|
|
1469 case ( BAT_CMD_SET_PLUS_CSCA ):
|
|
1470 case ( BAT_CMD_SET_PLUS_CRES ):
|
|
1471 case ( BAT_CMD_SET_PLUS_CSAS ):
|
|
1472 case ( BAT_CMD_SET_PLUS_CMGL ):
|
|
1473 case ( BAT_CMD_SET_PLUS_CMGL_W ):
|
|
1474 /* ACI_ERR_DESC( ACI_ERR_CLASS_Cms, CMS_ERR_FailedToAbort); */
|
|
1475 break;
|
|
1476 default:
|
|
1477 /* ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_FailedToAbort); */
|
|
1478 break;
|
|
1479 }
|
|
1480 /* aci_bat_err(src_infos_psi); */
|
|
1481 break;
|
|
1482 }
|
|
1483 }
|
|
1484 return(FALSE);
|
|
1485 }
|
|
1486
|
|
1487
|
|
1488 /*==== GLOBAL FUNCTONS ============================================*/
|
|
1489
|
|
1490
|
|
1491 /*
|
|
1492 +--------------------------------------------------------------------+
|
|
1493 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1494 | STATE : code ROUTINE : aci_bat_send_buffer_dti_data |
|
|
1495 +--------------------------------------------------------------------+
|
|
1496
|
|
1497 PURPOSE : Send buffered DTI data, because dtxState is ready now.
|
|
1498 This function is called by sig_dti_tx_buffer_ready_ind()
|
|
1499 */
|
|
1500
|
|
1501 GLOBAL U8 aci_bat_get_l2p_id(U8 src_id)
|
|
1502 {
|
|
1503 return (aci_bat_globs[src_id].l2p_id);
|
|
1504 }
|
|
1505
|
|
1506
|
|
1507 /*
|
|
1508 +--------------------------------------------------------------------+
|
|
1509 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1510 | STATE : code ROUTINE : aci_bat_send_buffer_dti_data |
|
|
1511 +--------------------------------------------------------------------+
|
|
1512
|
|
1513 PURPOSE : Send buffered DTI data, because dtxState is ready now.
|
|
1514 This function is called by sig_dti_tx_buffer_ready_ind()
|
|
1515 */
|
|
1516 GLOBAL void aci_bat_send_buffer_dti_data (UBYTE src_id)
|
|
1517 {
|
|
1518 T_ACI_DTI_PRC_PSI *src_infos_psi = NULL;
|
|
1519 int i = 0;
|
|
1520
|
|
1521 TRACE_FUNCTION("aci_bat_send_buffer_dti_data()");
|
|
1522
|
|
1523 /* dti_id should be supported by DTI_ENTITY_ID or something, here.. */
|
|
1524 src_infos_psi = find_element (psi_src_params, src_id, cmhPSItest_srcId);
|
|
1525
|
|
1526 if (aci_src_dti_params[src_id].isDtiConnected EQ FALSE)
|
|
1527 {
|
|
1528 TRACE_EVENT ("DTI_READY_IND: line not connected");
|
|
1529 return;
|
|
1530 }
|
|
1531 /*
|
|
1532 * send data which may have been stored ..
|
|
1533 */
|
|
1534 if (src_infos_psi->data_buffer.data_list NEQ NULL)
|
|
1535 {
|
|
1536 T_desc2 *data_list = src_infos_psi->data_buffer.data_list;
|
|
1537
|
|
1538 while (data_list NEQ NULL)
|
|
1539 {
|
|
1540 /* TRACE_BINDUMP(aci_handle, TC_USER4, "BUFFERED BAT DATA", (U8 *)data_list, data_list->len); */
|
|
1541 TRACE_EVENT_P1 ("aci_bat_send_buffer_dti_data(): buffered resp/ind has %i bytes", data_list->len);
|
|
1542 i++;
|
|
1543 data_list = (T_desc2*)data_list->next;
|
|
1544 }
|
|
1545
|
|
1546 TRACE_EVENT_P1 ("aci_bat_send_buffer_dti_data(): there are %i buffered resp/ind", i);
|
|
1547 aci_bat_send_dti_data (src_infos_psi, src_infos_psi->data_buffer.data_list);
|
|
1548 src_infos_psi->data_buffer.data_list = NULL;
|
|
1549 src_infos_psi->data_buffer.max_buffer_size = 0;
|
|
1550 src_infos_psi->data_buffer.create_time = 0;
|
|
1551 }
|
|
1552 }
|
|
1553
|
|
1554 /*
|
|
1555 +-------------------------------------------------------------------------------------+
|
|
1556 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1557 | STATE : code ROUTINE : aci_bat_check_for_multi_line_response_command |
|
|
1558 +-------------------------------------------------------------------------------------+
|
|
1559
|
|
1560 PURPOSE : Some BAT commands send several responses to the application (CPBR,COPN,...).
|
|
1561 To avoid eating up too much memory with aci_bat_buffer_dti_data(),
|
|
1562 these multi line response commands send only a limited number of responses
|
|
1563 at once. After that the command stores the current context (how many
|
|
1564 responses it already sent and how many it still has to sent) and gives up
|
|
1565 the CPU context. With it we return to pei_primitive and the frame is able
|
|
1566 to pass the next primtive from ACI's input queue to the next call of pei_primitive.
|
|
1567 In case of a DTI_REASON_TX_BUFFER_READY we will check in this function
|
|
1568 whether there is still a multi line BAT command active. If so, we call this
|
|
1569 BAT function once again with updated parameters to send the next responses.
|
|
1570 */
|
|
1571
|
|
1572 GLOBAL void aci_bat_check_for_multi_line_response_command(UBYTE src_id)
|
|
1573 {
|
|
1574 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
|
|
1575 T_ACI_DTI_PRC_PSI *src_infos_psi = NULL;
|
|
1576 int i = 0;
|
|
1577
|
|
1578 TRACE_FUNCTION("aci_bat_check_for_multi_line_response_command()");
|
|
1579
|
|
1580 src_infos_psi = find_element (psi_src_params, src_id, cmhPSItest_srcId);
|
|
1581
|
|
1582 if(src_infos_psi->large_type) /* large type means multi line responses */
|
|
1583 {
|
|
1584 switch (src_infos_psi->bat_client[src_infos_psi->active_client].curCmd)
|
|
1585 {
|
|
1586 case (BAT_CMD_SET_PLUS_CPBR):
|
|
1587 {
|
|
1588 ret = sBAT_PlusCPBR_CB(src_infos_psi);
|
|
1589 /* vsi_t_sleep (aci_handle, 3000); for testing only */
|
|
1590 break;
|
|
1591 }
|
|
1592 case (BAT_CMD_SET_PLUS_CPBF):
|
|
1593 {
|
|
1594 ret = sBAT_PlusCPBF_CB(src_infos_psi);
|
|
1595 /* vsi_t_sleep (aci_handle, 3000); for testing only */
|
|
1596 break;
|
|
1597 }
|
|
1598 default:
|
|
1599 {
|
|
1600 TRACE_EVENT_P1("aci_bat_check_for_multi_line_response_command(): cmd %04X has no multi line responses",
|
|
1601 src_infos_psi->bat_client[src_infos_psi->active_client].curCmd);
|
|
1602 return;
|
|
1603 }
|
|
1604 }
|
|
1605
|
|
1606 switch (ret)
|
|
1607 {
|
|
1608 case (ACI_BAT_CMPL):
|
|
1609 {
|
|
1610 srcId_cb = src_infos_psi->srcId;
|
|
1611 rBAT_OK(src_infos_psi->bat_client[src_infos_psi->active_client].curCmd);
|
|
1612 break;
|
|
1613 }
|
|
1614 case (ACI_BAT_EXCT):
|
|
1615 {
|
|
1616 break;
|
|
1617 }
|
|
1618 default:
|
|
1619 {
|
|
1620 aci_bat_err(src_infos_psi);
|
|
1621 }
|
|
1622 }
|
|
1623 }
|
|
1624 }
|
|
1625
|
|
1626
|
|
1627 /*
|
|
1628 +--------------------------------------------------------------------+
|
|
1629 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1630 | STATE : code ROUTINE : aci_bat_cur_cmd_get |
|
|
1631 +--------------------------------------------------------------------+
|
|
1632
|
|
1633 PURPOSE : Get the current command of the specified source.
|
|
1634 */
|
|
1635 GLOBAL T_BAT_ctrl_params aci_bat_cur_cmd_get (T_ACI_DTI_PRC_PSI *src_infos_psi)
|
|
1636 {
|
|
1637 if (src_infos_psi==NULL)
|
|
1638 return((T_BAT_ctrl_params)-1);
|
|
1639
|
|
1640 if (src_infos_psi->bat_client==NULL)
|
|
1641 return((T_BAT_ctrl_params)-1);
|
|
1642
|
|
1643 return(src_infos_psi->bat_client[src_infos_psi->active_client].curCmd);
|
|
1644 }
|
|
1645
|
|
1646 /*
|
|
1647 +--------------------------------------------------------------------+
|
|
1648 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1649 | STATE : code ROUTINE : aci_bat_cs_get |
|
|
1650 +--------------------------------------------------------------------+
|
|
1651
|
|
1652 PURPOSE : Get the character set, potentially for BAT or even the
|
|
1653 individual client, though for now it just returns the
|
|
1654 value of the ATI global variable 'cscsChset'.
|
|
1655 */
|
|
1656 GLOBAL T_BAT_plus_cscs_cs aci_bat_cs_get (T_ACI_DTI_PRC_PSI *src_infos_psi)
|
|
1657 {
|
|
1658 /*
|
|
1659 * Necessary for target build?
|
|
1660 */
|
|
1661 src_infos_psi=src_infos_psi;
|
|
1662
|
|
1663 /*
|
|
1664 * This relies on T_BAT_plus_cscs_cs being equivalent to
|
|
1665 * T_ACI_CSCS_CHSET. It is, except that the ACI version has
|
|
1666 * a 'NotPresent' value, which we must deal with.
|
|
1667 */
|
|
1668 if (ati_user_output_cfg[src_infos_psi->srcId].cscsChset EQ CSCS_CHSET_NotPresent)
|
|
1669 return(BAT_CSCS_CS_IRA);
|
|
1670 else
|
|
1671 return((T_BAT_plus_cscs_cs)ati_user_output_cfg[src_infos_psi->srcId].cscsChset);
|
|
1672 }
|
|
1673
|
|
1674 /*
|
|
1675 +--------------------------------------------------------------------+
|
|
1676 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1677 | STATE : code ROUTINE : aci_bat_cs_set |
|
|
1678 +--------------------------------------------------------------------+
|
|
1679
|
|
1680 PURPOSE : Set the character set, potentially for BAT or even the
|
|
1681 individual client, though for now it just acts on the
|
|
1682 ATI global variable 'cscsChset'.
|
|
1683 */
|
|
1684 GLOBAL void aci_bat_cs_set (T_ACI_DTI_PRC_PSI *src_infos_psi,
|
|
1685 T_BAT_plus_cscs_cs cs)
|
|
1686 {
|
|
1687 /*
|
|
1688 * Necessary for target build?
|
|
1689 */
|
|
1690 src_infos_psi=src_infos_psi;
|
|
1691
|
|
1692 /*
|
|
1693 * This relies on T_BAT_plus_cscs_cs being equivalent to
|
|
1694 * T_ACI_CSCS_CHSET. It is, except that the ACI version has
|
|
1695 * a 'NotPresent' value. As the input to this function is in
|
|
1696 * BAT format, this will not be a problem.
|
|
1697 */
|
|
1698 if ((cs>=BAT_CSCS_CS_IRA) && (cs<=BAT_CSCS_CS_UCS2))
|
|
1699 {
|
|
1700 ati_user_output_cfg[src_infos_psi->srcId].cscsChset=(T_ACI_CSCS_CHSET)cs;
|
|
1701 TRACE_EVENT_P1 ("aci_bat_cs_set(): new charset is %i", cs);
|
|
1702 }
|
|
1703 }
|
|
1704
|
|
1705 /*
|
|
1706 +--------------------------------------------------------------------+
|
|
1707 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1708 | STATE : code ROUTINE : aci_bat_rcv |
|
|
1709 +--------------------------------------------------------------------+
|
|
1710
|
|
1711 PURPOSE : called by sig_dti_data_received_ind(), see sap_dti.c
|
|
1712 */
|
|
1713 GLOBAL void aci_bat_rcv (T_ACI_DTI_PRC_PSI *src_infos_psi, T_DTI2_DATA_IND *dti_data_ind)
|
|
1714 {
|
|
1715 U8 src_id = src_infos_psi->srcId;
|
|
1716 T_desc2 *p_desc = (T_desc2 *)NULL;
|
|
1717 T_L2P_STATUS l2p_status = L2P_STAT_UNKNOWN_ERROR;
|
|
1718
|
|
1719 TRACE_FUNCTION("aci_bat_rcv()");
|
|
1720
|
|
1721 if (aci_bat_first_time)
|
|
1722 {
|
|
1723 aci_bat_first_time = FALSE;
|
|
1724 aci_bat_init_globs();
|
|
1725 }
|
|
1726
|
|
1727 if (aci_bat_globs[src_id].l2p_configured EQ FALSE)
|
|
1728 {
|
|
1729 if (aci_bat_bootstrap_l2p(src_infos_psi, dti_data_ind) EQ TRUE)
|
|
1730 {
|
|
1731 aci_bat_globs[src_id].l2p_configured = TRUE;
|
|
1732 aci_bat_globs[src_id].psi_src = src_infos_psi;
|
|
1733 }
|
|
1734 else
|
|
1735 {
|
|
1736 return; /* trace message already in aci_bat_bootstrap_l2p */
|
|
1737 }
|
|
1738 }
|
|
1739
|
|
1740 p_desc = (T_desc2 *)dti_data_ind->desc_list2.first;
|
|
1741
|
|
1742 if (aci_bat_globs[src_id].psi_src NEQ src_infos_psi)
|
|
1743 {
|
|
1744 /* maintenance problem, just a reminder that there is still something to do */
|
|
1745 TRACE_ERROR("aci_bat_rcv(): race condition between two PSI sources");
|
|
1746 }
|
|
1747 aci_bat_globs[src_id].psi_src = src_infos_psi;
|
|
1748
|
|
1749 /*
|
|
1750 * L2P_Receive() calls aci_bat_l2p_msg_rxd_cb() and returns with
|
|
1751 * a senseful value, which could used by ourself to decide what to do.
|
|
1752 * callback functions make it hard to follow the function flow.
|
|
1753 */
|
|
1754 l2p_status = L2P_Receive(aci_bat_globs[src_id].l2p_id, /* unique identifier */
|
|
1755 (void *)p_desc->buffer, /* first segment buffer */
|
|
1756 (void *)p_desc, /* first segment descriptor */
|
|
1757 dti_data_ind->desc_list2.list_len, /* total size */
|
|
1758 p_desc->size); /* first segment size */
|
|
1759
|
|
1760 switch (l2p_status)
|
|
1761 {
|
|
1762 case (L2P_STAT_SUCCESS): /* BAT command has been processed */
|
|
1763 break;
|
|
1764 default: /* any error */
|
|
1765 TRACE_EVENT_P1("aci_bat_rcv(): L2P status = %d", l2p_status);
|
|
1766 break;
|
|
1767 }
|
|
1768 }
|
|
1769
|
|
1770 /*
|
|
1771 +--------------------------------------------------------------------+
|
|
1772 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1773 | STATE : code ROUTINE : aci_bat_ctrl_rcv |
|
|
1774 +--------------------------------------------------------------------+
|
|
1775
|
|
1776 PURPOSE : BAT Library sent a control signal to BAT Module
|
|
1777 */
|
|
1778 GLOBAL void aci_bat_ctrl_rcv (T_ACI_DTI_PRC_PSI *src_infos_psi, T_BATC_signal *signal)
|
|
1779 {
|
|
1780 T_BATC_confirm confirm;
|
|
1781
|
|
1782 TRACE_FUNCTION("aci_bat_ctrl_rcv()");
|
|
1783
|
|
1784 switch (signal->ctrl_params)
|
|
1785 {
|
|
1786 case (BATC_MAX_CLIENTS):
|
|
1787 {
|
|
1788 T_BATC_max_clients max_clients;
|
|
1789 aci_bat_init_max_client_maintenance(src_infos_psi, (U8)signal->params.ptr_max_clients->num_clients);
|
|
1790 confirm.rsp_params = BATC_MAX_CLIENTS_CNF;
|
|
1791 /* acknowledge with the same data, because L2P does not accept NULL pointer */
|
|
1792 confirm.rsp.ptr_bat_open_client_cnf = (T_BATC_open_client *)&max_clients;
|
|
1793 max_clients.num_clients = signal->params.ptr_max_clients->num_clients;
|
|
1794 TRACE_EVENT_P2("aci_bat_ctrl_rcv(): BAT Lib instance with %d clients for src_id %d",
|
|
1795 (U8)signal->params.ptr_max_clients->num_clients, src_infos_psi->srcId);
|
|
1796 break;
|
|
1797 }
|
|
1798 case (BATC_OPEN_CLIENT):
|
|
1799 {
|
|
1800 T_BATC_open_client open_client;
|
|
1801 src_infos_psi->bat_client[signal->params.ptr_open_client->client_id].opened = TRUE;
|
|
1802 confirm.rsp_params = BATC_OPEN_CLIENT_CNF;
|
|
1803 confirm.rsp.ptr_bat_open_client_cnf = &open_client;
|
|
1804 confirm.rsp.ptr_bat_open_client_cnf->client_id = signal->params.ptr_open_client->client_id;
|
|
1805 TRACE_EVENT_P2("aci_bat_ctrl_rcv(): BAT Lib client %d for src_id %d opened",
|
|
1806 (U8)signal->params.ptr_open_client->client_id, src_infos_psi->srcId);
|
|
1807 break;
|
|
1808 }
|
|
1809 case (BATC_CLOSE_CLIENT):
|
|
1810 {
|
|
1811 aci_bat_clean_client_maintenance(src_infos_psi, (U8)signal->params.ptr_close_client->client_id);
|
|
1812 TRACE_EVENT_P2("aci_bat_ctrl_rcv(): BAT Lib client %d for src_id %d closed",
|
|
1813 (U8)signal->params.ptr_close_client->client_id, src_infos_psi->srcId);
|
|
1814 #ifndef _SIMULATION_
|
|
1815 /* make DTI happy with its flow control stuff */
|
|
1816 psa_psi_DTI_getdata ((UBYTE)(src_infos_psi->srcId), DTI_ENTITY_PSI);
|
|
1817 #endif
|
|
1818 return; /* return, because it is not confirmed to BAT library */
|
|
1819 }
|
|
1820 case (BATC_ABORT_CMD):
|
|
1821 {
|
|
1822 T_BATC_abort_cmd abort_cmd;
|
|
1823 U8 client_id = (U8)(signal->params.ptr_abort_cmd->client_id);
|
|
1824 T_BAT_ctrl_params curCmd = src_infos_psi->bat_client[client_id].curCmd;
|
|
1825
|
|
1826 if (src_infos_psi->run_cmd EQ FALSE)
|
|
1827 {
|
|
1828 /*
|
|
1829 * there is no command running at all, but return with confirmation
|
|
1830 * to make the state machine of BAT Lib happy
|
|
1831 */
|
|
1832 confirm.rsp_params = BATC_ABORT_COMMAND_CNF;
|
|
1833 TRACE_EVENT("aci_bat_ctrl_rcv(): no command to abort");
|
|
1834 }
|
|
1835 else if (aci_bat_abort(src_infos_psi, client_id))
|
|
1836 {
|
|
1837 confirm.rsp_params = BATC_ABORT_COMMAND_CNF;
|
|
1838 TRACE_EVENT_P1("aci_bat_ctrl_rcv(): aborted the command %d ", curCmd);
|
|
1839 src_infos_psi->run_cmd = FALSE;
|
|
1840 }
|
|
1841 else
|
|
1842 {
|
|
1843 TRACE_EVENT_P1("aci_bat_ctrl_rcv(): failed aborting command %d ", curCmd);
|
|
1844 confirm.rsp_params = BATC_ABORT_COMMAND_REJ;
|
|
1845 }
|
|
1846 if (src_infos_psi->bat_client[client_id].curCmd EQ (T_BAT_ctrl_params)BATC_ABORT_CMD)
|
|
1847 {
|
|
1848 TRACE_EVENT_P1("aci_bat_ctrl_rcv(): executing to abort command %d ", curCmd);
|
|
1849 return; /* do nothing, (call must be disconnected), takes some time, then send OK via rBAT_OK*/
|
|
1850 }
|
|
1851 abort_cmd.client_id = client_id;
|
|
1852 confirm.rsp.ptr_bat_abort_command_cnf = &abort_cmd;
|
|
1853 break;
|
|
1854 }
|
|
1855 default:
|
|
1856 TRACE_EVENT("aci_bat_ctrl_rcv(): unknown ctrl_params");
|
|
1857 return; /* control signal to BAT library */
|
|
1858 }
|
|
1859 src_infos_psi->active_client = BAT_CTRL_CHANNEL; /* control channel */
|
|
1860 /* command responses and signal confirmations are organized in exactly the same way,
|
|
1861 but signal confirmation must be casted to a command response */
|
|
1862 aci_bat_send(src_infos_psi, (T_BAT_cmd_response *)&confirm);
|
|
1863 }
|
|
1864
|
|
1865 /*
|
|
1866 +--------------------------------------------------------------------+
|
|
1867 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1868 | STATE : code ROUTINE : aci_bat_send |
|
|
1869 +--------------------------------------------------------------------+
|
|
1870
|
|
1871 PURPOSE :
|
|
1872 */
|
|
1873 GLOBAL void aci_bat_send (T_ACI_DTI_PRC_PSI *src_infos_psi,
|
|
1874 T_BAT_cmd_response *resp)
|
|
1875 {
|
|
1876 T_L2P_STATUS l2p_status = L2P_STAT_UNKNOWN_ERROR;
|
|
1877 int errVal = -1;
|
|
1878 U8 client_id = 0xFF; /*broadcast */
|
|
1879 U16 resp_len = 0;
|
|
1880
|
|
1881 TRACE_FUNCTION("aci_bat_send()");
|
|
1882
|
|
1883 if (BITFIELD_CHECK(resp->ctrl_response, BAT_BIT_12) || /* 0x1xxx = unsolicited --> broadcast */
|
|
1884 resp->ctrl_response EQ BAT_RES_UNS_PLUS_CRING ||
|
|
1885 resp->ctrl_response EQ BAT_RES_UNS_PLUS_CCWV)
|
|
1886 {
|
|
1887 client_id = 0xFF; /* broadcast */
|
|
1888 TRACE_EVENT_P1("aci_bat_send(): unsolicited response 0x%04X over broadcast channel", resp->ctrl_response);
|
|
1889 }
|
|
1890 else
|
|
1891 {
|
|
1892 client_id = src_infos_psi->active_client; /* not a broadcast message */
|
|
1893 TRACE_EVENT_P2("aci_bat_send(): response 0x%04X on client channel %d", resp->ctrl_response, client_id);
|
|
1894 }
|
|
1895
|
|
1896 if (BITFIELD_CHECK(resp->ctrl_response, BAT_BIT_15)) /* 0x8xxx = control response */
|
|
1897 {
|
|
1898 resp_len = 4; /* the resp->ctrl_response (for L2P = Cmd Tag) does not count to resp length */
|
|
1899 }
|
|
1900 else
|
|
1901 {
|
|
1902 resp_len = aci_bat_get_size(resp->ctrl_response);
|
|
1903 }
|
|
1904
|
|
1905 TRACE_EVENT_P2("aci_bat_send(): response = 0x%04X, size = %i", resp->ctrl_response, resp_len);
|
|
1906 TRACE_BINDUMP(aci_handle, TC_USER4, "BAT RESPONSE PARAMETER", (U8 *)resp->response.ptr_at_ok, resp_len);
|
|
1907
|
|
1908
|
|
1909 /*
|
|
1910 * The format of an L2 frame for BAT will be as follows :
|
|
1911 *
|
|
1912 * For the first frame
|
|
1913 * ----------------------------------------------------------------
|
|
1914 * | L2P Header | BAT Cmd TAG | BAT Command Data |
|
|
1915 * | (n Bytes) | 4 Bytes | (Remaining Bytes) |
|
|
1916 * ----------------------------------------------------------------
|
|
1917 *
|
|
1918 * For any subsequent frames
|
|
1919 * ----------------------------------------------------------------
|
|
1920 * | L2 Header | BAT Command Data |
|
|
1921 * | (n Bytes) | (Remaining Bytes) |
|
|
1922 * ----------------------------------------------------------------
|
|
1923 */
|
|
1924 srcId_cb = src_infos_psi->srcId;
|
|
1925
|
|
1926 l2p_status = L2P_Send(aci_bat_globs[src_infos_psi->srcId].l2p_id, /* unique identifier */
|
|
1927 client_id,
|
|
1928 resp->ctrl_response, /* this is the important thing */
|
|
1929 resp->response.ptr_at_ok, /* don't worry, it always points to the right thing */
|
|
1930 resp_len,
|
|
1931 &errVal);
|
|
1932 switch (l2p_status)
|
|
1933 {
|
|
1934 case (L2P_STAT_SUCCESS):
|
|
1935 if (resp->ctrl_response <= BAT_RES_PLUS_EXT_ERROR)
|
|
1936 {
|
|
1937 if (src_infos_psi->large_type EQ FALSE) /* not CPBR, COPN, ... */
|
|
1938 {
|
|
1939 src_infos_psi->run_cmd = FALSE;
|
|
1940 src_infos_psi->bat_client[src_infos_psi->active_client].curCmd = (T_BAT_ctrl_params)-1;
|
|
1941 }
|
|
1942 }
|
|
1943 break;
|
|
1944 default:
|
|
1945 TRACE_EVENT_P1("aci_bat_send(): l2p_status = %d", l2p_status);
|
|
1946 TRACE_EVENT_P1("aci_bat_send(): errVal = %d", errVal); /* what is so special ? */
|
|
1947 break;
|
|
1948 }
|
|
1949 #ifndef _SIMULATION_
|
|
1950 /* make DTI happy with its flow control stuff */
|
|
1951 psa_psi_DTI_getdata ((UBYTE)(src_infos_psi->srcId), DTI_ENTITY_PSI);
|
|
1952 #endif
|
|
1953 }
|
|
1954
|
|
1955
|
|
1956 GLOBAL void aci_bat_run_cmd (T_ACI_DTI_PRC_PSI *src_infos_psi)
|
|
1957 {
|
|
1958 U8 client_id;
|
|
1959 T_BAT_cmd_send cmd;
|
|
1960
|
|
1961 TRACE_FUNCTION("aci_bat_run_cmd()");
|
|
1962
|
|
1963 /* run all pending commands from the queue */
|
|
1964 while (aci_bat_queue_get(src_infos_psi->queue, &cmd, &client_id) EQ TRUE)
|
|
1965 {
|
|
1966 src_infos_psi->bat_client[client_id].curCmd = cmd.ctrl_params;
|
|
1967 src_infos_psi->active_client = client_id;
|
|
1968 src_infos_psi->run_cmd = TRUE;
|
|
1969
|
|
1970 TRACE_EVENT_P1("client_id = %d", client_id);
|
|
1971 TRACE_EVENT_P1("command identifier = 0x%04X", cmd.ctrl_params);
|
|
1972 TRACE_BINDUMP(aci_handle, TC_USER4, "BAT COMMAND PARAMETER 3", (U8 *)cmd.params.ptr_at_a, 4);
|
|
1973
|
|
1974 /* run the command, result code is send back also from wrapper */
|
|
1975 switch (aci_bat_wrapper(src_infos_psi, &cmd)) /* run the command */
|
|
1976 {
|
|
1977 case (ACI_BAT_EXCT):
|
|
1978 {
|
|
1979 ACI_MFREE(cmd.params.ptr_andc); /* was allocated in aci_bat_queue_put() */
|
|
1980 return; /* asynchronous command terminates with rBAT_OK ... rBAT_NO_ANSWER */
|
|
1981 }
|
|
1982 default:
|
|
1983 {
|
|
1984 src_infos_psi->bat_client[client_id].curCmd = (T_BAT_ctrl_params)-1;
|
|
1985 src_infos_psi->active_client = 0xFF;
|
|
1986 src_infos_psi->run_cmd = FALSE;
|
|
1987 ACI_MFREE(cmd.params.ptr_andc); /* was allocated in aci_bat_queue_put() */
|
|
1988 break; /* terminated, so start with the next command */
|
|
1989 }
|
|
1990 }
|
|
1991 }
|
|
1992 }
|
|
1993
|
|
1994
|
|
1995
|
|
1996 /*
|
|
1997 +--------------------------------------------------------------------+
|
|
1998 | PROJECT : GSM-F&D (8411) MODULE : ACI_BAT |
|
|
1999 | STATE : code ROUTINE : aci_bat_wrapper |
|
|
2000 +--------------------------------------------------------------------+
|
|
2001
|
|
2002 PURPOSE :
|
|
2003 */
|
|
2004 GLOBAL T_ACI_BAT_RSLT aci_bat_wrapper (T_ACI_DTI_PRC_PSI *src_infos_psi, T_BAT_cmd_send *cmd)
|
|
2005 {
|
|
2006 U16 index = 0;
|
|
2007 T_ACI_BAT_RSLT ret = ACI_BAT_FAIL;
|
|
2008
|
|
2009 if (BITFIELD_CHECK(cmd->ctrl_params, BAT_BIT_12)) /* 0x1000 */
|
|
2010 {
|
|
2011 index = (U16)(cmd->ctrl_params - BAT_BIT_12);
|
|
2012 if (bat_cmds_without_params[index].fptr)
|
|
2013 {
|
|
2014 ret = bat_cmds_without_params[index].fptr(src_infos_psi, cmd);
|
|
2015 }
|
|
2016 else
|
|
2017 {
|
|
2018 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow);
|
|
2019 }
|
|
2020 }
|
|
2021 else
|
|
2022 {
|
|
2023 index = (U16)cmd->ctrl_params;
|
|
2024 if (bat_cmds[index].fptr)
|
|
2025 {
|
|
2026 ret = bat_cmds[index].fptr(src_infos_psi, cmd);
|
|
2027 }
|
|
2028 else
|
|
2029 {
|
|
2030 ACI_ERR_DESC( ACI_ERR_CLASS_Cme, CME_ERR_OpNotAllow);
|
|
2031 }
|
|
2032 }
|
|
2033
|
|
2034 switch (ret)
|
|
2035 {
|
|
2036 case ACI_BAT_FAIL:
|
|
2037 /*
|
|
2038 * The reason for the failure will have been stored in aciErrDesc,
|
|
2039 * we first call aci_bat_err() to translate this into a BAT
|
|
2040 * response message (CME ERROR / CMS ERROR / CEER) and send it.
|
|
2041 */
|
|
2042 aci_bat_err(src_infos_psi);
|
|
2043 break;
|
|
2044
|
|
2045 case ACI_BAT_CMPL:
|
|
2046 /*
|
|
2047 * Send OK.
|
|
2048 */
|
|
2049 {
|
|
2050 T_BAT_cmd_response resp;
|
|
2051 T_BAT_no_parameter dummy;
|
|
2052
|
|
2053 resp.ctrl_response=BAT_RES_AT_OK;
|
|
2054 resp.response.ptr_at_ok=(T_BAT_no_parameter *)&dummy;
|
|
2055 dummy.bat_dummy = 0xFF;
|
|
2056 TRACE_EVENT("aci_bat_wrapper(): OK");
|
|
2057 aci_bat_send(src_infos_psi,&resp);
|
|
2058 }
|
|
2059 break;
|
|
2060
|
|
2061 case ACI_BAT_BUSY:
|
|
2062 /*
|
|
2063 * Send BUSY.
|
|
2064 */
|
|
2065 {
|
|
2066 T_BAT_cmd_response resp;
|
|
2067 T_BAT_no_parameter dummy;
|
|
2068
|
|
2069 resp.ctrl_response=BAT_RES_AT_BUSY;
|
|
2070 resp.response.ptr_at_busy=(T_BAT_no_parameter *)&dummy;
|
|
2071 dummy.bat_dummy = 0xFF;
|
|
2072 TRACE_EVENT("aci_bat_wrapper(): BUSY");
|
|
2073 aci_bat_send(src_infos_psi,&resp);
|
|
2074 }
|
|
2075 break;
|
|
2076
|
|
2077 case ACI_BAT_EXCT:
|
|
2078 /*
|
|
2079 * This return value implies interaction with the protocol stack,
|
|
2080 * and the response will be delivered via an rBAT_xxx(). No further
|
|
2081 * action needs to be taken at this point.
|
|
2082 */
|
|
2083 TRACE_EVENT("aci_bat_wrapper(): EXCT");
|
|
2084 #ifdef _SIMULATION_
|
|
2085 src_infos_psi->res.response = NULL;
|
|
2086 #endif
|
|
2087 break;
|
|
2088
|
|
2089 default:
|
|
2090 /*
|
|
2091 * Reaching this point, which should not happen, may indicate that
|
|
2092 * T_ACI_BAT_RSLT is no longer identical to T_ACI_RETURN - and it
|
|
2093 * needs to be.
|
|
2094 */
|
|
2095 break;
|
|
2096 }
|
|
2097 return (ret);
|
|
2098 }
|
|
2099
|
|
2100 #endif /* ACI_BAT_C */
|