def make_parameter_list(packet):
    param = []
    if len(packet.get_elements('out')) > 1 or packet.get_type() == 'callback':
        for element in packet.get_elements():
            vbnet_type = get_vbnet_type(element)

            if element[3] == 'in' or packet.get_type() == 'callback':
                modifier = 'ByVal '
            else:
                modifier = 'ByRef '

            name = common.underscore_to_headless_camel_case(element[0])

            if element[2] > 1 and element[1] != 'string':
                name += '[]'

            param.append('{0}{1} As {2}'.format(modifier, name, vbnet_type))
    else:
        for element in packet.get_elements('in'):
            vbnet_type = get_vbnet_type(element)
            name = common.underscore_to_headless_camel_case(element[0])

            if element[2] > 1 and element[1] != 'string':
                name += '[]'

            param.append('ByVal {0} As {1}'.format(name, vbnet_type))
    return ', '.join(param)
def make_obsolete_methods():
    methods = ''
    method = """
\t\t/// <summary>
\t\t///  Obsolete. Use overloaded version instead that returns the result.
\t\t/// </summary>
\t\t[Obsolete()]
\t\tpublic void {0}({1})
\t\t{{
\t\t\t{2} = {0}({3});
\t\t}}
"""

    cls = device.get_camel_case_name()
    for packet in device.get_packets('function'):
        ret_count = len(packet.get_elements('out'))
        if ret_count != 1:
            continue

        name = packet.get_camel_case_name()
        sigParams = csharp_common.make_parameter_list(packet, True)
        outParam = common.underscore_to_headless_camel_case(packet.get_elements('out')[0][0])
        callParams = ", ".join(map(lambda e: common.underscore_to_headless_camel_case(e[0]), packet.get_elements('in')))
        doc = '\n\t\t///  '.join(fix_links(packet.get_doc()[1][lang]).strip().split('\n'))

        methods += method.format(name,
                                 sigParams,
                                 outParam,
                                 callParams,
                                 doc)

    return methods
def make_callbacks():
    cbs = ''
    cb = """
\t\t/// <summary>
\t\t/// </summary>
\t\tprotected void On{0}(byte[] data_)
\t\t{{
{1}\t\t\tvar handler = {0};
\t\t\tif(handler != null)
\t\t\t{{
\t\t\t\thandler(this{3});
\t\t\t}}
\t\t}}
"""
    cls = device.get_camel_case_name()
    for packet in device.get_packets('callback'):
        name = packet.get_camel_case_name()
        name_upper = packet.get_upper_case_name()
        eles = []
        for element in packet.get_elements('out'):
            eles.append(common.underscore_to_headless_camel_case(element[0]))
        callParams = ", ".join(eles)
        signatureParams = csharp_common.make_parameter_list(packet)
        size = str(get_data_size(packet))

        convs = ''
        conv = '\t\t\t{0} {1} = LEConverter.{2}({3}, data_{4});\n'

        pos = 8
        for element in packet.get_elements('out'):
            csharp_type = csharp_common.get_csharp_type(element)
            cname = common.underscore_to_headless_camel_case(element[0])
            from_type = get_from_type(element)
            length = ''
            if element[2] > 1:
                length = ', ' + str(element[2])
            convs += conv.format(csharp_type, 
                                 cname, 
                                 from_type,
                                 pos,
                                 length)

            pos += common.get_element_size(element)

        if convs != '':
            convs += '\n'

        if callParams != '':
            callParams = ', ' + callParams
        
        cbs += cb.format(name, convs, name_upper, callParams, pos, signatureParams)

    return cbs + "\t}\n}"
