Exemplo n.º 1
0
def fieldReflection(msg, field):
    fieldFnName = field["Name"]
    fieldCount = MsgParser.fieldCount(field)
    if MsgParser.fieldCount(field) != 1 and MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
        fieldFnName = field["Name"]+"String"
        fieldCount = 1
    fieldInfo = "["+\
                  '"name":"'+field["Name"] + '",'+\
                  '"type":"'+reflectionInterfaceType(field) + '",'+\
                  '"units":"'+MsgParser.fieldUnits(field) + '",'+\
                  '"minVal":"'+str(MsgParser.fieldMin(field)) + '",'+\
                  '"maxVal":"'+str(MsgParser.fieldMax(field)) + '",'+\
                  '"description":"'+MsgParser.fieldDescription(field) + '",'+\
                  '"get":"Get' + fieldFnName + '",'+\
                  '"set":"Set' + fieldFnName  + '",'+\
                  '"count":'+str(fieldCount) + ', '
    if "Bitfields" in field:
        bitfieldInfo = []
        for bits in field["Bitfields"]:
            bitfieldInfo.append("    " + bitfieldReflection(msg, field, bits))
        fieldInfo += '"bitfieldInfo" : [\n' + ",\n".join(bitfieldInfo) + "], "
    else:
        fieldInfo += '"bitfieldInfo" : [], '
    if "Enum" in field:
        fieldInfo += '"enumLookup" : [' + field["Enum"]+"Enum, " + "Reverse" + field["Enum"]+"Enum]]"
    else:
        fieldInfo += '"enumLookup" : []]'
    return fieldInfo
Exemplo n.º 2
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
Exemplo n.º 3
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
Exemplo n.º 4
0
def fieldReflection(msg, field):
    fieldFnName = field["Name"]
    fieldCount = MsgParser.fieldCount(field)
    if MsgParser.fieldCount(field) != 1 and MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
        fieldFnName = field["Name"]+"String"
        fieldCount = 1
    fieldInfo = "{"+\
                  'name:"'+field["Name"] + '",'+\
                  'type:"'+reflectionInterfaceType(field) + '",'+\
                  'units:"'+MsgParser.fieldUnits(field) + '",'+\
                  'minVal:"'+str(MsgParser.fieldMin(field)) + '",'+\
                  'maxVal:"'+str(MsgParser.fieldMax(field)) + '",'+\
                  'description:"'+MsgParser.fieldDescription(field) + '",'+\
                  'get:"Get' + fieldFnName + '",'+\
                  'set:"Set' + fieldFnName  + '",'+\
                  'count:'+str(fieldCount) + ', '
    if "Bitfields" in field:
        bitfieldInfo = []
        for bits in field["Bitfields"]:
            bitfieldInfo.append("    " + bitfieldReflection(msg, field, bits))
        fieldInfo += "bitfieldInfo : [\n" + ",\n".join(bitfieldInfo) + "], "
    else:
        fieldInfo += "bitfieldInfo : [], "
    if "Enum" in field:
        fieldInfo += "enumLookup : [<MSGSHORTNAME>." + field["Enum"]+", " + "<MSGSHORTNAME>.Reverse" + field["Enum"]+"]}"
    else:
        fieldInfo += "enumLookup : []}"
    return fieldInfo
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
Exemplo n.º 6
0
def structUnpacking(msg):
    ret = []

    if "Fields" in msg:
        for field in msg["Fields"]:
            if "Bitfields" in field:
                for bits in field["Bitfields"]:
                    ret.append('try { ret["' + bits["Name"] + '"] = Get' +
                               bits["Name"] + "(); } catch (err) {}")
            else:
                if MsgParser.fieldCount(field) == 1:
                    ret.append('try { ret["' + field["Name"] + '"] = Get' +
                               field["Name"] + "(); } catch (err) {}")
                else:
                    if MsgParser.fieldUnits(field) == "ASCII" and (
                            field["Type"] == "uint8"
                            or field["Type"] == "int8"):
                        ret.append('try { ret["' + field["Name"] + '"] = Get' +
                                   field["Name"] +
                                   "String(); } catch (err) {}")
                    else:
                        ret.append('try { ret["' + field["Name"] +
                                   '"] = []; } catch (err) {}')
                        ret.append('try { ')
                        ret.append("    for i in 0 ..< " +
                                   str(MsgParser.fieldCount(field)))
                        ret.append('    {')
                        ret.append('        ret["' + field["Name"] +
                                   '"][i] = Get' + field["Name"] + "(i);")
                        ret.append('    }')
                        ret.append('} catch (err) {}')

    return "\n".join(ret)
