Beispiel #1
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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)
Beispiel #14
0
    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)
Beispiel #16
0
    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)
Beispiel #21
0
    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)
Beispiel #22
0
    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)
Beispiel #23
0
    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)
Beispiel #24
0
    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))
Beispiel #25
0
    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)
Beispiel #26
0
    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)
Beispiel #27
0
    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)
Beispiel #28
0
    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)
Beispiel #29
0
    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)
Beispiel #30
0
    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)