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])
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'
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
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)
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)
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
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