Exemplo n.º 7
0
def setFn(field):
    valueString = setMath("value", field, fieldType(field))
    param = "_ value: " + paramType(field)
    loc = str(MsgParser.fieldLocation(field))
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldArrayElementOffset(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
Exemplo n.º 8
0
def fieldReflection(msg, field):
    fieldInfo = "FieldInfo("+\
                  'name="'+field["Name"] + '",'+\
                  'type="'+reflectionInterfaceType(field) + '",'+\
                  'units="'+MsgParser.fieldUnits(field) + '",'+\
                  'minVal="'+str(MsgParser.fieldMin(field)) + '",'+\
                  'maxVal="'+str(MsgParser.fieldMax(field)) + '",'+\
                  'description="'+MsgParser.fieldDescription(field) + '",'+\
                  'get='+"Get" + field["Name"] + ','+\
                  'set='+"Set" + field["Name"]  + ','+\
                  'count='+str(pythonFieldCount(field)) + ', '
    if "IDBits" in field:
        fieldInfo += "idbits="+str(field["IDBits"])+","
    if "Bitfields" in field:
        bitfieldInfo = []
        for bits in field["Bitfields"]:
            bitfieldInfo.append("    " + bitfieldReflection(msg, field, bits))
        fieldInfo += "bitfieldInfo = [\n" + ",\n".join(bitfieldInfo) + "], "
    else:
        fieldInfo += "bitfieldInfo = [], "
    if "Enum" in field:
        fieldInfo += "enum = [" + field["Enum"]+", " + "Reverse" + field["Enum"]+"])"
    else:
        fieldInfo += "enum = [])"
    return fieldInfo
Exemplo n.º 9
0
def getFn(msg, field):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(MsgParser.fieldLocation(field))
    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())-("+loc+")\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.fieldArrayElementOffset(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,MsgParser.fieldLocation(field),count, "Get"+field["Name"]), preface, type, loc, cleanup)
    return ret
Exemplo n.º 10
0
def setFn(msg, field):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(MsgParser.fieldLocation(field))
    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.fieldArrayElementOffset(field))
    ret = '''\
%s
    %s
    struct.pack_into('%s', self.rawBuffer(), %s, tmp)
''' % (fnHdr(field, MsgParser.fieldLocation(field), count,
             "Set" + field["Name"]), math, type, loc)
    return ret
Exemplo n.º 11
0
def fieldReflection(msg, field):
    fieldInfo = "FieldInfo("+\
                  'name="'+field["Name"] + '",'+\
                  'type="'+reflectionInterfaceType(field) + '",'+\
                  'units="'+MsgParser.fieldUnits(field) + '",'+\
                  'minVal="'+str(MsgParser.fieldMin(field)) + '",'+\
                  'maxVal="'+str(MsgParser.fieldMax(field)) + '",'+\
                  'description="'+MsgParser.fieldDescription(field) + '",'+\
                  'get='+"Get" + field["Name"] + ','+\
                  'set='+"Set" + field["Name"]  + ','+\
                  'count='+str(pythonFieldCount(field)) + ', '
    if "IDBits" in field:
        fieldInfo += "idbits=" + str(field["IDBits"]) + ","
    if "Bitfields" in field:
        bitfieldInfo = []
        for bits in field["Bitfields"]:
            bitfieldInfo.append("    " + bitfieldReflection(msg, field, bits))
        fieldInfo += "bitfieldInfo = [\n" + ",\n".join(bitfieldInfo) + "], "
    else:
        fieldInfo += "bitfieldInfo = [], "
    if "Enum" in field:
        fieldInfo += "enum = [" + field["Enum"] + ", " + "Reverse" + field[
            "Enum"] + "])"
    else:
        fieldInfo += "enum = [])"
    return fieldInfo
Exemplo n.º 12
0
def setFn(field):
    valueString = setMath("value", field, "")
    lookup = ""
    if "Enum" in field:
        # find index that corresponds to string input param
        lookup = enumLookup(field)        
    param = "value"
    loc = str(MsgParser.fieldLocation(field))
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldArrayElementOffset(field))
        param += ", idx"
    ret = '''\
%s
<MSGSHORTNAME>.prototype.Set%s = function(%s)
{
    %sthis.m_data.set%s(%s, %s%s);
};''' % (fnHdr(field), field["Name"], param, lookup, fieldType(field), loc, valueString, endian_string())
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
        ret += '''
%s
<MSGSHORTNAME>.prototype.Set%sString = function(value)
{
    for(i=0; i<%s && i<value.length; i++)
    {
        this.Set%s(value[i].charCodeAt(0), i);
    }
};''' % (fnHdr(field), field["Name"], str(MsgParser.fieldCount(field)), field["Name"])
    return ret
