|
1 # Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 # All rights reserved. |
|
3 # This component and the accompanying materials are made available |
|
4 # under the terms of "Eclipse Public License v1.0" |
|
5 # which accompanies this distribution, and is available |
|
6 # at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 # |
|
8 # Initial Contributors: |
|
9 # Nokia Corporation - initial contribution. |
|
10 # |
|
11 # Contributors: |
|
12 # |
|
13 # Description: |
|
14 # |
|
15 |
|
16 # Creates a comma separated string of parameters suitable for method signatures. |
|
17 def makeParameters(aParams): |
|
18 param_str = "" |
|
19 |
|
20 for p in aParams: |
|
21 param_str += p.toParameter() + ', ' |
|
22 |
|
23 return param_str[:-2] |
|
24 |
|
25 # Creates a ;\n\t separated string of parameters suitable for class member declarations. |
|
26 def makeMembers(aParams): |
|
27 member_str = "" |
|
28 |
|
29 for p in aParams: |
|
30 member_str += p.toMember() + ';\n\t' |
|
31 |
|
32 return member_str |
|
33 |
|
34 # Encapsulates a command parameter, has a name, a type, a offset and if is an 'array' of values has a array size specifier, |
|
35 # i.e. the name of the parameter that determines the number of 'array entries' of this parameter. |
|
36 class Parameter: |
|
37 # aType, type of parameter |
|
38 # aName, name of parameter |
|
39 # aArray, name of array size specifier parameter. Optional. |
|
40 def __init__(self, aType, aName, aOffset, aArray = ''): |
|
41 self.iOffset = aOffset |
|
42 if aName[0] == '@': |
|
43 self.iName = aName[1:] |
|
44 self.iNotInFrame = True |
|
45 else: |
|
46 self.iName = aName |
|
47 self.iNotInFrame = False |
|
48 self.iType = aType |
|
49 self.iArray = aArray |
|
50 |
|
51 |
|
52 def getName(self): |
|
53 # Defective code strikes again - these are badly coded up values in the txt file so |
|
54 # they have to be handled as a special case. |
|
55 if self.iName == 'RxPacket_Length' or self.iName == 'TxPacket_Length': |
|
56 return self.iName |
|
57 ix = self.iName.find('_') |
|
58 if ix >= 0: |
|
59 return self.iName[0:ix] |
|
60 else: |
|
61 return self.iName |
|
62 |
|
63 # Returns a string of ''MemberType' iName' or 'RArray<'MemberType'> iName' depending on parameter is of type array or not. |
|
64 def toMember(self): |
|
65 if self.iArray == '': |
|
66 return self.iType.toMember() + ' i' + self.getName() |
|
67 else: |
|
68 return 'RArray< ' + self.iType.toMember() + ' > i' + self.getName() |
|
69 |
|
70 # Returns a string of ''ParamType' aName' or 'const RArray<'ParamType'>& aName' depending on parameter is of type array or not. |
|
71 def toParameter(self): |
|
72 if self.iArray == '': |
|
73 return self.iType.toParameter() + ' a' + self.getName() |
|
74 else: |
|
75 return 'const RArray< ' + self.iType.toArrayParameter() + ' >& a' + self.getName() |
|
76 |
|
77 def toEventParameter(self): |
|
78 if self.iArray == '': |
|
79 return self.iType.toParameter() + ' a' + self.getName() |
|
80 else: |
|
81 return 'const TArray< ' + self.iType.toArrayParameter() + ' >& a' + self.getName() |
|
82 |
|
83 # Returns a string used when writing data to a CHctlCommandFrame |
|
84 def setterParams(self, indexer = ''): |
|
85 # Needs size specifier, for TUint32 |
|
86 if (self.iType.iSize == 3 or self.iType.iSize == 4 and self.iType.iSetter == 'PutBytes32') or self.iType.iSetter == 'PutPaddedString': |
|
87 if indexer != '': |
|
88 return 'i' + self.getName() + '[' + indexer + '], ' + str(self.iType.iSize); |
|
89 else: |
|
90 return 'i' + self.getName() + ', ' + str(self.iType.iSize) |
|
91 else: |
|
92 if indexer != '': |
|
93 return 'i' + self.getName() + '[' + indexer + ']' |
|
94 else: |
|
95 return 'i' + self.getName() |
|
96 |
|
97 # Returns a string used when accessing values in the event data descriptor |
|
98 def getterParams(self): |
|
99 getter_str = str(self.iOffset) |
|
100 |
|
101 if self.iArray != '': |
|
102 getter_str += ', ' + str(self.iBlockSize) + ', aIndex' |
|
103 |
|
104 if self.iType.iSize == 3 or self.iType.iSize == 4 and self.iType.iGetter == 'AsTUint32': |
|
105 getter_str += ', ' + str(self.iType.iSize) |
|
106 |
|
107 return getter_str |
|
108 |
|
109 # Returns a string used to return the value from the event data descriptor |
|
110 def getterFunc(self): |
|
111 getter_str = self.iType.iGetter + '(' + self.getterParams() + ')' |
|
112 if self.iType.iCast != '': |
|
113 getter_str = 'static_cast<' + self.iType.iCast + '>(' + getter_str + ')' |
|
114 return getter_str |
|
115 |
|
116 # Returns an accessor definition in the form of 'IMPORT_C 'AccessorType' iName() const;' or |
|
117 # 'IMPORT_C 'AccessorType' iName(TInt aIndex) const;' if parameter is of array type. |
|
118 def accessorDef(self, aEventOrCommand): |
|
119 if self.iArray == '': |
|
120 return 'IMPORT_C ' + self.iType.toAccessor(aEventOrCommand) + ' ' + self.getName() + '() const;' |
|
121 else: |
|
122 return 'IMPORT_C ' + self.iType.toAccessor(aEventOrCommand) + ' ' + self.getName() + '(TInt aIndex) const;' |
|
123 |
|
124 # Returns an accessor implementation in the form of 'EXPORT_C 'AccessorType' aClass::iName() const { ... }' or |
|
125 # 'EXPORT_C 'AccessorType' aClass::iName(TInt aIndex) const { ... }' if parameter is of array type |
|
126 # Used for events and complete events. |
|
127 def eventAccessorImpl(self, aClass): |
|
128 if self.iArray == '': |
|
129 return 'EXPORT_C ' + self.iType.toAccessor('Event') + ' ' + aClass + '::' + self.getName() + '() const\n\t{\n\treturn ' + self.getterFunc() + ';\n\t}\n\n' |
|
130 else: |
|
131 return 'EXPORT_C ' + self.iType.toAccessor('Event') + ' ' + aClass + '::' + self.getName() + '(TInt aIndex) const\n\t{\n\treturn ' + self.getterFunc() + ';\n\t}\n\n' |
|
132 |
|
133 # Returns an accessor implementation in the form of 'EXPORT_C 'AccessorType' aClass::iName() const { ... }' or |
|
134 # 'EXPORT_C 'AccessorType' aClass::iName(TInt aIndex) const { ... }' if parameter is of array type |
|
135 # Used for command events. |
|
136 def commandAccessorImpl(self, aClass): |
|
137 memberName = 'i' + self.getName() |
|
138 if self.iType.iRetTypename != '': |
|
139 memberName = self.iType.iRetTypename + '(' + memberName + ')' |
|
140 if self.iArray == '': |
|
141 return 'EXPORT_C ' + self.iType.toAccessor('Command') + ' ' + aClass + '::' + self.getName() + '() const\n\t{\n\treturn ' + memberName + ';\n\t}\n\n' |
|
142 else: |
|
143 return 'EXPORT_C ' + self.iType.toAccessor('Command') + ' ' + aClass + '::' + self.getName() + '(TInt aIndex) const\n\t{\n\treturn ' + memberName + '[aIndex];\n\t}\n\n' |
|
144 |
|
145 # Returns a string of the format 'iName = aName;' |
|
146 def memberAssignment(self): |
|
147 return 'i' + self.getName() + ' = a' + self.getName() + ';' |