Ejemplo n.º 1
0
def getFn(msg, field):
    loc = str(1+MsgParser.fieldLocation(field))
    end_loc = str(1+MsgParser.fieldLocation(field) + MsgParser.fieldSize(field)*MsgParser.fieldCount(field)-1)
    param = "obj"
    access = "typecast(obj.m_data(%s:%s), '%s')" % (loc, end_loc, fieldType(field))
    if MsgParser.big_endian:
        access = "swapbytes(%s)" % access
    access = getMath(access, field, typeForScaledInt(field))
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function ret = get.%s%s(%s)
    ret = %s;
end
''' % (fnHdr(field), matlabFieldName(msg,field), asInt, param, access)
    if "Enum" in field:
        ret += '''\
%s
function ret = get.%s(%s)
    ret = obj.%sAsInt;
''' % (fnHdr(field), matlabFieldName(msg,field), param, matlabFieldName(msg,field))
        ret += "    if isKey(obj."+field["Enum"]+"Enum, ret)\n"
        ret += "        ret = obj."+field["Enum"]+"Enum(ret);\n"
        ret += "    end\n"
        ret += "end\n"
    # Need to handle arrays of structs, where elements of array are not contiguous!
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        ret = "ERROR! Need to handle arrays of structs, where elements of array are not contiguous!\n" + ret 
    return ret
Ejemplo n.º 2
0
def arrayAccessor(field):
    # if we've got floating point conversion, don't do an array accessor
    if "Offset" in field or "Scale" in field:
        return ""
    # if we're not an array, don't do an array accessor
    if MsgParser.fieldCount(field) == 1:
        return ""
    # if we're not contiguous, don't do an array accessor
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        return ""
    # if we don't have natural alignment, don't do an array accessor
    if MsgParser.fieldLocation(field) % MsgParser.fieldSize(field) != 0:
        return ""
    loc = str(MsgParser.fieldLocation(field))
    access = "(%s*)&m_data[%s]" % (fieldType(field), loc)
    ret = '''\
%s
%s* %s(%s)
{
    return %s;
}''' % (fnHdr(field), functionPrefix+fieldType(field), namespace+field["Name"], firstParamDecl, access)

    if MsgParser.fieldSize(field) != 1:
        if MsgParser.big_endian:
            ret = "#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \n" + ret + "\n#endif\n"
        else:
            ret = "#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ \n" + ret + "\n#endif\n"
    return ret
Ejemplo n.º 3
0
def setFn(msg, field):
    valueString = setMath("value", field, fieldType(field))
    loc = str(1+MsgParser.fieldLocation(field))
    end_loc = str(1+MsgParser.fieldLocation(field) + MsgParser.fieldSize(field)*MsgParser.fieldCount(field)-1)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function obj = set.%s%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg,field), asInt)
    if MsgParser.big_endian:
        swap = "swapbytes"
    else:
        swap = ""
    ret += '''\
    obj.m_data(%s:%s) = typecast(%s(%s(%s)), 'uint8');
end
''' % (loc, end_loc, swap, fieldType(field), valueString)
    if "Enum" in field:
        ret += '''\
%s
function obj = set.%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg,field))
        ret += "    if isKey(obj.Reverse"+field["Enum"]+"Enum, value)\n"
        ret += "        value = obj.Reverse"+field["Enum"]+"Enum(value);\n"
        ret += "    end\n"
        ret += "    obj."+matlabFieldName(msg,field)+"AsInt = value;\n"
        ret += "end\n"
    # Need to handle arrays of structs, where elements of array are not contiguous!
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        ret = "ERROR! Need to handle arrays of structs, where elements of array are not contiguous!\n" + ret 
    return ret