def make_parameter_list(packet, for_doc, with_modifiers=True):
    param = []
    if len(packet.get_elements('out')) > 1 or packet.get_type() == 'callback':
        for element in packet.get_elements():
            delphi_type = get_delphi_type(element[1])

            if with_modifiers:
                if element[3] == 'in' or packet.get_type() == 'callback':
                    modifier = 'const '
                else:
                    modifier = 'out '
            else:
                modifier = ''

            if element[2] > 1 and element[1] != 'string':
                if for_doc:
                    final_type = 'array [0..{0}] of {1}'.format(element[2] - 1, delphi_type[0])
                else:
                    final_type = 'TArray0To{0}Of{1}'.format(element[2] - 1, delphi_type[1])

                    # special case for GetIdentity to avoid redefinition of TArray0To2OfUInt8 and signature mismatch
                    if packet.get_camel_case_name() == 'GetIdentity' and final_type == 'TArray0To2OfUInt8':
                        final_type = 'TVersionNumber'
            else:
                final_type = delphi_type[0]

            param.append('{0}{1}: {2}'.format(modifier,
                                              common.underscore_to_headless_camel_case(element[0]),
                                              final_type))
    else:
        for element in packet.get_elements('in'):
            delphi_type = get_delphi_type(element[1])

            if with_modifiers:
                modifier = 'const '
            else:
                modifier = ''

            if element[2] > 1 and element[1] != 'string':
                if for_doc:
                    final_type = 'array [0..{0}] of {1}'.format(element[2] - 1, delphi_type[0])
                else:
                    final_type = 'TArray0To{0}Of{1}'.format(element[2] - 1, delphi_type[1])
            else:
                final_type = delphi_type[0]

            param.append('{0}{1}: {2}'.format(modifier,
                                              common.underscore_to_headless_camel_case(element[0]),
                                              final_type))
    return '; '.join(param)
def make_callback_listener_definitions():
    cbs = ''
    cb = """
\t\tcallbacks[CALLBACK_{0}] = new CallbackListener() {{
\t\t\tpublic void callback(byte[] data) {{{1}
\t\t\t\t(({2}Listener)listenerObjects[CALLBACK_{0}]).{3}({4});
\t\t\t}}
\t\t}};
"""

    data = """
\t\t\t\tByteBuffer bb = ByteBuffer.wrap(data, 4, data.length - 4);
\t\t\t\tbb.order(ByteOrder.LITTLE_ENDIAN);

{1}"""
    cbs_end = '\t}\n'
    for packet in device.get_packets('callback'):
        typ = packet.get_upper_case_name()
        name = packet.get_camel_case_name()
        name_lower = packet.get_headless_camel_case_name()
        parameter = ''
        parameter_list = []
        for element in packet.get_elements():
            parameter_list.append(common.underscore_to_headless_camel_case(element[0]))
        parameter = ', '.join(parameter_list)
        cbdata = ''
        if len(packet.get_elements('out')) > 0:
            bbgets, bbret = make_bbgets(packet)
            bbgets = bbgets.replace('\t\t', '\t\t\t\t')
            cbdata = data.format(name_lower,
                                 bbgets,
                                 bbret)

        cbs += cb.format(typ, cbdata, name, name_lower, parameter)
    return cbs + cbs_end
def make_object_desc(packet):
    if len(packet.get_elements('out')) < 2:
        return ''

    desc = {
    'en': """
 The returned object has the public member variables {0}.
""",
    'de': """
 Das zurückgegebene Objekt enthält die Public Member Variablen {0}.
"""
    }

    var = []
    for element in packet.get_elements('out'):
        var.append('``{0} {1}``'.format(java_common.get_java_type(element[1]),
                                        common.underscore_to_headless_camel_case(element[0])))

    if len(var) == 1:
        return common.select_lang(desc).format(var[0])

    if len(var) == 2:
        return common.select_lang(desc).format(var[0] + ' and ' + var[1])

    return common.select_lang(desc).format(', '.join(var[:-1]) + ' and ' + var[-1])
示例#7
0
def make_obj_desc(packet):
    if len(packet.get_elements("out")) < 2:
        return ""

    desc = {
        "en": """
 The returned object has the public member variables {0}.
""",
        "de": """
 Das zurückgegebene Objekt enthält die Public Member Variablen {0}.
""",
    }

    var = []
    for element in packet.get_elements("out"):
        var.append(
            "``{0} {1}``".format(get_java_type(element[1]), common.underscore_to_headless_camel_case(element[0]))
        )

    if len(var) == 1:
        return common.select_lang(desc).format(var[0])

    if len(var) == 2:
        return common.select_lang(desc).format(var[0] + " and " + var[1])

    return common.select_lang(desc).format(", ".join(var[:-1]) + " and " + var[-1])
