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 = ''
    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