Ejemplo n.º 4
0
def setFn(msg, field):
    valueString = setMath("value", field, fieldType(field))
    loc = str(1 + MsgParser.fieldLocation(field))
    end_loc = str(1 + MsgParser.fieldLocation(field) +
                  MsgParser.fieldSize(field) * MsgParser.fieldCount(field) - 1)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function obj = set.%s%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg, field), asInt)
    if MsgParser.big_endian:
        swap = "swapbytes"
    else:
        swap = ""
    ret += '''\
    obj.m_data(%s:%s) = typecast(%s(%s(%s)), 'uint8');
end
''' % (loc, end_loc, swap, fieldType(field), valueString)
    if "Enum" in field:
        ret += '''\
%s
function obj = set.%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg, field))
        ret += "    if isKey(obj.Reverse" + field["Enum"] + "Enum, value)\n"
        ret += "        value = obj.Reverse" + field["Enum"] + "Enum(value);\n"
        ret += "    end\n"
        ret += "    obj." + matlabFieldName(msg, field) + "AsInt = value;\n"
        ret += "end\n"
    # Need to handle arrays of structs, where elements of array are not contiguous!
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        ret = "ERROR! Need to handle arrays of structs, where elements of array are not contiguous!\n" + ret
    return ret
Ejemplo n.º 5
0
def arrayAccessor(field):
    # if we've got floating point conversion, don't do an array accessor
    if "Offset" in field or "Scale" in field:
        return ""
    # if we're not an array, don't do an array accessor
    if MsgParser.fieldCount(field) == 1:
        return ""
    # if we're not contiguous, don't do an array accessor
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        return ""
    # if we don't have natural alignment, don't do an array accessor
    if MsgParser.fieldLocation(field) % MsgParser.fieldSize(field) != 0:
        return ""
    loc = str(MsgParser.fieldLocation(field))
    access = "(%s*)&m_data[%s]" % (fieldType(field), loc)
    ret = '''\
%s
%s* %s(%s)
{
    return %s;
}''' % (fnHdr(field), functionPrefix + fieldType(field),
        namespace + field["Name"], firstParamDecl, access)

    if MsgParser.fieldSize(field) != 1:
        if MsgParser.big_endian:
            ret = "#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \n" + ret + "\n#endif\n"
        else:
            ret = "#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ \n" + ret + "\n#endif\n"
    return ret
Ejemplo n.º 6
0
def setFn(field, offset):
    valueString = setMath("value", field, fieldType(field))
    param = "_ value: " + paramType(field)
    loc = str(offset)
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += ", _ idx: Int"
    ret = '''\
%s
public func Set%s(%s)
{
    m_data.SetField(offset: %s, value: %s);
};''' % (fnHdr(field), field["Name"], param, loc, valueString)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8"
                                                   or field["Type"] == "int8"):
        ret += '''
%s
public func Set%sString(value: String)
{
    let stringArray = Array(value.utf8);
    for i in 0 ..< min(%s, stringArray.count)
    {
        Set%s(stringArray[i], i);
    }
};''' % (fnHdr(field), field["Name"], str(
            MsgParser.fieldCount(field)), field["Name"])
    return ret
def setFn(field, offset):
    paramType = returnType(field, None)
    valueString = setMath("value", field)
    #if "Enum" in field:
    #    valueString = paramType + "(" + valueString + ")"
    #    paramType = field["Enum"]
    param = paramType + " value"
    loc = str(offset)
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += ", int idx"
    ret = '''\
%s
void Set%s(%s)
{
    _data.set%s(%s, %s);
}''' % (fnHdr(field), field["Name"], param, fieldType(field), loc, valueString)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8"
                                                   or field["Type"] == "int8"):
        ret += '''
