pytest_ulp_fsm.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. @pytest.mark.esp32
  8. @pytest.mark.esp32s2
  9. @pytest.mark.esp32s3
  10. @pytest.mark.generic
  11. def test_ulp_fsm(dut: Dut) -> None:
  12. dut.expect_exact('Not ULP wakeup')
  13. dut.expect_exact('Entering deep sleep')
  14. def generate_gpio0_events() -> None:
  15. for _ in range(5):
  16. dut.serial.proc.setDTR(True) # Pulling GPIO0 low using DTR
  17. time.sleep(0.25)
  18. dut.serial.proc.setDTR(False)
  19. time.sleep(0.25)
  20. nvs_value = None
  21. for _ in range(5):
  22. generate_gpio0_events()
  23. dut.expect_exact('ULP wakeup, saving pulse count', timeout=5)
  24. logging.info('Woke up...')
  25. init_count = int(dut.expect(r'Read pulse count from NVS:\s+(\d+)', timeout=5).group(1), 10)
  26. assert nvs_value in (init_count, None), ('Read count is {} and previously written value is {}'
  27. ''.format(init_count, nvs_value))
  28. inc = int(dut.expect(r'Pulse count from ULP:\s+(\d+)', timeout=5).group(1), 10)
  29. assert inc in (5, 6), 'pulse count is {}'.format(inc)
  30. new_count = int(dut.expect(r'Wrote updated pulse count to NVS:\s+(\d+)', timeout=5).group(1), 10)
  31. assert init_count + inc == new_count, '{} + {} != {}'.format(init_count, inc, new_count)
  32. nvs_value = new_count
  33. logging.info('Pulse count written to NVS: {}. Entering deep sleep...'.format(nvs_value))
  34. dut.expect_exact('Entering deep sleep', timeout=5)