1"""!
2This example is for a simple, completely made up packet. It has a header,
3data, and trailer with all of the packet attributes set. The 'purpose' of
4this example is to define the packet and save it to disk. Other examples
5will use the saved packet to build and extract the packet. There are other
6ways to create packet definitializeions in TReK (e.g., simple comma delimited
7files).
8
9Just for fun here is the packet definitializeion in a small table. All of the
10data is 'big endian' except for a single parameter. All sizes are listed
11in bits. The data is packed (i.e., there are no gaps). The code below will
12set the start location for parameter, but it isn't shown in the table.
13Name Data Type Size Notes
14Version unsigned integer 4 Should always be zero
15PktId unsigned integer 12 For this packet, the value is 54
16PktLen unsigned integer 16 Length of packet after this point
17PktCnt unsigned integer 8 Packet counter
18Time system time 32 A.k.a. DT_UNIX_TIME
19IntParam signed integer 16 First data parameter
20UintParam unsigned integer 32 Three consecutive values
21FloatParam double 64 Little-endian floating point
22StrParam string 800 Varible length string
23Checksum unsigned integer 32 CRC-32 checksum
24"""
25
26import trek
27
28
29def main() -> None:
30 """
31 Main Routine
32 """
33
34 try:
35
36
37
38
39
40
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 pc.initialize()
61 pc.set_name("MyHeader")
62 p.initialize()
63 p.set_name("Version")
64 p.set_start_bit(0)
65
66
67
68
69 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 4)
70
71 p.set_modifiable_flag(False)
72
73
74
75
76 p.set_value(0)
77
78
79
80 pc.add_parameter(p)
81
82
83
84 p.initialize()
85 p.set_name("PktId")
86 p.set_start_bit(4)
87 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 12)
88 p.set_modifiable_flag(False)
89 pc.add_parameter(p)
90 p.initialize()
91 p.set_name("PktLen")
92 p.set_start_bit(16)
93 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 16)
94 p.set_modifiable_flag(True)
95 pc.add_parameter(p)
96 p.initialize()
97 p.set_name("PktCnt")
98 p.set_start_bit(32)
99 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 8)
100 p.set_modifiable_flag(True)
101 pc.add_parameter(p)
102 p.initialize()
103 p.set_name("Time")
104 p.set_start_bit(40)
105 p.set_data_type(trek.ParameterDataType.DT_UNIX_TIME, 32)
106 p.set_modifiable_flag(True)
107 pc.add_parameter(p)
108
109
110
111
112
113 pkt.add_header(pc)
114
115
116
117
118
119 pc.initialize()
120 pc.set_name("MyData")
121 p.initialize()
122 p.set_name("IntParam")
123 p.set_start_bit(0)
124 p.set_data_type(trek.ParameterDataType.DT_TWOS_COMPLEMENT, 16)
125 p.set_modifiable_flag(True)
126 pc.add_parameter(p)
127
128
129
130
131
132 p.initialize()
133 p.set_name("UintParam")
134 p.set_start_bit(16)
135 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 32)
136 p.set_number_of_samples(3)
137 p.set_sample_offset(0)
138 p.set_modifiable_flag(True)
139 pc.add_parameter(p)
140
141
142
143
144 p.initialize()
145 p.set_name("FloatParam")
146 p.set_start_bit(112)
147 p.set_data_type(
148 trek.ParameterDataType.DT_IEEE_FLOATING_POINT,
149 64,
150 trek.ParameterByteOrderType.LITTLE_ENDIAN_BYTE_ORDER,
151 )
152 p.set_modifiable_flag(True)
153 pc.add_parameter(p)
154
155
156
157
158 p.initialize()
159 p.set_name("StrParam")
160 p.set_start_bit(176)
161 p.set_data_type(
162 trek.ParameterDataType.DT_NULL_TERMINATED_STRING,
163 800,
164 trek.ParameterByteOrderType.BIG_ENDIAN_BYTE_ODER,
165 True,
166 )
167 p.set_modifiable_flag(True)
168 pc.add_parameter(p)
169
170
171 pkt.add_data(pc)
172
173
174
175
176 pc.initialize()
177 p.initialize()
178 p.set_name("Checksum")
179 p.set_start_bit(0)
180 p.set_data_type(trek.ParameterDataType.DT_UNSIGNED_INTEGER, 32)
181 p.set_modifiable_flag(True)
182 p.set_value(0)
183 pc.add_parameter(p)
184 pkt.add_trailer(pc)
185
186
187
188 pkt.create_global_packet_map()
189
190
191
192
193
194
195
196
197 pkt.add_identifier(
198 "PktId",
200 zone=trek.PacketZoneType.HEADER_ZONE,
201 id_type=trek.IdentifierType.CONTENT_IDENTIFIER,
202 has_default=False,
203 has_expected=True,
204 expected=54,
205 ),
206 )
207
208
209
210 pkt.set_length_parameter(
212 )
213
214
215
216 pkt.set_counter_parameter(
218 )
219
220
221 pkt.set_timestamp_parameter(
223 )
224
225
226 pkt.set_checksum_parameter(
227 "Checksum",
229 trek.PacketZoneType.TRAILER_ZONE,
230 trek.PacketChecksumPointType.START_HEADER,
231 0,
232 trek.PacketChecksumPointType.END_DATA,
233 0,
234 trek.PacketChecksumType.CT_CRC32,
235 ),
236 )
237
238
239 pkt.save_file("my_file.xml")
240
241
242
243
244
246
247 print(err.find_error_code())
248 print(err)
249
250
251if __name__ == "__main__":
252 main()
Checksum Parameter attributes.
Definition: trek.py:4711
Counter Parameter attributes.
Definition: trek.py:4770
Identifier parameter attributes.
Definition: trek.py:4841
Length parameter attributes.
Definition: trek.py:4913
This class describes a packet composed of one or more parameters.
Definition: trek.py:5009
This class describes a parameter collection.
Definition: trek.py:9144
This class describes a single parameter within a telemetry or command message including its value.
Definition: trek.py:6527
Timestamp Parameter Info.
Definition: trek.py:4972
The TReK C++ was designed to return error codes.
Definition: trek.py:12846