pytest_phy_tsens.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. # SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Apache-2.0
  3. import random
  4. import string
  5. from typing import Tuple
  6. import pexpect
  7. import pytest
  8. from pytest_embedded import Dut
  9. def run_phy_tsens_test(dut: Tuple[Dut, Dut]) -> None:
  10. ap_dut = dut[0]
  11. sta_dut = dut[1]
  12. ap_dut.write('tsens_init')
  13. sta_dut.write('tsens_init')
  14. ap_dut.expect('Enable temperature sensor')
  15. sta_dut.expect('Enable temperature sensor')
  16. ap_dut.write('wifi_init')
  17. sta_dut.write('wifi_init')
  18. ap_dut.expect('initialize_wifi DONE')
  19. sta_dut.expect('initialize_wifi DONE')
  20. # check tsens read after wifi_init
  21. for _dut in [ap_dut, sta_dut]:
  22. _dut.write('tsens_read')
  23. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  24. assert 0 < float(temp_val) < 70
  25. _dut.write('tsens_read')
  26. temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  27. assert -5 < float(temp_val) - float(temp_val2) < 5
  28. # start tsens read background task
  29. for _dut in [ap_dut, sta_dut]:
  30. _dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
  31. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  32. assert 0 < float(temp_val) < 70
  33. # check wifi connect
  34. ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  35. password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  36. ap_dut.write(f'ap_set {ssid} {password}')
  37. ap_dut.expect('set ap config OK')
  38. sta_dut.write(f'sta_connect {ssid} {password}')
  39. sta_dut.expect('STA_GOT_IP')
  40. data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
  41. assert 'DISCONNECT' not in data
  42. ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
  43. # check tsens read again after wifi connected
  44. for _dut in [ap_dut, sta_dut]:
  45. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  46. assert 0 < float(temp_val) < 70
  47. def run_phy_tsens_test_init_wifi_first(dut: Tuple[Dut, Dut]) -> None:
  48. ap_dut = dut[0]
  49. sta_dut = dut[1]
  50. ap_dut.write('tsens_init')
  51. sta_dut.write('tsens_init')
  52. ap_dut.expect('Enable temperature sensor')
  53. sta_dut.expect('Enable temperature sensor')
  54. ap_dut.write('wifi_init')
  55. sta_dut.write('wifi_init')
  56. ap_dut.expect('initialize_wifi DONE')
  57. sta_dut.expect('initialize_wifi DONE')
  58. # check tsens read after wifi_init
  59. for _dut in [ap_dut, sta_dut]:
  60. _dut.write('tsens_read')
  61. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  62. assert 0 < float(temp_val) < 70
  63. _dut.write('tsens_read')
  64. temp_val2 = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  65. assert -5 < float(temp_val) - float(temp_val2) < 5
  66. # start tsens read background task
  67. for _dut in [ap_dut, sta_dut]:
  68. _dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
  69. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  70. assert 0 < float(temp_val) < 70
  71. # check wifi connect
  72. ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  73. password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  74. ap_dut.write(f'ap_set {ssid} {password}')
  75. ap_dut.expect('set ap config OK')
  76. sta_dut.write(f'sta_connect {ssid} {password}')
  77. sta_dut.expect('STA_GOT_IP')
  78. data = sta_dut.expect(pexpect.TIMEOUT, timeout=10).decode()
  79. assert 'DISCONNECT' not in data
  80. ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
  81. # check tsens read again after wifi connected
  82. for _dut in [ap_dut, sta_dut]:
  83. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  84. assert 0 < float(temp_val) < 70
  85. def run_phy_tsens_test_with_light_sleep(dut: Tuple[Dut, Dut]) -> None:
  86. ap_dut = dut[0]
  87. sta_dut = dut[1]
  88. ap_dut.write('wifi_init')
  89. sta_dut.write('wifi_init')
  90. ap_dut.expect('initialize_wifi DONE')
  91. sta_dut.expect('initialize_wifi DONE')
  92. ap_dut.write('tsens_init')
  93. sta_dut.write('tsens_init')
  94. ap_dut.expect('Enable temperature sensor')
  95. sta_dut.expect('Enable temperature sensor')
  96. # start tsens read background task
  97. for _dut in [ap_dut, sta_dut]:
  98. _dut.write('tsens_read -c 100 -i 1000') # 1000ms * 100
  99. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  100. assert 0 < float(temp_val) < 70
  101. # check wifi connect
  102. ssid = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  103. password = ''.join([random.choice(string.ascii_lowercase) for i in range(10)])
  104. ap_dut.write(f'ap_set {ssid} {password}')
  105. ap_dut.expect('set ap config OK')
  106. sta_dut.write(f'sta_connect {ssid} {password}')
  107. sta_dut.expect('STA_GOT_IP')
  108. sta_dut.write('light_sleep enable')
  109. data = sta_dut.expect(pexpect.TIMEOUT, timeout=30).decode(errors='ignore')
  110. assert 'DISCONNECT' not in data
  111. assert 'LIGHT_SLEEP_ENABLED,OK' in data
  112. ap_dut.expect(pexpect.TIMEOUT, timeout=0.1) # clear data
  113. # check tsens read again after wifi connected
  114. for _dut in [ap_dut, sta_dut]:
  115. temp_val = _dut.expect(r'Temperature value ([\d.]+)[^\d.]')[1].decode()
  116. assert 0 < float(temp_val) < 70
  117. @pytest.mark.esp32c3
  118. @pytest.mark.esp32c6
  119. @pytest.mark.esp32s2
  120. @pytest.mark.esp32s3
  121. @pytest.mark.wifi_two_dut
  122. @pytest.mark.parametrize('count', [2], indirect=True)
  123. def test_phy_tsens_coexist(dut: Tuple[Dut, Dut]) -> None:
  124. for _dut in dut:
  125. _dut.expect('esp>')
  126. run_phy_tsens_test(dut)
  127. for _dut in dut:
  128. _dut.write('restart')
  129. _dut.expect('boot:')
  130. _dut.expect('esp>')
  131. run_phy_tsens_test_init_wifi_first(dut)
  132. for _dut in dut:
  133. _dut.write('restart')
  134. _dut.expect('boot:')
  135. _dut.expect('esp>')
  136. run_phy_tsens_test_with_light_sleep(dut)
  137. @pytest.mark.esp32c2
  138. @pytest.mark.wifi_two_dut
  139. @pytest.mark.xtal_26mhz
  140. @pytest.mark.parametrize(
  141. 'count, config, baud',
  142. [
  143. (2, 'c2_xtal26m', '74880'),
  144. ],
  145. indirect=True,
  146. )
  147. def test_phy_tsens_coexist_c2_xtal26m(dut: Tuple[Dut, Dut]) -> None:
  148. for _dut in dut:
  149. _dut.expect('esp>')
  150. run_phy_tsens_test(dut)
  151. for _dut in dut:
  152. _dut.write('restart')
  153. _dut.expect('boot:')
  154. _dut.expect('esp>')
  155. run_phy_tsens_test_init_wifi_first(dut)
  156. for _dut in dut:
  157. _dut.write('restart')
  158. _dut.expect('boot:')
  159. _dut.expect('esp>')
  160. run_phy_tsens_test_with_light_sleep(dut)