FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/services/ffs/mktarget.pl @ 407:f2cc551e597f
fc-loadtool flash: beginning of Intel command set support
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Tue, 17 Jun 2014 01:39:59 +0000 |
parents | 30a173257f4a |
children |
rev | line source |
---|---|
217
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #!/usr/bin/perl -w |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 # |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 # mktarget.pl by Mads Meisner-Jensen (mmj@ti.com) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 # |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 # Auto-generate target code from ffs.c source file. |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 # |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 $FFSPATH = shift; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 if (!defined($FFSPATH) || $FFSPATH eq "") { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 $FFSPATH = "."; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 $OUTPATH = shift; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 if (!defined($OUTPATH) || $OUTPATH eq "") { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 $OUTPATH = $FFSPATH; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 $verbose = 1; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 $STATE_OUTSIDE = 0; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 $STATE_IN_FUNCTION = 1; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 $STATE_IN_TASK = 2; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 $state = $STATE_OUTSIDE; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 ############################################################################ |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 # Main |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 ############################################################################ |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 $verbose > 0 && print "mktarget.pl operating in directory '$FFSPATH'\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 open (FFS, "<$FFSPATH/ffs.c") || die "Failed to open 'ffs.c'"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 print $OUTPATH; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 open (TARGETC, ">$OUTPATH/ffs_target.c") || die "Failed to open 'ffs_target.c'"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 target_put("/**********************************************************\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 target_put(" *\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 target_put(" * This is an auto-generated file. Do NOT edit!\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 target_put(" *\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 target_put(" **********************************************************/\n\n\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 while (<FFS>) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 if ($state == $STATE_OUTSIDE) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 target_put($_); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 if (/^{\s*$/) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 $state = $STATE_IN_FUNCTION; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 elsif ($state == $STATE_IN_FUNCTION) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 if (/^\s*\/\/\s*TASKBEGIN\s*(\w+)\s*(\w+)\s*\((.*)\)(.*)$/m) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 $state = $STATE_IN_TASK; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 $rettype = $1; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 $func = $2; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 $funclc = lc($func); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 @args = split(',', $3); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 @values = (); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 @reqmembers = (); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 foreach (@args) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 ($left, $right) = $_ =~ /(\w+)=(.+)/m; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 push (@reqmembers, $left); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 push (@values, $right); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 @vars = split(';', $4); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 task_begin(); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 else |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 target_put($_); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 if (/^}\s*$/m) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 $state = $STATE_OUTSIDE; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 # Write the task_* code after the function |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 target_put("\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 target_put(@taskcode); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 @taskcode = (); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 elsif ($state == $STATE_IN_TASK) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 if (/^.*TASKEND.*$/m) |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
90 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
91 $state = $STATE_IN_FUNCTION; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
93 foreach (@values) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
94 if (/^[a-zA-Z]+/m) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
95 task_put("#undef $_\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
96 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
97 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
98 task_put("\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
99 # task_put(" return EFFS_OK;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
100 task_put("}\n\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
101 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
102 else { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
103 task_put($_); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
104 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
105 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
106 else |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
107 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
108 die "Bad state!"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
109 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
110 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
111 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
112 close (FFS) || die; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
113 close (TARGETC) || die; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
114 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
115 sub task_put |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
116 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
117 push (@taskcode, @_); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
118 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
119 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
120 sub target_put |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
121 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
122 print TARGETC @_; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
123 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
124 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
125 sub task_begin |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
126 { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
127 $verbose > 0 && print "ffs_$funclc ($func)\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
128 $verbose > 1 && print " args = @args\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
129 $verbose > 1 && print " left = @values, right = @reqmembers\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
130 $verbose > 1 && print " vars = @vars\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
131 $verbose > 1 && print "\n"; |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
132 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
133 task_put("$rettype task_$funclc(struct ffs_req_s *p)\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
134 task_put("{\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
135 foreach (@vars) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
136 task_put(" $_;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
137 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
138 task_put("\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
139 for $i (0..$#args) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
140 # If value starts with alpha char, e.g. a variable name |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
141 if ($values[$i] =~ /^[a-zA-Z]+/m) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
142 task_put("#define $values[$i] p->$reqmembers[$i]\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
143 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
144 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
145 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
146 target_put(" {\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
147 target_put(" struct ffs_req_s *req;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
148 target_put(" MSG_ALLOC(req);\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
149 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
150 for $i (0..$#args) { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
151 # Typecasting is necessary for the sake of the tms470 compiler |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
152 if ($reqmembers[$i] eq "src") { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
153 target_put(" req->$reqmembers[$i] = (char *) $values[$i];\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
154 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
155 else { |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
156 target_put(" req->$reqmembers[$i] = $values[$i];\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
157 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
158 } |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
159 target_put(" req->request_id = request_id_get();\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
160 target_put(" req->fb = fb;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
161 target_put(" req->cp = cp;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
162 target_put(" req->cmd = $func;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
163 target_put(" MSG_SEND(req);\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
164 target_put(" return req->request_id;\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
165 target_put(" }\n"); |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
166 |
30a173257f4a
gsm-fw/services/ffs: ffs_target.c generation and compilation
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
167 } |