FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/ccd/ccddata_pdi.c @ 648:970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Thu, 04 Sep 2014 05:48:57 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
647:a60b375014e3 | 648:970d6199f2c5 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : | |
4 | Modul : ccddata_pdi.c | |
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 : contains table with information to decode airmessages | |
18 | depending on the carrier-primitive | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #include "pdi.h" | |
23 #include "ccdtable.h" | |
24 #include "mconst.cdg" | |
25 #include "pconst.cdg" | |
26 | |
27 /* declaration of special ccdmsg preparation handlers */ | |
28 int invoke_ccd_setStore(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
29 int mphX_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
30 int mphp_sing_block_req_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
31 int mphp_sing_block_con_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
32 int mphp_sing_block_con_edge_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
33 int mphp_polling_resp_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
34 int mac_data_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
35 int mac_poll_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
36 int rlc_data_0_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
37 int rlc_data_1_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len); | |
38 | |
39 /* declaration of primitive members to be collected */ | |
40 static char* ccd_loadstore_elements[]= | |
41 { | |
42 "loadstore_val0", | |
43 "loadstore_val1", | |
44 NULL | |
45 }; | |
46 | |
47 static char* mphX_constrainer[]= | |
48 { | |
49 "error_flag", | |
50 NULL | |
51 }; | |
52 | |
53 static char* mphp_sing_block_constrainer[]= | |
54 { | |
55 "purpose", | |
56 NULL | |
57 }; | |
58 | |
59 static char* mphp_sing_block_con_edge_constrainer[]= | |
60 { | |
61 "purpose", | |
62 "sb_status", | |
63 "dl_error", | |
64 NULL | |
65 }; | |
66 | |
67 static char* mphp_polling_resp_constrainer[] = | |
68 { | |
69 "poll_resp_type", | |
70 NULL | |
71 }; | |
72 | |
73 static char* mac_data_constrainer[] = | |
74 { | |
75 "block_status", | |
76 NULL | |
77 }; | |
78 | |
79 static char* rlc_data_constrainer[] = | |
80 { | |
81 "rlc_id", | |
82 NULL | |
83 }; | |
84 | |
85 | |
86 /* decode info filter */ | |
87 static T_PDI_DECODEINFO m_dinfo[]={ | |
88 /* type */ /* attrib */ /* prim */ /* entity */ /* mt */ /* pdi_prepare_ccdmsg */ /* primmbr */ | |
89 {PDI_DECODETYPE_L3PDU_N, "sdu", "PH_*", "", 0xff, NULL, NULL}, | |
90 {PDI_DECODETYPE_L3PDU_N, "sdu", "MPH_*", "", 0xff, NULL, NULL}, | |
91 {PDI_DECODETYPE_RR_SHORT, "sdu", "DL_SHORT*", "RR_SHORT", 0xff, NULL, NULL}, | |
92 #ifdef DL_DATA_REQ | |
93 #if (DL_DATA_REQ & 0x4000) | |
94 /* Toggle direction for old-style DL_* primtives */ | |
95 {PDI_DECODETYPE_L3PDU_N, "sdu", "DL_*", "", 0xff, NULL, NULL}, | |
96 #endif | |
97 #endif | |
98 | |
99 {PDI_DECODETYPE_NOPD_N, "sdu", "XX_CCD_ASN1_DECODE_REQ", "ASN1_MSG", 0xff, NULL, NULL}, | |
100 {PDI_DECODETYPE_NOPD, "sdu", "XX_CCD_ASN1_CODE_IND", "ASN1_MSG", 0xff, NULL, NULL}, | |
101 {PDI_DECODETYPE_NOPD_N, "sdu", "XX_DYNARR_DECODE_REQ", "ASN1_MSG", 0xff, NULL, NULL}, | |
102 {PDI_DECODETYPE_NOPD, "sdu", "XX_DYNARR_CODE_IND", "ASN1_MSG", 0xff, NULL, NULL}, | |
103 {PDI_DECODETYPE_MAC_H_CHECK, "dl_block", "MAC_DATA_IND", "GRR", 0xff, | |
104 mac_data_checker, mac_data_constrainer}, | |
105 {PDI_DECODETYPE_MAC_H_CHECK, "dl_block", "MAC_DATA_IND_EGPRS", "GRR", 0xff, | |
106 mac_data_checker, mac_data_constrainer}, | |
107 {PDI_DECODETYPE_MAC_H_CHECK, "ul_block", "MAC_EGPRS_DATA_REQ", "GRR", 0xff, | |
108 mac_data_checker, mac_data_constrainer}, | |
109 {PDI_DECODETYPE_MAC_H_CHECK, "ul_block", "MAC_DATA_REQ", "GRR", 0xff, | |
110 mac_data_checker, mac_data_constrainer}, | |
111 {PDI_DECODETYPE_MAC_H_CHECK, "ul_block", "MAC_POLL_REQ", "GRR", 0xff, | |
112 mac_poll_checker, mac_data_constrainer}, | |
113 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_GPRS_SI13_IND", "RR", 0xff, NULL, NULL}, | |
114 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_IA_IND", "RR", 0xff, NULL, NULL}, | |
115 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_DATA_IND", "RR", 0xff, NULL, NULL}, | |
116 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_IA_DOWNLINK_IND", "RR", 0xff, NULL, NULL}, | |
117 {PDI_DECODETYPE_NOPD_N, "sdu", "RRGRR_SI_STATUS_IND", "GRR", 0xff, NULL, NULL}, | |
118 {PDI_DECODETYPE_NOPD_N, "sdu", "TB_NCELL_SI_DATA_IND", "RR", 0xff, NULL, NULL}, | |
119 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_IAEXT_IND", "RR", 0xff, NULL, NULL}, | |
120 {PDI_DECODETYPE_NOPD, "sdu", "RRGRR_DATA_REQ", "RR", 0xff, NULL, NULL}, | |
121 {PDI_DECODETYPE_NOPD_N, "sdu", "TB_SCELL_SI_DATA_IND", "RR", 0xff, NULL, NULL}, | |
122 #ifdef MPHP_DATA_IND | |
123 /* toggle direction for old 16bit MPHP* */ | |
124 #if (MPHP_DATA_IND & 0x80000000) | |
125 {PDI_DECODETYPE_MAC_H_CHECK, "frame_array", "MPHP_DATA_IND", "GRR", 0xff, | |
126 mphX_checker, mphX_constrainer}, | |
127 {PDI_DECODETYPE_MAC_H_CHECK, "data_array", "MPHP_SINGLE_BLOCK_CON", "GRR", | |
128 0xff, NULL, NULL}, | |
129 {PDI_DECODETYPE_MAC_H_CHECK, "data_array", "MPHP_SINGLE_BLOCK_REQ", "GRR", | |
130 0xff, mphp_sing_block_req_checker, | |
131 mphp_sing_block_constrainer}, | |
132 #else | |
133 {PDI_DECODETYPE_MAC_H_N_CHECK, "l2_frame", "MPHP_DATA_IND", "GRR", 0xff, | |
134 mphX_checker, mphX_constrainer}, | |
135 {PDI_DECODETYPE_MAC_H_N_CHECK, "l2_frame", "MPHP_SINGLE_BLOCK_CON", "GRR", | |
136 0xff, mphp_sing_block_con_edge_checker, | |
137 mphp_sing_block_con_edge_constrainer}, | |
138 {PDI_DECODETYPE_MAC_H_CHECK, "l2_frame", "MPHP_SINGLE_BLOCK_REQ", "GRR", | |
139 0xff, mphp_sing_block_req_checker, | |
140 mphp_sing_block_constrainer}, | |
141 #endif | |
142 {PDI_DECODETYPE_MAC_H_CHECK, "poll_data", "MPHP_POLLING_RESPONSE_REQ", | |
143 "GRR", 0xff, mphp_polling_resp_checker, | |
144 mphp_polling_resp_constrainer}, | |
145 #endif | |
146 #ifdef MPHC_DATA_IND | |
147 /* toggle direction for old 16bit MPHC* */ | |
148 #if (MPHC_DATA_IND & 0x80000000) | |
149 {PDI_DECODETYPE_AIM_CHECK, "l2_frame", "MPHC_NCELL_BCCH_IND", "RR", 0xff, | |
150 mphX_checker, mphX_constrainer}, | |
151 {PDI_DECODETYPE_AIM_CHECK, "l2_frame", "MPHC_DATA_IND", "RR", 0xff, | |
152 mphX_checker, mphX_constrainer}, | |
153 #else | |
154 {PDI_DECODETYPE_AIM_N_CHECK, "l2_frame", "MPHC_NCELL_BCCH_IND", "RR", 0xff, | |
155 mphX_checker, mphX_constrainer}, | |
156 {PDI_DECODETYPE_AIM_N_CHECK, "l2_frame", "MPHC_DATA_IND", "RR", 0xff, | |
157 mphX_checker, mphX_constrainer}, | |
158 #endif | |
159 #endif | |
160 {PDI_DECODETYPE_MAC_H, "data_array", "CGRLC_DATA_*", "GRR", 0xff, NULL, NULL}, | |
161 | |
162 #ifdef CCDENT_UMTS_AS_ASN1_MSG | |
163 | |
164 // real sdu in test primitives | |
165 // UMTS_AS_ASN1_UL_DCCH_MSG_MSG | |
166 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TEST_SDU_UM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_DCCH_MSG_MSG, rlc_data_1_checker, rlc_data_constrainer}, | |
167 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_UM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_DCCH_MSG_MSG, rlc_data_1_checker, rlc_data_constrainer}, //rlc_id=1 | |
168 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_UM_DATA_IND", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_DL_DCCH_MSG_MSG, NULL, NULL}, | |
169 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TEST_SDU_AM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_DCCH_MSG_MSG, NULL, NULL}, | |
170 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TEST_SDU_AM_DATA_IND", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_DL_DCCH_MSG_MSG, NULL, NULL}, | |
171 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_AM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_DCCH_MSG_MSG, NULL, NULL}, | |
172 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_AM_DATA_IND", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_DL_DCCH_MSG_MSG, NULL, NULL}, | |
173 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TEST_SDU_UM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_CCCH_MSG_MSG, rlc_data_0_checker, rlc_data_constrainer}, | |
174 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_UM_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_CCCH_MSG_MSG, rlc_data_0_checker, rlc_data_constrainer}, //rlc_id=0 | |
175 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TEST_SDU_TR_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_CCCH_MSG_MSG, NULL, NULL}, | |
176 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TR_DATA_REQ", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_UL_CCCH_MSG_MSG, NULL, NULL}, | |
177 {PDI_DECODETYPE_NOPD_NOTYPE, "sdu", "RLC_TR_DATA_IND", "UMTS_AS_ASN1_MSG", UMTS_AS_ASN1_DL_CCCH_MSG_MSG, NULL, NULL}, | |
178 //RLC_AM_RETRANSMIT_CNF | |
179 //RLC_CTCH_DATA_IND | |
180 | |
181 // only as mem handles, not suported yet | |
182 // UMTS_AS_ASN1_DL_CCCH_MSG_MSG | |
183 // UMTS_AS_ASN1_BCCH_BCH_MSG_MSG | |
184 // UMTS_AS_ASN1_DL_DCCH_MSG_MSG | |
185 // UMTS_AS_ASN1_DL_SHCCH_MSG_MSG | |
186 // UMTS_AS_ASN1_UL_SHCCH_MSG_MSG | |
187 // UMTS_AS_ASN1_PCCH_MSG_MSG | |
188 // UMTS_AS_ASN1_HO_TO_UTRANCOMMAND_MSG | |
189 // UMTS_AS_ASN1_MASTER_INFO_BLOCK_MSG | |
190 // UMTS_AS_ASN1_BCCH_FACH_MSG_MSG | |
191 // UMTS_AS_ASN1_PDSCH_SYS_INFO_LIST_MSG | |
192 // UMTS_AS_ASN1_PUSCH_SYS_INFO_LIST_MSG | |
193 | |
194 /* the following make little sence to decode since they always | |
195 comes cutted up in small peaces inside a UMTS_AS_ASN1_BCCH_BCH_MSG_MSG */ | |
196 // UMTS_AS_ASN1_SYS_INFO_TYPE_1_MSG | |
197 // UMTS_AS_ASN1_SYS_INFO_TYPE_2_MSG | |
198 // UMTS_AS_ASN1_SYS_INFO_TYPE_3_MSG | |
199 // UMTS_AS_ASN1_SYS_INFO_TYPE_4_MSG | |
200 // UMTS_AS_ASN1_SYS_INFO_TYPE_5_MSG | |
201 // UMTS_AS_ASN1_SYS_INFO_TYPE_6_MSG | |
202 // UMTS_AS_ASN1_SYS_INFO_TYPE_7_MSG | |
203 // UMTS_AS_ASN1_SYS_INFO_TYPE_8_MSG | |
204 // UMTS_AS_ASN1_SYS_INFO_TYPE_9_MSG | |
205 // UMTS_AS_ASN1_SYS_INFO_TYPE_10_MSG | |
206 // UMTS_AS_ASN1_SYS_INFO_TYPE_11_MSG | |
207 // UMTS_AS_ASN1_SYS_INFO_TYPE_12_MSG | |
208 // UMTS_AS_ASN1_SYS_INFO_TYPE_13_MSG | |
209 // UMTS_AS_ASN1_SYS_INFO_TYPE_13_1_MSG | |
210 // UMTS_AS_ASN1_SYS_INFO_TYPE_13_2_MSG | |
211 // UMTS_AS_ASN1_SYS_INFO_TYPE_13_3_MSG | |
212 // UMTS_AS_ASN1_SYS_INFO_TYPE_13_4_MSG | |
213 // UMTS_AS_ASN1_SYS_INFO_TYPE_14_MSG | |
214 // UMTS_AS_ASN1_SYS_INFO_TYPE_15_MSG | |
215 // UMTS_AS_ASN1_SYS_INFO_TYPE_15_1_MSG | |
216 // UMTS_AS_ASN1_SYS_INFO_TYPE_15_2_MSG | |
217 // UMTS_AS_ASN1_SYS_INFO_TYPE_15_3_MSG | |
218 // UMTS_AS_ASN1_SYS_INFO_TYPE_15_4_MSG | |
219 // UMTS_AS_ASN1_SYS_INFO_TYPE_16_MSG | |
220 // UMTS_AS_ASN1_SYS_INFO_TYPE_17_MSG | |
221 // UMTS_AS_ASN1_SYS_INFO_TYPE_18_MSG | |
222 // UMTS_AS_ASN1_SYS_INFO_TYPE_SB_1_MSG | |
223 // UMTS_AS_ASN1_SYS_INFO_TYPE_SB_2_MSG | |
224 #endif /* CCDENT_UMTS_AS_ASN1_MSG */ | |
225 | |
226 /* test stack primitives */ | |
227 {PDI_DECODETYPE_L3PDU_N, "sdu", "XX_TAP*", "", 0xff, NULL, NULL}, | |
228 {PDI_DECODETYPE_NOPD_N, "sdu", "XX_LOADSTORE_*", "XX_CSN1", 0xff, invoke_ccd_setStore, ccd_loadstore_elements}, | |
229 {PDI_DECODETYPE_NOPD_N, "sdu", "XX_CCD_2*", "XX_CSN1", 0xff, NULL, NULL}, | |
230 {PDI_DECODETYPE_NOPD_N, "sdu", "XX_*", "XX", 0xff, NULL, NULL}, | |
231 | |
232 /* all other primitives */ | |
233 {PDI_DECODETYPE_L3PDU, "sdu", "*", "", 0xff, NULL, NULL} | |
234 }; | |
235 #define DINFO_COUNT (sizeof(m_dinfo) / sizeof(*m_dinfo)) | |
236 | |
237 int ccddata_get_pdi_dinfo (const T_PDI_DECODEINFO* (*dinfo) ) | |
238 { | |
239 *dinfo=m_dinfo; | |
240 return DINFO_COUNT; | |
241 } | |
242 | |
243 /* definition of special ccdmsg preparation handlers */ | |
244 int invoke_ccd_setStore(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
245 { | |
246 int q; | |
247 for (q=0; q<len; q++) | |
248 { | |
249 ccd_setStore(q,values[q]); | |
250 } | |
251 | |
252 return PDI_CCDMSG; | |
253 } | |
254 | |
255 int mphX_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
256 { | |
257 if (len >= 1 && values[0] == 0) //error_flag | |
258 { | |
259 return PDI_CCDMSG; | |
260 } | |
261 else | |
262 { | |
263 return PDI_NONE; | |
264 } | |
265 } | |
266 | |
267 int mphp_sing_block_req_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
268 { | |
269 if (len >= 1 && (values[0] == 4 || values[0] == 5)) //purpose | |
270 { | |
271 return PDI_CCDMSG; | |
272 } | |
273 else | |
274 { | |
275 return PDI_NONE; | |
276 } | |
277 } | |
278 | |
279 int mphp_sing_block_con_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
280 { | |
281 if (len >= 1 && values[0] == 3) //purpose | |
282 { | |
283 return PDI_CCDMSG; | |
284 } | |
285 else | |
286 { | |
287 return PDI_NONE; | |
288 } | |
289 } | |
290 | |
291 int mphp_polling_resp_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
292 { | |
293 if (len >= 1 && values[0] == 3) //poll_resp_type | |
294 { | |
295 return PDI_CCDMSG; | |
296 } | |
297 else | |
298 { | |
299 return PDI_NONE; | |
300 } | |
301 } | |
302 | |
303 int mphp_sing_block_con_edge_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
304 { | |
305 if (len >= 3 && values[0] == 3 //purpose | |
306 && values[1] == 3 //sb_status | |
307 && values[2] == 0) //dl_error | |
308 { | |
309 return PDI_CCDMSG; | |
310 } | |
311 else | |
312 { | |
313 return PDI_NONE; | |
314 } | |
315 } | |
316 | |
317 int mac_data_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
318 { | |
319 if (len >= 1 && values[0] == 2) //block_status | |
320 { | |
321 return PDI_CCDMSG; | |
322 } | |
323 else | |
324 { | |
325 return PDI_NONE; | |
326 } | |
327 } | |
328 | |
329 int mac_poll_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
330 { | |
331 if (len >= 1 && values[0] == 3) //block_status | |
332 { | |
333 return PDI_CCDMSG; | |
334 } | |
335 else | |
336 { | |
337 return PDI_NONE; | |
338 } | |
339 } | |
340 | |
341 int rlc_data_0_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
342 { | |
343 if (len >= 1 && values[0] == 0) //rlc_id | |
344 { | |
345 return PDI_CCDMSG; | |
346 } | |
347 else | |
348 { | |
349 return PDI_NONE; | |
350 } | |
351 } | |
352 | |
353 int rlc_data_1_checker(T_PDI_CCDMSG* ccdmsg, ULONG values[], int len) | |
354 { | |
355 if (len >= 1 && values[0] == 1) //rlc_id | |
356 { | |
357 return PDI_CCDMSG; | |
358 } | |
359 else | |
360 { | |
361 return PDI_NONE; | |
362 } | |
363 } |