wiliot-certificate 4.4.3__py3-none-any.whl → 4.5.0__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.
- {brg_certificate → certificate}/ag/wlt_cmd_if.html +10 -4
- {brg_certificate → certificate}/ag/wlt_types_ag.py +1878 -519
- certificate/cert_common.py +1488 -0
- certificate/cert_config.py +480 -0
- {brg_certificate → certificate}/cert_data_sim.py +134 -46
- {brg_certificate → certificate}/cert_defines.py +129 -128
- {brg_certificate → certificate}/cert_gw_sim.py +183 -53
- {brg_certificate → certificate}/cert_mqtt.py +179 -64
- {brg_certificate → certificate}/cert_prints.py +35 -33
- {brg_certificate → certificate}/cert_protobuf.py +15 -6
- {brg_certificate → certificate}/cert_results.py +240 -64
- certificate/cert_utils.py +634 -0
- certificate/certificate.py +205 -0
- certificate/certificate_cli.py +76 -0
- certificate/certificate_eth_test_list.txt +76 -0
- certificate/certificate_sanity_test_list.txt +66 -0
- certificate/certificate_test_list.txt +76 -0
- {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.json +3 -2
- {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.py +7 -6
- certificate/tests/calibration/output_power_test/output_power_test.json +23 -0
- certificate/tests/calibration/output_power_test/output_power_test.py +39 -0
- {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.json +2 -1
- {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.py +20 -15
- certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.json +15 -0
- certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.py +140 -0
- certificate/tests/cloud_connectivity/acl_test/acl_test.json +15 -0
- certificate/tests/cloud_connectivity/acl_test/acl_test.py +96 -0
- certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.json +19 -0
- certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.py +41 -0
- certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.json +19 -0
- certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py +215 -0
- certificate/tests/cloud_connectivity/connection_test/connection_test.json +18 -0
- certificate/tests/cloud_connectivity/connection_test/connection_test.py +67 -0
- certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.json +15 -0
- certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.py +80 -0
- certificate/tests/cloud_connectivity/downlink_test/downlink_test.json +21 -0
- certificate/tests/cloud_connectivity/downlink_test/downlink_test.py +201 -0
- certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.json +17 -0
- certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py +104 -0
- certificate/tests/cloud_connectivity/reboot_test/reboot_test.json +18 -0
- certificate/tests/cloud_connectivity/reboot_test/reboot_test.py +59 -0
- certificate/tests/cloud_connectivity/registration_test/registration_test.json +20 -0
- certificate/tests/cloud_connectivity/registration_test/registration_test.py +384 -0
- certificate/tests/cloud_connectivity/registration_test/registration_test_cli.py +90 -0
- certificate/tests/cloud_connectivity/stress_test/stress_test.json +17 -0
- certificate/tests/cloud_connectivity/stress_test/stress_test.py +101 -0
- certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.json +25 -0
- certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.py +92 -0
- certificate/tests/cloud_connectivity/uplink_test/uplink_test.json +20 -0
- certificate/tests/cloud_connectivity/uplink_test/uplink_test.py +169 -0
- {brg_certificate → certificate}/tests/datapath/aging_test/aging_test.json +2 -1
- certificate/tests/datapath/aging_test/aging_test.py +142 -0
- certificate/tests/datapath/event_ble5_test/event_ble5_test.json +17 -0
- certificate/tests/datapath/event_ble5_test/event_ble5_test.py +89 -0
- certificate/tests/datapath/event_test/event_test.json +17 -0
- certificate/tests/datapath/event_test/event_test.py +80 -0
- {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.json +4 -3
- {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.py +19 -13
- certificate/tests/datapath/output_power_test/output_power_test.json +23 -0
- {brg_certificate → certificate}/tests/datapath/output_power_test/output_power_test.py +17 -6
- {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +2 -1
- {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +13 -11
- {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.json +2 -1
- {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.py +9 -7
- {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.json +3 -2
- {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.py +18 -6
- certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.json +20 -0
- certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.py +61 -0
- {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +2 -1
- {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +15 -14
- certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.json +19 -0
- certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.py +85 -0
- {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +2 -1
- {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +10 -9
- {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.json +2 -1
- {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.py +10 -9
- {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +3 -2
- {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +9 -8
- brg_certificate/tests/datapath/output_power_test/output_power_test.json → certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.json +6 -4
- certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.py +77 -0
- {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.json +3 -2
- {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.py +7 -6
- {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +8 -7
- {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +113 -73
- {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +8 -7
- {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +112 -72
- {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.json +4 -3
- {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.py +15 -11
- {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.json +4 -3
- {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.py +15 -11
- {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.json +3 -1
- {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.py +14 -13
- certificate/tests/edge_mgmt/action_blink_test/action_blink_test.json +15 -0
- certificate/tests/edge_mgmt/action_blink_test/action_blink_test.py +24 -0
- certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.json +15 -0
- certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.py +43 -0
- certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.json +15 -0
- certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.py +42 -0
- certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.json +15 -0
- certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.py +44 -0
- certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.json +16 -0
- certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.py +42 -0
- certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.json +15 -0
- certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.py +49 -0
- certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.json +15 -0
- certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.py +102 -0
- certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.json +15 -0
- certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.py +45 -0
- {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.json +3 -2
- {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.py +22 -11
- {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.json +2 -1
- {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.py +7 -6
- certificate/tests/energy2400/output_power_test/output_power_test.json +23 -0
- {brg_certificate → certificate}/tests/energy2400/output_power_test/output_power_test.py +17 -6
- {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.json +2 -1
- {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.py +7 -6
- certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +26 -0
- certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +379 -0
- certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.json +20 -0
- certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.py +173 -0
- certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +24 -0
- certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +350 -0
- {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +2 -1
- {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +7 -6
- {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.json +2 -1
- {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.py +7 -6
- {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +2 -1
- {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +10 -10
- {brg_certificate → certificate}/tests/sensors/ext_sensor_test/ext_sensor_test.json +5 -4
- certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +450 -0
- certificate/wlt_types.py +122 -0
- {gw_certificate → common}/api_if/202/status.json +6 -0
- {gw_certificate → common}/api_if/203/status.json +6 -0
- {gw_certificate → common}/api_if/204/status.json +6 -0
- common/api_if/206/data.json +85 -0
- common/api_if/206/status.json +69 -0
- common/api_if/api_validation.py +91 -0
- common/web/templates/generator.html +210 -0
- common/web/templates/index.html +20 -0
- common/web/templates/menu.html +54 -0
- common/web/templates/parser.html +53 -0
- {brg_certificate/ag → common/web/templates}/wlt_types.html +1216 -191
- common/web/web_utils.py +399 -0
- {brg_certificate → common}/wltPb_pb2.py +14 -12
- {gw_certificate/common → common}/wltPb_pb2.pyi +16 -2
- gui_certificate/gui_certificate_cli.py +14 -0
- gui_certificate/server.py +1267 -0
- gui_certificate/templates/cert_run.html +1273 -0
- wiliot_certificate-4.5.0.dist-info/METADATA +99 -0
- wiliot_certificate-4.5.0.dist-info/RECORD +168 -0
- {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0.dist-info}/WHEEL +1 -1
- wiliot_certificate-4.5.0.dist-info/entry_points.txt +5 -0
- wiliot_certificate-4.5.0.dist-info/top_level.txt +3 -0
- brg_certificate/ag/energous_v0_defines.py +0 -925
- brg_certificate/ag/energous_v1_defines.py +0 -931
- brg_certificate/ag/energous_v2_defines.py +0 -925
- brg_certificate/ag/energous_v3_defines.py +0 -925
- brg_certificate/ag/energous_v4_defines.py +0 -925
- brg_certificate/ag/fanstel_lan_v0_defines.py +0 -925
- brg_certificate/ag/fanstel_lte_v0_defines.py +0 -925
- brg_certificate/ag/fanstel_wifi_v0_defines.py +0 -925
- brg_certificate/ag/minew_lte_v0_defines.py +0 -925
- brg_certificate/ag/wlt_types_ag_jsons/brg2brg_ota.json +0 -142
- brg_certificate/ag/wlt_types_ag_jsons/brg2gw_hb.json +0 -785
- brg_certificate/ag/wlt_types_ag_jsons/brg2gw_hb_sleep.json +0 -139
- brg_certificate/ag/wlt_types_ag_jsons/calibration.json +0 -394
- brg_certificate/ag/wlt_types_ag_jsons/custom.json +0 -515
- brg_certificate/ag/wlt_types_ag_jsons/datapath.json +0 -672
- brg_certificate/ag/wlt_types_ag_jsons/energy2400.json +0 -550
- brg_certificate/ag/wlt_types_ag_jsons/energySub1g.json +0 -595
- brg_certificate/ag/wlt_types_ag_jsons/externalSensor.json +0 -598
- brg_certificate/ag/wlt_types_ag_jsons/interface.json +0 -938
- brg_certificate/ag/wlt_types_ag_jsons/powerManagement.json +0 -1234
- brg_certificate/ag/wlt_types_ag_jsons/side_info_sensor.json +0 -105
- brg_certificate/ag/wlt_types_ag_jsons/signal_indicator_data.json +0 -77
- brg_certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +0 -61
- brg_certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json +0 -110
- brg_certificate/brg_certificate.py +0 -225
- brg_certificate/brg_certificate_cli.py +0 -63
- brg_certificate/cert_common.py +0 -923
- brg_certificate/cert_config.py +0 -402
- brg_certificate/cert_utils.py +0 -362
- brg_certificate/certificate_bcc_sanity_test_list.txt +0 -40
- brg_certificate/certificate_bcc_test_list.txt +0 -48
- brg_certificate/certificate_sanity_test_list.txt +0 -43
- brg_certificate/certificate_test_list.txt +0 -53
- brg_certificate/config/eclipse.json +0 -10
- brg_certificate/config/hivemq.json +0 -10
- brg_certificate/config/mosquitto.json +0 -10
- brg_certificate/config/mosquitto.md +0 -95
- brg_certificate/config/wiliot-dev.json +0 -10
- brg_certificate/restore_brg.py +0 -61
- brg_certificate/tests/calibration/output_power_test/output_power_test.json +0 -16
- brg_certificate/tests/calibration/output_power_test/output_power_test.py +0 -28
- brg_certificate/tests/datapath/aging_test/aging_test.py +0 -143
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +0 -16
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +0 -73
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +0 -17
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +0 -118
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +0 -14
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +0 -396
- brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +0 -20
- brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +0 -94
- brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +0 -19
- brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.py +0 -87
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +0 -17
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +0 -223
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +0 -17
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +0 -128
- brg_certificate/tests/energy2400/output_power_test/output_power_test.json +0 -16
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +0 -20
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +0 -321
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +0 -20
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +0 -321
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +0 -20
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +0 -141
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +0 -20
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +0 -276
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +0 -20
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +0 -390
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +0 -16
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +0 -28
- brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +0 -305
- brg_certificate/wltPb_pb2.pyi +0 -234
- brg_certificate/wlt_types.py +0 -113
- gw_certificate/ag/ut_defines.py +0 -364
- gw_certificate/ag/wlt_types.py +0 -85
- gw_certificate/ag/wlt_types_ag.py +0 -5310
- gw_certificate/ag/wlt_types_data.py +0 -64
- gw_certificate/api/extended_api.py +0 -23
- gw_certificate/api_if/200/data.json +0 -106
- gw_certificate/api_if/200/status.json +0 -47
- gw_certificate/api_if/201/data.json +0 -98
- gw_certificate/api_if/201/status.json +0 -53
- gw_certificate/api_if/205/logs.json +0 -12
- gw_certificate/api_if/api_validation.py +0 -38
- gw_certificate/api_if/gw_capabilities.py +0 -54
- gw_certificate/cert_results.py +0 -145
- gw_certificate/common/analysis_data_bricks.py +0 -60
- gw_certificate/common/debug.py +0 -42
- gw_certificate/common/serialization_formatter.py +0 -93
- gw_certificate/common/utils.py +0 -8
- gw_certificate/common/utils_defines.py +0 -15
- gw_certificate/common/wltPb_pb2.py +0 -84
- gw_certificate/gw_certificate.py +0 -154
- gw_certificate/gw_certificate_cli.py +0 -87
- gw_certificate/interface/4.4.93_app.zip +0 -0
- gw_certificate/interface/4.4.93_sd_bl_app.zip +0 -0
- gw_certificate/interface/ble_simulator.py +0 -61
- gw_certificate/interface/ble_sniffer.py +0 -189
- gw_certificate/interface/flash_fw.py +0 -90
- gw_certificate/interface/if_defines.py +0 -36
- gw_certificate/interface/mqtt.py +0 -563
- gw_certificate/interface/nrfutil-linux +0 -0
- gw_certificate/interface/nrfutil-mac +0 -0
- gw_certificate/interface/nrfutil.exe +0 -0
- gw_certificate/interface/pkt_generator.py +0 -594
- gw_certificate/interface/uart_if.py +0 -236
- gw_certificate/interface/uart_ports.py +0 -20
- gw_certificate/templates/results.html +0 -241
- gw_certificate/templates/stage.html +0 -22
- gw_certificate/templates/table.html +0 -6
- gw_certificate/templates/test.html +0 -38
- gw_certificate/tests/__init__.py +0 -10
- gw_certificate/tests/actions.py +0 -289
- gw_certificate/tests/bad_crc_to_PER_quantization.csv +0 -51
- gw_certificate/tests/connection.py +0 -188
- gw_certificate/tests/downlink.py +0 -172
- gw_certificate/tests/generic.py +0 -238
- gw_certificate/tests/registration.py +0 -340
- gw_certificate/tests/static/__init__.py +0 -0
- gw_certificate/tests/static/connection_defines.py +0 -9
- gw_certificate/tests/static/downlink_defines.py +0 -9
- gw_certificate/tests/static/generated_packet_table.py +0 -195
- gw_certificate/tests/static/packet_table.csv +0 -10067
- gw_certificate/tests/static/references.py +0 -5
- gw_certificate/tests/static/uplink_defines.py +0 -14
- gw_certificate/tests/throughput.py +0 -240
- gw_certificate/tests/uplink.py +0 -853
- wiliot_certificate-4.4.3.dist-info/METADATA +0 -211
- wiliot_certificate-4.4.3.dist-info/RECORD +0 -210
- wiliot_certificate-4.4.3.dist-info/entry_points.txt +0 -3
- wiliot_certificate-4.4.3.dist-info/top_level.txt +0 -3
- {brg_certificate → certificate}/__init__.py +0 -0
- {gw_certificate → common}/api_if/202/data.json +0 -0
- {gw_certificate/api_if/200 → common/api_if/202}/logs.json +0 -0
- {gw_certificate → common}/api_if/203/data.json +0 -0
- {gw_certificate/api_if/201 → common/api_if/203}/logs.json +0 -0
- {gw_certificate → common}/api_if/204/data.json +0 -0
- {gw_certificate/api_if/202 → common/api_if/204}/logs.json +0 -0
- {gw_certificate → common}/api_if/205/data.json +0 -0
- {gw_certificate/api_if/203 → common/api_if/205}/logs.json +0 -0
- {gw_certificate → common}/api_if/205/status.json +0 -0
- {gw_certificate/api_if/204 → common/api_if/206}/logs.json +0 -0
- {gw_certificate → common/api_if}/__init__.py +0 -0
- {gw_certificate/api_if → gui_certificate}/__init__.py +0 -0
- {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
import subprocess
|
|
3
|
-
import serial
|
|
4
|
-
import serial.tools.list_ports
|
|
5
|
-
import time
|
|
6
|
-
import os
|
|
7
|
-
import stat
|
|
8
|
-
import platform
|
|
9
|
-
from packaging import version
|
|
10
|
-
import pkg_resources
|
|
11
|
-
|
|
12
|
-
from gw_certificate.common.debug import debug_print
|
|
13
|
-
from gw_certificate.interface.if_defines import *
|
|
14
|
-
|
|
15
|
-
LATEST_VERSION = '4.4.93'
|
|
16
|
-
LATEST_VERSION_FILE = f'{LATEST_VERSION}_sd_bl_app.zip'
|
|
17
|
-
LATEST_VERSION_PATH = pkg_resources.resource_filename(__name__, LATEST_VERSION_FILE)
|
|
18
|
-
LATEST_VERSION_FILE_APP = f'{LATEST_VERSION}_app.zip'
|
|
19
|
-
LATEST_VERSION_PATH_APP = pkg_resources.resource_filename(__name__, LATEST_VERSION_FILE_APP)
|
|
20
|
-
|
|
21
|
-
FIRST_UNIFIED_BL_VERSION = version.parse('4.4.44')
|
|
22
|
-
|
|
23
|
-
NRFUTIL_FW_TOO_LOW_ERROR = 'Error 0x05: The firmware version is too low'
|
|
24
|
-
|
|
25
|
-
class UARTError(Exception):
|
|
26
|
-
pass
|
|
27
|
-
|
|
28
|
-
class UARTInterface:
|
|
29
|
-
def __init__(self, comport, update_fw=True):
|
|
30
|
-
self.comport = comport
|
|
31
|
-
self.serial = serial.Serial(port=comport, baudrate=921600, timeout=SERIAL_TIMEOUT)
|
|
32
|
-
self.serial.flushInput()
|
|
33
|
-
self.gw_app_rx = None
|
|
34
|
-
self.fw_version, self.mac = self.get_version_mac()
|
|
35
|
-
|
|
36
|
-
if self.fw_version is None:
|
|
37
|
-
raise UARTError("Cannot initialize board! Please try disconnecting and connecting USB cable")
|
|
38
|
-
self.fw_version = version.parse(self.fw_version)
|
|
39
|
-
|
|
40
|
-
version_supported = self.check_fw_supported()
|
|
41
|
-
if not version_supported and update_fw:
|
|
42
|
-
update_status = self.update_firmware()
|
|
43
|
-
if not update_status:
|
|
44
|
-
raise UARTError('Update Failed! Update FW manually using NRF Tools')
|
|
45
|
-
if self.fw_version >= version.Version('3.17.0'):
|
|
46
|
-
if self.fw_version < version.Version('4.4.0'):
|
|
47
|
-
self.write_ble_command(GATEWAY_APP)
|
|
48
|
-
self.flush()
|
|
49
|
-
debug_print(f'Serial Connection {comport} Initialized')
|
|
50
|
-
|
|
51
|
-
@staticmethod
|
|
52
|
-
def get_comports():
|
|
53
|
-
ports = serial.tools.list_ports.comports()
|
|
54
|
-
debug_print(SEP + "\nAvailable ports:")
|
|
55
|
-
for port, desc, hwid in sorted(ports):
|
|
56
|
-
debug_print("{}: {} [{}]".format(port, desc, hwid))
|
|
57
|
-
debug_print(SEP + "\n")
|
|
58
|
-
return ports
|
|
59
|
-
|
|
60
|
-
def read_line(self):
|
|
61
|
-
# This reads a line from the ble device (from the serial connection using ble_ser),
|
|
62
|
-
# strips it from white spaces and then decodes to string from bytes using the "utf-8" protocol.
|
|
63
|
-
answer = self.serial.readline().strip().decode("utf-8", "ignore")
|
|
64
|
-
if len(answer) == 0:
|
|
65
|
-
return None
|
|
66
|
-
return answer
|
|
67
|
-
|
|
68
|
-
def write_ble_command(self, cmd, read=False, print_for_debug=True):
|
|
69
|
-
# This function writes a command (cmd) to the ble using a serial connection (ble_ser) that are provided to it beforehand.. and returns the answer from the device as string
|
|
70
|
-
if print_for_debug:
|
|
71
|
-
debug_print("Write to BLE: {}".format(cmd))
|
|
72
|
-
# Shows on terminal what command is about to be printed to the BLE device
|
|
73
|
-
bytes_to_write = bytes(cmd.encode("utf-8")) + b'\r\n'
|
|
74
|
-
self.serial.write(bytes_to_write)
|
|
75
|
-
answer = None
|
|
76
|
-
if read:
|
|
77
|
-
# The "bytes" function converts the command from string to bytes by the specified "utf-8" protocol then we use .write to send the byte sequence to the ble device using the serial connection that we have for this port (ble_ser)
|
|
78
|
-
# Pauses the program for execution for 0.01sec. This is done to allow the device to process the command and provide a response before reading the response.
|
|
79
|
-
time.sleep(1)
|
|
80
|
-
answer = self.read_line()
|
|
81
|
-
if print_for_debug:
|
|
82
|
-
debug_print(answer)
|
|
83
|
-
return answer
|
|
84
|
-
|
|
85
|
-
def flush(self, request_power_cycle=False):
|
|
86
|
-
self.serial.close()
|
|
87
|
-
if request_power_cycle:
|
|
88
|
-
input('Please power cycle (unplug and replug from your pc) the certificate kit. Press enter when plugged')
|
|
89
|
-
time.sleep(2)
|
|
90
|
-
self.serial.open()
|
|
91
|
-
self.serial.flushInput()
|
|
92
|
-
self.serial.flush()
|
|
93
|
-
self.serial.reset_output_buffer()
|
|
94
|
-
|
|
95
|
-
def reset_gw(self, stop_advertising=True):
|
|
96
|
-
self.flush()
|
|
97
|
-
self.write_ble_command(RESET_GW)
|
|
98
|
-
self.gw_app_rx = None
|
|
99
|
-
time.sleep(3)
|
|
100
|
-
if stop_advertising:
|
|
101
|
-
self.write_ble_command(STOP_ADVERTISING)
|
|
102
|
-
time.sleep(3)
|
|
103
|
-
|
|
104
|
-
def cancel(self):
|
|
105
|
-
self.write_ble_command(CANCEL)
|
|
106
|
-
|
|
107
|
-
def set_rx(self, rx_channel):
|
|
108
|
-
assert rx_channel in RX_CHANNELS
|
|
109
|
-
if self.gw_app_rx is None:
|
|
110
|
-
self.reset_gw()
|
|
111
|
-
|
|
112
|
-
if self.fw_version >= version.Version('4.4.0'):
|
|
113
|
-
# full_cfg isn't supported anymore. RX channels are configured by set_sniffer.
|
|
114
|
-
pass
|
|
115
|
-
elif self.fw_version >= version.Version('3.17.0'):
|
|
116
|
-
# from 3.17.0, only full_cfg can be used to configure channels. sending it with:
|
|
117
|
-
# Data coupling(DC) off, wifi(NW) and mqtt(MQ) on.
|
|
118
|
-
rx_ch_to_fw_enums = {37: 2, 38: 3, 39: 4}
|
|
119
|
-
cmd = f'!full_cfg DM {rx_ch_to_fw_enums[rx_channel]} DC 0 NW 1 MQ 1 CH {rx_channel}'
|
|
120
|
-
# cmd = '!gateway_app'
|
|
121
|
-
self.write_ble_command(cmd)
|
|
122
|
-
else:
|
|
123
|
-
cmd = f'!gateway_app {rx_channel} 30 0 17'
|
|
124
|
-
self.write_ble_command(cmd)
|
|
125
|
-
|
|
126
|
-
self.gw_app_rx = rx_channel
|
|
127
|
-
|
|
128
|
-
def set_sniffer(self, rx_channel):
|
|
129
|
-
self.set_rx(rx_channel)
|
|
130
|
-
self.flush()
|
|
131
|
-
time.sleep(1)
|
|
132
|
-
if self.fw_version >= version.Version('4.1.0'):
|
|
133
|
-
self.write_ble_command(f'{SET_SNIFFER} {rx_channel}')
|
|
134
|
-
else:
|
|
135
|
-
self.write_ble_command(SET_SNIFFER)
|
|
136
|
-
self.flush()
|
|
137
|
-
time.sleep(1)
|
|
138
|
-
|
|
139
|
-
def cancel_sniffer(self):
|
|
140
|
-
if self.fw_version >= version.Version('4.4.0'):
|
|
141
|
-
# Set_logger_mode must have 2 args, even when disabled.
|
|
142
|
-
self.write_ble_command(f'{CANCEL_SNIFFER} 37')
|
|
143
|
-
else:
|
|
144
|
-
self.write_ble_command(CANCEL_SNIFFER)
|
|
145
|
-
self.flush()
|
|
146
|
-
|
|
147
|
-
def get_version_mac(self):
|
|
148
|
-
self.reset_gw()
|
|
149
|
-
self.flush()
|
|
150
|
-
timeout = datetime.datetime.now() + datetime.timedelta(seconds=15)
|
|
151
|
-
while datetime.datetime.now() < timeout:
|
|
152
|
-
raw_version = self.write_ble_command(VERSION, read=True)
|
|
153
|
-
if raw_version is not None:
|
|
154
|
-
if GW_APP_VERSION_HEADER in raw_version:
|
|
155
|
-
return (raw_version.split(' ')[0].split('=')[1], raw_version.split(' ')[1].split('=')[1])
|
|
156
|
-
return None, None
|
|
157
|
-
|
|
158
|
-
def get_version(self):
|
|
159
|
-
self.reset_gw()
|
|
160
|
-
self.flush()
|
|
161
|
-
timeout = datetime.datetime.now() + datetime.timedelta(seconds=15)
|
|
162
|
-
while datetime.datetime.now() < timeout:
|
|
163
|
-
raw_version = self.write_ble_command(VERSION, read=True)
|
|
164
|
-
if raw_version is not None:
|
|
165
|
-
if GW_APP_VERSION_HEADER in raw_version:
|
|
166
|
-
return raw_version.split(' ')[0].split('=')[1]
|
|
167
|
-
return None
|
|
168
|
-
|
|
169
|
-
def get_mac(self):
|
|
170
|
-
self.reset_gw()
|
|
171
|
-
self.flush()
|
|
172
|
-
timeout = datetime.datetime.now() + datetime.timedelta(seconds=15)
|
|
173
|
-
while datetime.datetime.now() < timeout:
|
|
174
|
-
reply = self.write_ble_command(VERSION, read=True)
|
|
175
|
-
if reply is not None:
|
|
176
|
-
if GW_MAC_ADDRESS_HEADER in reply:
|
|
177
|
-
return reply.split(' ')[1].split('=')[1]
|
|
178
|
-
return None
|
|
179
|
-
|
|
180
|
-
def check_fw_supported(self):
|
|
181
|
-
hex_version = version.parse(os.path.splitext(os.path.basename(LATEST_VERSION_PATH))[0].split('_')[0])
|
|
182
|
-
if self.fw_version >= hex_version:
|
|
183
|
-
debug_print(f'Certification kit version {self.fw_version}')
|
|
184
|
-
return True
|
|
185
|
-
return False
|
|
186
|
-
|
|
187
|
-
def make_executable(self, file_path):
|
|
188
|
-
"""Set execute permissions for a file (chmod +x).
|
|
189
|
-
For windows, having the file suffix as .exe is enough. """
|
|
190
|
-
# Get current file permissions
|
|
191
|
-
current_permissions = os.stat(file_path).st_mode
|
|
192
|
-
# Add execute permissions for the user, group, and others
|
|
193
|
-
os.chmod(file_path, current_permissions | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
|
|
194
|
-
|
|
195
|
-
def update_firmware(self):
|
|
196
|
-
NRFUTIL_MAP = {"Linux": "nrfutil-linux", "Darwin": "nrfutil-mac", "Windows": "nrfutil.exe"}
|
|
197
|
-
nrfutil_file = pkg_resources.resource_filename(__name__, NRFUTIL_MAP[platform.system()])
|
|
198
|
-
if platform.system() != "Windows":
|
|
199
|
-
self.make_executable(nrfutil_file)
|
|
200
|
-
# In order to support NRF UART FW update with protobuf > 3.20.0
|
|
201
|
-
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'
|
|
202
|
-
|
|
203
|
-
self.reset_gw()
|
|
204
|
-
self.write_ble_command('!move_to_bootloader', read=True)
|
|
205
|
-
self.serial.close()
|
|
206
|
-
p = None
|
|
207
|
-
dfu_full_process = subprocess.Popen(f'{nrfutil_file} dfu serial --package "{LATEST_VERSION_PATH}" -p {self.comport} -fc 0 -b 115200 -t 10',
|
|
208
|
-
stderr=subprocess.PIPE, shell=True, text=True)
|
|
209
|
-
dfu_full_process.wait()
|
|
210
|
-
return_code = dfu_full_process.returncode
|
|
211
|
-
for line in dfu_full_process.stderr:
|
|
212
|
-
if NRFUTIL_FW_TOO_LOW_ERROR in line:
|
|
213
|
-
debug_print(f"DFU failed because the current bootloader version is too high.")
|
|
214
|
-
debug_print(f"Attempting to upgrade application only..")
|
|
215
|
-
dfu_app_process = subprocess.Popen(f'{nrfutil_file} dfu serial --package "{LATEST_VERSION_PATH_APP}" -p {self.comport} -fc 0 -b 115200 -t 10',
|
|
216
|
-
stderr=subprocess.PIPE, shell=True, text=True)
|
|
217
|
-
dfu_app_process.wait()
|
|
218
|
-
return_code = dfu_app_process.returncode
|
|
219
|
-
debug_print('Waiting for the certificate kit to apply the update and boot...')
|
|
220
|
-
timeout = datetime.datetime.now() + datetime.timedelta(minutes=2)
|
|
221
|
-
current_ver = ''
|
|
222
|
-
time.sleep(15)
|
|
223
|
-
self.serial.open()
|
|
224
|
-
self.flush()
|
|
225
|
-
while GW_APP_VERSION_HEADER not in current_ver and datetime.datetime.now() < timeout:
|
|
226
|
-
current_ver = self.write_ble_command(VERSION, read=True)
|
|
227
|
-
if current_ver is None:
|
|
228
|
-
current_ver = ''
|
|
229
|
-
time.sleep(1)
|
|
230
|
-
if current_ver.split(' ')[0].split('=')[1] != LATEST_VERSION:
|
|
231
|
-
return False
|
|
232
|
-
if return_code == 0:
|
|
233
|
-
self.fw_version = version.parse(current_ver.split(' ')[0].split('=')[1])
|
|
234
|
-
debug_print(f"Certification kit upgraded to {LATEST_VERSION} successfully")
|
|
235
|
-
return True
|
|
236
|
-
return False
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import serial.tools.list_ports
|
|
3
|
-
|
|
4
|
-
def get_uart_ports(silent=True):
|
|
5
|
-
ports = serial.tools.list_ports.comports()
|
|
6
|
-
uart_ports = []
|
|
7
|
-
if not silent:
|
|
8
|
-
sys.stdout.write('[')
|
|
9
|
-
for port, desc, hwid in sorted(ports):
|
|
10
|
-
if 'USB to UART' not in desc:
|
|
11
|
-
continue
|
|
12
|
-
if not silent:
|
|
13
|
-
sys.stdout.write(f'("{port}", "{desc}", "{hwid}"),')
|
|
14
|
-
uart_ports.append(port)
|
|
15
|
-
if not silent:
|
|
16
|
-
sys.stdout.write(']')
|
|
17
|
-
return uart_ports
|
|
18
|
-
|
|
19
|
-
if __name__ == '__main__':
|
|
20
|
-
get_uart_ports(silent=False)
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<!-- Required meta tags -->
|
|
5
|
-
<meta charset="utf-8">
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
|
-
<title>{{ page_title }}</title>
|
|
8
|
-
<link rel="icon" href="https://www.wiliot.com/favicon.ico" type="image/x-icon" />
|
|
9
|
-
<!-- JQuery -->
|
|
10
|
-
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
|
11
|
-
<!-- Bootstrap CSS -->
|
|
12
|
-
<link href="https://cdn.jsdelivr.net/npm/bootstrap@latest/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
13
|
-
<!-- DataTables -->
|
|
14
|
-
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.7/css/jquery.dataTables.css" />
|
|
15
|
-
<script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.js"></script>
|
|
16
|
-
|
|
17
|
-
<style>
|
|
18
|
-
#card-body {
|
|
19
|
-
height: auto;
|
|
20
|
-
overflow:auto;
|
|
21
|
-
}
|
|
22
|
-
.pass {
|
|
23
|
-
color: green;
|
|
24
|
-
}
|
|
25
|
-
.inconclusive {
|
|
26
|
-
color: rgb(160, 160, 2);
|
|
27
|
-
}
|
|
28
|
-
.fail {
|
|
29
|
-
color: red;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
</style>
|
|
33
|
-
<title>{{ title }}</title>
|
|
34
|
-
</head>
|
|
35
|
-
<body>
|
|
36
|
-
<br>
|
|
37
|
-
<div class="text-center">
|
|
38
|
-
<img src="https://www.wiliot.com/src/img/svg/logo.svg" class="img-fluid" alt="">
|
|
39
|
-
</div>
|
|
40
|
-
<br>
|
|
41
|
-
<div class="container">
|
|
42
|
-
<h1> GW Certificate | Version {{version}} | {{ gw_id }} | {{ datetime }}</h1>
|
|
43
|
-
<div class="card">
|
|
44
|
-
<div class="card-header">
|
|
45
|
-
Tests Summary
|
|
46
|
-
</div>
|
|
47
|
-
<div class="card-body" id="card-body">
|
|
48
|
-
<div class="test-list">
|
|
49
|
-
{% for test in tests %}
|
|
50
|
-
<div class="test">
|
|
51
|
-
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-placement="right" title="{{ test.test_tooltip }}">
|
|
52
|
-
{% if test.result_indication == 'info' %}
|
|
53
|
-
<h5>{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-info text-dark">Info</span>{% else %}<span class="badge bg-warning text-dark">Warning</span>{% endif %}</h5>
|
|
54
|
-
{% elif test.result_indication == 'optional' %}
|
|
55
|
-
<h5>{{ test.test_name }}: <span class="badge bg-secondary">Optional</span></h5>
|
|
56
|
-
{% else %}
|
|
57
|
-
<h5>{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-success">Pass</span>{% elif test.test_pass >= test.inconclusive_min %}<span class="badge bg-warning text-dark">Inconclusive</span>{% else %}<span class="badge bg-danger">Fail</span>{% endif %}</h5>
|
|
58
|
-
{% endif %}
|
|
59
|
-
</span>
|
|
60
|
-
<br>
|
|
61
|
-
{% for stage in test.stages %}
|
|
62
|
-
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-placement="right" title="{{ stage.stage_tooltip }}" >
|
|
63
|
-
{% if stage.result_indication == 'info' %}
|
|
64
|
-
<h6> - {{ stage.stage_name }}: {% if stage.stage_pass >= stage.pass_min %}<span class="badge bg-info text-dark">Info</span>{% else %}<span class="badge bg-warning text-dark">Warning</span>{% endif %} </h6>
|
|
65
|
-
{% else %}
|
|
66
|
-
<h6> - {{ stage.stage_name }}: {% if stage.stage_pass >= stage.pass_min %}<span class="badge bg-success">Pass</span>{% elif stage.stage_pass >= stage.inconclusive_min %}<span class="badge bg-warning text-dark">Inconclusive</span>{% else %}<span class="badge bg-danger">Fail</span>{% endif %} </h6>
|
|
67
|
-
{% endif %}
|
|
68
|
-
</span>
|
|
69
|
-
<br>
|
|
70
|
-
{% endfor %}
|
|
71
|
-
</div>
|
|
72
|
-
{% endfor %}
|
|
73
|
-
</div>
|
|
74
|
-
<i> <sub>Hover over each line for a brief explainer </sub> </i>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
<br>
|
|
79
|
-
<div class="container">
|
|
80
|
-
{% for test in tests %}
|
|
81
|
-
<div class="accordion" id="accordion{{ loop.index }}">
|
|
82
|
-
<div class="accordion-item">
|
|
83
|
-
<h2 class="accordion-header" id="heading{{ loop.index }}">
|
|
84
|
-
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.index }}" aria-expanded="false" aria-controls="collapse{{ loop.index }}">
|
|
85
|
-
{% if test.result_indication == 'info' %}
|
|
86
|
-
{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-info text-dark">Info</span>{% else %}<span class="badge bg-warning text-dark">Warning</span>{% endif %}
|
|
87
|
-
{% elif test.result_indication == 'optional' %}
|
|
88
|
-
{{ test.test_name }}: <span class="badge bg-secondary">Optional</span>
|
|
89
|
-
{% else %}
|
|
90
|
-
{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-success">Pass</span>{% elif test.test_pass >= test.inconclusive_min %}<span class="badge bg-warning text-dark">Inconclusive</span>{% else %}<span class="badge bg-danger">Fail</span>{% endif %}
|
|
91
|
-
{% endif %}
|
|
92
|
-
</button>
|
|
93
|
-
</h2>
|
|
94
|
-
<div id="collapse{{ loop.index }}" class="accordion-collapse collapse" aria-labelledby="heading{{ loop.index }}" data-bs-parent="#accordion{{ loop.index }}">
|
|
95
|
-
<div class="accordion-body">
|
|
96
|
-
{{ test.report_html }}
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
{% endfor %}
|
|
102
|
-
<div class="accordion" id="accordion_log">
|
|
103
|
-
<div class="accordion-item">
|
|
104
|
-
<h2 class="accordion-header" id="heading_log">
|
|
105
|
-
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_log" aria-expanded="false" aria-controls="collapse_log">
|
|
106
|
-
GW Certificate Log
|
|
107
|
-
</button>
|
|
108
|
-
</h2>
|
|
109
|
-
<div id="collapse_log" class="accordion-collapse collapse" aria-labelledby="heading_log" data-bs-parent="#accordion_log">
|
|
110
|
-
<div class="accordion-body">
|
|
111
|
-
<div class="container">
|
|
112
|
-
<div class="card">
|
|
113
|
-
<div class="card-header">
|
|
114
|
-
GW Certificate Log
|
|
115
|
-
</div>
|
|
116
|
-
<div class="card-body" id="card-body" style="height: 500px; overflow: auto">
|
|
117
|
-
<samp>
|
|
118
|
-
{% for line in log %}
|
|
119
|
-
{{ line | safe}}<br />
|
|
120
|
-
{% endfor %}
|
|
121
|
-
</samp>
|
|
122
|
-
</div>
|
|
123
|
-
</div>
|
|
124
|
-
</div>
|
|
125
|
-
<br>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
<div class="accordion" id="accordion_mqtt_log">
|
|
131
|
-
<div class="accordion-item">
|
|
132
|
-
<h2 class="accordion-header" id="heading_mqtt_log">
|
|
133
|
-
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_mqtt_log" aria-expanded="false" aria-controls="collapse_mqtt_log">
|
|
134
|
-
MQTT Log
|
|
135
|
-
</button>
|
|
136
|
-
</h2>
|
|
137
|
-
<div id="collapse_mqtt_log" class="accordion-collapse collapse" aria-labelledby="heading_mqtt_log" data-bs-parent="#accordion_log">
|
|
138
|
-
<div class="accordion-body">
|
|
139
|
-
<div class="container">
|
|
140
|
-
<div class="card">
|
|
141
|
-
<div class="card-header">
|
|
142
|
-
MQTT Log
|
|
143
|
-
</div>
|
|
144
|
-
<div class="card-body" id="card-body" style="height: 500px; overflow: auto">
|
|
145
|
-
<samp>
|
|
146
|
-
{% for line in mqtt_log %}
|
|
147
|
-
{{ line | safe}}<br />
|
|
148
|
-
{% endfor %}
|
|
149
|
-
</samp>
|
|
150
|
-
</div>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
<br>
|
|
154
|
-
</div>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
<div class="accordion" id="accordion_sniffer_log">
|
|
159
|
-
<div class="accordion-item">
|
|
160
|
-
<h2 class="accordion-header" id="heading_sniffer_log">
|
|
161
|
-
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_sniffer_log" aria-expanded="false" aria-controls="collapse_sniffer_log">
|
|
162
|
-
Sniffer Log
|
|
163
|
-
</button>
|
|
164
|
-
</h2>
|
|
165
|
-
<div id="collapse_sniffer_log" class="accordion-collapse collapse" aria-labelledby="heading_sniffer_log" data-bs-parent="#accordion_log">
|
|
166
|
-
<div class="accordion-body">
|
|
167
|
-
<div class="container">
|
|
168
|
-
<div class="card">
|
|
169
|
-
<div class="card-header">
|
|
170
|
-
Sniffer Log
|
|
171
|
-
</div>
|
|
172
|
-
<div class="card-body" id="card-body" style="height: 500px; overflow: auto">
|
|
173
|
-
<samp>
|
|
174
|
-
{% for line in sniffer_log %}
|
|
175
|
-
{{ line | safe}}<br />
|
|
176
|
-
{% endfor %}
|
|
177
|
-
</samp>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
</div>
|
|
181
|
-
<br>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
|
|
187
|
-
<!-- <br>
|
|
188
|
-
<div class="text-center">
|
|
189
|
-
<br>
|
|
190
|
-
<h6>Certified Partners</h6>
|
|
191
|
-
</div>
|
|
192
|
-
<div id="certifiedPartnersCarousel" class="carousel slide" data-bs-ride="carousel" data-bs-pause="false" data-bs-interval="10000">
|
|
193
|
-
<div class="carousel-inner">
|
|
194
|
-
<div class="carousel-item active">
|
|
195
|
-
<div class="row d-flex flex-wrap align-items-center" style="height: 50px;">
|
|
196
|
-
<img src="https://www.wiliot.com/src/uploads/_partnersListingLogo/Screenshot-2024-07-08-at-9.36.37-AM.png" class="d-block mx-auto" style="width: 120px;" alt="Image missing">
|
|
197
|
-
</div>
|
|
198
|
-
</div>
|
|
199
|
-
<div class="carousel-item">
|
|
200
|
-
<div class="row d-flex flex-wrap align-items-center" style="height: 50px;">
|
|
201
|
-
<img src="https://www.wiliot.com/src/uploads/_partnersListingLogo/rigado.png" class="d-block mx-auto" style="width: 120px;" alt="Image missing">
|
|
202
|
-
</div>
|
|
203
|
-
</div>
|
|
204
|
-
<div class="carousel-item">
|
|
205
|
-
<div class="row d-flex flex-wrap align-items-center" style="height: 50px;">
|
|
206
|
-
<img src="https://www.minew.com/wp-content/uploads/2024/06/mine-logo-black.png" class="d-block mx-auto" style="width: 120px;" alt="Image missing">
|
|
207
|
-
</div>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
</div>
|
|
211
|
-
<br> -->
|
|
212
|
-
|
|
213
|
-
<!-- Accordion listener to adjust table -->
|
|
214
|
-
<script defer type="text/javascript">
|
|
215
|
-
var accordions = document.getElementsByClassName('accordion')
|
|
216
|
-
Array.prototype.forEach.call(accordions, (el) => {
|
|
217
|
-
el.addEventListener('shown.bs.collapse', function () {
|
|
218
|
-
DataTable.tables({ visible: true, api: true }).columns.adjust();
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
</script>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
|
|
225
|
-
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
|
|
226
|
-
crossorigin="anonymous"></script>
|
|
227
|
-
<script>
|
|
228
|
-
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
|
229
|
-
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
230
|
-
return new bootstrap.Tooltip(tooltipTriggerEl)
|
|
231
|
-
})
|
|
232
|
-
</script>
|
|
233
|
-
<style>
|
|
234
|
-
.tooltip-inner {
|
|
235
|
-
max-width: 1000px;
|
|
236
|
-
/* width: 570px; */
|
|
237
|
-
font-size:larger;
|
|
238
|
-
}
|
|
239
|
-
</style>
|
|
240
|
-
</body>
|
|
241
|
-
</html>
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<div class="card">
|
|
2
|
-
<div class="card-header" id="{{ stage.stage_name }}">
|
|
3
|
-
{% if stage.result_indication == 'info' %}
|
|
4
|
-
{{ stage.stage_name }}: {% if stage.stage_pass >= stage.pass_min %}<span class="badge bg-info text-dark">Info</span>{% else %}<span class="badge bg-warning text-dark">Warning</span>{% endif %}
|
|
5
|
-
{% else %}
|
|
6
|
-
{{ stage.stage_name }}: {% if stage.stage_pass >= stage.pass_min %}<span class="badge bg-success">Pass</span>{% elif stage.stage_pass >= stage.inconclusive_min %}<span class="badge bg-warning text-dark">Inconclusive</span>{% else %}<span class="badge bg-danger">Fail</span>{% endif %}
|
|
7
|
-
{% endif %}
|
|
8
|
-
|
|
9
|
-
</div>
|
|
10
|
-
<div class="card-body" id="card-body">
|
|
11
|
-
<samp>
|
|
12
|
-
{% for line in stage_report %}
|
|
13
|
-
{{ line | safe}}<br />
|
|
14
|
-
{% endfor %}
|
|
15
|
-
</samp>
|
|
16
|
-
</div>
|
|
17
|
-
<!-- Insert table here if available-->
|
|
18
|
-
{{ table|safe }}
|
|
19
|
-
<!-- Insert graph here if available-->
|
|
20
|
-
{{ graph|safe }}
|
|
21
|
-
</div>
|
|
22
|
-
<br>
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<div class="container">
|
|
2
|
-
{% if test.result_indication == 'info' %}
|
|
3
|
-
<h3>{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-info text-dark">Info</span>{% else %}<span class="badge bg-warning text-dark">Warning</span>{% endif %}</h3>
|
|
4
|
-
{% elif test.result_indication == 'optional' %}
|
|
5
|
-
<h3>{{ test.test_name }}: <span class="badge bg-secondary">Optional</span></h3>
|
|
6
|
-
{% else %}
|
|
7
|
-
<h3>{{ test.test_name }}: {% if test.test_pass >= test.pass_min %}<span class="badge bg-success">Pass</span>{% elif test.test_pass >= test.inconclusive_min %}<span class="badge bg-warning text-dark">Inconclusive</span>{% else %}<span class="badge bg-danger">Fail</span>{% endif %}</h3>
|
|
8
|
-
{% endif %}
|
|
9
|
-
<h4>Running Time: {{ running_time }}</h4>
|
|
10
|
-
|
|
11
|
-
{% if test.test_pass < test.pass_min %}
|
|
12
|
-
<h5>Error summary:</h5>
|
|
13
|
-
{% for stage in test.stages %}
|
|
14
|
-
{% if stage.result_indication == 'info' %}
|
|
15
|
-
{% if stage.stage_pass < stage.pass_min %}
|
|
16
|
-
<div class="alert alert-warning" role="alert">
|
|
17
|
-
<a href="#{{ stage.stage_name }}" class="alert-link">{{ stage.stage_name }}</a>: {{ stage.error_summary }}
|
|
18
|
-
</div>
|
|
19
|
-
{% endif %}
|
|
20
|
-
{% else %}
|
|
21
|
-
{% if stage.stage_pass < stage.inconclusive_min %}
|
|
22
|
-
<div class="alert alert-danger" role="alert">
|
|
23
|
-
<a href="#{{ stage.stage_name }}" class="alert-link">{{ stage.stage_name }}</a>: {{ stage.error_summary }}
|
|
24
|
-
</div>
|
|
25
|
-
{% elif stage.stage_pass < stage.pass_min %}
|
|
26
|
-
<div class="alert alert-warning" role="alert">
|
|
27
|
-
<a href="#{{ stage.stage_name }}" class="alert-link">{{ stage.stage_name }}</a>: {{ stage.error_summary }}
|
|
28
|
-
</div>
|
|
29
|
-
{% endif %}
|
|
30
|
-
{% endif %}
|
|
31
|
-
{% endfor %}
|
|
32
|
-
{% endif %}
|
|
33
|
-
<hr>
|
|
34
|
-
{% for stage in test.stages %}
|
|
35
|
-
{{ stage.report_html }}
|
|
36
|
-
{% endfor %}
|
|
37
|
-
</div>
|
|
38
|
-
<br>
|
gw_certificate/tests/__init__.py
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from gw_certificate.tests.registration import RegistrationTest
|
|
2
|
-
from gw_certificate.tests.connection import ConnectionTest
|
|
3
|
-
from gw_certificate.tests.uplink import UplinkTest
|
|
4
|
-
from gw_certificate.tests.downlink import DownlinkTest
|
|
5
|
-
from gw_certificate.tests.actions import ActionsTest
|
|
6
|
-
from gw_certificate.tests.throughput import StressTest
|
|
7
|
-
|
|
8
|
-
TESTS = [RegistrationTest, ConnectionTest, UplinkTest, DownlinkTest, ActionsTest, StressTest]
|
|
9
|
-
|
|
10
|
-
TESTS_NO_UART = [RegistrationTest]
|