def make_callback_wrappers():
    wrappers = ''

    for packet in device.get_packets('callback'):
        wrapper = 'procedure T{0}{1}.CallbackWrapper{2}(const packet: TByteArray);\n'.format(device.get_category(),
                                                                                             device.get_camel_case_name(),
                                                                                             packet.get_camel_case_name())

        if len(packet.get_elements('out')) > 0:
            wrapper += 'var ' + delphi_common.make_parameter_list(packet, False, False) + ';\n'

        wrapper += 'begin\n'

        if len(packet.get_elements('out')) == 0:
            wrapper += '  Assert(packet <> nil); { Avoid \'Parameter not used\' warning }\n'

        wrapper += '  if (Assigned({0}Callback)) then begin\n'.format(packet.get_headless_camel_case_name())

        offset = 8
        parameter_names = []
        for element in packet.get_elements('out'):
            parameter_names.append(common.underscore_to_headless_camel_case(element[0]))

            if element[2] > 1 and element[1] != 'string':
                prefix = 'for i := 0 to {0} do '.format(element[2] - 1)
                wrapper += '    {0}{1}[i] := LEConvert{2}From({3} + (i * {4}), packet);\n'.format(prefix,
                                                                                                  common.underscore_to_headless_camel_case(element[0]),
                                                                                                  get_convert_type(element),
                                                                                                  offset,
                                                                                                  common.get_type_size(element[1]))
            else:
                wrapper += '    {0} := LEConvert{1}From({2}, packet);\n'.format(common.underscore_to_headless_camel_case(element[0]),
                                                                                get_convert_type(element),
                                                                                offset)

            offset += common.get_element_size(element)



        wrapper += '    {0}Callback({1});\n'.format(packet.get_headless_camel_case_name(), ', '.join(['self'] + parameter_names))
        wrapper += '  end;\n'
        wrapper += 'end;\n\n'

        wrappers += wrapper

    return wrappers + 'end.\n'
示例#9
0
def make_parameter_list(packet, for_doc, with_modifiers=True):
    param = []
    if len(packet.get_elements('out')) > 1 or packet.get_type() == 'callback':
        for element in packet.get_elements():
            delphi_type = get_delphi_type(element[1])

            if with_modifiers:
                if element[3] == 'in' or packet.get_type() == 'callback':
                    modifier = 'const '
                else:
                    modifier = 'out '
            else:
                modifier = ''

            if element[1] != 'string' and element[2] > 1:
                if for_doc:
                    final_type = 'array [0..{0}] of {1}'.format(element[2] - 1, delphi_type[0])
                else:
                    final_type = 'TArray0To{0}Of{1}'.format(element[2] - 1, delphi_type[1])
            else:
                final_type = delphi_type[0]

            param.append('{0}{1}: {2}'.format(modifier,
                                              common.underscore_to_headless_camel_case(element[0]),
                                              final_type))
    else:
        for element in packet.get_elements('in'):
            delphi_type = get_delphi_type(element[1])

            if with_modifiers:
                modifier = 'const '
            else:
                modifier = ''

            if element[1] != 'string' and element[2] > 1:
                if for_doc:
                    final_type = 'array [0..{0}] of {1}'.format(element[2] - 1, delphi_type[0])
                else:
                    final_type = 'TArray0To{0}Of{1}'.format(element[2] - 1, delphi_type[1])
            else:
                final_type = delphi_type[0]

            param.append('{0}{1}: {2}'.format(modifier,
                                              common.underscore_to_headless_camel_case(element[0]),
                                              final_type))
    return '; '.join(param)