%s
void Set%sString(String value)
{
    for(int i=0; i<%s && i<value.length; i++)
    {
        Set%s(value.codeUnitAt(i), i);
    }
}''' % (fnHdr(field), field["Name"], str(
            MsgParser.fieldCount(field)), field["Name"])
    return ret
Ejemplo n.º 8
0
def getFn(msg, field, offset):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(offset)
    type = "'"+fieldType(field)+"'"
    count = MsgParser.fieldCount(field)
    cleanup = ""
    preface = ""
    if "Enum" in field:
        # find index that corresponds to string input param
        cleanup = reverseEnumLookup(msg, field)
    if  count > 1:
        if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
            preface += "\n    count = " + str(count)+"\n"
            preface += "    if count > len(self.rawBuffer())-("+loc+"):\n"
            preface += "        count = len(self.rawBuffer())-<MSGNAME>.MSG_OFFSET\n"
            type = "str(count)+'s'"
            count = 1
            cleanup = '''ascii_len = str(value).find("\\\\x00")
    value = str(value)[2:ascii_len]
    ''' 
        else:
            loc += "+idx*" + str(MsgParser.fieldSize(field))
    if "Offset" in field or "Scale" in field:
        cleanup = "value = " + MsgParser.getMath("value", field, "")+"\n    "
    ret = '''\
%s%s
    value = struct.unpack_from(%s, self.rawBuffer(), %s)[0]
    %sreturn value
''' % (fnHdr(field,offset,count, "Get"+field["Name"]), preface, type, loc, cleanup)
    return ret
Ejemplo n.º 9
0
def fnHdr(field, offset, count, name):
    param = "self"
    if str.find(name, "Set") == 0:
        param += ", value"
    if count > 1:
        param += ", idx"
    if str.find(name, "Set") != 0:
        if "Enum" in field:
            param += ", enumAsInt=0"

    min = MsgParser.fieldMin(field)
    max = MsgParser.fieldMax(field)

    try:
        fieldSize = MsgParser.fieldSize(field)
        if MsgParser.fieldUnits(field) == "ASCII" and (
                field["Type"] == "uint8" or field["Type"] == "int8"):
            count = MsgParser.fieldCount(field)
    except KeyError:
        fieldSize = 0

    ret = '''\
@msg.units('%s')
@msg.default('%s')
@msg.minVal('%s')
@msg.maxVal('%s')
@msg.offset('%s')
@msg.size('%s')
@msg.count(%s)
def %s(%s):
    """%s"""''' % (MsgParser.fieldUnits(field),
                   str(MsgParser.fieldDefault(field)), str(min), str(max),
                   str(offset), str(fieldSize), str(count), name, param,
                   MsgParser.fieldDescription(field))
    return ret
def getFn(msg, field, offset):
    loc = str(offset)
    end_loc = str(offset +
                  MsgParser.fieldSize(field) * MsgParser.fieldCount(field) - 1)
    param = "obj"
    access = "swapbytes(typecast(obj.m_data(%s:%s), '%s'))" % (
        loc, end_loc, fieldType(field))
    access = getMath(access, field, typeForScaledInt(field))
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function ret = get.%s%s(%s)
    ret = %s;
end
''' % (fnHdr(field), matlabFieldName(msg, field), asInt, param, access)
    if "Enum" in field:
        ret += '''\
%s
function ret = get.%s(%s)
    ret = obj.%sAsInt;
''' % (fnHdr(field), matlabFieldName(
            msg, field), param, matlabFieldName(msg, field))
        ret += "    if isKey(obj." + field["Enum"] + "Enum, ret)\n"
        ret += "        ret = obj." + field["Enum"] + "Enum(ret);\n"
        ret += "    end\n"
        ret += "end\n"
    return ret
def setFn(msg, field, offset):
    valueString = setMath("value", field, fieldType(field))
    loc = str(offset)
    end_loc = str(offset +
                  MsgParser.fieldSize(field) * MsgParser.fieldCount(field) - 1)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function obj = set.%s%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg, field), asInt)
    ret += '''\
    obj.m_data(%s:%s) = typecast(swapbytes(%s(%s)), 'uint8');
end
''' % (loc, end_loc, fieldType(field), valueString)
    if "Enum" in field:
        ret += '''\
%s
function obj = set.%s(obj, value)
''' % (fnHdr(field), matlabFieldName(msg, field))
        ret += "    if isKey(obj.Reverse" + field["Enum"] + "Enum, value)\n"
        ret += "        value = obj.Reverse" + field["Enum"] + "Enum(value);\n"
        ret += "    end\n"
        ret += "    obj." + matlabFieldName(msg, field) + "AsInt = value;\n"
        ret += "end\n"
    return ret
