wiliot-certificate 1.3.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. gw_certificate/__init__.py +0 -0
  2. gw_certificate/ag/ut_defines.py +361 -0
  3. gw_certificate/ag/wlt_types.py +85 -0
  4. gw_certificate/ag/wlt_types_ag.py +5310 -0
  5. gw_certificate/ag/wlt_types_data.py +64 -0
  6. gw_certificate/api/extended_api.py +1547 -0
  7. gw_certificate/api_if/__init__.py +0 -0
  8. gw_certificate/api_if/api_validation.py +40 -0
  9. gw_certificate/api_if/gw_capabilities.py +18 -0
  10. gw_certificate/common/analysis_data_bricks.py +1455 -0
  11. gw_certificate/common/debug.py +63 -0
  12. gw_certificate/common/utils.py +219 -0
  13. gw_certificate/common/utils_defines.py +102 -0
  14. gw_certificate/common/wltPb_pb2.py +72 -0
  15. gw_certificate/common/wltPb_pb2.pyi +227 -0
  16. gw_certificate/gw_certificate.py +138 -0
  17. gw_certificate/gw_certificate_cli.py +70 -0
  18. gw_certificate/interface/ble_simulator.py +91 -0
  19. gw_certificate/interface/ble_sniffer.py +189 -0
  20. gw_certificate/interface/if_defines.py +35 -0
  21. gw_certificate/interface/mqtt.py +469 -0
  22. gw_certificate/interface/packet_error.py +22 -0
  23. gw_certificate/interface/pkt_generator.py +720 -0
  24. gw_certificate/interface/uart_if.py +193 -0
  25. gw_certificate/interface/uart_ports.py +20 -0
  26. gw_certificate/templates/results.html +241 -0
  27. gw_certificate/templates/stage.html +22 -0
  28. gw_certificate/templates/table.html +6 -0
  29. gw_certificate/templates/test.html +38 -0
  30. gw_certificate/tests/__init__.py +11 -0
  31. gw_certificate/tests/actions.py +131 -0
  32. gw_certificate/tests/bad_crc_to_PER_quantization.csv +51 -0
  33. gw_certificate/tests/connection.py +181 -0
  34. gw_certificate/tests/downlink.py +174 -0
  35. gw_certificate/tests/generic.py +161 -0
  36. gw_certificate/tests/registration.py +288 -0
  37. gw_certificate/tests/static/__init__.py +0 -0
  38. gw_certificate/tests/static/connection_defines.py +9 -0
  39. gw_certificate/tests/static/downlink_defines.py +9 -0
  40. gw_certificate/tests/static/generated_packet_table.py +209 -0
  41. gw_certificate/tests/static/packet_table.csv +10051 -0
  42. gw_certificate/tests/static/references.py +4 -0
  43. gw_certificate/tests/static/uplink_defines.py +20 -0
  44. gw_certificate/tests/throughput.py +244 -0
  45. gw_certificate/tests/uplink.py +683 -0
  46. wiliot_certificate-1.3.0a1.dist-info/LICENSE +21 -0
  47. wiliot_certificate-1.3.0a1.dist-info/METADATA +113 -0
  48. wiliot_certificate-1.3.0a1.dist-info/RECORD +51 -0
  49. wiliot_certificate-1.3.0a1.dist-info/WHEEL +5 -0
  50. wiliot_certificate-1.3.0a1.dist-info/entry_points.txt +2 -0
  51. wiliot_certificate-1.3.0a1.dist-info/top_level.txt +1 -0