def make_callbacks():
    cbs = ''
    cb = """
\t\tinternal int Callback{0}(byte[] data_)
\t\t{{
{1}\t\t\t(({0})callbacks[CALLBACK_{2}])({3});
\t\t\treturn {4};
\t\t}}
"""
    cls = device.get_camel_case_name()
    for packet in device.get_packets('callback'):
        name = packet.get_camel_case_name()
        name_upper = packet.get_upper_case_name()
        eles = []
        for element in packet.get_elements('out'):
            eles.append(common.underscore_to_headless_camel_case(element[0]))
        params = ", ".join(eles)
        size = str(get_data_size(packet))

        convs = ''
        conv = '\t\t\t{0} {1} = LEConverter.{2}({3}, data_{4});\n'

        pos = 4
        for element in packet.get_elements('out'):
            csharp_type = csharp_common.get_csharp_type(element)
            cname = common.underscore_to_headless_camel_case(element[0])
            from_type = get_from_type(element)
            length = ''
            if element[2] > 1:
                length = ', ' + str(element[2])
            convs += conv.format(csharp_type, 
                                 cname, 
                                 from_type,
                                 pos,
                                 length)

            pos += common.get_element_size(element)

        if convs != '':
            convs += '\n'
        
        cbs += cb.format(name, convs, name_upper, params, pos)

    return cbs
示例#11
0
def make_parameter_list(packet):
    param = []
    for element in packet.get_elements():
        if element[3] == 'out' and packet.get_type() == 'function':
            continue
        java_type = get_java_type(element[1])
        name = common.underscore_to_headless_camel_case(element[0])
        arr = ''
        if element[2] > 1 and element[1] != 'string':
            arr = '[]'
       
        param.append('{0}{1} {2}'.format(java_type, arr, name))
    return ', '.join(param)
示例#12
0
def make_parameter_list(packet):
    param = []
    for element in packet.get_elements():
        if element[3] == "out" and packet.get_type() == "function":
            continue
        java_type = get_java_type(element[1])
        name = common.underscore_to_headless_camel_case(element[0])
        arr = ""
        if element[2] > 1 and element[1] != "string":
            arr = "[]"

        param.append("{0}{1} {2}".format(java_type, arr, name))
    return ", ".join(param)
示例#13
0
def make_bbgets(packet, with_obj = False):
    bbgets = ''
    bbget = '\t\t{0}{1}{2} = {3}(bb.get{4}()){5};'
    new_arr ='{0}[] {1} = new {0}[{2}];'
    loop = """\t\t{2}
\t\tfor(int i = 0; i < {0}; i++) {{
{1}
\t\t}}
"""
    for element in packet.get_elements('out'):
        typ = ''
        if not with_obj:
            typ = get_java_type(element[1]) + ' '

        bbret = common.underscore_to_headless_camel_case(element[0])
        obj = ''
        if with_obj:
            obj = 'obj.'
        cast = ''
        boolean = ''
        if element[1] == 'uint8':
            cast = 'IPConnection.unsignedByte'
        elif element[1] == 'uint16':
            cast = 'IPConnection.unsignedShort'
        elif element[1] == 'uint32':
            cast = 'IPConnection.unsignedInt'
        elif element[1] == 'bool':
            boolean = ' != 0'
        elif element[1] == 'char':
            cast = '(char)'

        format_typ = ''
        if not element[2] > 1:
            format_typ = typ

        bbget_format = bbget.format(format_typ,
                                    obj,
                                    bbret,
                                    cast,
                                    get_put_type(element[1]),
                                    boolean)

        if element[2] > 1:
            arr = new_arr.format(typ.replace(' ', ''), bbret, element[2])
            bbget_format = bbget_format.replace(' =', '[i] =')
            bbget_format = loop.format(element[2], '\t' + bbget_format, arr)

        bbgets += bbget_format + '\n'
    return bbgets, bbret
def make_parameter_list(packet, useOutParams=True):
    param = []
    for element in packet.get_elements():
        if (not useOutParams) and element[3] == 'out':
            continue
        
        out = ''
        if element[3] == 'out' and packet.get_type() == 'function':
            out = 'out '

        csharp_type = get_csharp_type(element)
        name = common.underscore_to_headless_camel_case(element[0])
       
        param.append('{0}{1} {2}'.format(out, csharp_type, name))
    return ', '.join(param)