def accessors(msg):
    gets = []
    sets = []
    arrayAccessors = []

    offset = 0
    if "Fields" in msg:
        for field in msg["Fields"]:
            gets.append(getFn(field, offset))
            sets.append(setFn(field, offset))
            arrAcc = arrayAccessor(field, offset)
            if arrAcc != "":
                arrayAccessors.append(arrAcc)
            bitOffset = 0
            if "Bitfields" in field:
                for bits in field["Bitfields"]:
                    numBits = bits["NumBits"]
                    gets.append(
                        getBitsFn(field, bits, offset, bitOffset, numBits))
                    sets.append(
                        setBitsFn(field, bits, offset, bitOffset, numBits))
                    bitOffset += numBits
            offset += MsgParser.fieldSize(field) * MsgParser.fieldCount(field)

    return gets + sets + arrayAccessors
Ejemplo n.º 13
0
def setFn(msg, field, offset):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(offset)
    count = MsgParser.fieldCount(field)
    type = fieldType(field)
    lookup = ""
    if "Enum" in field:
        # find index that corresponds to string input param
        lookup = enumLookup(msg, field)
    math = MsgParser.setMath("value", field, "int")
    storageType = field["Type"]
    if "int" in storageType:
        math = "min(max(%s, %s), %s)" % (math, MsgParser.fieldStorageMin(storageType), MsgParser.fieldStorageMax(storageType))
    math = lookup + "tmp = " + math
    if count > 1:
        if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
            type = str(count) + "s"
            count = 1
            math = "tmp = value.encode('utf-8')"
        else:
            loc += "+idx*" + str(MsgParser.fieldSize(field))
    ret  = '''\
%s
    %s
    struct.pack_into('%s', self.rawBuffer(), %s, tmp)
''' % (fnHdr(field,offset,count, "Set"+field["Name"]), math, type, loc)
    return ret
Ejemplo n.º 14
0
def fnHdr(field, offset, count, name):
    param = "self"
    if str.find(name, "Set") == 0:
        param += ", value"
    if  count > 1:
        param += ", idx"
    if str.find(name, "Set") != 0:
        if "Enum" in field:
            param += ", enumAsInt=0"
        
    min = MsgParser.fieldMin(field)
    max = MsgParser.fieldMax(field)
    
    try:
        fieldSize = MsgParser.fieldSize(field)
        if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
            count = MsgParser.fieldCount(field)
    except KeyError:
        fieldSize = 0
        
    ret = '''\
@msg.units('%s')
@msg.default('%s')
@msg.minVal('%s')
@msg.maxVal('%s')
@msg.offset('%s')
@msg.size('%s')
@msg.count(%s)
def %s(%s):
    """%s"""''' % (MsgParser.fieldUnits(field), str(MsgParser.fieldDefault(field)), str(min), str(max), str(offset), str(fieldSize), str(count), name, param, MsgParser.fieldDescription(field))
    return ret
Ejemplo n.º 15
0
def fieldInfo(field):
    ret = ""
    if "Default" in field:
        ret += '#define <MSGNAME>_'+field["Name"]+'_DEFAULT ' + str(fieldDefault(field)) + "\n"
    if MsgParser.fieldCount(field) > 1:
        ret += '#define <MSGNAME>_'+field["Name"]+'_COUNT ' + str(MsgParser.fieldCount(field)) + "\n"
    ret += '#define <MSGNAME>_'+field["Name"]+'_OFFSET ' + str(MsgParser.fieldLocation(field)) + "\n"
    ret += '#define <MSGNAME>_'+field["Name"]+'_SIZE ' + str(MsgParser.fieldSize(field)) + "\n"
    return ret
