| 1 | # SPDX-License-Identifier: GPL-2.0-only |
| 2 | # |
| 3 | # Copyright (C) 2019 EfficiOS Inc. |
| 4 | # |
| 5 | |
| 6 | import bt2 |
| 7 | import math |
| 8 | |
| 9 | bt2.register_plugin(__name__, "test_debug_info") |
| 10 | |
| 11 | |
| 12 | class CompleteIter(bt2._UserMessageIterator): |
| 13 | def __init__(self, config, output_port): |
| 14 | ec = output_port.user_data |
| 15 | sc = ec.stream_class |
| 16 | tc = sc.trace_class |
| 17 | |
| 18 | trace = tc() |
| 19 | stream = trace.create_stream(sc) |
| 20 | |
| 21 | ev = self._create_event_message(ec, stream, default_clock_snapshot=123) |
| 22 | |
| 23 | ev.event.payload_field["bool"] = False |
| 24 | ev.event.payload_field["real_single"] = 2.0 |
| 25 | ev.event.payload_field["real_double"] = math.pi |
| 26 | ev.event.payload_field["int32"] = 121 |
| 27 | ev.event.payload_field["int3"] = -1 |
| 28 | ev.event.payload_field["int9_hex"] = -92 |
| 29 | ev.event.payload_field["uint32"] = 121 |
| 30 | ev.event.payload_field["uint61"] = 299792458 |
| 31 | ev.event.payload_field["uint5_oct"] = 29 |
| 32 | ev.event.payload_field["struct"]['str'] = "Rotisserie St-Hubert" |
| 33 | ev.event.payload_field["struct"]['option_real'] = math.pi |
| 34 | ev.event.payload_field["string"] = "ð" |
| 35 | ev.event.payload_field["dyn_array"] = [1.2, 2 / 3, 42.3, math.pi] |
| 36 | ev.event.payload_field["dyn_array_len"] = 4 |
| 37 | ev.event.payload_field["dyn_array_with_len"] = [5.2, 5 / 3, 42.5, math.pi * 12] |
| 38 | ev.event.payload_field["sta_array"] = ['ð°', 'ðĶī', ' ð'] |
| 39 | ev.event.payload_field["option_none"] |
| 40 | ev.event.payload_field["option_some"] = "NORMANDIN" |
| 41 | ev.event.payload_field["option_bool_selector"] = True |
| 42 | ev.event.payload_field["option_bool"] = "Mike's" |
| 43 | ev.event.payload_field["option_int_selector"] = 1 |
| 44 | ev.event.payload_field["option_int"] = "Barbies resto bar grill" |
| 45 | ev.event.payload_field['variant'].selected_option_index = 0 |
| 46 | ev.event.payload_field["variant"] = "Couche-Tard" |
| 47 | |
| 48 | self._msgs = [ |
| 49 | self._create_stream_beginning_message(stream), |
| 50 | ev, |
| 51 | self._create_stream_end_message(stream), |
| 52 | ] |
| 53 | |
| 54 | def __next__(self): |
| 55 | if len(self._msgs) > 0: |
| 56 | return self._msgs.pop(0) |
| 57 | else: |
| 58 | raise StopIteration |
| 59 | |
| 60 | |
| 61 | @bt2.plugin_component_class |
| 62 | class CompleteSrc(bt2._UserSourceComponent, message_iterator_class=CompleteIter): |
| 63 | def __init__(self, config, params, obj): |
| 64 | tc = self._create_trace_class() |
| 65 | cc = self._create_clock_class() |
| 66 | sc = tc.create_stream_class(default_clock_class=cc) |
| 67 | |
| 68 | dyn_array_elem_fc = tc.create_double_precision_real_field_class() |
| 69 | dyn_array_with_len_elem_fc = tc.create_double_precision_real_field_class() |
| 70 | dyn_array_with_len_fc = tc.create_unsigned_integer_field_class(19) |
| 71 | sta_array_elem_fc = tc.create_string_field_class() |
| 72 | option_some_fc = tc.create_string_field_class() |
| 73 | variant_fc = tc.create_variant_field_class() |
| 74 | variant_fc.append_option( |
| 75 | name='var_str', field_class=tc.create_string_field_class() |
| 76 | ) |
| 77 | option_none_fc = tc.create_double_precision_real_field_class() |
| 78 | struct_fc = tc.create_structure_field_class() |
| 79 | struct_option_fc = tc.create_double_precision_real_field_class() |
| 80 | struct_fc.append_member('str', tc.create_string_field_class()) |
| 81 | struct_fc.append_member( |
| 82 | 'option_real', |
| 83 | tc.create_option_without_selector_field_class(struct_option_fc), |
| 84 | ) |
| 85 | option_bool_selector_fc = tc.create_bool_field_class() |
| 86 | option_int_selector_fc = tc.create_unsigned_integer_field_class(8) |
| 87 | |
| 88 | payload = tc.create_structure_field_class() |
| 89 | payload += [ |
| 90 | ("bool", tc.create_bool_field_class()), |
| 91 | ("real_single", tc.create_single_precision_real_field_class()), |
| 92 | ("real_double", tc.create_double_precision_real_field_class()), |
| 93 | ("int32", tc.create_signed_integer_field_class(32)), |
| 94 | ("int3", tc.create_signed_integer_field_class(3)), |
| 95 | ( |
| 96 | "int9_hex", |
| 97 | tc.create_signed_integer_field_class( |
| 98 | 9, preferred_display_base=bt2.IntegerDisplayBase.HEXADECIMAL |
| 99 | ), |
| 100 | ), |
| 101 | ("uint32", tc.create_unsigned_integer_field_class(32)), |
| 102 | ("uint61", tc.create_unsigned_integer_field_class(61)), |
| 103 | ( |
| 104 | "uint5_oct", |
| 105 | tc.create_unsigned_integer_field_class( |
| 106 | 5, preferred_display_base=bt2.IntegerDisplayBase.OCTAL |
| 107 | ), |
| 108 | ), |
| 109 | ("struct", struct_fc), |
| 110 | ("string", tc.create_string_field_class()), |
| 111 | ("dyn_array", tc.create_dynamic_array_field_class(dyn_array_elem_fc)), |
| 112 | ("dyn_array_len", dyn_array_with_len_fc), |
| 113 | ( |
| 114 | "dyn_array_with_len", |
| 115 | tc.create_dynamic_array_field_class( |
| 116 | dyn_array_with_len_elem_fc, length_fc=dyn_array_with_len_fc |
| 117 | ), |
| 118 | ), |
| 119 | ("sta_array", tc.create_dynamic_array_field_class(sta_array_elem_fc)), |
| 120 | ( |
| 121 | "option_none", |
| 122 | tc.create_option_without_selector_field_class(option_none_fc), |
| 123 | ), |
| 124 | ( |
| 125 | "option_some", |
| 126 | tc.create_option_without_selector_field_class(option_some_fc), |
| 127 | ), |
| 128 | ("option_bool_selector", option_bool_selector_fc), |
| 129 | ( |
| 130 | "option_bool", |
| 131 | tc.create_option_with_bool_selector_field_class( |
| 132 | tc.create_string_field_class(), option_bool_selector_fc |
| 133 | ), |
| 134 | ), |
| 135 | ( |
| 136 | "option_bool_reversed", |
| 137 | tc.create_option_with_bool_selector_field_class( |
| 138 | tc.create_string_field_class(), |
| 139 | option_bool_selector_fc, |
| 140 | selector_is_reversed=True, |
| 141 | ), |
| 142 | ), |
| 143 | ("option_int_selector", option_int_selector_fc), |
| 144 | ( |
| 145 | "option_int", |
| 146 | tc.create_option_with_integer_selector_field_class( |
| 147 | tc.create_string_field_class(), |
| 148 | option_int_selector_fc, |
| 149 | bt2.UnsignedIntegerRangeSet([(1, 3), (18, 44)]), |
| 150 | ), |
| 151 | ), |
| 152 | ("variant", variant_fc), |
| 153 | ] |
| 154 | ec = sc.create_event_class(name="my-event", payload_field_class=payload) |
| 155 | |
| 156 | self._add_output_port("some-name", ec) |