mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-06 07:49:58 +00:00
add auto generated test folder to components:
1. add test cases and related scripts 2. add CI config files read README.md for detail
This commit is contained in:
259
components/test/TestCaseScript/SleepMode/DeepSleep.py
Executable file
259
components/test/TestCaseScript/SleepMode/DeepSleep.py
Executable file
@@ -0,0 +1,259 @@
|
||||
import random
|
||||
import os
|
||||
import time
|
||||
|
||||
from TCAction import TCActionBase, PerformanceTCBase
|
||||
from Utility import MakeFolder
|
||||
from Utility import MultimeterUtil
|
||||
from NativeLog import NativeLog
|
||||
|
||||
LOG_PATH = os.path.join("AT_LOG", "SLEEP")
|
||||
|
||||
DEEP_SLEEP_OPTION_LIST = ["up_to_bin", "normal", "no_rf_calibrate", "rf_off"]
|
||||
DEEP_SLEEP_OPTION = {
|
||||
"up_to_bin": 0,
|
||||
"normal": 1,
|
||||
"no_rf_calibrate": 2,
|
||||
"rf_off": 4,
|
||||
}
|
||||
|
||||
SAMPLE_RATE = 0.001
|
||||
SAMPLE_NUM = 512
|
||||
MAX_VALUE = 0.1
|
||||
Y_AXIS_LABEL = "Current (mA)"
|
||||
|
||||
|
||||
MEASURE_FREQ = 3600
|
||||
|
||||
GPIO_WAKE_UP = 15
|
||||
GPIO_CHIP_RESET = 14
|
||||
GPIO_EDGE_DELAY = 100 # 20 ms
|
||||
|
||||
|
||||
class DeepSleep(PerformanceTCBase.PerformanceTCBase):
|
||||
|
||||
def __init__(self, name, test_env, cmd_set, timeout=30, log_path=TCActionBase.LOG_PATH):
|
||||
PerformanceTCBase.PerformanceTCBase.__init__(self, name, test_env, cmd_set=cmd_set,
|
||||
timeout=timeout, log_path=log_path)
|
||||
self.test_mode = "mode_change"
|
||||
self.test_count = 100
|
||||
# load param from excel
|
||||
for i in range(1, len(cmd_set)):
|
||||
if cmd_set[i][0] != "dummy":
|
||||
cmd_string = "self." + cmd_set[i][0]
|
||||
exec cmd_string
|
||||
self.log_folder = MakeFolder.make_folder(os.path.join(LOG_PATH,
|
||||
"DEEP_SLEEP_%s_%s" % (self.test_mode,
|
||||
time.strftime("%d%H%M%S",
|
||||
time.localtime()))))
|
||||
self.sleep_time_log = os.path.join(self.log_folder, "deep_sleep_wakeup_time.log")
|
||||
self.multimeter = MultimeterUtil.MultimeterUtil(self.log_folder)
|
||||
|
||||
def deep_sleep_stable(self):
|
||||
result = True
|
||||
RandomTime = random.randint(1, 100)
|
||||
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
if self.check_response("SSC1", "ready!!!") is False:
|
||||
result = False
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
||||
else:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
||||
time.sleep(1)
|
||||
|
||||
RandomTime = random.randint(100000, 1000000)
|
||||
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
if self.check_response("SSC1", "ready!!!") is False:
|
||||
result = False
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
||||
else:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
||||
time.sleep(1)
|
||||
return result
|
||||
|
||||
def deep_sleep_current_measure(self):
|
||||
result = True
|
||||
self.serial_write_line("SSC1", "")
|
||||
self.serial_write_line("SSC1", "dsleep -S -t 10000000")
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
time.sleep(3)
|
||||
# measure current
|
||||
current_line = self.multimeter.measure_current(sample_rate=SAMPLE_RATE,
|
||||
sample_num=SAMPLE_NUM,
|
||||
max_value=MAX_VALUE)
|
||||
average_current = float(0)
|
||||
for current in current_line:
|
||||
average_current += current
|
||||
average_current /= SAMPLE_NUM
|
||||
|
||||
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
||||
"deep_sleep_current", Y_AXIS_LABEL)
|
||||
|
||||
if average_current > 1:
|
||||
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] average current %f > 1mA" % average_current)
|
||||
else:
|
||||
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] dsleep current ok, %f" % average_current)
|
||||
|
||||
if self.check_response("SSC1", "ready!!!") is False:
|
||||
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] CurrentMeasure wait ready err %f"
|
||||
% average_current)
|
||||
result = False
|
||||
|
||||
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] wait ready ok")
|
||||
|
||||
return result
|
||||
|
||||
##########################################
|
||||
# gpio wake up
|
||||
##########################################
|
||||
def deep_sleep_wakeup(self):
|
||||
result = True
|
||||
|
||||
self.serial_write_line("SSC1", "dsleep -S -t 0")
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# measure current
|
||||
current_line = self.multimeter.measure_current(sample_rate=SAMPLE_RATE,
|
||||
sample_num=SAMPLE_NUM,
|
||||
max_value=MAX_VALUE)
|
||||
average_current = float(0)
|
||||
for current in current_line:
|
||||
average_current += current
|
||||
average_current /= SAMPLE_NUM
|
||||
|
||||
if average_current > 1:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Wakeup] average current %f > 1mA" % average_current)
|
||||
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
||||
"deep_sleep_current", Y_AXIS_LABEL)
|
||||
|
||||
self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
||||
self.check_response("SSC2", "+GPIO_SET:OK")
|
||||
if self.check_response("SSC1", "ready!!!") is False:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Wakeup] target did not wakeup")
|
||||
result = False
|
||||
else:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Wakeup] target wakeup")
|
||||
|
||||
time.sleep(1)
|
||||
return result
|
||||
|
||||
#########################################
|
||||
#test one hour, Verify RTC Clock timer
|
||||
#########################################
|
||||
def deep_sleep_timeout(self):
|
||||
result = True
|
||||
Timeout = 3600
|
||||
|
||||
start_sleep_time = time.time()
|
||||
self.serial_write_line("SSC1", "")
|
||||
self.serial_write_line("SSC1", "dsleep -S -t %d" % (Timeout*1000000))
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
self.check_response("SSC1", "ready!!!", timeout = Timeout*2)
|
||||
time_escaped = time.time() - start_sleep_time
|
||||
NativeLog.add_trace_critical("[DeepSleep][timeout] desired sleep timeout is %s, actual sleep timeout is %s" % (Timeout, time_escaped))
|
||||
with open(self.sleep_time_log, "ab+") as f:
|
||||
f.write("[DeepSleep] desired sleep timeout is %s, actual sleep timeout is %s" % (Timeout, time_escaped))
|
||||
return result
|
||||
|
||||
############################################
|
||||
# Capture current map, verify the process of power on
|
||||
# notice: option = "up_to_bin" up to byte108 in init.bin,
|
||||
############################################
|
||||
def wake_option(self):
|
||||
result = True
|
||||
for option in DEEP_SLEEP_OPTION_LIST:
|
||||
for i in range(8):
|
||||
self.serial_write_line("SSC1", "dsleep -O -m %s" % DEEP_SLEEP_OPTION[option])
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
self.serial_write_line("SSC1", "dsleep -S -t 1200000")
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
|
||||
# measure current
|
||||
current_line = self.multimeter.measure_current(sample_rate=0.002,
|
||||
sample_num=SAMPLE_NUM,
|
||||
max_value=1)
|
||||
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
||||
"deep_sleep_wakeup_option_%s_%d"
|
||||
% (option, DEEP_SLEEP_OPTION[option]), Y_AXIS_LABEL)
|
||||
|
||||
NativeLog.add_trace_critical("[DeepSleep][wake_option] target wakeup option:%d"
|
||||
% DEEP_SLEEP_OPTION[option])
|
||||
time.sleep(3)
|
||||
|
||||
return result
|
||||
|
||||
def deep_sleep_wakeup_flash_gpio_status(self):
|
||||
result = True
|
||||
RandomTime = random.randint(2000000, 2000000)
|
||||
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
||||
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
||||
result = False
|
||||
if self.check_response("SSC1", "ready!!!") is False:
|
||||
result = False
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
||||
else:
|
||||
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
||||
|
||||
self.serial_write_line("SSC1", "gpio -E -p %d -t 0 -d %d" % (GPIO_WAKE_UP, GPIO_EDGE_DELAY))
|
||||
self.check_response("SSC1", "+GPIO_SET:OK")
|
||||
|
||||
time.sleep(1)
|
||||
return result
|
||||
|
||||
def cleanup(self):
|
||||
self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
||||
self.check_response("SSC2", "+GPIO_SET:OK")
|
||||
|
||||
def execute(self):
|
||||
TCActionBase.TCActionBase.execute(self)
|
||||
self.serial_write_line("SSC2", "sta -D")
|
||||
self.check_response("SSC2", "+QAP")
|
||||
self.serial_write_line("SSC1", "sta -D")
|
||||
self.check_response("SSC1", "+QAP")
|
||||
try:
|
||||
test_mode = self.test_mode
|
||||
test_count = self.test_count
|
||||
except StandardError, e:
|
||||
return
|
||||
|
||||
# self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
||||
# self.check_response("SSC2", "+GPIO_SET:OK")
|
||||
# time.sleep(1)
|
||||
|
||||
if "stable" in test_mode:
|
||||
for i in range(test_count):
|
||||
# result = self.deep_sleep_wakeup_flash_gpio_status()
|
||||
result = self.deep_sleep_stable()
|
||||
elif "measure_current" in test_mode:
|
||||
for i in range(test_count):
|
||||
result = self.deep_sleep_current_measure()
|
||||
elif "timeout" in test_mode:
|
||||
for i in range(test_count):
|
||||
result = self.deep_sleep_timeout()
|
||||
elif "wakeup" in test_mode:
|
||||
for i in range(test_count):
|
||||
result = self.deep_sleep_wakeup()
|
||||
elif "wake_option" in test_mode:
|
||||
for i in range(test_count):
|
||||
result = self.wake_option()
|
||||
|
||||
self.set_result("Succeed")
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user