Exemplo n.º 13
0
def setFn(msg, field):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(MsgParser.fieldLocation(field))
    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.fieldArrayElementOffset(field))
    ret  = '''\
%s
    %s
    struct.pack_into('%s', self.rawBuffer(), %s, tmp)
''' % (fnHdr(field,MsgParser.fieldLocation(field),count, "Set"+field["Name"]), math, type, loc)
    return ret
Exemplo n.º 14
0
def getFn(msg, field):
    loc = msgName(msg) + ".MSG_OFFSET + " + str(MsgParser.fieldLocation(field))
    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())-(" + loc + ")\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.fieldArrayElementOffset(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, MsgParser.fieldLocation(field), count,
             "Get" + field["Name"]), preface, type, loc, cleanup)
    return ret
Exemplo n.º 15
0
def fieldReflection(field):
    loc = str(MsgParser.fieldLocation(field))
    params = "FieldInfo";
    params += "("
    params += '"'+field["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(field) + '"'
    params += ', "' + MsgParser.fieldUnits(field) + '"'
    params += ", " + str(MsgParser.fieldCount(field))
    params += ")"
    return params
Exemplo n.º 16
0
def fieldBitsReflection(field, bits, bitOffset, numBits):
    loc = str(MsgParser.fieldLocation(field))
    params = "FieldInfo";
    params += "("
    params += '"'+bits["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(bits) + '"'
    params += ', "' + MsgParser.fieldUnits(bits) + '"'
    params += ", " + str(MsgParser.fieldCount(bits))
    params += ")"
    return params
Exemplo n.º 17
0
def fieldReflection(field):
    loc = str(MsgParser.fieldLocation(field))
    params = "FieldInfo"
    params += "("
    params += '"' + field["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(field) + '"'
    params += ', "' + MsgParser.fieldUnits(field) + '"'
    params += ", " + str(MsgParser.fieldCount(field))
    params += ")"
    return params
Exemplo n.º 18
0
def fieldBitsReflection(field, bits, bitOffset, numBits):
    loc = str(MsgParser.fieldLocation(field))
    params = "FieldInfo"
    params += "("
    params += '"' + bits["Name"] + '"'
    params += ', "' + MsgParser.fieldDescription(bits) + '"'
    params += ', "' + MsgParser.fieldUnits(bits) + '"'
    params += ", " + str(MsgParser.fieldCount(bits))
    params += ")"
    return params
Exemplo n.º 19
0
def bitsReflectionInterfaceType(field):
    type = "int"
    if "Offset" in field or "Scale" in field:
        type = "float"
    elif MsgParser.fieldUnits(field) == "ASCII":
        type = "string"
    elif "Enum" in field:
        type = "enumeration"
    else:
        type = "int"
    return type
Exemplo n.º 20
0
def genericInfo(field, loc, type):
    params  = '    public static final int loc = ' + loc + ';\n'
    params += '    public static final %s max = (%s)%s;\n' % (type, type, fieldMax(field))
    params += '    public static final %s min = (%s)%s;\n' % (type, type, fieldMin(field))
    params += '    public static final String units = "' + str(MsgParser.fieldUnits(field)) + '"' + ';\n'
    params += '    public static final int count = ' + str(MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += '    public static final %s defaultValue = (%s)%s;\n' % (type, type, languageConst(field["Default"]))
    if "Scale" in field:
        params += '    public static final float scale = (float)' + str(field["Scale"]) + ';\n'
    if "Offset" in field:
        params += '    public static final float offset = (float)' + str(field["Offset"]) + ';\n'
    return params
Exemplo n.º 21
0
def genericInfo(field, loc, type):
    params  = '    int static constexpr loc   = ' + loc + ';\n'
    params += '    '+type+' static constexpr max   = ' + fieldMax(field) + ';\n'
    params += '    '+type+' static constexpr min   = ' + fieldMin(field) + ';\n'
    params += '    char static constexpr units[] = "' + str(MsgParser.fieldUnits(field)) + '"' + ';\n'
    params += '    int static constexpr count = ' + str(MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += '    '+type+' static constexpr defaultValue = ' + str(fieldDefault(field)) + ";\n" 
    if "Scale" in field:
        params += '    auto static constexpr scale = ' + str(field["Scale"]) + ';\n'
    if "Offset" in field:
        params += '    auto static constexpr offset = ' + str(field["Offset"]) + ';\n'
    return params
Exemplo n.º 22
0
def genericInfo(field, loc, type):
    params  = '    static final int loc   = ' + loc + ';\n'
    params += '    static final '+type+' max   = ' + fieldMax(field) + ';\n'
    params += '    static final '+type+' min   = ' + fieldMin(field) + ';\n'
    params += '    static final String units = "' + str(MsgParser.fieldUnits(field)) + '"' + ';\n'
    params += '    static final int count = ' + str(MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += '    static final '+type+' defaultValue = ' + str(field["Default"]) + ";\n" 
    if "Scale" in field:
        params += '    static final int scale = ' + str(field["Scale"]) + ';\n'
    if "Offset" in field:
        params += '    static final int offset = ' + str(field["Offset"]) + ';\n'
    return params
Exemplo n.º 23
0
def genericInfo(field, loc, type):
    params = '    const val loc = ' + loc + '\n'
    params += '    val max = ' + str(fieldMax(field)) + '\n'
    params += '    val min = ' + str(fieldMin(field)) + '\n'
    params += '    const val units = "' + str(
        MsgParser.fieldUnits(field)) + '"' + '\n'
    params += '    const val count = ' + str(
        MsgParser.fieldCount(field)) + '\n'
    if "Default" in field:
        params += '    const val ' + type + ' defaultValue = ' + str(
            field["Default"]) + "\n"
    if "Scale" in field:
        params += '    const val scale = ' + str(field["Scale"]) + '\n'
    if "Offset" in field:
        params += '    const val offset = ' + str(field["Offset"]) + '\n'
    return params
Exemplo n.º 24
0
def bitfieldReflection(msg, field, bits):
    name = bits["Name"]
    ret = "{"+\
              'name:"'+name + '",'+\
              'type:"'+bitsReflectionInterfaceType(bits) + '",'+\
              'units:"'+MsgParser.fieldUnits(bits) + '",'+\
              'minVal:"'+str(MsgParser.fieldMin(bits)) + '",'+\
              'maxVal:"'+str(MsgParser.fieldMax(bits)) + '",'+\
              'description:"'+MsgParser.fieldDescription(bits) + '",'+\
              'get:"Get' + name + '",'+\
              'set:"Set' + name  + '", '
    if "Enum" in bits:
        ret += "enumLookup : [<MSGSHORTNAME>."+  bits["Enum"]+", " + "<MSGSHORTNAME>.Reverse" + bits["Enum"]+"]}"
    else:
        ret += "enumLookup : []}"
    return ret
Exemplo n.º 25
0
def bitfieldReflection(msg, field, bits):
    name = bits["Name"]
    ret = "["+\
              '"name":"'+name + '",'+\
              '"type":"'+bitsReflectionInterfaceType(bits) + '",'+\
              '"units":"'+MsgParser.fieldUnits(bits) + '",'+\
              '"minVal":"'+str(MsgParser.fieldMin(bits)) + '",'+\
              '"maxVal":"'+str(MsgParser.fieldMax(bits)) + '",'+\
              '"description":"'+MsgParser.fieldDescription(bits) + '",'+\
              '"get":"Get' + name + '",'+\
              '"set":"Set' + name  + '", '
    if "Enum" in bits:
        ret += '"enumLookup" : ['+  bits["Enum"]+"Enum, " + "Reverse" + bits["Enum"]+"Enum]]"
    else:
        ret += '"enumLookup" : []]'
    return ret
Exemplo n.º 26
0
def bitfieldReflection(msg, field, bits):
    name = bits["Name"]
    ret = "BitFieldInfo("+\
              'name="'+name + '",'+\
              'type="'+bitsReflectionInterfaceType(bits) + '",'+\
              'units="'+MsgParser.fieldUnits(bits) + '",'+\
              'minVal="'+str(MsgParser.fieldMin(bits)) + '",'+\
              'maxVal="'+str(MsgParser.fieldMax(bits)) + '",'+\
              'description="'+MsgParser.fieldDescription(bits) + '",'+\
              'get='+"Get" + name + ','+\
              'set='+"Set" + name  + ', '
    if "Enum" in bits:
        ret += "enum = ["+  bits["Enum"]+", " + "Reverse" + bits["Enum"]+"])"
    else:
        ret += "enum = [])"
    return ret
Exemplo n.º 27
0
def bitfieldReflection(msg, field, bits):
    name = bits["Name"]
    ret = "BitFieldInfo("+\
              'name="'+name + '",'+\
              'type="'+bitsReflectionInterfaceType(bits) + '",'+\
              'units="'+MsgParser.fieldUnits(bits) + '",'+\
              'minVal="'+str(MsgParser.fieldMin(bits)) + '",'+\
              'maxVal="'+str(MsgParser.fieldMax(bits)) + '",'+\
              'description="'+MsgParser.fieldDescription(bits) + '",'+\
              'get='+"Get" + name + ','+\
              'set='+"Set" + name  + ', '
    if "IDBits" in bits:
        ret += "idbits="+str(bits["IDBits"])+","
    if "Enum" in bits:
        ret += "enum = ["+  bits["Enum"]+", " + "Reverse" + bits["Enum"]+"])"
    else:
        ret += "enum = [])"
    return ret
Exemplo n.º 28
0
def genericInfo(field, loc, type):
    params = '    public static final int loc = ' + loc + ';\n'
    params += '    public static final %s max = (%s)%s;\n' % (type, type,
                                                              fieldMax(field))
    params += '    public static final %s min = (%s)%s;\n' % (type, type,
                                                              fieldMin(field))
    params += '    public static final String units = "' + str(
        MsgParser.fieldUnits(field)) + '"' + ';\n'
    params += '    public static final int count = ' + str(
        MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += '    public static final %s defaultValue = (%s)%s;\n' % (
            type, type, languageConst(field["Default"]))
    if "Scale" in field:
        params += '    public static final float scale = (float)' + str(
            field["Scale"]) + ';\n'
    if "Offset" in field:
        params += '    public static final float offset = (float)' + str(
            field["Offset"]) + ';\n'
    return params
Exemplo n.º 29
0
def genericInfo(field, loc, type):
    params = '    int static constexpr loc   = ' + loc + ';\n'
    params += '    ' + type + ' static constexpr max   = ' + fieldMax(
        field) + ';\n'
    params += '    ' + type + ' static constexpr min   = ' + fieldMin(
        field) + ';\n'
    params += '    char static constexpr units[] = "' + str(
        MsgParser.fieldUnits(field)) + '"' + ';\n'
    params += '    int static constexpr count = ' + str(
        MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += '    ' + type + ' static constexpr defaultValue = ' + str(
            fieldDefault(field)) + ";\n"
    if "Scale" in field:
        params += '    auto static constexpr scale = ' + str(
            field["Scale"]) + ';\n'
    if "Offset" in field:
        params += '    auto static constexpr offset = ' + str(
            field["Offset"]) + ';\n'
    return params
Exemplo n.º 30
0
def genericInfo(field, fieldName, loc, fieldType):
    params = 'static const int ' + fieldName + '_Loc   = ' + loc + ';\n'
    params += 'static const ' + fieldType + " " + fieldName + '_Max   = ' + fieldMax(
        field) + ';\n'
    params += 'static const ' + fieldType + " " + fieldName + '_Min   = ' + fieldMin(
        field) + ';\n'
    params += 'static const String ' + fieldName + "_Units = '" + str(
        MsgParser.fieldUnits(field)) + "'" + ';\n'
    params += 'static const int ' + fieldName + '_Count = ' + str(
        MsgParser.fieldCount(field)) + ';\n'
    if "Default" in field:
        params += 'static const ' + fieldType + " " + fieldName + '_DefaultValue = ' + str(
            fieldDefault(field)) + ";\n"
    if "Scale" in field:
        params += 'static const double ' + fieldName + '_Scale = ' + str(
            field["Scale"]) + ';\n'
    if "Offset" in field:
        params += 'static const double ' + fieldName + '_Offset = ' + str(
            field["Offset"]) + ';\n'
    return params
Exemplo n.º 31
0
def getFn(field):
    loc = str(MsgParser.fieldLocation(field))
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += " + index*" + str(MsgParser.fieldArrayElementOffset(field))
        param += "index: Int"
    retType = fieldType(field)
    if "Offset" in field or "Scale" in field:
        retType = typeForScaledInt(field)
    ret = '''\
%s
fun get%s(%s): %s {
''' % (fnHdr(field), field["Name"], param, retType)
    access = "data.get%s(%s%s)" % (fieldType(field), loc, endian_string())
    if ("Offset" in field or "Scale" in field):
        ret += '    val valI : ' + fieldType(field) + ' = ' + access + '\n'
        access = getMath("valI", field, "Double")
        ret += '    val valD = ' + access + '\n'
        ret += '    return valD\n'
    else:
        ret += '    return %s\n' % (access)
    ret += '}'
    if MsgParser.fieldUnits(field) == "ASCII" and MsgParser.fieldCount(
            field) > 1 and (field["Type"] == "uint8"
                            or field["Type"] == "int8"):
        ret += '''
%s
fun get%sString(): String {
    var value = ""
    for (i in 0 until minOf(%s, header.getDataLength().toInt() - %s)) {
        val nextChar = get%s(i)
        if (nextChar == 0.toUByte()) {
            break
        }
        value += nextChar.toByte().toChar()
    }
    return value
}''' % (fnHdr(field), field["Name"], str(MsgParser.fieldCount(field)),
        str(MsgParser.fieldLocation(field)), field["Name"])
    return ret
Exemplo n.º 32
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
Exemplo n.º 33
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
Exemplo n.º 34
0
def structUnpacking(msg):
    ret = []

    if "Fields" in msg:    
        for field in msg["Fields"]:
            if "Bitfields" in field:
                for bits in field["Bitfields"]:
                    ret.append('try { ret["'+bits["Name"] + '"] = this.Get' + bits["Name"] + "(); } catch (err) {}")
            else:
                if MsgParser.fieldCount(field) == 1:
                    ret.append('try { ret["'+field["Name"] + '"] = this.Get' + field["Name"] + "(); } catch (err) {}")
                else:
                    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
                        ret.append('try { ret["'+field["Name"] + '"] = this.Get' + field["Name"] + "String(); } catch (err) {}")
                    else:
                        ret.append('try { ret["'+field["Name"] + '"] = []; } catch (err) {}')
                        ret.append('try { ')
                        ret.append("    for(i=0; i<"+str(MsgParser.fieldCount(field))+"; i++)")
                        ret.append('        ret["'+field["Name"] + '"][i] = this.Get' + field["Name"] + "(i);")
                        ret.append('} catch (err) {}')
            
    return "\n".join(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
Exemplo n.º 36
0
def getFn(field):
    loc = str(MsgParser.fieldLocation(field))
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldArrayElementOffset(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)), str(MsgParser.fieldLocation(field)), field["Name"])
    return ret
Exemplo n.º 37
0
def getFn(field):
    loc = str(MsgParser.fieldLocation(field))
    param = ""
    if MsgParser.fieldCount(field) > 1:
        loc += "+idx*" + str(MsgParser.fieldArrayElementOffset(field))
        param += "idx"
    if "Enum" in field:
        if param != "":
            param += ", "
        param += "enumAsInt=false"
    access = "(this.m_data.get%s(%s%s))" % (fieldType(field), loc, endian_string())
    access = getMath(access, field, "")
    cleanup = ""
    if "Enum" in field:
        cleanup = reverseEnumLookup(field)
    ret = '''\
%s
<MSGSHORTNAME>.prototype.Get%s = function(%s)
{
    var value = %s;
    %sreturn value;
};''' % (fnHdr(field), field["Name"], param, access, cleanup)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
        ret += '''
%s
<MSGSHORTNAME>.prototype.Get%sString = function()
{
    var value = '';
    for(i=0; i<%s && i<this.hdr.GetDataLength()-%s; i++)
    {
        nextChar = String.fromCharCode(this.Get%s(i));
        if(nextChar == '\\0')
            break;
        value += nextChar;
    }
    return value;
};''' % (fnHdr(field), field["Name"], str(MsgParser.fieldCount(field)), str(MsgParser.fieldLocation(field)), field["Name"])
    return ret
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
Exemplo n.º 39
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 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
Exemplo n.º 41
0
def fnHdr(field):
    ret = "// %s %s, (%s to %s)" % (MsgParser.fieldDescription(field), MsgParser.fieldUnits(field), MsgParser.fieldMin(field), MsgParser.fieldMax(field))
    return ret
Exemplo n.º 42
0
def pythonFieldCount(field):
    count = MsgParser.fieldCount(field)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8"
                                                   or field["Type"] == "int8"):
        count = 1
    return count
Exemplo n.º 43
0
def pythonFieldCount(field):
    count = MsgParser.fieldCount(field)
    if MsgParser.fieldUnits(field) == "ASCII" and (field["Type"] == "uint8" or field["Type"] == "int8"):
        count = 1
    return count