def make_return_objects():
    objs = ''
    obj = """
\tpublic class {0} {{
{1}

\t\tpublic String toString() {{
\t\t\treturn "[" + {2} "]";
\t\t}}
\t}}
"""
    param = '\t\tpublic {0}{1} {2}{3};'
    for packet in device.get_packets('function'):
        if packet.has_prototype_in_device():
            continue
        if len(packet.get_elements('out')) < 2:
            continue

        name = java_common.get_object_name(packet)

        params = []
        tostr = []
        for element in packet.get_elements():
            typ = java_common.get_java_type(element[1])
            ele_name = common.underscore_to_headless_camel_case(element[0])
            if element[2] > 1 and element[1] != 'string':
                arr = '[]'
                new = ' = new {0}[{1}]'.format(typ, element[2])
                to = '"{0} = " + Arrays.toString({0}) +'.format(ele_name)
            else:
                arr = ''
                new = ''
                to = '"{0} = " + {0} +'.format(ele_name)

            tostr.append(to)
            params.append(param.format(typ, arr, ele_name, new))

        objs += obj.format(name,
                           '\n'.join(params),
                           ' ", " + '.join(tostr))

    return objs
def make_methods():
    methods = ''
    function = 'function {0}.{1}{2}: {3};\n'
    procedure = 'procedure {0}.{1}{2};\n'

    cls = 'T{0}{1}'.format(device.get_category(), device.get_camel_case_name())
    for packet in device.get_packets('function'):
        ret_type = delphi_common.get_return_type(packet, False)
        out_count = len(packet.get_elements('out'))
        name = packet.get_camel_case_name()
        params = delphi_common.make_parameter_list(packet, False)
        function_id = '{0}_{1}_FUNCTION_{2}'.format(device.get_category().upper(),
                                                    device.get_upper_case_name(),
                                                    packet.get_upper_case_name())
        if len(params) > 0:
            params = '(' + params + ')'

        if len(ret_type) > 0:
            method = function.format(cls, name, params, ret_type)
        else:
            method = procedure.format(cls, name, params)

        if out_count > 0:
            method += 'var request, response: TByteArray;'
        else:
            method += 'var request: TByteArray;'

        has_array = False
        for element in packet.get_elements():
            if element[2] > 1 and element[1] != 'string':
                has_array = True
                break

        if has_array:
            method += ' i: longint;'

        method += '\n'
        method += 'begin\n'
        method += '  request := (ipcon as TIPConnection).CreateRequestPacket(self, {0}, {1});\n'.format(function_id, packet.get_request_length())

        # Serialize request
        offset = 8
        for element in packet.get_elements('in'):
            if element[2] > 1 and element[1] != 'string':
                prefix = 'for i := 0 to Length({0}) - 1 do '.format(common.underscore_to_headless_camel_case(element[0]))
                method += '  {0}LEConvert{1}To({2}[i], {3} + (i * {4}), request);\n'.format(prefix,
                                                                                            get_convert_type(element),
                                                                                            common.underscore_to_headless_camel_case(element[0]),
                                                                                            offset,
                                                                                            common.get_type_size(element[1]))
            elif element[1] == 'string':
                method += '  LEConvertStringTo({0}, {1}, {2}, request);\n'.format(common.underscore_to_headless_camel_case(element[0]),
                                                                                  offset,
                                                                                  element[2])
            else:
                method += '  LEConvert{0}To({1}, {2}, request);\n'.format(get_convert_type(element),
                                                                          common.underscore_to_headless_camel_case(element[0]),
                                                                          offset)

            offset += common.get_element_size(element)

        if out_count > 0:
            method += '  response := SendRequest(request);\n'
        else:
            method += '  SendRequest(request);\n'

        # Deserialize response
        offset = 8
        for element in packet.get_elements('out'):
            if out_count > 1:
                result = common.underscore_to_headless_camel_case(element[0])
            else:
                result = 'result'

            if element[2] > 1 and element[1] != 'string':
                prefix = 'for i := 0 to {0} do '.format(element[2] - 1)
                method += '  {0}{1}[i] := LEConvert{2}From({3} + (i * {4}), response);\n'.format(prefix,
                                                                                                 result,
                                                                                                 get_convert_type(element),
                                                                                                 offset,
                                                                                                 common.get_type_size(element[1]))
            elif element[1] == 'string':
                method += '  {0} := LEConvertStringFrom({1}, {2}, response);\n'.format(result,
                                                                                       offset,
                                                                                       element[2])
            else:
                method += '  {0} := LEConvert{1}From({2}, response);\n'.format(result,
                                                                               get_convert_type(element),
                                                                               offset)

            offset += common.get_element_size(element)

        method += 'end;\n\n'

        methods += method

    return methods