File without changes
@@ -0,0 +1,361 @@
1
+ # Files
2
+ UT_MQTT_LOG_FILE = "ut_mqtt_log.json"
3
+
4
+ # GW defines
5
+ GW_ID = "gatewayId"
6
+ ADDITIONAL = "additional"
7
+ REPORTED_CONF = "reportedConf"
8
+ GW_CONF = "gatewayConf"
9
+ GW_NAME = "gatewayName"
10
+ GW_API_VERSION = "apiVersion"
11
+ LAT = "lat"
12
+ LNG = "lng"
13
+ WLT_SERVER = "wiliotServer"
14
+ PACER_INTERVAL = "pacerInterval"
15
+ PKT_TYPES_MASK = "packetTypesMask"
16
+ RX_TX_PERIOD = "rxTxPeriodMs"
17
+ TX_PERIOD = "txPeriodMs"
18
+ ENERGY_PATTERN = "energyPattern"
19
+ OUTPUT_POWER_2_4 = "2.4GhzOutputPower"
20
+ NFPKT = "nfpkt"
21
+ RSSI = "rssi"
22
+ SRC_ID = "src_id"
23
+
24
+ MUL_BRG_TEST_MIN = 2
25
+ INTERNAL_BRG_RSSI = 1
26
+ BRIDGE_ID = "bridgeId"
27
+ ALIAS_BRIDGE_ID = "aliasBridgeId"
28
+ GROUP_ID = "group_id"
29
+ BRG_ACTION = "bridgeAction"
30
+ INTERNAL_BRG_STR = "internal_brg"
31
+ INTERNAL = "INTERNAL"
32
+
33
+ GW_DATA_MODE = "gwDataMode"
34
+ TAGS_AND_BRGS = "Tags & Bridges"
35
+ TAGS_ONLY = "Tags only"
36
+ BRGS_ONLY_37 = "Bridges only (ch37)"
37
+ BRGS_ONLY_38 = "Bridges only (ch38)"
38
+ BRGS_ONLY_39 = "Bridges only (ch39)"
39
+ HIBERNATE = "Hibernate"
40
+
41
+ BLE_WIFI = "ble_wifi"
42
+ BLE_LAN = "ble_lan"
43
+
44
+ WLT_SERVER = "wiliotServer"
45
+ PACER_INTERVAL = "pacerInterval"
46
+ OUTPUT_POWER_2_4 = "2.4GhzOutputPower"
47
+ USE_STAT_LOC = "useStaticLocation"
48
+ GW_ENERGY_PATTERN = "energizingPattern"
49
+ VERSION = "version"
50
+ WIFI_VERSION = "interfaceChipSwVersion"
51
+ BLE_VERSION = "bleChipSwVersion"
52
+ DATA_COUPLING = "dataCoupling"
53
+ GW_MODE = "gwMode"
54
+ PROD = "prod"
55
+
56
+ GET_INFO_ACTION = "getGwInfo"
57
+ REBOOT_GW_ACTION = "rebootGw"
58
+ LOG_PERIOD_ACTION = "LogPeriodSet"
59
+ GET_LOGS = "getLogs"
60
+ GW_INFO = "gatewayInfo"
61
+ GW_LOGS = "gatewayLogs"
62
+ GW_LATITUDE = "Latitude"
63
+ GW_LONGITUDE = "Longitude"
64
+ GW_LOG_PERIOD = 30
65
+
66
+ # Thin gw defines
67
+ THIN_GW_PROTOCOL_VERSION = "protocolVersion"
68
+ TX_PKT = "txPacket"
69
+ TX_MAX_DURATION_MS = "txMaxDurationMs"
70
+ TX_MAX_RETRIES = "txMaxRetries"
71
+ TRANPARENT_PKT_LEN = 31 * 2
72
+ COUPLED_DATA_PKT_LEN = 29 * 2 # No 1E16
73
+
74
+ # Configurable brg fields' names
75
+ BRG_TX_REPETITION = "tx_repetition"
76
+ BRG_GLOBAL_PACING_GROUP = "global_pacing_group"
77
+ BRG_OUTPUT_POWER = "output_power"
78
+ BRG_CALIB_OUTPUT_POWER = "calib_output_power"
79
+ BRG_COMM_OUTPUT_POWER = "comm_output_power"
80
+ BRG_CALIB_INTERVAL = "calib_interval"
81
+ BRG_CALIB_PATTERN = "calib_pattern"
82
+ BRG_RXTX_PERIOD = "rx_tx_period" # rx_tx_period_ms in Brg2GwCfg & Gw2BrgCfg
83
+ BRG_TX_PERIOD = "tx_period" # tx_period_ms in Brg2GwCfg & Gw2BrgCfg
84
+ BRG_DUTY_CYCLE = "duty_cycle"
85
+ BRG_CYCLE = "cycle"
86
+ BRG_PACER_INTERVAL = "pacer_interval"
87
+ BRG_PKT_FILTER = "pkt_filter"
88
+ BRG_ENERGY_PATTERN_2_4 = "energy_pattern_2400"
89
+ BRG_SUB1GHZ_ENERGY_PATTERN = "sub1g_energy_pattern"
90
+ BRG_ADAPTIVE_PACER = "adaptive_pacer"
91
+ BRG_UNIFIED_ECHO_PKT = "unified_echo_pkt"
92
+ BRG_COMM_PATTERN = "comm_pattern"
93
+
94
+ # Common defines
95
+ PACKETS = "packets"
96
+ TIMESTAMP = "timestamp"
97
+ ACTION = "action"
98
+ PAYLOAD = "payload"
99
+ SEQUENCE_ID = "sequenceId"
100
+ MODULE_IF = "module IF"
101
+ HB = "HB"
102
+ DATETIME = "datetime"
103
+ TIME = "time"
104
+ TIMESTAMP_DELTA = "timestamp_delta"
105
+ TAGS_COUNT = "tags_count"
106
+ NEW_TAGS = "new_tags"
107
+ TTFP = "ttfp"
108
+
109
+ # External Sensors
110
+ IS_SENSOR = "isSensor"
111
+ IS_EMBEDDED = "isEmbedded"
112
+ IS_SCRAMBLED = "isScrambled"
113
+ SENSOR_UUID = "sensorServiceId"
114
+ SENSOR_ID = "sensorId"
115
+
116
+ # OTA
117
+ STATUS_CODE_STR = "statusCode"
118
+ IMG_DIR_URL = "imageDirUrl"
119
+ UPGRADE_BLSD = "upgradeBlSd"
120
+ VER_UUID_STR = "versionUUID"
121
+ VER_MAX_LEN = 31
122
+
123
+ # Versions
124
+ VERSIONS = {
125
+ "1.5.0" : {WIFI_VERSION: "3.5.32", BLE_VERSION: "3.7.25"},
126
+ "1.5.2" : {WIFI_VERSION: "3.5.132", BLE_VERSION: "3.7.25"},
127
+ "1.6.1" : {WIFI_VERSION: "3.5.51", BLE_VERSION: "3.8.18"},
128
+ "1.7.0" : {WIFI_VERSION: "3.9.8", BLE_VERSION: "3.9.24"},
129
+ "1.7.1" : {WIFI_VERSION: "3.10.6", BLE_VERSION: "3.10.13"},
130
+ "1.8.0" : {WIFI_VERSION: "3.11.36", BLE_VERSION: "3.11.40"},
131
+ "1.8.2" : {WIFI_VERSION: "3.11.36", BLE_VERSION: "3.11.42"},
132
+ "1.9.0" : {WIFI_VERSION: "3.12.10", BLE_VERSION: "3.12.36"},
133
+ "1.10.1" : {WIFI_VERSION: "3.13.29", BLE_VERSION: "3.13.25"},
134
+ "3.14.0" : {WIFI_VERSION: "3.14.33", BLE_VERSION: "3.14.64"},
135
+ "3.15.0" : {WIFI_VERSION: "3.15.38", BLE_VERSION: "3.15.72"},
136
+ "3.16.3" : {WIFI_VERSION: "3.16.20", BLE_VERSION: "3.16.96"},
137
+ "3.17.0" : {WIFI_VERSION: "3.17.25", BLE_VERSION: "3.17.90"},
138
+ "4.0.0" : {WIFI_VERSION: "4.0.8", BLE_VERSION: "4.0.65"},
139
+ "4.1.0" : {WIFI_VERSION: "4.1.8", BLE_VERSION: "4.1.33"}
140
+ }
141
+
142
+ # Tests defines
143
+ DEFAULT_GW_FIELD_UPDATE_TIMEOUT = 10
144
+ DEFAULT_BRG_FIELD_UPDATE_TIMEOUT = 10
145
+ HB_PERIOD = 30
146
+ VER_UPDATE_TIMEOUT = 300
147
+ GW_LATITUDE_DEFAULT = 33.0222
148
+ GW_LONGITUDE_DEFAULT = -117.0839
149
+ # Set to work with default when versions tests only pass through new api ver
150
+ GW_API_VER_DEFAULT = "201"
151
+ GW_API_VER_OLD = "200"
152
+ BRG_CFG_HAS_LEN = 2
153
+ CLEAR_DATA_PATH_TIMEOUT = 10
154
+ BRG_ADVERTISEMENT_TIMEOUT = 30 + 2 # First 30 for wlt app start & 2 extra for brg to settle to recieve its get module action
155
+ BRG_OTA_TIMEOUT = 100
156
+ ACTION_LONG_TIMEOUT = 120
157
+ ACTION_SI_PKT_TIMEOUT = 10
158
+ ACTION_SHORT_TIMEOUT = 5
159
+
160
+ # Internal python ut defines - used only in ut
161
+ PACER_INTERVAL_THRESHOLD_HIGH = 0.90
162
+ PACER_INTERVAL_THRESHOLD = 0.80
163
+ GLOBAL_PACING_GROUP_THRESHOLD = 0.70
164
+ PACKETS_ECHO_OFF = 16
165
+ TEST_PASSED = 0
166
+ TEST_FAILED = -1
167
+ NO_RESPONSE = "NO_RESPONSE"
168
+ DONE = "DONE"
169
+ TEST_SUCCESS = ":)"
170
+ MGMT_PKT = "mgmt_pkt"
171
+ UNIFIED_PKT = "unified_pkt"
172
+ SIDE_INFO_PKT = "side_info_pkt"
173
+ DECODED_DATA = "decoded_data"
174
+ TAG_ID = "tag_id"
175
+ PACKET_CNTR = "packet_cntr"
176
+ PACKET_TYPE = "packet_type"
177
+ PACKET_DATA = "packet_data"
178
+ PKTS = "pkts"
179
+ MQTT_LOG_PRE_STR = "mqtt_log_"
180
+ GW_DATA = "gw_data"
181
+ GW_ID = "gw_id"
182
+ CER = "cer"
183
+ PKT_CNTR_DIFF = "packet_cntr_diff"
184
+ AVG = "avg_"
185
+ CER_PER_TAG = "cer_per_tag"
186
+ AWS = "aws"
187
+ TEST = "test"
188
+
189
+ # test reasons
190
+ BRG_VER_SUCCESS = "SUCCESS - BRG version matches expected version!"
191
+ WANTED_VER_SAME = "Wanted version is same as original one!"
192
+ WANTED_VER_SAME_MUL = "Wanted versions is same as original ones!"
193
+ VER_UPDATE_PASSED = "Version Update Ran Successfully!"
194
+ VER_UPDATE_FAILED = "The Update Process Has Been Interrupted!"
195
+
196
+ # Non Default defines
197
+ BRG_NON_DEFAULT_DUTY_CYCLE = 15
198
+ BRG_NON_DEFAULT_OP_2_4 = 6
199
+ BRG_NON_DEFAULT_EP_2_4 = 1
200
+ BRG_NON_DEFAULT_OUTPUT_POWER_SUB1G = 26
201
+ BRG_NON_DEFAULT_CYCLE_SUB1G = 40
202
+ BRG_NON_DEFAULT_PWR_MGMT_KEEP_ALIVE_SCAN = 0
203
+ BRG_NON_DEFAULT_TX_REPETITION = 2
204
+ BRG_NON_DEFAULT_PACER_INTERVAL = 20
205
+ BRG_NON_DEFAULT_CALIB_OUTPUT_POWER = 8
206
+ BRG_NON_DEFAULT_PKT_FILTER = 17
207
+ BRG_NON_DEFAULT_CALIB_PATTERN = 2
208
+ BRG_NON_DEFAULT_CALIB_INTERVAL = 15
209
+
210
+ LIS2DW12_NON_DEFAULT_STATE_THRESHOLD = 93
211
+ LIS2DW12_NON_DEFAULT_WAKE_UP_DURATION = 120
212
+ LIS2DW12_NON_DEFAULT_SLEEP_DURATION = 35
213
+
214
+ # ---------------------------------------------------RTSA defines---------------------------------------------------
215
+ # common defines
216
+ TRACE_LOG_FILE_NAME = "TRACELOG"
217
+ TRACE_LOG_FILE_PATH = "C:/SignalVu-PC Files/" + TRACE_LOG_FILE_NAME + ".TOV"
218
+
219
+ # freq defines
220
+ FREQ_2_4_GHZ = {'37':2.402, '38':2.426, '39':2.480}
221
+ FREQ_SUB1G_MHZ = {'865_7':865.700, '915':915.000, '916_3':916.300, '917_5':917.500, '918':918.000, '919_1':919.100}
222
+
223
+ # SignalVu API commands defines
224
+ TRACE_DETECTION = {'average':'AVERage', 'positive':'POSitive', 'negative':'NEGative', 'positive-negative':'POSNegative', 'sample':'SAMPle'}
225
+ MAX_TRACE_POINTS = {'1K':'ONEK', '10K':'TENK', '100K':'HUNDredk', 'never_decimate':'NEVerdecimate' }
226
+
227
+ # default values
228
+ DEFAULT_LENGTH_MS = 30
229
+ DEFAULT_TIME_PER_DIVISION_SEC = 5
230
+ DEFAULT_RX_TX_PERIOD_SEC = 0.015
231
+ BEACON_MIN_LENGTH_SEC = 375e-6
232
+ BEACON_MAX_LENGTH_SEC = 500e-6
233
+ ENERGIZING_TIME_THRESHOLD = 0.3
234
+ BEACON_POWER_THRESHOLD = 0.9
235
+ BEACON_POWER_CURVE_38 = 0.7
236
+ BEACON_POWER_CURVE_39 = 0.625
237
+ DEFAULT_SPAN_MHZ = 5
238
+ RXTX_MAX_CFG = 255
239
+ RXTX_CFG_DEFAULT = 100
240
+
241
+ # test times
242
+ FREQ_BEACONS_ANALYSIS_TIME_DELTA = 10
243
+
244
+ # structured energizing patterns information
245
+ class energizingPattern:
246
+ def __init__(self, ble_calibration_beacons = [], ble_energy = {}, ble_post_energy_beacons = [], sub1G_energy = False, info = ""):
247
+ self.ble_calibration_beacons = ble_calibration_beacons
248
+ self.ble_energy = ble_energy
249
+ self.ble_post_energy_beacons = ble_post_energy_beacons
250
+ self.sub1G_energy = sub1G_energy
251
+ self.info = info
252
+
253
+ EP_INFO = {
254
+ '17' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']]),
255
+ '18' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['39'] : 1.0}),
256
+ '20' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['37'] : 0.2, FREQ_2_4_GHZ['39'] : 0.8}),
257
+ '24' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['37'] : 1.0}),
258
+ '25' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['38'] : 1.0}),
259
+ '26' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={2.454 : 1.0}),
260
+ '27' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39'], FREQ_2_4_GHZ['39']]),
261
+ '29' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['38'] : 0.3333, 2.454 : 0.3333, FREQ_2_4_GHZ['39'] : 0.3333}),
262
+ '36' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'],FREQ_2_4_GHZ['38'],FREQ_2_4_GHZ['39']], info="idle"),
263
+ '37' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], 2.415, FREQ_2_4_GHZ['39'], 2.441, 2.428, 2.454, 2.467], ble_energy={2.450 : 1.0}, info="euro"),
264
+ '50' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], sub1G_energy=True),
265
+ '51' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['39'] : 1.0}, sub1G_energy=True),
266
+ '52' : energizingPattern(sub1G_energy=True),
267
+ '55' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['37'] : 1.0}, sub1G_energy=True),
268
+ '56' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={FREQ_2_4_GHZ['38'] : 1.0}, sub1G_energy=True),
269
+ '57' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], FREQ_2_4_GHZ['38'], FREQ_2_4_GHZ['39']], ble_energy={2.454 : 1.0}, sub1G_energy=True),
270
+ '61' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], 2.415, FREQ_2_4_GHZ['39'], 2.441, 2.428, 2.454, 2.467], sub1G_energy=True, info="euro"),
271
+ '62' : energizingPattern(ble_calibration_beacons=[FREQ_2_4_GHZ['37'], 2.415, FREQ_2_4_GHZ['39'], 2.441, 2.428, 2.454, 2.467], ble_energy={2.475 : 1.0}, sub1G_energy=True, info="euro"),
272
+ '99' : energizingPattern(ble_calibration_beacons=[i/1000.0 for i in range(2402, 2481, 2)])
273
+ }
274
+
275
+ EP_FREQ_BREAKDOWN_COUNTER_SETUP = {
276
+ 2.402 : {'beacons':0, 'energy_in_ms': 0.0},
277
+ 2.426 : {'beacons':0, 'energy_in_ms': 0.0},
278
+ 2.480 : {'beacons':0, 'energy_in_ms': 0.0},
279
+ 2.403 : {'beacons':0, 'energy_in_ms': 0.0},
280
+ 2.427 : {'beacons':0, 'energy_in_ms': 0.0},
281
+ 2.483 : {'beacons':0, 'energy_in_ms': 0.0},
282
+ 2.454 : {'beacons':0, 'energy_in_ms': 0.0},
283
+ 2.481 : {'beacons':0, 'energy_in_ms': 0.0},
284
+ 2.415 : {'beacons':0, 'energy_in_ms': 0.0},
285
+ 2.441 : {'beacons':0, 'energy_in_ms': 0.0},
286
+ 2.428 : {'beacons':0, 'energy_in_ms': 0.0},
287
+ 2.467 : {'beacons':0, 'energy_in_ms': 0.0},
288
+ 2.475 : {'beacons':0, 'energy_in_ms': 0.0},
289
+ 0.8657 : {'beacons':0, 'energy_in_ms': 0.0},
290
+ 0.915 : {'beacons':0, 'energy_in_ms': 0.0},
291
+ 0.9163 : {'beacons':0, 'energy_in_ms': 0.0},
292
+ 0.9175 : {'beacons':0, 'energy_in_ms': 0.0},
293
+ 0.918 : {'beacons':0, 'energy_in_ms': 0.0},
294
+ 0.9191 : {'beacons':0, 'energy_in_ms': 0.0}
295
+ }
296
+
297
+ # Tag IDs for setup 1 & 4 - private setups in a chamber
298
+ # Added to support tag count in versions_analysis_test
299
+ NO_TAGS_STR = "no_tags"
300
+ SETUP_1_STR = "setup_1"
301
+ SETUP_4_STR = "setup_4"
302
+
303
+ PRIVATE_SETUP_CHOICES = [NO_TAGS_STR,
304
+ SETUP_1_STR,
305
+ SETUP_4_STR]
306
+
307
+ SETUP_1_TAG_IDS = [
308
+ "000d40174823",
309
+ "000d401747df",
310
+ "000d401747f2",
311
+ "000d40174862",
312
+ "000d4017483d",
313
+ "000d40174843",
314
+ "000d401747f1",
315
+ "000d4017482a",
316
+ "000d401747f7",
317
+ "000d40174869",
318
+ "000d40174824",
319
+ "000d40174829",
320
+ "000d40174810",
321
+ "000d4017480b",
322
+ "000d401747d1",
323
+ "000d4017480a",
324
+ "000d401747f8",
325
+ "000d401747cc",
326
+ "000d40174882",
327
+ "000d40174863",
328
+ "000d4017483b",
329
+ "000d401747cb",
330
+ "000d40174842",
331
+ "000d4017487c",
332
+ "000d40174811",
333
+ "000d401747e0",
334
+ "000d40174881"
335
+ ]
336
+ SETUP_4_TAG_IDS = [
337
+ "000d40ce912e",
338
+ "000d40ce9107",
339
+ "000d40ce9233",
340
+ "000d40ce9240",
341
+ "000d40ce9219",
342
+ "000d40ce912d",
343
+ "000d40ce9120",
344
+ "000d40ce9228",
345
+ "000d40ce9146",
346
+ "000d40ce9138",
347
+ "000d40ce9200",
348
+ "000d40ce9229",
349
+ "000d40ce921a",
350
+ "000d40ce9148",
351
+ "000d40ce911f",
352
+ "000d40ce920e",
353
+ "000d40ce9232",
354
+ "000d40ce9201",
355
+ "000d40ce9137"
356
+ ]
357
+
358
+ TAG_IDS = {
359
+ SETUP_1_STR: SETUP_1_TAG_IDS,
360
+ SETUP_4_STR: SETUP_4_TAG_IDS
361
+ }
@@ -0,0 +1,85 @@
1
+
2
+ from gw_certificate.ag.ut_defines import *
3
+ from gw_certificate.ag.wlt_types_ag import *
4
+
5
+ def eval_pkt(str):
6
+ try:
7
+ return eval(str)
8
+ except:
9
+ return None
10
+
11
+ class WltPkt():
12
+ supported_pkt_types = WLT_PKT_TYPES
13
+
14
+ def __init__(self, raw='', hdr=None, data_hdr=None, generic=None, pkt=None):
15
+ self.hdr = Hdr() if hdr is None else hdr
16
+ self.data_hdr = DataHdr() if data_hdr is None else data_hdr
17
+ self.generic = generic
18
+ self.pkt = pkt
19
+ if raw:
20
+ self.set(raw)
21
+
22
+ def __eq__(self, other):
23
+ if isinstance(other, WltPkt):
24
+ return (
25
+ (self.hdr == other.hdr or
26
+ self.data_hdr == other.data_hdr) and
27
+ self.generic == other.generic and
28
+ self.pkt == other.pkt
29
+ )
30
+ return False
31
+
32
+ def dump(self):
33
+ if self.pkt:
34
+ if isinstance(self.pkt, UnifiedEchoPkt):
35
+ return self.data_hdr.dump() + self.pkt.dump()
36
+ else:
37
+ return self.hdr.dump() + self.pkt.dump()
38
+ return self.data_hdr.dump() + self.generic.dump()
39
+
40
+ def set(self, string):
41
+ if not string.startswith("1E16"):
42
+ string = "1E16" + string
43
+
44
+ self.hdr.set(string[0:14])
45
+ self.data_hdr.set(string[0:14])
46
+ if self.hdr.group_id == GROUP_ID_BRG2GW or self.hdr.group_id == GROUP_ID_GW2BRG:
47
+ # GROUP_ID_BRG2GW & GROUP_ID_GW2BRG
48
+ self.generic = eval_pkt(f'GenericV{API_VERSION_LATEST}()')
49
+ self.generic.set(string[14:62])
50
+
51
+ # MEL modules
52
+ if self.generic.module_type:
53
+ if self.generic.module_type == MODULE_CUSTOM:
54
+ self.pkt = eval_pkt(f'ModuleCustomLis2Dw12V{self.generic.api_version}()')
55
+ else:
56
+ self.pkt = eval_pkt(f'{MODULES_DICT[self.generic.module_type]}{self.generic.api_version}()')
57
+ elif self.generic.module_type == MODULE_GLOBAL:
58
+ # Action pkts
59
+ if self.generic.msg_type == BRG_MGMT_MSG_TYPE_ACTION:
60
+ pkt = eval_pkt(f'ActionGenericV{self.generic.api_version}("{string[14:62]}")')
61
+ if self.generic.api_version >= API_VERSION_V8 and (type(pkt) != type(None)):
62
+ pkt = eval_pkt(f'{ACTIONS_DICT[pkt.action_id]}{self.generic.api_version}()')
63
+ self.pkt = pkt
64
+ # OLD global config (GW2BRG & BRG2GW)
65
+ elif self.hdr.group_id == GROUP_ID_GW2BRG and self.generic.msg_type == BRG_MGMT_MSG_TYPE_CFG_SET:
66
+ self.pkt = eval_pkt(f'Gw2BrgCfgV8()') # no api_version field in Gw2BrgCfg pkts - default parse as api version 8 (Latest Gw2BrgCfg)
67
+ elif self.hdr.group_id == GROUP_ID_BRG2GW:
68
+ if self.generic.msg_type == BRG_MGMT_MSG_TYPE_CFG_SET or self.generic.msg_type == BRG_MGMT_MSG_TYPE_CFG_INFO:
69
+ self.pkt = eval_pkt(f'Brg2GwCfgV{self.generic.api_version}()')
70
+ # Brg2GwHb pkts
71
+ elif self.generic.msg_type == BRG_MGMT_MSG_TYPE_HB:
72
+ self.pkt = eval_pkt(f'Brg2GwHbV{self.generic.api_version}()')
73
+ # Unified pkt
74
+ elif self.data_hdr.group_id_major == GROUP_ID_UNIFIED_PKT:
75
+ self.pkt = UnifiedEchoPkt()
76
+ # SideInfo pkts
77
+ elif self.hdr.group_id == GROUP_ID_SIDE_INFO_SENSOR:
78
+ self.pkt = SideInfoSensor()
79
+ elif self.hdr.group_id == GROUP_ID_SIDE_INFO:
80
+ self.pkt = SideInfo()
81
+
82
+ if self.pkt:
83
+ self.pkt.set(string[14:62])
84
+
85
+ hex_str2int = lambda x: int(x,16)