kopia lustrzana https://github.com/espressif/esp-idf
193 wiersze
6.4 KiB
Python
193 wiersze
6.4 KiB
Python
# SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
import random
|
|
import string
|
|
from typing import Tuple
|
|
|
|
import pexpect
|
|
import pytest
|
|
from pytest_embedded import Dut
|
|
|
|
|
|
def run_phy_tsens_test(dut: Tuple[Dut, Dut]) -> None:
|
|
ap_dut = dut[0]
|
|
sta_dut = dut[1]
|
|
|
|
ap_dut.write('tsens_init')
|
|
sta_dut.write('tsens_init')
|
|
ap_dut.expect('Enable temperature sensor')
|
|
sta_dut.expect('Enable temperature sensor')
|
|
|
|
ap_dut.write('wifi_init')
|
|
sta_dut.write('wifi_init')
|
|
ap_dut.expect('initialize_wifi DONE')
|
|
sta_dut.expect('initialize_wifi DONE')
|
|
|
|
# check tsens read after wifi_init
|
|
for _dut in [ap_dut, sta_dut]:
|
|
_dut.write('tsens_read')
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
_dut.write('tsens_read')
|
|
temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert -5 < float(temp_val) - float(temp_val2) < 5
|
|
|
|
# start tsens read background task
|
|
for _dut in [ap_dut, sta_dut]:
|
|
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
# check wifi connect
|
|
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
ap_dut.write(f'ap_set {ssid} {password}')
|
|
ap_dut.expect('set ap config OK')
|
|
sta_dut.write(f'sta_connect {ssid} {password}')
|
|
sta_dut.expect('STA_GOT_IP')
|
|
|
|
data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
|
|
assert 'DISCONNECT' not in data
|
|
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
|
|
|
|
# check tsens read again after wifi connected
|
|
for _dut in [ap_dut, sta_dut]:
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
|
|
def run_phy_tsens_test_init_wifi_first(dut: Tuple[Dut, Dut]) -> None:
|
|
ap_dut = dut[0]
|
|
sta_dut = dut[1]
|
|
|
|
ap_dut.write('tsens_init')
|
|
sta_dut.write('tsens_init')
|
|
ap_dut.expect('Enable temperature sensor')
|
|
sta_dut.expect('Enable temperature sensor')
|
|
|
|
ap_dut.write('wifi_init')
|
|
sta_dut.write('wifi_init')
|
|
ap_dut.expect('initialize_wifi DONE')
|
|
sta_dut.expect('initialize_wifi DONE')
|
|
|
|
# check tsens read after wifi_init
|
|
for _dut in [ap_dut, sta_dut]:
|
|
_dut.write('tsens_read')
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
_dut.write('tsens_read')
|
|
temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert -5 < float(temp_val) - float(temp_val2) < 5
|
|
|
|
# start tsens read background task
|
|
for _dut in [ap_dut, sta_dut]:
|
|
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
# check wifi connect
|
|
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
ap_dut.write(f'ap_set {ssid} {password}')
|
|
ap_dut.expect('set ap config OK')
|
|
sta_dut.write(f'sta_connect {ssid} {password}')
|
|
sta_dut.expect('STA_GOT_IP')
|
|
|
|
data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
|
|
assert 'DISCONNECT' not in data
|
|
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
|
|
|
|
# check tsens read again after wifi connected
|
|
for _dut in [ap_dut, sta_dut]:
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
|
|
def run_phy_tsens_test_with_light_sleep(dut: Tuple[Dut, Dut]) -> None:
|
|
ap_dut = dut[0]
|
|
sta_dut = dut[1]
|
|
|
|
ap_dut.write('wifi_init')
|
|
sta_dut.write('wifi_init')
|
|
ap_dut.expect('initialize_wifi DONE')
|
|
sta_dut.expect('initialize_wifi DONE')
|
|
|
|
ap_dut.write('tsens_init')
|
|
sta_dut.write('tsens_init')
|
|
ap_dut.expect('Enable temperature sensor')
|
|
sta_dut.expect('Enable temperature sensor')
|
|
|
|
# start tsens read background task
|
|
for _dut in [ap_dut, sta_dut]:
|
|
_dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
# check wifi connect
|
|
ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
|
|
ap_dut.write(f'ap_set {ssid} {password}')
|
|
ap_dut.expect('set ap config OK')
|
|
sta_dut.write(f'sta_connect {ssid} {password}')
|
|
sta_dut.expect('STA_GOT_IP')
|
|
|
|
sta_dut.write('light_sleep enable')
|
|
data = sta_dut.expect(pexpect.TIMEOUT, timeout=30).decode(errors='ignore')
|
|
assert 'DISCONNECT' not in data
|
|
assert 'LIGHT_SLEEP_ENABLED,OK' in data
|
|
ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
|
|
|
|
# check tsens read again after wifi connected
|
|
for _dut in [ap_dut, sta_dut]:
|
|
temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
|
|
assert 0 < float(temp_val) < 70
|
|
|
|
|
|
@pytest.mark.esp32c3
|
|
@pytest.mark.esp32c6
|
|
@pytest.mark.esp32s2
|
|
@pytest.mark.esp32s3
|
|
@pytest.mark.wifi_two_dut
|
|
@pytest.mark.parametrize('count', [2], indirect=True)
|
|
def test_phy_tsens_coexist(dut: Tuple[Dut, Dut]) -> None:
|
|
for _dut in dut:
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test(dut)
|
|
for _dut in dut:
|
|
_dut.write('restart')
|
|
_dut.expect('boot:')
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test_init_wifi_first(dut)
|
|
for _dut in dut:
|
|
_dut.write('restart')
|
|
_dut.expect('boot:')
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test_with_light_sleep(dut)
|
|
|
|
|
|
@pytest.mark.esp32c2
|
|
@pytest.mark.wifi_two_dut
|
|
@pytest.mark.xtal_26mhz
|
|
@pytest.mark.parametrize(
|
|
'count, config, baud',
|
|
[
|
|
(2, 'c2_xtal26m', '74880'),
|
|
],
|
|
indirect=True,
|
|
)
|
|
def test_phy_tsens_coexist_c2_xtal26m(dut: Tuple[Dut, Dut]) -> None:
|
|
for _dut in dut:
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test(dut)
|
|
for _dut in dut:
|
|
_dut.write('restart')
|
|
_dut.expect('boot:')
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test_init_wifi_first(dut)
|
|
for _dut in dut:
|
|
_dut.write('restart')
|
|
_dut.expect('boot:')
|
|
_dut.expect('esp>')
|
|
run_phy_tsens_test_with_light_sleep(dut)
|