wiliot-certificate 4.4.3__py3-none-any.whl → 4.5.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 (295) hide show
  1. {brg_certificate → certificate}/ag/wlt_cmd_if.html +10 -4
  2. {brg_certificate → certificate}/ag/wlt_types_ag.py +1878 -519
  3. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2brg_ota.json +69 -0
  4. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2gw_hb.json +109 -0
  5. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2gw_hb_sleep.json +45 -0
  6. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/calibration.json +96 -0
  7. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/custom.json +99 -0
  8. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/datapath.json +241 -13
  9. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/energy2400.json +120 -0
  10. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/energySub1g.json +96 -0
  11. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/externalSensor.json +135 -6
  12. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/interface.json +157 -0
  13. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/powerManagement.json +205 -0
  14. brg_certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json → certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +27 -11
  15. certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json +175 -0
  16. certificate/ag/wlt_types_ag_jsons/unified_sensor_pkt.json +65 -0
  17. certificate/cert_common.py +1459 -0
  18. certificate/cert_config.py +455 -0
  19. {brg_certificate → certificate}/cert_data_sim.py +131 -46
  20. {brg_certificate → certificate}/cert_defines.py +120 -128
  21. {brg_certificate → certificate}/cert_gw_sim.py +151 -49
  22. {brg_certificate → certificate}/cert_mqtt.py +164 -59
  23. {brg_certificate → certificate}/cert_prints.py +34 -33
  24. {brg_certificate → certificate}/cert_protobuf.py +15 -6
  25. {brg_certificate → certificate}/cert_results.py +205 -48
  26. certificate/cert_utils.py +622 -0
  27. certificate/certificate.py +198 -0
  28. certificate/certificate_cli.py +79 -0
  29. certificate/certificate_eth_test_list.txt +74 -0
  30. certificate/certificate_sanity_test_list.txt +65 -0
  31. certificate/certificate_test_list.txt +75 -0
  32. {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.json +2 -2
  33. {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.py +7 -6
  34. certificate/tests/calibration/output_power_test/output_power_test.json +22 -0
  35. certificate/tests/calibration/output_power_test/output_power_test.py +39 -0
  36. {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.json +1 -1
  37. {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.py +20 -15
  38. certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.json +14 -0
  39. certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.py +140 -0
  40. certificate/tests/cloud_connectivity/acl_test/acl_test.json +14 -0
  41. certificate/tests/cloud_connectivity/acl_test/acl_test.py +98 -0
  42. certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.json +18 -0
  43. certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.py +39 -0
  44. certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.json +18 -0
  45. certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py +215 -0
  46. certificate/tests/cloud_connectivity/connection_test/connection_test.json +17 -0
  47. certificate/tests/cloud_connectivity/connection_test/connection_test.py +74 -0
  48. certificate/tests/cloud_connectivity/downlink_test/downlink_test.json +20 -0
  49. certificate/tests/cloud_connectivity/downlink_test/downlink_test.py +204 -0
  50. certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.json +16 -0
  51. certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py +98 -0
  52. certificate/tests/cloud_connectivity/reboot_test/reboot_test.json +17 -0
  53. certificate/tests/cloud_connectivity/reboot_test/reboot_test.py +57 -0
  54. certificate/tests/cloud_connectivity/registration_test/registration_test.json +19 -0
  55. certificate/tests/cloud_connectivity/registration_test/registration_test.py +384 -0
  56. certificate/tests/cloud_connectivity/registration_test/registration_test_cli.py +90 -0
  57. certificate/tests/cloud_connectivity/stress_test/stress_test.json +16 -0
  58. certificate/tests/cloud_connectivity/stress_test/stress_test.py +97 -0
  59. certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.json +24 -0
  60. certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.py +93 -0
  61. certificate/tests/cloud_connectivity/uplink_test/uplink_test.json +19 -0
  62. certificate/tests/cloud_connectivity/uplink_test/uplink_test.py +161 -0
  63. {brg_certificate → certificate}/tests/datapath/aging_test/aging_test.json +1 -1
  64. certificate/tests/datapath/aging_test/aging_test.py +138 -0
  65. certificate/tests/datapath/event_ble5_test/event_ble5_test.json +16 -0
  66. certificate/tests/datapath/event_ble5_test/event_ble5_test.py +95 -0
  67. certificate/tests/datapath/event_test/event_test.json +16 -0
  68. certificate/tests/datapath/event_test/event_test.py +85 -0
  69. {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.json +1 -1
  70. {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.py +10 -8
  71. certificate/tests/datapath/output_power_test/output_power_test.json +22 -0
  72. {brg_certificate → certificate}/tests/datapath/output_power_test/output_power_test.py +17 -6
  73. {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +1 -1
  74. {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +10 -8
  75. {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.json +1 -1
  76. {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.py +9 -7
  77. {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.json +2 -2
  78. {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.py +18 -6
  79. certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.json +19 -0
  80. certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.py +61 -0
  81. {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +1 -1
  82. {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +11 -10
  83. certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.json +18 -0
  84. certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.py +83 -0
  85. {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +1 -1
  86. {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +10 -9
  87. {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.json +1 -1
  88. {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.py +10 -9
  89. {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +1 -1
  90. {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +9 -8
  91. brg_certificate/tests/datapath/output_power_test/output_power_test.json → certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.json +5 -4
  92. certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.py +77 -0
  93. {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.json +2 -2
  94. {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.py +7 -6
  95. {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +7 -7
  96. {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +112 -72
  97. {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +7 -7
  98. {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +112 -72
  99. {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.json +3 -3
  100. {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.py +12 -11
  101. {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.json +3 -3
  102. {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.py +12 -11
  103. {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.json +2 -1
  104. {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.py +14 -13
  105. certificate/tests/edge_mgmt/action_blink_test/action_blink_test.json +14 -0
  106. certificate/tests/edge_mgmt/action_blink_test/action_blink_test.py +24 -0
  107. certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.json +14 -0
  108. certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.py +43 -0
  109. certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.json +14 -0
  110. certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.py +42 -0
  111. certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.json +14 -0
  112. certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.py +44 -0
  113. certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.json +15 -0
  114. certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.py +42 -0
  115. certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.json +14 -0
  116. certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.py +49 -0
  117. certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.json +14 -0
  118. certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.py +102 -0
  119. certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.json +14 -0
  120. certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.py +41 -0
  121. {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.json +2 -2
  122. {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.py +22 -11
  123. {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.json +1 -1
  124. {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.py +7 -6
  125. certificate/tests/energy2400/output_power_test/output_power_test.json +22 -0
  126. {brg_certificate → certificate}/tests/energy2400/output_power_test/output_power_test.py +17 -6
  127. {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.json +1 -1
  128. {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.py +7 -6
  129. certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +25 -0
  130. certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +378 -0
  131. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json → certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.json +3 -3
  132. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py → certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.py +97 -87
  133. certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +23 -0
  134. certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +350 -0
  135. {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +1 -1
  136. {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +7 -6
  137. {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.json +1 -1
  138. {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.py +7 -6
  139. {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +1 -1
  140. {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +10 -10
  141. {brg_certificate → certificate}/tests/sensors/ext_sensor_test/ext_sensor_test.json +4 -4
  142. certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +455 -0
  143. certificate/wlt_types.py +122 -0
  144. {gw_certificate → common}/api_if/202/status.json +6 -0
  145. {gw_certificate → common}/api_if/203/status.json +6 -0
  146. {gw_certificate → common}/api_if/204/status.json +6 -0
  147. common/api_if/206/data.json +85 -0
  148. common/api_if/206/status.json +69 -0
  149. common/api_if/api_validation.py +85 -0
  150. common/web/templates/generator.html +148 -0
  151. common/web/templates/index.html +20 -0
  152. common/web/templates/menu.html +54 -0
  153. common/web/templates/parser.html +53 -0
  154. {brg_certificate/ag → common/web/templates}/wlt_types.html +1216 -191
  155. common/web/web_utils.py +377 -0
  156. {brg_certificate → common}/wltPb_pb2.py +14 -12
  157. {gw_certificate/common → common}/wltPb_pb2.pyi +16 -2
  158. gui_certificate/gui_certificate_cli.py +14 -0
  159. gui_certificate/server.py +1062 -0
  160. gui_certificate/templates/cert_run.html +1207 -0
  161. wiliot_certificate-4.5.0a1.dist-info/METADATA +110 -0
  162. wiliot_certificate-4.5.0a1.dist-info/RECORD +182 -0
  163. {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0a1.dist-info}/WHEEL +1 -1
  164. wiliot_certificate-4.5.0a1.dist-info/entry_points.txt +5 -0
  165. wiliot_certificate-4.5.0a1.dist-info/top_level.txt +3 -0
  166. brg_certificate/ag/energous_v0_defines.py +0 -925
  167. brg_certificate/ag/energous_v1_defines.py +0 -931
  168. brg_certificate/ag/energous_v2_defines.py +0 -925
  169. brg_certificate/ag/energous_v3_defines.py +0 -925
  170. brg_certificate/ag/energous_v4_defines.py +0 -925
  171. brg_certificate/ag/fanstel_lan_v0_defines.py +0 -925
  172. brg_certificate/ag/fanstel_lte_v0_defines.py +0 -925
  173. brg_certificate/ag/fanstel_wifi_v0_defines.py +0 -925
  174. brg_certificate/ag/minew_lte_v0_defines.py +0 -925
  175. brg_certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +0 -61
  176. brg_certificate/brg_certificate.py +0 -225
  177. brg_certificate/brg_certificate_cli.py +0 -63
  178. brg_certificate/cert_common.py +0 -923
  179. brg_certificate/cert_config.py +0 -402
  180. brg_certificate/cert_utils.py +0 -362
  181. brg_certificate/certificate_bcc_sanity_test_list.txt +0 -40
  182. brg_certificate/certificate_bcc_test_list.txt +0 -48
  183. brg_certificate/certificate_sanity_test_list.txt +0 -43
  184. brg_certificate/certificate_test_list.txt +0 -53
  185. brg_certificate/config/eclipse.json +0 -10
  186. brg_certificate/config/hivemq.json +0 -10
  187. brg_certificate/config/mosquitto.json +0 -10
  188. brg_certificate/config/mosquitto.md +0 -95
  189. brg_certificate/config/wiliot-dev.json +0 -10
  190. brg_certificate/restore_brg.py +0 -61
  191. brg_certificate/tests/calibration/output_power_test/output_power_test.json +0 -16
  192. brg_certificate/tests/calibration/output_power_test/output_power_test.py +0 -28
  193. brg_certificate/tests/datapath/aging_test/aging_test.py +0 -143
  194. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +0 -16
  195. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +0 -73
  196. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +0 -17
  197. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +0 -118
  198. brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +0 -14
  199. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +0 -396
  200. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +0 -20
  201. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +0 -94
  202. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +0 -19
  203. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.py +0 -87
  204. brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +0 -17
  205. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +0 -223
  206. brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +0 -17
  207. brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +0 -128
  208. brg_certificate/tests/energy2400/output_power_test/output_power_test.json +0 -16
  209. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +0 -20
  210. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +0 -321
  211. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +0 -20
  212. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +0 -141
  213. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +0 -20
  214. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +0 -276
  215. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +0 -20
  216. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +0 -390
  217. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +0 -16
  218. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +0 -28
  219. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +0 -305
  220. brg_certificate/wltPb_pb2.pyi +0 -234
  221. brg_certificate/wlt_types.py +0 -113
  222. gw_certificate/ag/ut_defines.py +0 -364
  223. gw_certificate/ag/wlt_types.py +0 -85
  224. gw_certificate/ag/wlt_types_ag.py +0 -5310
  225. gw_certificate/ag/wlt_types_data.py +0 -64
  226. gw_certificate/api/extended_api.py +0 -23
  227. gw_certificate/api_if/200/data.json +0 -106
  228. gw_certificate/api_if/200/status.json +0 -47
  229. gw_certificate/api_if/201/data.json +0 -98
  230. gw_certificate/api_if/201/status.json +0 -53
  231. gw_certificate/api_if/205/logs.json +0 -12
  232. gw_certificate/api_if/api_validation.py +0 -38
  233. gw_certificate/api_if/gw_capabilities.py +0 -54
  234. gw_certificate/cert_results.py +0 -145
  235. gw_certificate/common/analysis_data_bricks.py +0 -60
  236. gw_certificate/common/debug.py +0 -42
  237. gw_certificate/common/serialization_formatter.py +0 -93
  238. gw_certificate/common/utils.py +0 -8
  239. gw_certificate/common/utils_defines.py +0 -15
  240. gw_certificate/common/wltPb_pb2.py +0 -84
  241. gw_certificate/gw_certificate.py +0 -154
  242. gw_certificate/gw_certificate_cli.py +0 -87
  243. gw_certificate/interface/4.4.93_app.zip +0 -0
  244. gw_certificate/interface/4.4.93_sd_bl_app.zip +0 -0
  245. gw_certificate/interface/ble_simulator.py +0 -61
  246. gw_certificate/interface/ble_sniffer.py +0 -189
  247. gw_certificate/interface/flash_fw.py +0 -90
  248. gw_certificate/interface/if_defines.py +0 -36
  249. gw_certificate/interface/mqtt.py +0 -563
  250. gw_certificate/interface/nrfutil-linux +0 -0
  251. gw_certificate/interface/nrfutil-mac +0 -0
  252. gw_certificate/interface/nrfutil.exe +0 -0
  253. gw_certificate/interface/pkt_generator.py +0 -594
  254. gw_certificate/interface/uart_if.py +0 -236
  255. gw_certificate/interface/uart_ports.py +0 -20
  256. gw_certificate/templates/results.html +0 -241
  257. gw_certificate/templates/stage.html +0 -22
  258. gw_certificate/templates/table.html +0 -6
  259. gw_certificate/templates/test.html +0 -38
  260. gw_certificate/tests/__init__.py +0 -10
  261. gw_certificate/tests/actions.py +0 -289
  262. gw_certificate/tests/bad_crc_to_PER_quantization.csv +0 -51
  263. gw_certificate/tests/connection.py +0 -188
  264. gw_certificate/tests/downlink.py +0 -172
  265. gw_certificate/tests/generic.py +0 -238
  266. gw_certificate/tests/registration.py +0 -340
  267. gw_certificate/tests/static/__init__.py +0 -0
  268. gw_certificate/tests/static/connection_defines.py +0 -9
  269. gw_certificate/tests/static/downlink_defines.py +0 -9
  270. gw_certificate/tests/static/generated_packet_table.py +0 -195
  271. gw_certificate/tests/static/packet_table.csv +0 -10067
  272. gw_certificate/tests/static/references.py +0 -5
  273. gw_certificate/tests/static/uplink_defines.py +0 -14
  274. gw_certificate/tests/throughput.py +0 -240
  275. gw_certificate/tests/uplink.py +0 -853
  276. wiliot_certificate-4.4.3.dist-info/METADATA +0 -211
  277. wiliot_certificate-4.4.3.dist-info/RECORD +0 -210
  278. wiliot_certificate-4.4.3.dist-info/entry_points.txt +0 -3
  279. wiliot_certificate-4.4.3.dist-info/top_level.txt +0 -3
  280. {brg_certificate → certificate}/__init__.py +0 -0
  281. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/side_info_sensor.json +0 -0
  282. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/signal_indicator_data.json +0 -0
  283. {gw_certificate → common}/api_if/202/data.json +0 -0
  284. {gw_certificate/api_if/200 → common/api_if/202}/logs.json +0 -0
  285. {gw_certificate → common}/api_if/203/data.json +0 -0
  286. {gw_certificate/api_if/201 → common/api_if/203}/logs.json +0 -0
  287. {gw_certificate → common}/api_if/204/data.json +0 -0
  288. {gw_certificate/api_if/202 → common/api_if/204}/logs.json +0 -0
  289. {gw_certificate → common}/api_if/205/data.json +0 -0
  290. {gw_certificate/api_if/203 → common/api_if/205}/logs.json +0 -0
  291. {gw_certificate → common}/api_if/205/status.json +0 -0
  292. {gw_certificate/api_if/204 → common/api_if/206}/logs.json +0 -0
  293. {gw_certificate → common/api_if}/__init__.py +0 -0
  294. {gw_certificate/api_if → gui_certificate}/__init__.py +0 -0
  295. {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -1,594 +0,0 @@
1
- import binascii
2
- import datetime
3
- from typing import Literal, List
4
- import random
5
- import os
6
-
7
- from gw_certificate.ag.ut_defines import (
8
- BRIDGE_ID,
9
- NFPKT,
10
- PAYLOAD,
11
- RSSI,
12
- TIMESTAMP,
13
- )
14
- from gw_certificate.interface.if_defines import ADVA_LENGTH, GAP_LENGTH, GROUP_ID_LENGTH, SERVICE_UUID_LENGTH
15
- from gw_certificate.ag.wlt_types import *
16
- from gw_certificate.ag.wlt_types_ag import (
17
- GROUP_ID_SIDE_INFO,
18
- GROUP_ID_BRG2GW,
19
- Hdr,
20
- SideInfo,
21
- )
22
- from gw_certificate.ag.wlt_types_data import DataPacket
23
-
24
- BRG_LATENCY = "brg_latency"
25
-
26
- # Shared Functions
27
- def generate_random_adva(device:Literal['Tag', 'Bridge']):
28
- """generate random 6-byte AdvA
29
-
30
- :return: AdvA (12 hex chars)
31
- :rtype: str
32
- """
33
- adva = os.urandom(6).hex().upper()
34
- if device == 'Tag':
35
- adva = apply_adva_bitmask(adva, 'non_resolvable')
36
- if device == 'Bridge':
37
- adva = apply_adva_bitmask(adva, 'random_static')
38
- return adva
39
-
40
- def apply_adva_bitmask(adva, address_type:Literal['random_static', 'non_resolvable']):
41
- """apply AdvA Bitmask
42
- BRGs AdvA comply with BTLE Random Static Address
43
- Pixel AdvA comply with BTLE Random Private Non-Resolvable Address
44
-
45
- :param adva: AdvA
46
- :type adva: str
47
- :return: AdvA (12 hex chars)
48
- :rtype: str
49
- """
50
- masked_adva = bytearray(binascii.unhexlify(adva))
51
- if address_type == 'random_static':
52
- masked_adva[5] = masked_adva[5] | 0b11000000
53
- if address_type == 'non_resolvable':
54
- masked_adva[5] = masked_adva[5] & 0b00111111
55
- masked_adva = masked_adva.hex().upper()
56
- return masked_adva
57
-
58
- def init_adva(adva=None, device:Literal['Tag', 'Bridge']='Tag'):
59
- """Init function helper
60
-
61
- :param adva: AdvA, defaults to None
62
- :type adva: str, optional
63
- :return: AdvA (12 hex chars)
64
- :rtype: str
65
- """
66
- if adva is None:
67
- adva = generate_random_adva(device)
68
-
69
- adva_type = ''
70
- if device == 'Bridge':
71
- adva_type = 'random_static'
72
- elif device == 'Tag':
73
- adva_type = 'non_resolvable'
74
-
75
- adva = apply_adva_bitmask(adva, adva_type)
76
-
77
- return adva
78
-
79
- def increment_circular(x, num_to_inc, bits):
80
- """Increment object of {bits} size circularly
81
- :param x: number to increment
82
- :type x: int
83
- :param num_to_inc: number to increment
84
- :type num_to_inc: int
85
- :param bits: bit size
86
- :type bits: int
87
- """
88
- return (x + num_to_inc) % (2 ^ bits)
89
-
90
- def decrease_circular(x, num_to_dec, bits):
91
- """Decrease object of {bits} size circularly
92
- :param x: number to decrease
93
- :type x: int
94
- :param num_to_dec: number to decrease
95
- :type num_to_dec: int
96
- :param bits: bit size
97
- :type bits: int
98
- """
99
- return (x-num_to_dec) % (2 ^ bits)
100
-
101
- def generate_random_bridge_id():
102
- """Generate random 6 byte bridge ID
103
-
104
- :return: bridge ID - (12 hex chars, int)
105
- :rtype: tuple (str, int)
106
- """
107
- bridge_id = os.urandom(6).hex().upper()
108
- bridge_id_int = int.from_bytes(binascii.unhexlify(bridge_id), "big")
109
- return bridge_id, bridge_id_int
110
-
111
-
112
- class TagPktGenerator:
113
- """Tag Packet Generator - represents 1 Wiliot Pixel"""
114
- def __init__(self, adva=None, group_id=None, service_uuid:Literal["tag", "bridge"]='bridge') -> None:
115
- """
116
- :param adva: AdvA, defaults to None
117
- :type adva: str, optional
118
- :param group_id: Tag's group id, defaults to 0x020000 if none given
119
- :type group_id: int, optional
120
- :param service_uuid: set the generator's service uuid ("tag"=0xAFFD, "bridge"=0xC6FC)
121
- :type service_uuid: string
122
- """
123
- self.adva = init_adva(adva, device='Tag')
124
- self.data_packet = DataPacket(group_id=group_id, service_uuid=service_uuid)
125
- pass
126
-
127
- def __repr__(self) -> str:
128
- return f'Tag: {self.adva}, PktID: {self.get_pkt_id()[0]}'
129
-
130
- def get_pkt_id(self):
131
- """Get generator's current packet ID
132
-
133
- :return: 6 byte packet ID - (12 hex chars, int)
134
- :rtype: tuple (str, int)
135
- """
136
- pkt_id_int = self.data_packet.generic.pkt_id
137
- pkt_id_bytes = pkt_id_int.to_bytes(4, "big").hex()
138
- return pkt_id_bytes, pkt_id_int
139
-
140
- def set_pkt_id(self, pkt_id_int):
141
- """Set generator's packet ID
142
-
143
- :param pkt_id_int: packet ID
144
- :type pkt_id_int: int
145
- """
146
- assert 0 < pkt_id_int < (2 ** 32), "PacketID Must be a 32 bit unsigned integer!"
147
- self.data_packet.generic.pkt_id = pkt_id_int
148
-
149
- def randomize_pkt_id(self):
150
- """Randomize generator's packet ID"""
151
- pkt_id_int = int.from_bytes(os.urandom(4), "big")
152
- self.set_pkt_id(pkt_id_int)
153
-
154
- def randomize_packet_payload(self):
155
- """Randomize Generator's packet payload (keep packet ID as is)"""
156
- self.data_packet.generic.payload = int.from_bytes(os.urandom(20), "big")
157
-
158
- def randomize_packet_payload_unified(self):
159
- """Randomize Generator's packet payload (keep packet ID as is) for unified packet"""
160
- self.data_packet.pkt.nonce_n_unique_id = int.from_bytes(os.urandom(10), "big")
161
- self.data_packet.pkt.mic = int.from_bytes(os.urandom(3), "big")
162
- self.data_packet.pkt.data = int.from_bytes(os.urandom(8), "big")
163
- self.data_packet.data_hdr.group_id_major == GROUP_ID_UNIFIED_PKT
164
-
165
- def increment_pkt_data(self):
166
- packet = self.get_packet()
167
- data = packet[(ADVA_LENGTH+GAP_LENGTH+SERVICE_UUID_LENGTH+GROUP_ID_LENGTH):]
168
- incremented_data = [bytes([((int(data[i:i+2], 16) + 1) % 256)]).hex().upper() for i in range(0, len(data), 2)]
169
- incremented_packet = packet[:ADVA_LENGTH+GAP_LENGTH+SERVICE_UUID_LENGTH+GROUP_ID_LENGTH] + ''.join(incremented_data)
170
- self.set_packet(incremented_packet)
171
-
172
- def get_packet(self):
173
- """Get current packet from generator (hex string)
174
-
175
- :return: Tag's Packet [12 char AdvA + 62 char BLE Packet]
176
- :rtype: str
177
- """
178
- return self.adva + self.data_packet.dump()
179
-
180
- def set_packet(self, pkt):
181
- """set packet to input pkt"""
182
- if len(pkt) == 74:
183
- self.adva = pkt[:12]
184
- pkt = pkt[12:]
185
- assert len(pkt) == 62, "packet must be 74 / 62 hex chars long!"
186
- self.data_packet.set(pkt)
187
-
188
-
189
- class BrgPktGenerator:
190
- """Bridge Packet Generator - represents 1 wiliot Bridge"""
191
- def __init__(self, bridge_id:str=None):
192
- """
193
- :param bridge_id: bridge ID, defaults to randomly generated if None
194
- :type bridge_id: str, optional
195
- """
196
- if bridge_id is None:
197
- self.bridge_id, self.bridge_id_int = generate_random_bridge_id()
198
- else:
199
- self.bridge_id = bridge_id
200
- self.bridge_id_int = int.from_bytes(binascii.unhexlify(bridge_id), "big")
201
- self.adva = apply_adva_bitmask(self.bridge_id, 'random_static')
202
- # Data packet init
203
- self.tag_list:List[TagPktGenerator] = []
204
- self.append_data_pkt()
205
- # SI packet init
206
- self.si_list:List[WltPkt]
207
- self.update_si_list()
208
-
209
- # BRG CFG packet init
210
- self.brg_cfg = WltPkt(
211
- hdr=Hdr(group_id=GROUP_ID_BRG2GW),
212
- generic=Brg2GwCfgV7(
213
- msg_type=BRG_MGMT_MSG_TYPE_CFG_INFO,
214
- major_ver=3,
215
- minor_ver=12,
216
- build_ver=35,
217
- brg_mac=self.bridge_id_int,
218
- ),
219
- )
220
- self.brg_hb = WltPkt(
221
- hdr=Hdr(group_id=GROUP_ID_BRG2GW),
222
- generic=Brg2GwHbV7(
223
- msg_type=BRG_MGMT_MSG_TYPE_HB, brg_mac=self.bridge_id_int
224
- ),
225
- )
226
- self.brg_seq_id = 0
227
-
228
- def __repr__(self):
229
- return f'BRG {self.bridge_id}, Tags {self.tag_list}'
230
-
231
- def set_bridge_id(self, brg_mac):
232
- """Set generator's bridge ID
233
-
234
- :param brg_mac: bridge ID (12 hex chars)
235
- :type brg_mac: str
236
- """
237
- self.bridge_id = brg_mac
238
- self.bridge_id_int = int.from_bytes(binascii.unhexlify(brg_mac), "big")
239
- self.brg_cfg = WltPkt(
240
- hdr=Hdr(group_id=GROUP_ID_BRG2GW),
241
- generic=Brg2GwCfgV7(
242
- msg_type=BRG_MGMT_MSG_TYPE_CFG_INFO,
243
- major_ver=3,
244
- minor_ver=12,
245
- build_ver=35,
246
- brg_mac=self.bridge_id_int,
247
- ),
248
- )
249
- self.brg_hb = WltPkt(
250
- hdr=Hdr(group_id=GROUP_ID_BRG2GW),
251
- generic=Brg2GwHbV7(
252
- msg_type=BRG_MGMT_MSG_TYPE_HB, brg_mac=self.bridge_id_int
253
- ),
254
- )
255
-
256
- def set_random_bridge_id(self):
257
- bridge_id, bridge_id_int = generate_random_bridge_id()
258
- self.set_bridge_id(bridge_id)
259
-
260
- # Data Packet
261
-
262
- def append_data_pkt(self, data_pkt=None):
263
- """Append data packet to tag list
264
- if no data packet is input, a new TagPktGenerator object will be appended to tag list
265
-
266
- :param data_pkt: 62 hex char string, defaults to None
267
- :type data_pkt: str, optional
268
- """
269
- idx_to_append = len(self.tag_list)
270
- self.tag_list.append(None)
271
- self.set_data_pkt(tag_idx=idx_to_append, data_pkt=data_pkt)
272
-
273
- def set_data_pkt(self, tag_idx, data_pkt=None):
274
- """Set tag generator at specific idx's data packet from string
275
- if no data packet is input, a new TagPktGenerator object will be created at tag_idx
276
-
277
- :param tag_idx: tag index
278
- :type tag_idx: int
279
- :param data_pkt: data packet (62 hex chars), defaults to None
280
- :type data_pkt: str, optional
281
- """
282
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
283
- tag_pkt_gen = TagPktGenerator()
284
- if data_pkt is not None:
285
- tag_pkt_gen.set_packet(data_pkt)
286
- self.tag_list[tag_idx] = tag_pkt_gen
287
-
288
- # SideInfo Packet
289
-
290
- def generate_si_from_pkt_id(self, pkt_id_int):
291
- """Generate SI from packet ID
292
-
293
- :param pkt_id_int: packet ID
294
- :type pkt_id_int: int
295
- :return: WltPkt for SideInfo, with RSSI, NFPKT zeroed out
296
- :rtype: WltPkt(hdr:Hdr, generic:SideInfo)
297
- """
298
- assert 0 <= pkt_id_int < (2 ** 32), "Packet ID must be a 32 bit unsigned integer!"
299
- si_packet = WltPkt(
300
- hdr=Hdr(group_id=GROUP_ID_SIDE_INFO),
301
- generic=SideInfo(brg_mac=self.bridge_id_int, pkt_id=pkt_id_int),
302
- )
303
- return si_packet
304
-
305
- def update_si_list(self):
306
- """Update the SI list according to current pixel's packet IDs"""
307
- si_table = []
308
- for tag in self.tag_list:
309
- tag_pkt_id_bytes, tag_pkt_id_int = tag.get_pkt_id()
310
- si_table.append(self.generate_si_from_pkt_id(tag_pkt_id_int))
311
- self.si_list = si_table
312
-
313
- def randomize_si_rssi_nfpkt(self):
314
- """Randomize all SI's rssi and nfpkt values
315
- """
316
- for si in self.si_list:
317
- rssi = int.from_bytes(os.urandom(1), "big")
318
- nfpkt = int.from_bytes(os.urandom(2), "big")
319
- si.generic.rssi = rssi
320
- si.generic.nfpkt = nfpkt
321
-
322
- def randomize_unified_rssi_nfpkt_latency_gpacing(self):
323
- """Randomize all rssi, nfpkt, global pacing and brg latency values
324
- """
325
- for tag in self.tag_list:
326
- tag.data_packet.pkt.rssi = random.randint(0,63) + 40
327
- tag.data_packet.pkt.nfpkt = int.from_bytes(os.urandom(1), "big")
328
- tag.data_packet.pkt.brg_latency = random.randint(0,63)
329
- tag.data_packet.pkt.global_pacing_group = random.randint(0,15)
330
- tag.data_packet.hdr.group_id = 0x00003F
331
- tag.data_packet.data_hdr.group_id_major = GROUP_ID_UNIFIED_PKT
332
- tag.data_packet.data_hdr.group_id_minor = 0x0000
333
-
334
- def set_rssi_nfpkt(self, rssi, nfpkt, tag_idx:int=None):
335
- if tag_idx is None:
336
- tag_idx = 0
337
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
338
- self.si_list[tag_idx].generic.rssi = rssi
339
- self.si_list[tag_idx].generic.nfpkt = nfpkt
340
-
341
- # Coupling (Shared Data + SideInfo)
342
-
343
- def set_tag_list(self, tag_list:List[TagPktGenerator]):
344
- self.tag_list = tag_list
345
- self.update_si_list()
346
-
347
- def increment_pkt_id(self, tag_idx:int=None):
348
- """Increment tag generator at specific idx's data packet's packet ID
349
-
350
- :param tag_idx: tag index, defaults to None
351
- :type tag_idx: int, optional
352
- """
353
- if tag_idx is None:
354
- tag_idx = 0
355
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
356
- self.tag_list[tag_idx].generic.pkt_id = increment_circular(self.tag_list[tag_idx].generic.pkt_id, 1, 32)
357
- self.update_si_list()
358
-
359
- def randomize_data_packet(self, tag_idx:int=None):
360
- """Randomize tag generator at specific idx's data packet (payload + ID),
361
- Update SI to match
362
-
363
- :param tag_idx: tag index, defaults to None
364
- :type tag_idx: int, optional
365
- """
366
- if tag_idx is None:
367
- tag_idx = 0
368
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
369
- tag = self.tag_list[tag_idx]
370
- # randomize packet ID
371
- tag.randomize_pkt_id()
372
- # randomize packet payload
373
- tag.randomize_packet_payload()
374
- # update SI
375
- self.update_si_list()
376
-
377
- def randomize_packet_unified(self, tag_idx:int=None):
378
- """Randomize tag generator at specific idx's data packet (payload + ID)
379
-
380
- :param tag_idx: tag index, defaults to None
381
- :type tag_idx: int, optional
382
- """
383
- if tag_idx is None:
384
- tag_idx = 0
385
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
386
- tag = self.tag_list[tag_idx]
387
- # randomize packet ID
388
- tag.randomize_pkt_id()
389
- # randomize packet payload
390
- tag.randomize_packet_payload_unified()
391
-
392
- def get_data(self, tag_idx:int):
393
- """Get tag at index's data packet (AdvA + BLE Packet)
394
-
395
- :param tag_idx: tag index
396
- :type tag_idx: int
397
- :return: data packet (74 hex char)
398
- :rtype: str
399
- """
400
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
401
- return self.tag_list[tag_idx].get_packet()
402
-
403
- def get_si(self, tag_idx:int):
404
- """Get tag at index's sideinfo packet (AdvA + BLE Packet)
405
-
406
- :param tag_idx: _description_
407
- :type tag_idx: int
408
- :return: _description_
409
- :rtype: _type_
410
- """
411
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
412
- return self.adva + self.si_list[tag_idx].dump()
413
-
414
- def get_expected_coupled_mqtt(self, tag_idx:int=None):
415
- if tag_idx is None:
416
- tag_idx = 0
417
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
418
- si = self.si_list[tag_idx]
419
- """generates expected MQTT packet"""
420
- timestamp = int(datetime.datetime.now().timestamp() * 1000)
421
- expected = {
422
- TIMESTAMP: timestamp,
423
- BRIDGE_ID: self.bridge_id,
424
- NFPKT: si.generic.nfpkt,
425
- RSSI: si.generic.rssi,
426
- PAYLOAD: self.get_data(tag_idx)[(ADVA_LENGTH+GAP_LENGTH):]
427
- }
428
- return expected
429
-
430
- def get_expected_uncoupled_mqtt(self, tag_idx:int=None):
431
- if tag_idx is None:
432
- tag_idx = 0
433
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
434
- timestamp = int(datetime.datetime.now().timestamp() * 1000)
435
- expected_data = {
436
- TIMESTAMP: timestamp,
437
- PAYLOAD: self.get_data(tag_idx)[(ADVA_LENGTH+GAP_LENGTH):]
438
- }
439
- expected_si = {
440
- TIMESTAMP: timestamp,
441
- PAYLOAD: self.get_si(tag_idx)[(ADVA_LENGTH+GAP_LENGTH):]
442
- }
443
- return [expected_data, expected_si]
444
-
445
- def get_expected_hb_mqtt(self):
446
- timestamp = int(datetime.datetime.now().timestamp() * 1000)
447
- expected = {
448
- TIMESTAMP: timestamp,
449
- PAYLOAD: self.get_brg_hb()[(ADVA_LENGTH+GAP_LENGTH):]
450
- }
451
- return expected
452
- # Management packets (Heartbeat / CFG)
453
-
454
- def increment_brg_seq_id(self):
455
- """Increment Bridge sequenceID (Relevant for CFG/HB Packets only)"""
456
- self.brg_seq_id = increment_circular(self.brg_seq_id, 2, 8)
457
- self.brg_cfg.generic.seq_id = decrease_circular(self.brg_seq_id, 2, 8)
458
- self.brg_hb.generic.seq_id = decrease_circular(self.brg_seq_id, 1, 8)
459
-
460
- def increment_hb_counters(self, num=1):
461
- """Update bridge HB counters values
462
-
463
- :param num: num to increment by, defaults to 1
464
- :type num: int, optional
465
- """
466
- self.brg_hb.generic.non_wlt_rx_pkts_ctr = increment_circular(self.brg_hb.generic.non_wlt_rx_pkts_ctr, num, 24)
467
- self.brg_hb.generic.bad_crc_pkts_ctr = increment_circular(self.brg_hb.generic.bad_crc_pkts_ctr, num, 24)
468
- self.brg_hb.generic.wlt_rx_pkts_ctr = increment_circular(self.brg_hb.generic.wlt_rx_pkts_ctr, num, 24)
469
- self.brg_hb.generic.wlt_tx_pkts_ctr = increment_circular(self.brg_hb.generic.wlt_tx_pkts_ctr, num, 16)
470
- self.brg_hb.generic.tags_ctr = len(self.tag_list)
471
-
472
- def increment_all(self):
473
- """Increment Bridge sequenceID and HB counters"""
474
- self.increment_brg_seq_id()
475
- self.increment_hb_counters()
476
-
477
- def get_brg_cfg(self):
478
- """Get bridge CFG Packet
479
-
480
- :return: CFG Packet (74 hex chars)
481
- :rtype: str
482
- """
483
- return self.adva + self.brg_cfg.dump()
484
-
485
- def get_brg_hb(self):
486
- """Get bridge HB Packet
487
-
488
- :return: HB Packet (74 hex chars)
489
- :rtype: str
490
- """
491
- return self.adva + self.brg_hb.dump()
492
-
493
- # General
494
-
495
- def get_existing_data_si(self, tag_idx:int=None) -> dict:
496
- """Get tag at tag_idx's Data packet and relevant SideInfo packet
497
-
498
- :param tag_idx: tag index, defaults to None
499
- :type tag_idx: int, optional
500
- :return: dictionary with data packet and sideinfo packet
501
- :rtype: dict
502
- """
503
- if tag_idx is None:
504
- tag_idx = 0
505
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
506
- existing_packets = {
507
- "data_packet": self.get_data(tag_idx),
508
- "si_packet": self.get_si(tag_idx)
509
- }
510
- return existing_packets
511
-
512
- def get_existing_data_unified(self, tag_idx:int=None) -> dict:
513
- """Get tag at tag_idx's Data packet for unified packet
514
-
515
- :param tag_idx: tag index, defaults to None
516
- :type tag_idx: int, optional
517
- :return: dictionary with data packet and sideinfo packet
518
- :rtype: dict
519
- """
520
- if tag_idx is None:
521
- tag_idx = 0
522
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
523
- existing_packets = {
524
- "data_packet": self.get_data(tag_idx)
525
- }
526
- return existing_packets
527
-
528
- def get_new_data_si(self, tag_idx:int=None) -> dict:
529
- """Generate new Data+SideInfo packets for tag at tag_idx
530
-
531
- :param tag_idx: tag index, defaults to None
532
- :type tag_idx: int, optional
533
- :return: dictionary with data packet and sideinfo packet
534
- :rtype: dict
535
- """
536
- if tag_idx is None:
537
- tag_idx = 0
538
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
539
- self.randomize_data_packet(tag_idx)
540
- self.randomize_si_rssi_nfpkt()
541
- self.increment_brg_seq_id()
542
- self.increment_hb_counters()
543
- return self.get_existing_data_si(tag_idx)
544
-
545
- def get_new_data_unified(self, tag_idx:int=None) -> dict:
546
- """Generate new unified Data packets for tag at tag_idx
547
-
548
- :param tag_idx: tag index, defaults to None
549
- :type tag_idx: int, optional
550
- :return: dictionary with data packet
551
- :rtype: dict
552
- """
553
- if tag_idx is None:
554
- tag_idx = 0
555
- assert tag_idx <= len(self.tag_list), f'Tag index must be in {[i for i in range(len(self.tag_list))]}'
556
- # set the packet type to unified
557
- self.tag_list[tag_idx].data_packet.pkt = UnifiedEchoPkt()
558
- self.tag_list[tag_idx].adva = init_adva(self.bridge_id, 'Bridge')
559
- self.randomize_packet_unified(tag_idx)
560
- self.randomize_unified_rssi_nfpkt_latency_gpacing()
561
- self.increment_brg_seq_id()
562
- self.increment_hb_counters()
563
- return self.get_existing_data_unified(tag_idx)
564
-
565
- class BrgPktGeneratorNetwork:
566
- """Bridge Packet Generator Network - Represents multiple bridges setup at same location and echoing the same tags"""
567
- def __init__(self, num_brgs=3):
568
- """
569
- :param num_brgs: number of bridges in array, defaults to 3
570
- :type num_brgs: int, optional
571
- """
572
- assert num_brgs > 1, 'BrgArray cannot be smaller than 1!'
573
- self.brg_list = [BrgPktGenerator() for brg in range(num_brgs)]
574
- self.primary_brg = self.brg_list[0]
575
- self.secondary_brgs = self.brg_list[1:]
576
- for brg in self.secondary_brgs:
577
- brg.set_tag_list(self.primary_brg.tag_list)
578
-
579
- def get_new_pkt_unified(self) -> list:
580
- """Get new unified pkt for all bridges in bridge network
581
-
582
- :return: List of dictionaries containing {bridge_id, data_packet} key:value pairs
583
- :rtype: list[dict]
584
- """
585
- pkts = []
586
- new_pkt_primary = self.primary_brg.get_new_data_unified()
587
- pkts.append(new_pkt_primary)
588
- for brg in self.secondary_brgs:
589
- brg.randomize_unified_rssi_nfpkt_latency_gpacing()
590
- brg.tag_list[0].adva = init_adva(brg.bridge_id, 'Bridge')
591
- pkts.append(brg.get_existing_data_unified())
592
- for idx, pkt in enumerate(pkts):
593
- pkt.update({'bridge_id': self.brg_list[idx].bridge_id})
594
- return pkts