def get_labview_callbacks(self): callbacks = [] template = '.. labview:function:: event {0}.{1}Callback -> sender{2}\n\n{3}{4}\n' for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 outputs = packet.get_labview_parameter_list('out', high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_labview_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, prefix_elements=[('sender', '.NET Refnum ({0})'.format( self.get_labview_class_name()), 1, 'out')], callback_parameter_label_override={ 'en': 'Callback Output', 'de': 'Callback-Ausgabe' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) doc = packet.get_labview_formatted_doc() callbacks.append( template.format(self.get_labview_class_name(), packet.get_name(skip=skip).camel, common.wrap_non_empty(', ', outputs, ''), meta_table, doc)) return ''.join(callbacks)
def get_go_callbacks(self): callbacks = [] template = '.. go:function:: func (*{device}) Register{callback_name_camel}Callback(func({result_type})) (registrationId uint64)\n\n{meta}\n\n{desc}\n' device = self.get_go_name() for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 desc = packet.get_go_formatted_doc() result_type = packet.get_go_return_type( high_level=packet.has_high_level(), ignore_constant_group=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_go_type( ignore_constant_group=True, context='meta', cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, suffix_elements=[('registrationId', 'uint64', 1, 'return')], explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) callbacks.append( template.format( device=device, callback_name_camel=packet.get_name(skip=skip).camel, callback_name_space=packet.get_name(skip=skip).space, result_type=result_type, meta=meta_table, desc=desc)) return ''.join(callbacks)
def get_labview_functions(self, type_): functions = [] template = '.. labview:function:: {0}.{1}({2}){3}\n\n{4}{5}\n' cls = self.get_labview_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).camel inputs = packet.get_labview_parameter_list('in', high_level=True) outputs = packet.get_labview_parameter_list('out', high_level=True) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_labview_type(cardinality=cardinality), lambda element, index=None: element.get_name(index=index).headless, parameter_label_override={'en': 'Input', 'de': 'Eingabe'}, return_label_override={'en': 'Output', 'de': 'Ausgabe'}, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) doc = packet.get_labview_formatted_doc() functions.append(template.format(cls, name, inputs, common.wrap_non_empty(' -> ', outputs, ''), meta_table, doc)) return ''.join(functions)
def get_vbnet_callbacks(self): callbacks = [] template = '.. vbnet:function:: Event {0}.{1}Callback(ByVal sender As {0}{2})\n\n{3}{4}\n' for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 desc = packet.get_vbnet_formatted_doc() params = packet.get_vbnet_parameter_list(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_vbnet_type( context='meta', cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, prefix_elements=[('sender', self.get_vbnet_class_name(), 1, 'out')], explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) callbacks.append( template.format(self.get_vbnet_class_name(), packet.get_name(skip=skip).camel, common.wrap_non_empty(', ', params, ''), meta_table, desc)) return ''.join(callbacks)
def get_csharp_functions(self, type_): functions = [] template = '.. csharp:function:: {0}\n\n{1}{2}\n' for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue signature = packet.get_csharp_function_signature( print_full_name=True, is_doc=True, high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_csharp_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, output_parameter='conditional', explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_csharp_formatted_doc(1) functions.append(template.format(signature, meta_table, desc)) return ''.join(functions)
def get_python_functions(self, type_): functions = [] template = '.. py:function:: {0}.{1}({2})\n\n{3}{4}\n' cls = self.get_python_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).under params = packet.get_python_parameters(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_python_type( cardinality=cardinality), lambda element, index=None: element.get_python_name(index=index ), return_object='conditional', no_out_value={ 'en': 'None', 'de': 'None' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_python_formatted_doc() functions.append( template.format(cls, name, params, meta_table, desc)) return ''.join(functions)
def get_go_functions(self, type_): functions = [] template = '.. go:function:: func (*{struct_name}) {func_name}({params}) ({returns})\n\n{meta_table}\n{desc}\n' for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).camel params = packet.get_go_parameters(high_level=True, ignore_constant_group=True) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_go_type(ignore_constant_group=True, context='meta', cardinality=cardinality), lambda element, index=None: element.get_name(index=index).headless, suffix_elements=[('err', 'error', 1, 'out')], explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) returns = packet.get_go_return_type(high_level=True, ignore_constant_group=True) desc = packet.get_go_formatted_doc() functions.append(template.format(struct_name=self.get_go_name(), func_name=name, params=params, returns=returns, meta_table=meta_table, desc=desc)) return ''.join(functions)
def get_java_functions(self, type_): functions = [] template = '.. java:function:: {0} {1}::{2}({3})\n\n{4}\n{5}\n' cls = self.get_java_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 ret_type = packet.get_java_return_type(True, high_level=True) name = packet.get_name(skip=skip).headless params = packet.get_java_parameters(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_java_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, return_object='conditional', explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_java_formatted_doc(1) functions.append( template.format(ret_type, cls, name, params, meta_table, desc)) return ''.join(functions)
def get_mathematica_functions(self, type_): functions = [] template = '.. mathematica:function:: {0}@{1}[{2}] -> {3}\n\n{4}{5}\n' cls = self.get_mathematica_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).camel params = packet.get_mathematica_parameter_list(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_mathematica_type( ), lambda element, index=None: element. get_mathematica_description_name(index=index), output_parameter='conditional', explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table( meta, index_format_func=lambda index: str(index + 1)) ret = packet.get_mathematica_return(high_level=True) doc = packet.get_mathematica_formatted_doc() functions.append( template.format(cls, name, params, ret, meta_table, doc)) return ''.join(functions)
def get_c_functions(self, type_): functions = [] template = '.. c:function:: int {0}({1})\n\n{2}{3}\n' for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = '{0}_{1}'.format(self.get_name().under, packet.get_name(skip=skip).under) plist = common.wrap_non_empty( ', ', packet.get_c_parameters(high_level=True), '') params = '{0} *{1}{2}'.format(self.get_name().camel, self.get_name().under, plist) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_c_type( 'meta', cardinality=cardinality), lambda element, index=None: element.get_c_name(index=index), output_parameter='always', prefix_elements=[(self.get_name().under, self.get_name().camel + ' *', 1, 'in')], suffix_elements=[('e_code', 'int', 1, 'return')], stream_length_suffix='_length', high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_c_formatted_doc() functions.append(template.format(name, params, meta_table, desc)) return ''.join(functions)
def get_ruby_functions(self, type_): functions = [] template = '.. rb:function:: {0}#{1}{2}{3}\n\n{4}{5}\n' cls = self.get_ruby_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).under params = packet.get_ruby_parameters(high_level=True) ret_desc = packet.get_ruby_return_desc(high_level=True) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_ruby_type(cardinality=cardinality), lambda element, index=None: element.get_name(index=index).under, return_object='conditional', return_object_label_override={'en': 'Return Array', 'de': 'Rückgabe-Array'}, return_object_is_array=True, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_ruby_formatted_doc() functions.append(template.format(cls, name, common.wrap_non_empty('(', params, ')'), ret_desc, meta_table, desc)) return ''.join(functions)
def get_mathematica_callbacks(self): callbacks = [] template = '.. mathematica:function:: event {0}@{1}Callback[sender{2}]\n\n{3}{4}\n' for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 params = packet.get_mathematica_parameter_list(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_mathematica_type( ), lambda element, index=None: element. get_mathematica_description_name(index=index), prefix_elements=[('sender', 'NETObject[{0}]'.format( self.get_mathematica_class_name()), 1, 'out')], explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table( meta, index_format_func=lambda index: str(index + 1)) doc = packet.get_mathematica_formatted_doc() callbacks.append( template.format(self.get_mathematica_class_name(), packet.get_name(skip=skip).camel, common.wrap_non_empty(', ', params, ''), meta_table, doc)) return ''.join(callbacks)
def get_delphi_functions(self, type_): functions = [] template_function = '.. delphi:function:: function {0}.{1}({2}): {3}\n\n{4}\n{5}\n' template_procedure = '.. delphi:function:: procedure {0}.{1}({2})\n\n{3}\n{4}\n' cls = self.get_delphi_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue ret_type = packet.get_delphi_return_type('doc', high_level=True) skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).camel params = '; '.join(packet.get_delphi_parameters('doc', high_level=True)) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_delphi_type(context='meta', cardinality=cardinality), lambda element, index=None: element.get_name(index=index).headless, output_parameter='conditional', explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_delphi_formatted_doc() if len(ret_type) > 0: function = template_function.format(cls, name, params, ret_type, meta_table, desc) else: function = template_procedure.format(cls, name, params, meta_table, desc) functions.append(function) return ''.join(functions)
def get_delphi_callbacks(self): callbacks = [] template = """.. delphi:function:: property {0}.On{1} .. code-block:: delphi procedure(sender: {0}{2}) of object; {3} {4} """ cls = self.get_delphi_class_name() for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).camel params = '; '.join(packet.get_delphi_parameters('doc', high_level=True)) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_delphi_type(context='meta', cardinality=cardinality), lambda element, index=None: element.get_name(index=index).headless, prefix_elements=[('sender', cls, 1, 'out')], explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_delphi_formatted_doc() callbacks.append(template.format(cls, name, common.wrap_non_empty('; ', params, ''), meta_table, desc)) return ''.join(callbacks)
def get_perl_callbacks(self): callbacks = [] template = '.. perl:attribute:: {0}->CALLBACK_{1}\n\n{2}{3}\n' cls = self.get_perl_class_name() for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_perl_type( cardinality=cardinality), lambda element, index=None: element.get_perl_doc_name(index= index), no_out_value={ 'en': 'no parameters', 'de': 'keine Parameter' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_perl_formatted_doc() callbacks.append( template.format(cls, packet.get_name(skip=skip).upper, meta_table, desc)) return ''.join(callbacks)
def get_javascript_functions(self, type_): functions = [] template = '.. javascript:function:: {0}.{1}({2}{3})\n\n{4}\n{5}\n' cls = self.get_javascript_class_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).headless params = packet.get_javascript_parameter_list(high_level=True) desc = packet.get_javascript_formatted_doc() callbacks = '[returnCallback], [errorCallback]' if name == 'getAPIVersion': callbacks = '' elif name == 'getResponseExpected': callbacks = '[errorCallback]' elif name == 'setResponseExpected': callbacks = '[errorCallback]' elif name == 'setResponseExpectedAll': callbacks = '' if len(params) > 0 and len(callbacks) > 0: params += ", " meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_javascript_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, output_parameter='never' if packet.is_virtual() else 'always', output_parameter_label_override={ 'en': 'Callback Parameters', 'de': 'Callback-Parameter' }, no_out_value={ 'en': 'undefined', 'de': 'undefined' }, no_return_value={ 'en': 'undefined', 'de': 'undefined' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) functions.append( template.format(cls, name, params, callbacks, meta_table, desc)) return ''.join(functions)
def get_java_callbacks(self): callbacks = [] template = { 'en': """ .. java:function:: class {0}::{1}Listener() This listener can be added with the ``add{1}Listener()`` function. An added listener can be removed with the ``remove{1}Listener()`` function. .. java:function:: void {2}({3}) :noindex: {4} {5} """, 'de': """ .. java:function:: class {0}::{1}Listener() Dieser Listener kann mit der Funktion ``add{1}Listener()`` hinzugefügt werde. Ein hinzugefügter Listener kann mit der Funktion ``remove{1}Listener()`` wieder entfernt werden. .. java:function:: void {2}({3}) :noindex: {4} {5} """ } cls = self.get_java_class_name() for packet in self.get_packets('callback'): desc = packet.get_java_formatted_doc(2) params = packet.get_java_parameters(high_level=True) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_java_type(cardinality=cardinality), lambda element, index=None: element.get_name(index=index).headless, callback_parameter_label_override={'en': 'Parameters', 'de': 'Parameter'}, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta, indent_level=2) skip = -2 if packet.has_high_level() else 0 callbacks.append(common.select_lang(template).format(cls, packet.get_name(skip=skip).camel, packet.get_name(skip=skip).headless, params, meta_table, desc)) return ''.join(callbacks)
def get_rust_callbacks(self): callbacks = [] template = { 'en': """ .. rust:function:: {device}::get_{callback_name_under}_callback_receiver(&self) -> {receiver_type}<{result_type}> {meta_table} Receivers created with this function receive {callback_name_space} events. {desc} """, 'de': """ .. rust:function:: {device}::get_{callback_name_under}_callback_receiver(&self) -> {receiver_type}<{result_type}> {meta_table} Receiver die mit dieser Funktion erstellt werden, empfangen {callback_name_space}-Events. {desc} """ } device = self.get_rust_name() for packet in self.get_packets('callback'): meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_rust_type(for_doc=True, cardinality=cardinality), lambda element, index=None: element.get_name(index=index).under, callback_object='conditional', callback_parameter_label_override={'en': 'Event', 'de': 'Event'}, callback_object_label_override={'en': 'Event Object', 'de': 'Event-Objekt'}, explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_rust_formatted_doc() if packet.has_high_level(): skip = -2 receiver_type = "ConvertingHighLevelCallbackReceiver" result_type = ", ".join([packet.get_high_level_payload_type(), packet.get_name(skip=-2).camel_abbrv+"Result", packet.get_rust_return_type()]) else: skip = 0 receiver_type = "ConvertingCallbackReceiver" result_type = packet.get_rust_return_type() callbacks.append(common.select_lang(template).format(device=device, callback_name_under=packet.get_name(skip=skip).under, callback_name_space=packet.get_name(skip=skip).space, receiver_type=receiver_type, result_type=result_type, meta_table=meta_table, desc=desc)) return ''.join(callbacks)
def get_mqtt_callbacks(self): callbacks = [] template = { 'en': """ .. mqtt:function:: register/{device}/<UID>/{callback_name_under}\n\n{meta_table}\n A callback can be registered for this event by publishing to the ``.../register/{device}/<UID>/{callback_name_under}[/<SUFFIX>]`` topic with the payload "true". An added callback can be removed by publishing to the same topic with the payload "false". To support multiple (de)registrations, e.g. for message filtering, an optional suffix can be used. If the callback is triggered, a message with it's payload is published under the corresponding ``.../callback/{device}/<UID>/{callback_name_under}[/<SUFFIX>]`` topic for each registered suffix. {desc} """, 'de': """ .. mqtt:function:: register/{device}/<UID>/{callback_name_under}\n\n{meta_table}\n Ein Callback für dieses Event kann durch Senden des Payloads "true" an das ``.../register/{device}/<UID>/{callback_name_under}[/<SUFFIX>]``-Topic hinzugefügt werden. Ein hinzugefügtes Callback kann durch Senden des Payloads "false" an das selbe Topic wieder entfernt werden. Um mehrere (De-)Registrierungen zu unterstützen, z.B. um Nachrichten filtern zu können, kann ein optionaler Suffix verwendet werden. Wenn das Callback ausgelöst wird, wird dessen Payload für jeden Suffix auf dem entsprechenden ``.../callback/{device}/<UID>/{callback_name_under}[/<SUFFIX>]``-Topic veröffentlicht. {desc} """ } device = self.get_mqtt_device_name() for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 meta = common.format_simple_element_meta([('register', 'bool', 1, 'in')], parameter_label_override={'en': 'Register Request', 'de': 'Registrierungsanfrage'}) meta += packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_mqtt_type(for_doc=True, cardinality=cardinality), lambda element, index=None: element.get_name(index=index).under, callback_parameter_label_override={'en': 'Callback Response', 'de': 'Callback-Antwort'}, constants_hint_override={'en': ('See symbols', 'with symbols'), 'de': ('Siehe Symbole', 'mit Symbolen')}, no_out_value={'en': 'empty payload', 'de': 'keine Nutzdaten'}, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_mqtt_formatted_doc() callbacks.append(common.select_lang(template).format(device=device, callback_name_under=packet.get_mqtt_name(skip=skip), meta_table=meta_table, desc=desc)) return ''.join(callbacks)
def get_mqtt_functions(self, type_): functions = [] template = '.. mqtt:function:: request/{struct_name}/<UID>/{func_name}\n\n{meta_table}{desc}\n' for packet in self.get_packets('function'): if packet.get_doc_type() != type_ or packet.is_virtual(): continue skip = -2 if packet.has_high_level() else 0 name = packet.get_mqtt_name(skip=skip) meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_mqtt_type(for_doc=True, cardinality=cardinality), lambda element, index=None: element.get_name(index=index).under, parameter_label_override={'en': 'Request', 'de': 'Anfrage'}, return_label_override={'en': 'Response', 'de': 'Antwort'}, no_in_value={'en': 'empty payload', 'de': 'keine Nutzdaten'}, no_out_value={'en': 'no response', 'de': 'keine Antwort'}, constants_hint_override={'en': ('See symbols', 'with symbols'), 'de': ('Siehe Symbole', 'mit Symbolen')}, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) if packet.get_name().space == 'Get Identity': meta += common.format_simple_element_meta([('_display_name', 'string', None, 'out')], return_label_override={'en': 'Response', 'de': 'Antwort'}) meta_table = common.make_rst_meta_table(common.merge_meta_sections(meta)) desc = packet.get_mqtt_formatted_doc() if packet.get_name().under == 'get_identity': get_id_desc = { 'en': """If symbolic output is not disabled, the device identifier is mapped to the corresponding name in the format used in topics. The display name contains the {}'s name in a human readable form.""", 'de': """Falls die symbolische Ausgabe nicht deaktiviert wurde, wird der Device Identifier auf den entsprechenden Namen im Format, welches die Topics verwenden, abgebildet. Der Display Name enthält den Anzeigenamen des {}.""" } desc += common.select_lang(get_id_desc).format(self.get_short_display_name()) functions.append(template.format(struct_name=self.get_mqtt_device_name(), func_name=name, meta_table=meta_table, desc=desc)) return ''.join(functions)
def get_php_callbacks(self): callbacks = [] template = '.. php:member:: int {0}::CALLBACK_{1}\n\n{2}{3}{4}\n' cls = self.get_php_class_name() signature_template = { 'en': """ .. code-block:: php <?php void callback({0}) ?> """, 'de': """ .. code-block:: php <?php void callback({0}) ?> """ } for packet in self.get_packets('callback'): skip = -2 if packet.has_high_level() else 0 params = packet.get_php_parameters(context='doc', high_level=True) if len(params) > 0: params += " [, mixed $user_data]" else: params += "[mixed $user_data]" signature = common.select_lang(signature_template).format(params) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_php_type( for_doc=True, cardinality=cardinality), lambda element, index=None: '$' + element.get_name(index=index ).under, suffix_elements=[('$user_data', 'mixed', 1, 'out')], explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_php_formatted_doc() callbacks.append( template.format(cls, packet.get_name(skip=skip).upper, signature, meta_table, desc)) return ''.join(callbacks)
def get_php_functions(self, type_): functions = [] template = '.. php:function:: {0} {1}::{2}({3})\n\n{4}{5}\n' cls = self.get_php_class_name() def name_func(out_count, element, index=None): name = element.get_name(index=index).under if element.get_direction() == 'out' and element.get_packet( ).get_type() == 'function' and out_count > 1 and index == None: name = "'{0}'".format(name) else: name = '${0}'.format(name) return name for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 out_count = len( packet.get_elements(direction='out', high_level=True)) ret_type = packet.get_php_return_type(high_level=True) name = packet.get_name(skip=skip).headless params = packet.get_php_parameters(context='doc', high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_php_type( for_doc=True, cardinality=cardinality), functools.partial(name_func, out_count), return_object='conditional', return_object_label_override={ 'en': 'Return Array', 'de': 'Rückgabe-Array' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_php_formatted_doc() functions.append( template.format(ret_type, cls, name, params, meta_table, desc)) return ''.join(functions)
def get_rust_functions(self, type_): functions = [] template = '.. rust:function:: {struct_name}::{func_name}({params})-> {returns}\n\n{meta_table}{desc}\n' synchronous_functions = [ "get_api_version", "get_response_expected", "set_response_expected", "set_response_expected_all" ] for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).under plist = common.wrap_non_empty( ', ', packet.get_rust_parameters(high_level=True), '') returns = packet.get_rust_return_type( high_level=packet.has_high_level()) if not packet.has_high_level( ) and name not in synchronous_functions: returns = "ConvertingReceiver<" + returns + ">" if "et_response_expected" in name: params = '&mut self{}'.format(plist) else: params = '&self{}'.format(plist) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_rust_type( for_doc=True, cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).under, return_object='conditional', explicit_string_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_rust_formatted_doc() functions.append( template.format(struct_name=self.get_rust_name(), func_name=name, params=params, returns=returns, meta_table=meta_table, desc=desc)) return ''.join(functions)
def get_openhab_configuration(self): meta_table_entries = [] meta_table_entries.append( ('plain', 'UID', 'tinkerforge:{device_lower}:[UID]'.format( device_lower=self.get_thing_type_name()))) meta_table_entries.append(('plain', 'Required firmware version', self.oh.required_firmware_version)) meta_table_entries.append( ('plain', 'Firmware update supported', 'yes' if self.oh.firmware_update_supported else 'no')) channels = [ unescape('<a href="#{device}::{label}">{label}</a>'.format( label=c.get_label(), device=self.get_java_class_name())) for c in self.oh.channels ] meta_table_entries.append(('plain', 'Channels', channels)) actions = [ unescape('<a href="#{0}::{2}{1}">{1}</a>'.format( self.get_java_class_name(), a.fn.get_name(skip=-2 if a.fn.has_high_level() else 0).camel, self.get_category().headless + self.get_name().camel)) for a in self.oh.actions ] meta_table_entries.append(('plain', 'Actions', actions)) if self.oh.params is not None: meta_table_entries += self.get_openhab_param_entries( self.oh.params) desc = """.. _{0}_openhab_api: Thing ----- """ return desc.format( self.get_name().under + '_' + self.get_category().under) + common.make_rst_meta_table( common.merge_meta_sections(meta_table_entries))
def get_shell_functions(self, type_): functions = [] template = '.. sh:function:: tinkerforge call {0} <uid> {1} {2}\n\n{3}{4}\n' device_name = self.get_shell_device_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_ or packet.is_virtual(): continue skip = -2 if packet.has_high_level() else 0 name = packet.get_name(skip=skip).dash params = packet.get_shell_parameter_list(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_shell_doc_type( cardinality=cardinality), lambda element, index=None: '<{0}>'.format( element.get_name(index=index).dash) if element.get_direction() == 'in' else element.get_name( index=index).dash, return_label_override={ 'en': 'Output', 'de': 'Ausgabe' }, constants_hint_override={ 'en': ('See symbols', 'with symbols'), 'de': ('Siehe Symbole', 'mit Symbolen') }, no_out_value={ 'en': 'no output', 'de': 'keine Ausgabe' }, explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_shell_formatted_doc() functions.append( template.format(device_name, name, params, meta_table, desc)) return ''.join(functions)
def get_tcpip_functions(self, type_): functions = [] template = '.. tcpip:function:: {0}.{1}\n\n{2}{3}\n' cls = self.get_tcpip_name() for packet in self.get_packets('function'): if packet.get_doc_type() != type_ or packet.is_virtual(): continue name = packet.get_name().under meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_tcpip_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).under, parameter_label_override={ 'en': 'Request', 'de': 'Anfrage' }, return_label_override={ 'en': 'Response', 'de': 'Antwort' }, constants_hint_override={ 'en': ('See meanings', 'with meanings'), 'de': ('Siehe Bedeutungen', 'mit Bedeutungen') }, no_in_value={ 'en': 'empty payload', 'de': 'keine Nutzdaten' }, no_out_value={ 'en': 'no response', 'de': 'keine Antwort' }, include_function_id=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_tcpip_formatted_doc() functions.append(template.format(cls, name, meta_table, desc)) return ''.join(functions)
def get_c_callbacks(self): callbacks = [] template = '.. c:var:: {0}_CALLBACK_{1}\n{2}\n{3}\n{4}\n' param_template = { 'en': """ .. code-block:: c void callback({0}) """, 'de': """ .. code-block:: c void callback({0}) """ } for packet in self.get_packets('callback'): plist = packet.get_c_parameters(high_level=True) if len(plist) == 0: plist = 'void *user_data' else: plist += ', void *user_data' params = common.select_lang(param_template).format(plist) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_c_type( 'meta', cardinality=cardinality), lambda element, index=None: element.get_c_name(index=index), suffix_elements=[('user_data', 'void *', 1, 'out')], stream_length_suffix='_length', high_level=True) meta_table = common.make_rst_meta_table(meta) desc = packet.get_c_formatted_doc() skip = -2 if packet.has_high_level() else 0 callbacks.append( template.format(self.get_name().upper, packet.get_name(skip=skip).upper, params, meta_table, desc)) return ''.join(callbacks)
def get_openhab_actions(self, type_): functions = [] template = '.. openhab:function:: {device}::{fn}({params})\n\n{table}\n{desc}\n' if self.oh.actions == 'custom': return '' for action in self.oh.actions: packet = action.fn if packet.get_doc_type() != type_: continue skip = -2 if packet.has_high_level() else 0 name = self.get_category().headless + self.get_name( ).camel + packet.get_name(skip=skip).camel params = packet.get_java_parameters(high_level=True) meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_java_type( cardinality=cardinality), lambda element, index=None: element.get_name(index=index ).headless, return_object='always', explicit_string_cardinality=True, explicit_variable_stream_cardinality=True, explicit_fixed_stream_cardinality=True, explicit_common_cardinality=True, high_level=True, return_object_label_override={ 'de': 'TODO', 'en': 'Return Map' }) meta_table = common.make_rst_meta_table(meta) desc = packet.get_java_formatted_doc(1) functions.append( template.format(device=self.get_java_class_name(), fn=name, params=params, table=meta_table, desc=desc)) return ''.join(functions)
def get_c_functions(self, type_): functions = [] template = '.. c:function:: int tf_{device_under}_{packet_under}({params})\n\n{meta_table}{desc}\n' for packet in self.get_packets('function'): if packet.get_doc_type() != type_: continue if packet.get_name().under == 'get_api_version': continue skip = -2 if packet.has_high_level() else 0 plist = common.wrap_non_empty( ', ', packet.get_c_parameters(high_level=True), '') meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_c_type( 'meta', cardinality=cardinality), lambda element, index=None: element.get_c_name(index=index), output_parameter='always', prefix_elements=[ (self.get_name().under, 'TF_' + self.get_name().camel + ' *', 1, 'in') ], suffix_elements=[('e_code', 'int', 1, 'return')], stream_length_suffix='_length', high_level=True) functions.append( format(template, self, packet, skip, params=format( 'TF_{device_camel} *{device_under}{plist}', self, plist=plist), meta_table=common.make_rst_meta_table(meta), desc=packet.get_c_formatted_doc())) return ''.join(functions)
def get_c_callbacks(self): callbacks = [] template = '.. c:function:: void tf_{device_under}_register_{packet_under}_callback(TF_{device_camel} *{device_under}, TF_{device_camel}{packet_camel}Handler, void *user_data)\n{params}\n{meta_table}\n{desc}\n' param_template = { 'en': """ .. code-block:: c void handler({0}) """, 'de': """ .. code-block:: c void handler({0}) """ } for packet in self.get_packets('callback'): plist = format('TF_{device_camel} *{device_under}, ', self) + common.wrap_non_empty( '', packet.get_c_parameters(), ', ') + 'void *user_data' meta = packet.get_formatted_element_meta( lambda element, cardinality=None: element.get_c_type( 'meta', cardinality=cardinality), lambda element, index=None: element.get_c_name(index=index), prefix_elements=[(format('{device_under}', self), format('TF_{device_camel} *', self), 1, 'out')], suffix_elements=[('user_data', 'void *', 1, 'out')], stream_length_suffix='_length') callbacks.append( format(template, self, packet, params=common.select_lang(param_template).format(plist), meta_table=common.make_rst_meta_table(meta), desc=packet.get_c_formatted_doc())) return ''.join(callbacks)