def make_methods():
    methods = ''
    method = """
\t\t/// <summary>
\t\t///  {5}
\t\t/// </summary>
\t\t{0}
\t\t{{
\t\t\tbyte[] data_ = MakePacketHeader({1}, FUNCTION_{2});
{3}
{4}
\t\t}}
"""
    method_oneway = """\t\t\tif(responseExpected[FUNCTION_{0}] == ResponseExpectedFlag.ALWAYS_TRUE || responseExpected[FUNCTION_{0}] == ResponseExpectedFlag.TRUE) 
\t\t\t{{
\t\t\t\tbyte[] response;
\t\t\t\tSendRequestExpectResponse(data_, FUNCTION_{0}, out response);
\t\t\t}}
\t\t\telse
\t\t\t{{
\t\t\t\tSendRequestNoResponse(data_);
\t\t\t}}"""
    method_response = """\t\t\tbyte[] response;
\t\t\tSendRequestExpectResponse(data_, FUNCTION_{0}, out response);
{1}"""

    cls = device.get_camel_case_name()
    for packet in device.get_packets('function'):
        ret_count = len(packet.get_elements('out'))
        size = str(get_data_size(packet))
        name_upper = packet.get_upper_case_name()
        doc = format_doc(packet)

        write_convs = ''
        write_conv = '\t\t\tLEConverter.To(({2}){0}, {1}, data_);\n'
        write_conv_length = '\t\t\tLEConverter.To(({3}){0}, {1}, {2}, data_);\n'

        pos = 8
        for element in packet.get_elements('in'):
            wname = common.underscore_to_headless_camel_case(element[0])
            csharp_type = csharp_common.get_csharp_type_for_to_convert(element)
            if element[2] > 1:
                write_convs += write_conv_length.format(wname, pos, element[2], csharp_type)
            else:
                write_convs += write_conv.format(wname, pos, csharp_type)
            pos += common.get_element_size(element)

        method_tail = ''
        read_convs = ''
        read_conv = '\n\t\t\t{0} = LEConverter.{1}({2}, response{3});'

        pos = 8
        for element in packet.get_elements('out'):
            aname = common.underscore_to_headless_camel_case(element[0])
            from_type = get_from_type(element)
            length = ''
            if element[2] > 1:
                length = ', ' + str(element[2])

            if ret_count == 1:
                read_convs = '\n\t\t\treturn LEConverter.{0}({1}, response{2});'.format(from_type, pos, length)
            else:
                read_convs += read_conv.format(aname, from_type, pos, length)
            pos += common.get_element_size(element)

        if ret_count > 0:
            method_tail = method_response.format(name_upper, read_convs)
        else:
            method_tail = method_oneway.format(name_upper)

        signature = csharp_common.make_method_signature(packet)
        methods += method.format(signature,
                                 size,
                                 name_upper,
                                 write_convs,
                                 method_tail,
                                 doc)

    return methods
