example_test.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from __future__ import unicode_literals
  2. import re
  3. import time
  4. import ttfw_idf
  5. touch_wake_up_support = ['esp32', 'esp32s2']
  6. @ttfw_idf.idf_example_test(env_tag='Example_GENERIC', target=['esp32', 'esp32s2', 'esp32c3'])
  7. def test_examples_deep_sleep(env, extra_data):
  8. dut = env.get_dut('deep_sleep', 'examples/system/deep_sleep')
  9. dut.start_app()
  10. def expect_enable_deep_sleep_touch():
  11. # different targets configure different wake pin(s)
  12. wake_pads = {
  13. 'esp32': [8,9],
  14. 'esp32s2': [9],
  15. }[dut.TARGET]
  16. print('Expecting to see wakeup configured on pad(s): {}'.format(wake_pads))
  17. expect_items = ['Enabling timer wakeup, 20s']
  18. for pad in wake_pads:
  19. expect_items += [re.compile(r'Touch pad #{} average: \d+, wakeup threshold set to \d+.'.format(pad))]
  20. expect_items += ['Enabling touch pad wakeup',
  21. 'Entering deep sleep']
  22. dut.expect_all(*expect_items, timeout=10)
  23. def expect_enable_deep_sleep_no_touch():
  24. dut.expect_all('Enabling timer wakeup, 20s',
  25. 'Entering deep sleep',
  26. timeout=10)
  27. if dut.TARGET in touch_wake_up_support:
  28. expect_enable_deep_sleep = expect_enable_deep_sleep_touch
  29. else:
  30. expect_enable_deep_sleep = expect_enable_deep_sleep_no_touch
  31. dut.expect('Not a deep sleep reset', timeout=30)
  32. expect_enable_deep_sleep()
  33. start_sleep = time.time()
  34. print('Waiting for wakeup...')
  35. dut.expect('boot: ESP-IDF', timeout=30) # first output that's the same on all chips
  36. sleep_time = time.time() - start_sleep
  37. print('Host measured sleep time at {:.2f}s'.format(sleep_time))
  38. assert 19 < sleep_time < 22 # note: high tolerance as measuring time on the host may have some timing skew
  39. # This line indicates that the CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP option set in sdkconfig.defaults
  40. # has correctly allowed skipping verification on wakeup
  41. dut.expect('boot: Fast booting app from partition', timeout=2)
  42. # Check that it measured 2xxxxms in deep sleep, i.e at least 20 seconds:
  43. dut.expect(re.compile(r'Wake up from timer. Time spent in deep sleep: 2\d{4}ms'), timeout=2)
  44. expect_enable_deep_sleep()
  45. if __name__ == '__main__':
  46. test_examples_deep_sleep()