pytest_ulp_fsm.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: CC0-1.0
  3. import logging
  4. import time
  5. import pytest
  6. from pytest_embedded import Dut
  7. def ulp_fsm_test_function(dut: Dut) -> None:
  8. dut.expect_exact('Not ULP wakeup')
  9. dut.expect_exact('Entering deep sleep')
  10. def generate_gpio0_events() -> None:
  11. for _ in range(5):
  12. dut.serial.proc.setDTR(True) # Pulling GPIO0 low using DTR
  13. time.sleep(0.25)
  14. dut.serial.proc.setDTR(False)
  15. time.sleep(0.25)
  16. nvs_value = None
  17. for _ in range(5):
  18. generate_gpio0_events()
  19. dut.expect_exact('ULP wakeup, saving pulse count', timeout=5)
  20. logging.info('Woke up...')
  21. init_count = int(dut.expect(r'Read pulse count from NVS:\s+(\d+)', timeout=5).group(1), 10)
  22. assert nvs_value in (init_count, None), ('Read count is {} and previously written value is {}'
  23. ''.format(init_count, nvs_value))
  24. inc = int(dut.expect(r'Pulse count from ULP:\s+(\d+)', timeout=5).group(1), 10)
  25. assert inc in (5, 6), 'pulse count is {}'.format(inc)
  26. new_count = int(dut.expect(r'Wrote updated pulse count to NVS:\s+(\d+)', timeout=5).group(1), 10)
  27. assert init_count + inc == new_count, '{} + {} != {}'.format(init_count, inc, new_count)
  28. nvs_value = new_count
  29. logging.info('Pulse count written to NVS: {}. Entering deep sleep...'.format(nvs_value))
  30. dut.expect_exact('Entering deep sleep', timeout=5)
  31. @pytest.mark.esp32
  32. @pytest.mark.generic
  33. def test_ulp_fsm(dut: Dut) -> None:
  34. ulp_fsm_test_function(dut)
  35. @pytest.mark.esp32s2
  36. @pytest.mark.esp32s3
  37. @pytest.mark.deepsleep_temp_tag # S2/S3 runner on isolated runners for now, IDF-5213
  38. def test_ulp_fsm_s2_s3(dut: Dut) -> None:
  39. ulp_fsm_test_function(dut)