def make_methods():
    methods = ''
    method = """
\t/**
\t * {8}
\t */
\tpublic {0} {1}({2}) {3} {{
\t\tByteBuffer bb = ipcon.createRequestPacket((byte){4}, FUNCTION_{5}, this);
{6}
{7}
\t}}
"""
    method_response = """\t\tbyte[] response = sendRequest(bb.array());

\t\tbb = ByteBuffer.wrap(response, 8, response.length - 8);
\t\tbb.order(ByteOrder.LITTLE_ENDIAN);

{1}
\t\treturn {2};"""

    method_noresponse = """\t\tsendRequest(bb.array());"""

    loop = """\t\tfor(int i = 0; i < {0}; i++) {{
{1}
\t\t}}
"""
    string_loop = """\t\ttry {{
\t\t{0}
\t\t\t}} catch(Exception e) {{
\t\t\t\tbb.put((byte)0);
\t\t\t}}"""

    cls = device.get_camel_case_name()
    for packet in device.get_packets('function'):
        options = 0
        ret = java_common.get_return_type(packet)
        name_lower = packet.get_headless_camel_case_name()
        parameter = java_common.make_parameter_list(packet)
        size = str(packet.get_request_length())
        name_upper = packet.get_upper_case_name()
        doc = format_doc(packet)
        bbputs = ''
        bbput = '\t\tbb.put{0}({1}{2});'
        for element in packet.get_elements('in'):
            name = common.underscore_to_headless_camel_case(element[0])
            if element[1] == 'bool':
                name = '({0} ? 1 : 0)'.format(name)

            cast = ''
            put_java_type = get_put_java_type(element[1])
            if put_java_type != java_common.get_java_type(element[1]):
                cast = '({0})'.format(put_java_type)

            bbput_format = bbput.format(get_put_type(element[1]),
                                        cast,
                                        name)

            if element[2] > 1:
                if element[1] == 'string':
                    bbput_format = bbput_format.replace(');', '.charAt(i));')
                    bbput_format = string_loop.format(bbput_format)
                else:
                    bbput_format = bbput_format.replace(');', '[i]);')
                bbput_format = loop.format(element[2], '\t' + bbput_format)

            bbputs += bbput_format + '\n'

        throw = 'throws TimeoutException, NotConnectedException'
        if len(packet.get_elements('out')) == 0:
            bbgets = ''
            bbret = ''
        elif len(packet.get_elements('out')) > 1:
            bbgets, bbret = make_bbgets(packet, True)
            obj_name = java_common.get_object_name(packet)
            obj = '\t\t{0} obj = new {0}();\n'.format(obj_name)
            bbgets = obj + bbgets
            bbret = 'obj'
        else:
            bbgets, bbret = make_bbgets(packet, False)

        if len(packet.get_elements('out')) == 0:
            response = method_noresponse.format(name_upper)
        else:
            response = method_response.format(name_upper,
                                              bbgets,
                                              bbret)

        methods += method.format(ret,
                                 name_lower,
                                 parameter,
                                 throw,
                                 size,
                                 name_upper,
                                 bbputs,
                                 response,
                                 doc)

    return methods
示例#19
0
def make_methods():
    methods = ''
    method = """
\t/**
\t * {9}
\t */
\tpublic {0} {1}({2}) {3} {{
\t\tByteBuffer bb = IPConnection.createRequestBuffer((byte)stackID, FUNCTION_{5}, (short){4});
{6}
\t\tipcon.write(this, bb, FUNCTION_{5}, {7});{8}
\t}}
"""
    method_response = """

\t\tbyte[] response = null;
\t\ttry {{
\t\t\tresponse = responseQueue.poll(IPConnection.RESPONSE_TIMEOUT, TimeUnit.MILLISECONDS);
\t\t\tif(response == null) {{
\t\t\t\tthrow new IPConnection.TimeoutException("Did not receive response for {0} in time");
\t\t\t}}
\t\t}} catch (InterruptedException e) {{
\t\t\te.printStackTrace();
\t\t}}

\t\tbb = ByteBuffer.wrap(response, 4, response.length - 4);
\t\tbb.order(ByteOrder.LITTLE_ENDIAN);

{1}
\t\tsemaphoreWrite.release();
\t\treturn {2};"""

    loop = """\t\tfor(int i = 0; i < {0}; i++) {{
{1}
\t\t}}
"""
    string_loop = """\t\ttry {{
\t\t{0}
\t\t\t}} catch(Exception e) {{
\t\t\t\tbb.put((byte)0);
\t\t\t}}"""

    cls = device.get_camel_case_name()
    for packet in device.get_packets('function'):
        ret = get_return_value(packet)
        name_lower = packet.get_headless_camel_case_name()
        parameter = make_parameter_list(packet)
        size = str(packet.get_request_length())
        name_upper = packet.get_upper_case_name()
        doc = '\n\t * '.join(fix_links(packet.get_doc()[1][lang]).strip().split('\n'))
        bbputs = ''
        bbput = '\t\tbb.put{0}(({1}){2});'
        for element in packet.get_elements('in'):
            name = common.underscore_to_headless_camel_case(element[0])
            if element[1] == 'bool':
                name = '({0} ? 1 : 0)'.format(name)

            bbput_format = bbput.format(get_put_type(element[1]),
                                        get_put_java_type(element[1]), 
                                        name)

            if element[2] > 1:
                if element[1] == 'string':
                    bbput_format = bbput_format.replace(');', '.charAt(i));')
                    bbput_format = string_loop.format(bbput_format)
                else:
                    bbput_format = bbput_format.replace(');', '[i]);')
                bbput_format = loop.format(element[2], '\t' + bbput_format)

            bbputs += bbput_format + '\n'

        throw = '' 
        response = ''
        has_ret = 'false'
        if len(packet.get_elements('out')) > 0:
            has_ret = 'true'
            throw = 'throws IPConnection.TimeoutException'
            bbgets, bbret = make_bbgets(packet, False)
            if len(packet.get_elements('out')) > 1:
                bbgets, bbret = make_bbgets(packet, True)
                obj_name = get_object_name(packet)
                obj = '\t\t{0} obj = new {0}();\n'.format(obj_name)
                bbgets = obj + bbgets
                bbret = 'obj'

            response = method_response.format(name_lower,
                                              bbgets,
                                              bbret)
        methods += method.format(ret,
                                 name_lower,
                                 parameter,
                                 throw,
                                 size,
                                 name_upper,
                                 bbputs,
                                 has_ret,
                                 response,
                                 doc)

    return methods
