2 # Copyright 2015-2016 Samsung Electronics Co., Ltd.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
18 from threading import Thread
19 from litmus.device.device import device
20 from litmus.core.util import find_pattern
21 from litmus.core.exceptions import BootError
24 class deviceartik10(device):
25 """docstring for device"""
28 _pattern_shellprompt = r'root.*> .*'
29 _pattern_bootprompt = r'ARTIK.*# .*'
31 def __init__(self, *args, **kwargs):
34 self._name = kwargs['devicename']
37 self._manager = kwargs['manager']
40 """docstring for _release"""
43 def _wait_uart_shell_login_prompt(self):
44 """docstring for _wait_uart_shell_login_prompt"""
45 super(deviceartik10, self)._wait_uart_shell_login_prompt()
47 def _set_sdb_deviceid(self):
48 """docstring for _set_sdb_deviceid"""
49 usb0_path = b'/sys/class/usb_mode/usb0'
50 pattern = '.*{0}'.format(self.get_id())
52 def set_serialnumber(deviceid):
53 """docstring for set_serialnumber"""
54 self._write_uart(b''.join([b'echo 0 > ', usb0_path, b'/enable']))
56 self._write_uart(b''.join([b'echo ',
62 self._write_uart(b'direct_set_debug.sh --sdb-set')
65 def get_serialnumber():
66 """docstring for get_serialnumber"""
67 self._write_uart(b''.join([b'cat ', usb0_path, b'/enable']))
69 self._write_uart(b''.join([b'cat ', usb0_path, b'/iSerial']))
71 return self._read_uart(1000)
75 set_serialnumber(deviceid=self.get_id().encode())
76 serialnumber = get_serialnumber()
77 if find_pattern(pattern, serialnumber):
81 raise Exception('Can\'t configure sdb deviceid')
84 """docstring for _reboot"""
85 status = self._current_uart_status()
87 if status == 'LOGGED_IN':
88 self._write_uart(b'reboot')
90 elif status == 'BOOT_PROMPT':
91 self._write_uart(b'reset')
93 elif status == 'NOT_LOGGED_IN':
94 self._wait_uart_shell_login_prompt()
95 self._login_uart_shell()
96 self._write_uart(b'reboot')
99 def _current_uart_status(self):
100 """docstring for _current_uart_status"""
101 self._flush_uart_buffer()
102 for loop in range(3):
103 self._write_uart(b'')
104 readdata = self._read_uart(500)
105 if find_pattern(self._pattern_bootprompt, readdata):
107 if find_pattern(self._pattern_shellprompt, readdata):
110 return 'NOT_LOGGED_IN'
112 def _enter_download_mode(self, cmd, power_cut_delay=1, thread_param=10):
113 """docstring for _enter_download_mode"""
114 t = Thread(target=self._thread_for_enter_download_mode,
115 args=(cmd, thread_param, ))
116 status = self._current_uart_status()
117 if status == 'NOT_LOGGED_IN':
118 self._wait_uart_shell_login_prompt()
119 self._login_uart_shell()
124 def on(self, powercut_delay=3):
126 Turn on the device acquired.
128 :param float powercut_delay: power-cut delay for cutter
130 logging.debug('=================Turn on device {}=================='
131 .format(self.get_name()))
133 time.sleep(powercut_delay)
134 while retry_cnt <= self._max_attempt_boot_retry:
137 self._wait_uart_shell_login_prompt()
138 self._login_uart_shell()
139 self._set_sdb_deviceid()
143 except KeyboardInterrupt:
144 raise Exception('Keyboard interrupt.')
145 except Exception as e:
149 raise BootError('Cant\'t turn on dut.')
151 def off(self, powercut_delay=2):
153 Trun off the device acquired.
155 :param float powercut_delay: power-cut delay for cutter
157 logging.debug('off function is not supported for Artik device')