def arrayAccessor(field, offset):
    if "Offset" in field or "Scale" in field:
        return ""
    if MsgParser.fieldCount(field) == 1:
        return ""

    loc = str(offset)
    access = "(%s*)&m_data[%s]" % (fieldType(field), loc)
    ret = '''\
%s
%s* %s(%s)
{
    return %s;
}''' % (fnHdr(field), functionPrefix + fieldType(field),
        namespace + field["Name"], firstParamDecl, access)

    if (MsgParser.fieldSize(field) != 1):
        ret = "#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && %s == %s\n" % (
            MsgParser.fieldSize(field), offset) + ret + "\n#endif\n"
    return ret
Ejemplo n.º 17
0
def fieldInfo(field):
    ret = ""
    if "Default" in field:
        ret += '#define <MSGNAME>_' + field["Name"] + '_DEFAULT ' + str(
            fieldDefault(field)) + "\n"
    if MsgParser.fieldCount(field) > 1:
        ret += '#define <MSGNAME>_' + field["Name"] + '_COUNT ' + str(
            MsgParser.fieldCount(field)) + "\n"
    ret += '#define <MSGNAME>_' + field["Name"] + '_OFFSET ' + str(
        MsgParser.fieldLocation(field)) + "\n"
    ret += '#define <MSGNAME>_' + field["Name"] + '_SIZE ' + str(
        MsgParser.fieldSize(field)) + "\n"
    return ret
Ejemplo n.º 18
0
def getFn(msg, field):
    loc = str(1 + MsgParser.fieldLocation(field))
    end_loc = str(1 + MsgParser.fieldLocation(field) +
                  MsgParser.fieldSize(field) * MsgParser.fieldCount(field) - 1)
    param = "obj"
    access = "typecast(obj.m_data(%s:%s), '%s')" % (loc, end_loc,
                                                    fieldType(field))
    if MsgParser.big_endian:
        access = "swapbytes(%s)" % access
    access = getMath(access, field, typeForScaledInt(field))
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    asInt = ""
    if "Enum" in field:
        asInt = "AsInt"
    ret = '''\
%s
function ret = get.%s%s(%s)
    ret = %s;
end
''' % (fnHdr(field), matlabFieldName(msg, field), asInt, param, access)
    if "Enum" in field:
        ret += '''\
%s
function ret = get.%s(%s)
    ret = obj.%sAsInt;
''' % (fnHdr(field), matlabFieldName(
            msg, field), param, matlabFieldName(msg, field))
        ret += "    if isKey(obj." + field["Enum"] + "Enum, ret)\n"
        ret += "        ret = obj." + field["Enum"] + "Enum(ret);\n"
        ret += "    end\n"
        ret += "end\n"
    # Need to handle arrays of structs, where elements of array are not contiguous!
    if MsgParser.fieldSize(field) != MsgParser.fieldArrayElementOffset(field):
        ret = "ERROR! Need to handle arrays of structs, where elements of array are not contiguous!\n" + ret
    return ret
def fieldInfos(msg):
    ret = []

    offset = 0
    if "Fields" in msg:
        for field in msg["Fields"]:
            ret.append(fieldInfo(field, offset))
            bitOffset = 0
            if "Bitfields" in field:
                for bits in field["Bitfields"]:
                    numBits = bits["NumBits"]
                    ret.append(
                        fieldBitsInfo(field, bits, offset, bitOffset, numBits))
                    bitOffset += numBits
            offset += MsgParser.fieldSize(field) * MsgParser.fieldCount(field)

    return "\n".join(ret)
Ejemplo n.º 20
0
def fieldInfos(msg):
    ret = ""

    offset = 0
    if "Fields" in msg:
        for field in msg["Fields"]:
            ret += fieldInfo(field, offset)
            bitOffset = 0
            if "Bitfields" in field:
                for bits in field["Bitfields"]:
                    numBits = bits["NumBits"]
                    ret += fieldBitsInfo(field, bits, offset, bitOffset,
                                         numBits)
                    bitOffset += numBits
            offset += MsgParser.fieldSize(field) * MsgParser.fieldCount(field)

    return ret