def make_methods():
    methods = ''
    method = """
\t\t/// <summary>
\t\t///  {5}
\t\t/// </summary>
\t\t{0}
\t\t{{
\t\t\tbyte[] data_ = new byte[{1}];
\t\t\tLEConverter.To(stackID, 0, data_);
\t\t\tLEConverter.To(FUNCTION_{2}, 1, data_);
\t\t\tLEConverter.To((ushort){1}, 2, data_);
{3}
{4}
\t\t}}
"""
    method_oneway = "\t\t\tSendRequestNoResponse(data_);"
    method_response = """\t\t\tbyte[] response;
\t\t\tSendRequestExpectResponse(data_, FUNCTION_{0}, out response);
{1}"""

    cls = device.get_camel_case_name()
    for packet in device.get_packets('function'):
        ret_count = len(packet.get_elements('out'))
        size = str(get_data_size(packet))
        name_upper = packet.get_upper_case_name()
        doc = '\n\t\t///  '.join(fix_links(packet.get_doc()[1][lang]).strip().split('\n'))

        write_convs = ''
        write_conv = '\t\t\tLEConverter.To({0}, {1}, data_);\n'
        write_conv_length = '\t\t\tLEConverter.To({0}, {1}, {2}, data_);\n'

        pos = 4
        for element in packet.get_elements('in'):
            wname = common.underscore_to_headless_camel_case(element[0])
            if element[2] > 1:
                write_convs += write_conv_length.format(wname, pos, element[2])
            else:
                write_convs += write_conv.format(wname, pos)
            pos += common.get_element_size(element)
            
        method_tail = ''
        if ret_count > 0:
            read_convs = ''
            read_conv = '\n\t\t\t{0} = LEConverter.{1}({2}, response{3});'

            pos = 4
            for element in packet.get_elements('out'):
                aname = common.underscore_to_headless_camel_case(element[0])
                from_type = get_from_type(element)
                length = ''
                if element[2] > 1:
                    length = ', ' + str(element[2])

                if ret_count == 1:
                    read_convs = '\n\t\t\treturn LEConverter.{0}({1}, response{2});'.format(from_type, pos, length)
                else:
                    read_convs += read_conv.format(aname, from_type, pos, length)
                pos += common.get_element_size(element)

            method_tail = method_response.format(name_upper, read_convs)
        else:
            method_tail = method_oneway

        signature = csharp_common.make_method_signature(packet)
        methods += method.format(signature,
                                 size,
                                 name_upper,
                                 write_convs,
                                 method_tail,
                                 doc)

    return methods