bthci/bthci2/CommandsEvents/generator/parameter.py
changeset 0 29b1cd4cb562
child 16 9f17f914e828
equal deleted inserted replaced
-1:000000000000 0:29b1cd4cb562
       
     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() + ';'