Ejemplo n.º 21
0
def setFn(field, offset):
    paramType = fieldType(field)
    valueString = setMath("value", field, '(' + fieldType(field) + ')', 'f')
    if "Offset" in field or "Scale" in field:
        paramType = typeForScaledInt(field)
    #elif "Enum" in field:
    #    valueString = valueString + ".intValue()"
    #    paramType = field["Enum"]
    param = paramType + " value"
    loc = str(offset)
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += ", int idx"
    ret = '''\
%s
public void Set%s(%s)
{
    m_data.put%s(%s, (%s)%s);
}''' % (fnHdr(field), field["Name"], param, fieldAccessorType(field), loc,
        fieldCastType(field).lower(), valueString)
    return ret
Ejemplo n.º 22
0
def getFn(field, offset):
    loc = str(offset)
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += "_ idx: Int"
    ret = '''\
%s
public func Get%s(%s) -> %s
{
''' % (fnHdr(field), field["Name"], param, paramType(field))
    access = "m_data.GetField(offset: %s)" % (loc)
    if ("Offset" in field or "Scale" in field):
        ret += '    let valI : ' + fieldType(field) + ' = ' + access + ';\n'
        access = getMath("valI", field, "Double")
        ret += '    let valD = ' + access + ';\n'
        ret += '    return valD;\n'
    else:
        ret += '    return %s;\n' % (access)
    ret += '};'
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8"
                                                   or field["Type"] == "int8"):
        ret += '''
%s
public func Get%sString() -> String
{
    var value = "";
    for i in 0 ..< min(%s, hdr.GetDataLength()-%s)
    {
        let nextChar = Get%s(Int(i));
        if(nextChar == 0)
        {
            break;
        }
        value += String(nextChar);
    }
    return value;
};''' % (fnHdr(field), field["Name"], str(
            MsgParser.fieldCount(field)), offset, field["Name"])
    return ret
Ejemplo n.º 23
0
def getFn(field, offset):
    loc = str(offset)
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += "int idx"
    access = "Get_%s(&m_data[%s])" % (fieldType(field), loc)
    access = getMath(access, field, castForScaledInt(field), 'f')
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    elif "Enum" in field and namespace == "":
        retType = namespace + field["Enum"]
        access = retType + "(" + access + ")"
    ret = '''\
%s
%s %s(%s)%s
{
    return %s;
}''' % (fnHdr(field), functionPrefix + retType, namespace + "Get" +
        field["Name"], params(firstParamDecl, param), const, access)
    return ret
