blob: bd16a0a8e55af53f2a693ab164ea3e93f2d672fd [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001use strict;
2use Cwd;
3use lib "tools/perl";
4use Text::CSV;
5use File::Path;
6
7#redirect STDERR to STDOUT
8open(STDERR, ">&STDOUT");
9
10printf "perl current dir : %s\n", getcwd();
11my $mspm_body_path = "$ARGV[2]/modem/mspm/src";
12
13mkpath($mspm_body_path) if(! -e $mspm_body_path);
14print "mspm gen source dir : $mspm_body_path\n";
15
16my $mspm_gen_body = "$mspm_body_path/mspm_procedure_gen_table.c";
17open (MSPM_BODY, "> $mspm_gen_body") or die "open file fail : $mspm_gen_body\n";
18
19my $csv = Text::CSV->new ( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag();
20my @rows;
21my $csv_file_name = sprintf("%s/protocol/as_multimode/asinterfaces/mspm_proc_gen_tbl/mspm_procedure_table.csv", getcwd());
22
23print "CSV table file path : $csv_file_name\n";
24
25if (! -f $csv_file_name)
26{
27 printf "%s Not Exist\n", $csv_file_name;
28 exit
29}
30open(my $fh, "<:encoding(UTF-8)", $csv_file_name) or die "$csv_file_name : $!";
31while (my $row = $csv->getline($fh))
32{
33 push @rows, $row;
34}
35$csv->eof or $csv->error_diag();
36close $fh;
37
38my $max_row = scalar @rows;
39my $max_col;
40foreach (@rows)
41{
42 my @first_row = @$_;
43 $max_col = scalar @first_row;
44 last;
45}
46
47my @mspm_procedure_attr_index;
48my $mspm_procedure_priority_index = 0;
49my $mspm_procedure_category_type_index = 0;
50my $mspm_procedure_extend_end_session_timer_value_index = 0;
51my $mspm_procedure_on_start_stop_extend_end_session_timer_event_index = 0;
52my $mspm_procedure_on_end_stop_extend_end_session_timer_event_index = 0;
53my $mspm_procedure_source_module_index = 0;
54my $mspm_icd_procedure_type_index = 0;
55my @mspm_procedure_on_start_to_stop_timer_size_list;
56my @mspm_procedure_on_start_to_stop_timer_list;
57my @mspm_procedure_on_end_to_stop_timer_size_list;
58my @mspm_procedure_on_end_to_stop_timer_list;
59my @mspm_procedure_not_start_ext_timer_if_proc_exist_size_list;
60my @mspm_procedure_not_start_ext_timer_if_proc_exist_list;
61my @mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list;
62my @mspm_procedure_not_start_ext_timer_if_proc_not_exist_list;
63
64#mspm_procedure_attribute_enum
65for (my $col=0; $col < $max_col; $col++)
66{
67 if (index(uc $rows[0][$col], "MSPM_PROC_ATTR_") == 0)
68 {
69 push @mspm_procedure_attr_index, $col;
70 }
71 if ((uc $rows[0][$col]) eq "PRIORITY")
72 {
73 $mspm_procedure_priority_index = $col;
74 }
75 if ((uc $rows[0][$col]) eq "CATEGORY")
76 {
77 $mspm_procedure_category_type_index = $col;
78 }
79 if ((uc $rows[0][$col]) eq "OWNER MODULE")
80 {
81 $mspm_procedure_source_module_index = $col;
82 }
83 if (index(uc $rows[0][$col], "MSPM_PROC_EXTEND_END_SESSION_TIMER_VALUE") == 0)
84 {
85 $mspm_procedure_extend_end_session_timer_value_index = $col;
86 }
87 if (index(uc $rows[0][$col], "MSPM_PROC_ON_START_TO_STOP_EXTEND_TIMER") == 0)
88 {
89 $mspm_procedure_on_start_stop_extend_end_session_timer_event_index = $col;
90 }
91 if (index(uc $rows[0][$col], "MSPM_PROC_ON_END_TO_STOP_EXTEND_TIMER") == 0)
92 {
93 $mspm_procedure_on_end_stop_extend_end_session_timer_event_index = $col;
94 }
95 if ((uc $rows[0][$col]) eq "ICD_PROCEDURE_TYPE")
96 {
97 $mspm_icd_procedure_type_index = $col;
98 }
99}
100
101#mspm_procedure_enum
102for (my $row = 1; $row < $max_row-1; $row++)
103{
104 $mspm_procedure_on_start_to_stop_timer_size_list[$row-1] = 0;
105 $mspm_procedure_on_end_to_stop_timer_size_list[$row-1] = 0;
106 $mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1] = 0;
107 $mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1] = 0;
108}
109
110#mspm_procedure_priority_table
111print MSPM_BODY "#include \"mspm_public_api.h\"\n";
112print MSPM_BODY "#include \"mspm_fsm.h\"\n\n";
113print MSPM_BODY "kal_uint8 mspm_procedure_priority_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
114print MSPM_BODY "{\n";
115for (my $row = 1; $row < $max_row-1; $row++)
116{
117 printf MSPM_BODY " %2d, //%s\n", $rows[$row][$mspm_procedure_priority_index], $rows[$row][0];
118}
119print MSPM_BODY "};\n\n";
120
121#mspm_procedure_setting_table
122print MSPM_BODY "kal_bool mspm_procedure_setting_table[MSPM_PROCEDURE_ENUM_NUM][MSPM_PROC_ATTR_MAX_NUM] =\n";
123print MSPM_BODY "{\n";
124print MSPM_BODY " //{";
125
126print MSPM_BODY "MSPM_PROC_ATTR_AS_CONNECTION, ";
127print MSPM_BODY "MSPM_PROC_ATTR_C2K_AS_CONNECTION, ";
128foreach(@mspm_procedure_attr_index)
129{
130 print MSPM_BODY "$rows[0][$_], ";
131}
132print MSPM_BODY "}\n";
133
134for (my $row = 1; $row < $max_row-1; $row++)
135{
136 print MSPM_BODY " {";
137 if ((uc $rows[$row][$mspm_procedure_category_type_index]) eq "AS CONNECTION")
138 {
139 printf MSPM_BODY "%9s, ", "KAL_TRUE";
140 }
141 else
142 {
143 printf MSPM_BODY "%9s, ", "KAL_FALSE";
144 }
145 if ((uc $rows[$row][$mspm_procedure_category_type_index]) eq "C2K AS CONNECTION")
146 {
147 printf MSPM_BODY "%9s, ", "KAL_TRUE";
148 }
149 else
150 {
151 printf MSPM_BODY "%9s, ", "KAL_FALSE";
152 }
153 foreach(@mspm_procedure_attr_index)
154 {
155 if ((uc $rows[$row][$_]) eq "Y")
156 {
157 printf MSPM_BODY "%9s, ", "KAL_TRUE";
158 }
159 else
160 {
161 printf MSPM_BODY "%9s, ", "KAL_FALSE";
162 }
163 }
164 printf MSPM_BODY "}, //%s\n", $rows[$row][0];
165
166 my $mspm_on_start_string = (uc $rows[$row][$mspm_procedure_on_start_stop_extend_end_session_timer_event_index]);
167 while($mspm_on_start_string =~ /(\w+)/g)
168 {
169 my $mspm_on_start_proc = $1;
170 for (my $mspm_proc_index=1; $mspm_proc_index<$max_row-1; $mspm_proc_index++)
171 {
172 if ((uc $rows[$mspm_proc_index][0]) eq $mspm_on_start_proc)
173 {
174 $mspm_procedure_on_start_to_stop_timer_list[$mspm_proc_index-1][$mspm_procedure_on_start_to_stop_timer_size_list[$mspm_proc_index-1]] = $rows[$row][0];
175 $mspm_procedure_on_start_to_stop_timer_size_list[$mspm_proc_index-1] += 1;
176
177 $mspm_procedure_not_start_ext_timer_if_proc_exist_list[$row-1][$mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1]] = $mspm_on_start_proc;
178 $mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1] += 1;
179 }
180 }
181 }
182
183 my $mspm_on_end_string = (uc $rows[$row][$mspm_procedure_on_end_stop_extend_end_session_timer_event_index]);
184 while($mspm_on_end_string =~ /(\w+)/g)
185 {
186 my $mspm_on_end_proc = $1;
187 for (my $mspm_proc_index=1; $mspm_proc_index<$max_row-1; $mspm_proc_index++)
188 {
189 if ((uc $rows[$mspm_proc_index][0]) eq $mspm_on_end_proc)
190 {
191 $mspm_procedure_on_end_to_stop_timer_list[$mspm_proc_index-1][$mspm_procedure_on_end_to_stop_timer_size_list[$mspm_proc_index-1]] = $rows[$row][0];
192 $mspm_procedure_on_end_to_stop_timer_size_list[$mspm_proc_index-1] += 1;
193
194 $mspm_procedure_not_start_ext_timer_if_proc_not_exist_list[$row-1][$mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1]] = $mspm_on_end_proc;
195 $mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1] += 1;
196 }
197 }
198 }
199}
200print MSPM_BODY "};\n\n";
201
202#mspm_procedure_string_table
203print MSPM_BODY "char* mspm_procedure_string_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
204print MSPM_BODY "{\n";
205for (my $row = 1; $row < $max_row-1; $row++)
206{
207 print MSPM_BODY " \"$rows[$row][0]\", \n";
208}
209print MSPM_BODY "};\n\n";
210
211#mspm_procedure_extend_end_session_timer_value_table
212print MSPM_BODY "kal_uint32 mspm_procedure_extend_end_session_timer_value_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
213print MSPM_BODY "{\n";
214for (my $row = 1; $row < $max_row-1; $row++)
215{
216 printf MSPM_BODY " %5d, //%s\n", $rows[$row][$mspm_procedure_extend_end_session_timer_value_index], $rows[$row][0];
217}
218print MSPM_BODY "};\n\n";
219
220#mspm_procedure_on_start_to_stop_extend_timer_event_list_size_table
221print MSPM_BODY "kal_uint8 mspm_procedure_on_start_to_stop_extend_timer_event_list_size_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
222print MSPM_BODY "{\n";
223for (my $row = 1; $row < $max_row-1; $row++)
224{
225 printf MSPM_BODY " %2d, //%s\n", $mspm_procedure_on_start_to_stop_timer_size_list[$row-1], $rows[$row][0];
226}
227print MSPM_BODY "};\n\n";
228
229#element of mspm_procedure_on_start_to_stop_extend_timer_event_list_table
230for (my $row = 1; $row < $max_row-1; $row++)
231{
232 if ($mspm_procedure_on_start_to_stop_timer_size_list[$row-1] > 0)
233 {
234 printf MSPM_BODY "static mspm_procedure_enum mspm_on_start_list_element_%s[] =\n", $rows[$row][0];
235 print MSPM_BODY " {";
236 for(my $j=0; $j<$mspm_procedure_on_start_to_stop_timer_size_list[$row-1]; $j++)
237 {
238 printf MSPM_BODY "%s, ", $mspm_procedure_on_start_to_stop_timer_list[$row-1][$j];
239 }
240 print MSPM_BODY "};\n\n";
241 }
242}
243
244#mspm_procedure_on_start_to_stop_extend_timer_event_list_table
245print MSPM_BODY "mspm_procedure_enum* mspm_procedure_on_start_to_stop_extend_timer_event_list_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
246print MSPM_BODY "{\n";
247for(my $i=0; $i<$max_row-2; $i++)
248{
249 if ($mspm_procedure_on_start_to_stop_timer_size_list[$i] == 0)
250 {
251 printf MSPM_BODY " NULL, //%s\n", $rows[$i+1][0];
252 }
253 else
254 {
255 printf MSPM_BODY " mspm_on_start_list_element_%s, //%s\n", $rows[$i+1][0], $rows[$i+1][0];
256 }
257}
258print MSPM_BODY "};\n\n";
259
260#mspm_procedure_on_end_to_stop_extend_timer_event_list_size_table
261print MSPM_BODY "kal_uint8 mspm_procedure_on_end_to_stop_extend_timer_event_list_size_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
262print MSPM_BODY "{\n";
263for (my $row = 1; $row < $max_row-1; $row++)
264{
265 printf MSPM_BODY " %2d, //%s\n", $mspm_procedure_on_end_to_stop_timer_size_list[$row-1], $rows[$row][0];
266}
267print MSPM_BODY "};\n\n";
268
269#element of mspm_procedure_on_end_to_stop_extend_timer_event_list_table
270for (my $row = 1; $row < $max_row-1; $row++)
271{
272 if ($mspm_procedure_on_end_to_stop_timer_size_list[$row-1] > 0)
273 {
274 printf MSPM_BODY "static mspm_procedure_enum mspm_on_end_list_element_%s[] =\n", $rows[$row][0];
275 print MSPM_BODY " {";
276 for(my $j=0; $j<$mspm_procedure_on_end_to_stop_timer_size_list[$row-1]; $j++)
277 {
278 printf MSPM_BODY "%s, ", $mspm_procedure_on_end_to_stop_timer_list[$row-1][$j];
279 }
280 print MSPM_BODY "};\n\n";
281 }
282}
283
284#mspm_procedure_on_end_to_stop_extend_timer_event_list_table
285print MSPM_BODY "mspm_procedure_enum* mspm_procedure_on_end_to_stop_extend_timer_event_list_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
286print MSPM_BODY "{\n";
287for(my $i=0; $i<$max_row-2; $i++)
288{
289 if ($mspm_procedure_on_end_to_stop_timer_size_list[$i] == 0)
290 {
291 printf MSPM_BODY " NULL, //%s\n", $rows[$i+1][0];
292 }
293 else
294 {
295 printf MSPM_BODY " mspm_on_end_list_element_%s, //%s\n", $rows[$i+1][0], $rows[$i+1][0];
296 }
297}
298print MSPM_BODY "};\n\n";
299
300#mspm_procedure_not_start_extend_timer_if_proc_exist_list_size_table
301print MSPM_BODY "kal_uint8 mspm_procedure_not_start_extend_timer_if_proc_exist_list_size_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
302print MSPM_BODY "{\n";
303for (my $row = 1; $row < $max_row-1; $row++)
304{
305 printf MSPM_BODY " %2d, //%s\n", $mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1], $rows[$row][0];
306}
307print MSPM_BODY "};\n\n";
308
309#element of mspm_procedure_not_start_extend_timer_if_proc_exist_list_table
310for (my $row = 1; $row < $max_row-1; $row++)
311{
312 if ($mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1] > 0)
313 {
314 printf MSPM_BODY "static mspm_procedure_enum mspm_not_start_ext_timer_if_proc_exist_element_%s[] =\n", $rows[$row][0];
315 print MSPM_BODY " {";
316 for(my $j=0; $j<$mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$row-1]; $j++)
317 {
318 printf MSPM_BODY "%s, ", $mspm_procedure_not_start_ext_timer_if_proc_exist_list[$row-1][$j];
319 }
320 print MSPM_BODY "};\n\n";
321 }
322}
323
324#mspm_procedure_not_start_extend_timer_if_proc_exist_list_table
325print MSPM_BODY "mspm_procedure_enum* mspm_procedure_not_start_extend_timer_if_proc_exist_list_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
326print MSPM_BODY "{\n";
327for(my $i=0; $i<$max_row-2; $i++)
328{
329 if ($mspm_procedure_not_start_ext_timer_if_proc_exist_size_list[$i] == 0)
330 {
331 printf MSPM_BODY " NULL, //%s\n", $rows[$i+1][0];
332 }
333 else
334 {
335 printf MSPM_BODY " mspm_not_start_ext_timer_if_proc_exist_element_%s, //%s\n", $rows[$i+1][0], $rows[$i+1][0];
336 }
337}
338print MSPM_BODY "};\n\n";
339
340#mspm_procedure_not_start_extend_timer_if_proc_not_exist_list_size_table
341print MSPM_BODY "kal_uint8 mspm_procedure_not_start_extend_timer_if_proc_not_exist_list_size_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
342print MSPM_BODY "{\n";
343for (my $row = 1; $row < $max_row-1; $row++)
344{
345 printf MSPM_BODY " %2d, //%s\n", $mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1], $rows[$row][0];
346}
347print MSPM_BODY "};\n\n";
348
349#element of mspm_procedure_not_start_extend_timer_if_proc_not_exist_list_table
350for (my $row = 1; $row < $max_row-1; $row++)
351{
352 if ($mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1] > 0)
353 {
354 printf MSPM_BODY "static mspm_procedure_enum mspm_not_start_ext_timer_if_proc_not_exist_element_%s[] =\n", $rows[$row][0];
355 print MSPM_BODY " {";
356 for(my $j=0; $j<$mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$row-1]; $j++)
357 {
358 printf MSPM_BODY "%s, ", $mspm_procedure_not_start_ext_timer_if_proc_not_exist_list[$row-1][$j];
359 }
360 print MSPM_BODY "};\n\n";
361 }
362}
363
364#mspm_procedure_not_start_extend_timer_if_proc_not_exist_list_table
365print MSPM_BODY "mspm_procedure_enum* mspm_procedure_not_start_extend_timer_if_proc_not_exist_list_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
366print MSPM_BODY "{\n";
367for(my $i=0; $i<$max_row-2; $i++)
368{
369 if ($mspm_procedure_not_start_ext_timer_if_proc_not_exist_size_list[$i] == 0)
370 {
371 printf MSPM_BODY " NULL, //%s\n", $rows[$i+1][0];
372 }
373 else
374 {
375 printf MSPM_BODY " mspm_not_start_ext_timer_if_proc_not_exist_element_%s, //%s\n", $rows[$i+1][0], $rows[$i+1][0];
376 }
377}
378print MSPM_BODY "};\n\n";
379
380#mspm_source_module_list_table
381print MSPM_BODY "kal_char* mspm_source_module_list_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
382print MSPM_BODY "{\n";
383for (my $row = 1; $row < $max_row-1; $row++)
384{
385 print MSPM_BODY " \"$rows[$row][$mspm_procedure_source_module_index]\", \n";
386}
387print MSPM_BODY "};\n\n";
388
389#mspm_procedure_type_table
390print MSPM_BODY "mspm_procedure_type_enum mspm_procedure_type_table[MSPM_PROCEDURE_ENUM_NUM] =\n";
391print MSPM_BODY "{\n";
392for (my $row = 1; $row < $max_row-1; $row++)
393{
394 if (index($rows[$row][$mspm_procedure_category_type_index], 'C2K') == -1)
395 {
396 printf MSPM_BODY " MSPM_PROCEDURE_TYPE_NON_C2K, //%s\n", $rows[$row][0];
397 }
398 else
399 {
400 printf MSPM_BODY " MSPM_PROCEDURE_TYPE_C2K, //%s\n", $rows[$row][0];
401 }
402}
403print MSPM_BODY "};\n\n";
404
405#mspm_icd_procedure_type
406print MSPM_BODY "#ifdef __ICD_LOGGING_SUPPORT__\n";
407print MSPM_BODY "mspm_icd_proc_enum mspm_icd_procedure_type[MSPM_PROCEDURE_ENUM_NUM] =\n";
408print MSPM_BODY "{\n";
409for (my $row = 1; $row < $max_row-1; $row++)
410{
411 printf MSPM_BODY " %s, //%s\n", $rows[$row][$mspm_icd_procedure_type_index], $rows[$row][0];
412}
413print MSPM_BODY "};\n";
414print MSPM_BODY "#endif /* __ICD_LOGGING_SUPPORT__ */\n\n";
415
416#close file
417close MSPM_BODY or warn "Error closing MSPM Body";
418close MSPM_CUSTOM or warn "Error closing MSPM Custom";
419
420
421
422
423
424
425