def fieldReflection(field, offset):
    loc = str(offset)
    type = fieldReflectionType(field)
    params = type
    params += "("
    params += '"' + field["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(field) + '"'
    params += ', "' + MsgParser.fieldUnits(field) + '"'
    params += ", " + loc
    params += ", " + str(MsgParser.fieldSize(field))
    params += ", " + str(MsgParser.fieldCount(field))
    if "Offset" in field or "Scale" in field:
        if "Scale" in field:
            params += ", " + str(field["Scale"])
        else:
            params += ", 1.0"
        if "Offset" in field:
            params += ", " + str(field["Offset"])
        else:
            params += ", 0.0"
    params += ")"
    return params
Ejemplo n.º 25
0
def fieldReflection(field):
    loc = str(MsgParser.fieldLocation(field))
    type = fieldReflectionType(field)
    params = type;
    params += "("
    params += '"'+field["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(field) + '"'
    params += ', "' + MsgParser.fieldUnits(field) + '"'
    params += ", " + loc
    params += ", " + str(MsgParser.fieldSize(field))
    params += ", " + str(MsgParser.fieldCount(field))
    if "Offset" in field or "Scale" in field:
        if "Scale" in field:
            params += ", " + str(field["Scale"])
        else:
            params += ", 1.0"
        if "Offset" in field:
            params += ", " + str(field["Offset"])
        else:
            params += ", 0.0"
    params += ")"
    return params
Ejemplo n.º 26
0
def setFn(field, offset):
    paramType = fieldType(field)
    valueString = setMath("value", field, "(" + fieldType(field) + ")", 'f')
    if "Offset" in field or "Scale" in field:
        paramType = typeForScaledInt(field)
    elif "Enum" in field and namespace == "":
        valueString = "(" + paramType + ")" + "(" + valueString + ")"
        paramType = namespace + field["Enum"]
    param = paramType + " value"
    loc = str(offset)
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += ", int idx"
    ret = '''\
%s
%s %s(%s)
{
    Set_%s(&m_data[%s], %s);
}''' % (fnHdr(field), functionPrefix + "void",
        namespace + "Set" + field["Name"], params(
            firstParamDecl, param), fieldType(field), loc, valueString)
    return ret
def fieldBitsReflection(field, bits, offset, bitOffset, numBits):
    loc = str(offset)
    type = fieldReflectionBitsType(field, bits)
    params = type
    params += "("
    params += '"' + bits["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(bits) + '"'
    params += ', "' + MsgParser.fieldUnits(bits) + '"'
    params += ", " + loc
    params += ", " + str(MsgParser.fieldSize(field))
    params += ", " + str(MsgParser.fieldCount(bits))
    if "Offset" in bits or "Scale" in bits:
        if "Scale" in bits:
            params += ", " + str(bits["Scale"])
        else:
            params += ", 1.0"
        if "Offset" in bits:
            params += ", " + str(bits["Offset"])
        else:
            params += ", 0.0"
    params += ", " + str(bitOffset)
    params += ", " + str(numBits)
    params += ")"
    return params
Ejemplo n.º 28
0
def fieldBitsReflection(field, bits, bitOffset, numBits):
    loc = str(MsgParser.fieldLocation(field))
    type = fieldReflectionBitsType(field, bits)
    params = type;
    params += "("
    params += '"'+bits["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(bits) + '"'
    params += ', "' + MsgParser.fieldUnits(bits) + '"'
    params += ", " + loc
    params += ", " + str(MsgParser.fieldSize(field))
    params += ", " + str(MsgParser.fieldCount(bits))
    if "Offset" in bits or "Scale" in bits:
        if "Scale" in bits:
            params += ", " + str(bits["Scale"])
        else:
            params += ", 1.0"
        if "Offset" in bits:
            params += ", " + str(bits["Offset"])
        else:
            params += ", 0.0"
    params += ", " + str(bitOffset)
    params += ", " + str(numBits)
    params += ")"
    return params
def getFn(field, offset):
    loc = str(offset)
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += "int idx"
    access = "_data.get%s(%s)" % (fieldType(field), loc)
    access = getMath(access, field)
    retType = returnType(field, None)
    #elif "Enum" in field:
    #    retType = field["Enum"]
    #    access = retType + "(" + access + ")"
    ret = '''\
%s
%s Get%s(%s)
{
    return %s;
}''' % (fnHdr(field), retType, field["Name"], param, access)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8"
                                                   or field["Type"] == "int8"):
        ret += '''
%s
String Get%sString()
{
    final StringBuffer ret = new StringBuffer();
    for(int i=0; i<%s && i<_hdr.GetDataLength()-%s; i++)
    {
        final String nextChar = new String.fromCharCode(Get%s(i));
        if(nextChar == '\\0')
            break;
        ret.write(nextChar);
    }
    return ret.toString();
}''' % (fnHdr(field), field["Name"], str(
            MsgParser.fieldCount(field)), offset, field["Name"])
    return ret
Ejemplo n.º 30
0
def getFn(field, offset):
    loc = str(offset)
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldSize(field))
        param += "int idx"
    access = "m_data.get%s(%s)" % (fieldAccessorType(field), loc)
    if field["Type"].startswith("u"):
        access = fieldPromotionFn(field) + "(" + access + ")"
    access = "(" + fieldType(field) + ")" + access
    access = getMath(access, field, "(" + typeForScaledInt(field) + ")", 'f')
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    #elif "Enum" in field:
    #    retType = field["Enum"]
    #    access = retType + ".construct(" + access + ")"
    ret = '''\
%s
public %s Get%s(%s)
{
    return %s;
}''' % (fnHdr(field), retType, field["Name"], param, access)
    return ret