Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 """
group-onsemi 0:098463de4c5d 2 mbed SDK
group-onsemi 0:098463de4c5d 3 Copyright (c) 2011-2013 ARM Limited
group-onsemi 0:098463de4c5d 4
group-onsemi 0:098463de4c5d 5 Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 6 you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 7 You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 8
group-onsemi 0:098463de4c5d 9 http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 10
group-onsemi 0:098463de4c5d 11 Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 12 distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 14 See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 15 limitations under the License.
group-onsemi 0:098463de4c5d 16 """
group-onsemi 0:098463de4c5d 17
group-onsemi 0:098463de4c5d 18 # Check if 'serial' module is installed
group-onsemi 0:098463de4c5d 19 try:
group-onsemi 0:098463de4c5d 20 from serial import Serial
group-onsemi 0:098463de4c5d 21 except ImportError, e:
group-onsemi 0:098463de4c5d 22 print "Error: Can't import 'serial' module: %s"% e
group-onsemi 0:098463de4c5d 23 exit(-1)
group-onsemi 0:098463de4c5d 24
group-onsemi 0:098463de4c5d 25 import os
group-onsemi 0:098463de4c5d 26 import re
group-onsemi 0:098463de4c5d 27 import types
group-onsemi 0:098463de4c5d 28 from sys import stdout
group-onsemi 0:098463de4c5d 29 from time import sleep, time
group-onsemi 0:098463de4c5d 30 from optparse import OptionParser
group-onsemi 0:098463de4c5d 31
group-onsemi 0:098463de4c5d 32 import host_tests_plugins
group-onsemi 0:098463de4c5d 33
group-onsemi 0:098463de4c5d 34 # This is a little tricky. We need to add upper directory to path so
group-onsemi 0:098463de4c5d 35 # we can find packages we want from the same level as other files do
group-onsemi 0:098463de4c5d 36 import sys
group-onsemi 0:098463de4c5d 37 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
group-onsemi 0:098463de4c5d 38 from tools.test_api import get_autodetected_MUTS_list
group-onsemi 0:098463de4c5d 39 from tools.test_api import get_module_avail
group-onsemi 0:098463de4c5d 40
group-onsemi 0:098463de4c5d 41
group-onsemi 0:098463de4c5d 42 class Mbed:
group-onsemi 0:098463de4c5d 43 """ Base class for a host driven test
group-onsemi 0:098463de4c5d 44 """
group-onsemi 0:098463de4c5d 45 def __init__(self):
group-onsemi 0:098463de4c5d 46 parser = OptionParser()
group-onsemi 0:098463de4c5d 47
group-onsemi 0:098463de4c5d 48 parser.add_option("-m", "--micro",
group-onsemi 0:098463de4c5d 49 dest="micro",
group-onsemi 0:098463de4c5d 50 help="The target microcontroller",
group-onsemi 0:098463de4c5d 51 metavar="MICRO")
group-onsemi 0:098463de4c5d 52
group-onsemi 0:098463de4c5d 53 parser.add_option("-p", "--port",
group-onsemi 0:098463de4c5d 54 dest="port",
group-onsemi 0:098463de4c5d 55 help="The serial port of the target mbed",
group-onsemi 0:098463de4c5d 56 metavar="PORT")
group-onsemi 0:098463de4c5d 57
group-onsemi 0:098463de4c5d 58 parser.add_option("-d", "--disk",
group-onsemi 0:098463de4c5d 59 dest="disk",
group-onsemi 0:098463de4c5d 60 help="The target disk path",
group-onsemi 0:098463de4c5d 61 metavar="DISK_PATH")
group-onsemi 0:098463de4c5d 62
group-onsemi 0:098463de4c5d 63 parser.add_option("-f", "--image-path",
group-onsemi 0:098463de4c5d 64 dest="image_path",
group-onsemi 0:098463de4c5d 65 help="Path with target's image",
group-onsemi 0:098463de4c5d 66 metavar="IMAGE_PATH")
group-onsemi 0:098463de4c5d 67
group-onsemi 0:098463de4c5d 68 parser.add_option("-c", "--copy",
group-onsemi 0:098463de4c5d 69 dest="copy_method",
group-onsemi 0:098463de4c5d 70 help="Copy method selector",
group-onsemi 0:098463de4c5d 71 metavar="COPY_METHOD")
group-onsemi 0:098463de4c5d 72
group-onsemi 0:098463de4c5d 73 parser.add_option("-C", "--program_cycle_s",
group-onsemi 0:098463de4c5d 74 dest="program_cycle_s",
group-onsemi 0:098463de4c5d 75 help="Program cycle sleep. Define how many seconds you want wait after copying bianry onto target",
group-onsemi 0:098463de4c5d 76 type="float",
group-onsemi 0:098463de4c5d 77 metavar="COPY_METHOD")
group-onsemi 0:098463de4c5d 78
group-onsemi 0:098463de4c5d 79 parser.add_option("-t", "--timeout",
group-onsemi 0:098463de4c5d 80 dest="timeout",
group-onsemi 0:098463de4c5d 81 help="Timeout",
group-onsemi 0:098463de4c5d 82 metavar="TIMEOUT")
group-onsemi 0:098463de4c5d 83
group-onsemi 0:098463de4c5d 84 parser.add_option("-r", "--reset",
group-onsemi 0:098463de4c5d 85 dest="forced_reset_type",
group-onsemi 0:098463de4c5d 86 help="Forces different type of reset")
group-onsemi 0:098463de4c5d 87
group-onsemi 0:098463de4c5d 88 parser.add_option("-R", "--reset-timeout",
group-onsemi 0:098463de4c5d 89 dest="forced_reset_timeout",
group-onsemi 0:098463de4c5d 90 metavar="NUMBER",
group-onsemi 0:098463de4c5d 91 type="int",
group-onsemi 0:098463de4c5d 92 help="When forcing a reset using option -r you can set up after reset timeout in seconds")
group-onsemi 0:098463de4c5d 93
group-onsemi 0:098463de4c5d 94 parser.add_option('', '--auto',
group-onsemi 0:098463de4c5d 95 dest='auto_detect',
group-onsemi 0:098463de4c5d 96 metavar=False,
group-onsemi 0:098463de4c5d 97 action="store_true",
group-onsemi 0:098463de4c5d 98 help='Use mbed-ls module to detect all connected mbed devices')
group-onsemi 0:098463de4c5d 99
group-onsemi 0:098463de4c5d 100 (self.options, _) = parser.parse_args()
group-onsemi 0:098463de4c5d 101
group-onsemi 0:098463de4c5d 102 self.DEFAULT_RESET_TOUT = 0
group-onsemi 0:098463de4c5d 103 self.DEFAULT_TOUT = 10
group-onsemi 0:098463de4c5d 104
group-onsemi 0:098463de4c5d 105 if self.options.port is None:
group-onsemi 0:098463de4c5d 106 raise Exception("The serial port of the target mbed have to be provided as command line arguments")
group-onsemi 0:098463de4c5d 107
group-onsemi 0:098463de4c5d 108 # Options related to copy / reset mbed device
group-onsemi 0:098463de4c5d 109 self.port = self.options.port
group-onsemi 0:098463de4c5d 110 self.disk = self.options.disk
group-onsemi 0:098463de4c5d 111 self.image_path = self.options.image_path.strip('"')
group-onsemi 0:098463de4c5d 112 self.copy_method = self.options.copy_method
group-onsemi 0:098463de4c5d 113 self.program_cycle_s = float(self.options.program_cycle_s)
group-onsemi 0:098463de4c5d 114
group-onsemi 0:098463de4c5d 115 self.serial = None
group-onsemi 0:098463de4c5d 116 self.serial_baud = 9600
group-onsemi 0:098463de4c5d 117 self.serial_timeout = 1
group-onsemi 0:098463de4c5d 118
group-onsemi 0:098463de4c5d 119 self.timeout = self.DEFAULT_TOUT if self.options.timeout is None else self.options.timeout
group-onsemi 0:098463de4c5d 120 print 'MBED: Instrumentation: "%s" and disk: "%s"' % (self.port, self.disk)
group-onsemi 0:098463de4c5d 121
group-onsemi 0:098463de4c5d 122 def init_serial_params(self, serial_baud=9600, serial_timeout=1):
group-onsemi 0:098463de4c5d 123 """ Initialize port parameters.
group-onsemi 0:098463de4c5d 124 This parameters will be used by self.init_serial() function to open serial port
group-onsemi 0:098463de4c5d 125 """
group-onsemi 0:098463de4c5d 126 self.serial_baud = serial_baud
group-onsemi 0:098463de4c5d 127 self.serial_timeout = serial_timeout
group-onsemi 0:098463de4c5d 128
group-onsemi 0:098463de4c5d 129 def init_serial(self, serial_baud=None, serial_timeout=None):
group-onsemi 0:098463de4c5d 130 """ Initialize serial port.
group-onsemi 0:098463de4c5d 131 Function will return error is port can't be opened or initialized
group-onsemi 0:098463de4c5d 132 """
group-onsemi 0:098463de4c5d 133 # Overload serial port configuration from default to parameters' values if they are specified
group-onsemi 0:098463de4c5d 134 serial_baud = serial_baud if serial_baud is not None else self.serial_baud
group-onsemi 0:098463de4c5d 135 serial_timeout = serial_timeout if serial_timeout is not None else self.serial_timeout
group-onsemi 0:098463de4c5d 136
group-onsemi 0:098463de4c5d 137 if get_module_avail('mbed_lstools') and self.options.auto_detect:
group-onsemi 0:098463de4c5d 138 # Ensure serial port is up-to-date (try to find it 60 times)
group-onsemi 0:098463de4c5d 139 found = False
group-onsemi 0:098463de4c5d 140
group-onsemi 0:098463de4c5d 141 for i in range(0, 60):
group-onsemi 0:098463de4c5d 142 print('Looking for %s with MBEDLS' % self.options.micro)
group-onsemi 0:098463de4c5d 143 muts_list = get_autodetected_MUTS_list(platform_name_filter=[self.options.micro])
group-onsemi 0:098463de4c5d 144
group-onsemi 0:098463de4c5d 145 if 1 in muts_list:
group-onsemi 0:098463de4c5d 146 mut = muts_list[1]
group-onsemi 0:098463de4c5d 147 self.port = mut['port']
group-onsemi 0:098463de4c5d 148 found = True
group-onsemi 0:098463de4c5d 149 break
group-onsemi 0:098463de4c5d 150 else:
group-onsemi 0:098463de4c5d 151 sleep(3)
group-onsemi 0:098463de4c5d 152
group-onsemi 0:098463de4c5d 153 if not found:
group-onsemi 0:098463de4c5d 154 return False
group-onsemi 0:098463de4c5d 155
group-onsemi 0:098463de4c5d 156 # Clear serial port
group-onsemi 0:098463de4c5d 157 if self.serial:
group-onsemi 0:098463de4c5d 158 self.serial.close()
group-onsemi 0:098463de4c5d 159 self.serial = None
group-onsemi 0:098463de4c5d 160
group-onsemi 0:098463de4c5d 161 # We will pool for serial to be re-mounted if it was unmounted after device reset
group-onsemi 0:098463de4c5d 162 result = self.pool_for_serial_init(serial_baud, serial_timeout) # Blocking
group-onsemi 0:098463de4c5d 163
group-onsemi 0:098463de4c5d 164 # Port can be opened
group-onsemi 0:098463de4c5d 165 if result:
group-onsemi 0:098463de4c5d 166 self.flush()
group-onsemi 0:098463de4c5d 167 return result
group-onsemi 0:098463de4c5d 168
group-onsemi 0:098463de4c5d 169 def pool_for_serial_init(self, serial_baud, serial_timeout, pooling_loops=40, init_delay=0.5, loop_delay=0.25):
group-onsemi 0:098463de4c5d 170 """ Functions pools for serial port readiness
group-onsemi 0:098463de4c5d 171 """
group-onsemi 0:098463de4c5d 172 result = True
group-onsemi 0:098463de4c5d 173 last_error = None
group-onsemi 0:098463de4c5d 174 # This loop is used to check for serial port availability due to
group-onsemi 0:098463de4c5d 175 # some delays and remounting when devices are being flashed with new software.
group-onsemi 0:098463de4c5d 176 for i in range(pooling_loops):
group-onsemi 0:098463de4c5d 177 sleep(loop_delay if i else init_delay)
group-onsemi 0:098463de4c5d 178 try:
group-onsemi 0:098463de4c5d 179 self.serial = Serial(self.port, baudrate=serial_baud, timeout=serial_timeout)
group-onsemi 0:098463de4c5d 180 except Exception as e:
group-onsemi 0:098463de4c5d 181 result = False
group-onsemi 0:098463de4c5d 182 last_error = "MBED: %s"% str(e)
group-onsemi 0:098463de4c5d 183 stdout.write('.')
group-onsemi 0:098463de4c5d 184 stdout.flush()
group-onsemi 0:098463de4c5d 185 else:
group-onsemi 0:098463de4c5d 186 print "...port ready!"
group-onsemi 0:098463de4c5d 187 result = True
group-onsemi 0:098463de4c5d 188 break
group-onsemi 0:098463de4c5d 189 if not result and last_error:
group-onsemi 0:098463de4c5d 190 print last_error
group-onsemi 0:098463de4c5d 191 return result
group-onsemi 0:098463de4c5d 192
group-onsemi 0:098463de4c5d 193 def set_serial_timeout(self, timeout):
group-onsemi 0:098463de4c5d 194 """ Wraps self.mbed.serial object timeout property
group-onsemi 0:098463de4c5d 195 """
group-onsemi 0:098463de4c5d 196 result = None
group-onsemi 0:098463de4c5d 197 if self.serial:
group-onsemi 0:098463de4c5d 198 self.serial.timeout = timeout
group-onsemi 0:098463de4c5d 199 result = True
group-onsemi 0:098463de4c5d 200 return result
group-onsemi 0:098463de4c5d 201
group-onsemi 0:098463de4c5d 202 def serial_read(self, count=1):
group-onsemi 0:098463de4c5d 203 """ Wraps self.mbed.serial object read method
group-onsemi 0:098463de4c5d 204 """
group-onsemi 0:098463de4c5d 205 result = None
group-onsemi 0:098463de4c5d 206 if self.serial:
group-onsemi 0:098463de4c5d 207 try:
group-onsemi 0:098463de4c5d 208 result = self.serial.read(count)
group-onsemi 0:098463de4c5d 209 except:
group-onsemi 0:098463de4c5d 210 result = None
group-onsemi 0:098463de4c5d 211 return result
group-onsemi 0:098463de4c5d 212
group-onsemi 0:098463de4c5d 213 def serial_readline(self, timeout=5):
group-onsemi 0:098463de4c5d 214 """ Wraps self.mbed.serial object read method to read one line from serial port
group-onsemi 0:098463de4c5d 215 """
group-onsemi 0:098463de4c5d 216 result = ''
group-onsemi 0:098463de4c5d 217 start = time()
group-onsemi 0:098463de4c5d 218 while (time() - start) < timeout:
group-onsemi 0:098463de4c5d 219 if self.serial:
group-onsemi 0:098463de4c5d 220 try:
group-onsemi 0:098463de4c5d 221 c = self.serial.read(1)
group-onsemi 0:098463de4c5d 222 result += c
group-onsemi 0:098463de4c5d 223 except Exception as e:
group-onsemi 0:098463de4c5d 224 print "MBED: %s"% str(e)
group-onsemi 0:098463de4c5d 225 result = None
group-onsemi 0:098463de4c5d 226 break
group-onsemi 0:098463de4c5d 227 if c == '\n':
group-onsemi 0:098463de4c5d 228 break
group-onsemi 0:098463de4c5d 229 return result
group-onsemi 0:098463de4c5d 230
group-onsemi 0:098463de4c5d 231 def serial_write(self, write_buffer):
group-onsemi 0:098463de4c5d 232 """ Wraps self.mbed.serial object write method
group-onsemi 0:098463de4c5d 233 """
group-onsemi 0:098463de4c5d 234 result = None
group-onsemi 0:098463de4c5d 235 if self.serial:
group-onsemi 0:098463de4c5d 236 try:
group-onsemi 0:098463de4c5d 237 result = self.serial.write(write_buffer)
group-onsemi 0:098463de4c5d 238 except:
group-onsemi 0:098463de4c5d 239 result = None
group-onsemi 0:098463de4c5d 240 return result
group-onsemi 0:098463de4c5d 241
group-onsemi 0:098463de4c5d 242 def reset_timeout(self, timeout):
group-onsemi 0:098463de4c5d 243 """ Timeout executed just after reset command is issued
group-onsemi 0:098463de4c5d 244 """
group-onsemi 0:098463de4c5d 245 for n in range(0, timeout):
group-onsemi 0:098463de4c5d 246 sleep(1)
group-onsemi 0:098463de4c5d 247
group-onsemi 0:098463de4c5d 248 def reset(self):
group-onsemi 0:098463de4c5d 249 """ Calls proper reset plugin to do the job.
group-onsemi 0:098463de4c5d 250 Please refer to host_test_plugins functionality
group-onsemi 0:098463de4c5d 251 """
group-onsemi 0:098463de4c5d 252 # Flush serials to get only input after reset
group-onsemi 0:098463de4c5d 253 self.flush()
group-onsemi 0:098463de4c5d 254 if self.options.forced_reset_type:
group-onsemi 0:098463de4c5d 255 result = host_tests_plugins.call_plugin('ResetMethod', self.options.forced_reset_type, disk=self.disk)
group-onsemi 0:098463de4c5d 256 else:
group-onsemi 0:098463de4c5d 257 result = host_tests_plugins.call_plugin('ResetMethod', 'default', serial=self.serial)
group-onsemi 0:098463de4c5d 258 # Give time to wait for the image loading
group-onsemi 0:098463de4c5d 259 reset_tout_s = self.options.forced_reset_timeout if self.options.forced_reset_timeout is not None else self.DEFAULT_RESET_TOUT
group-onsemi 0:098463de4c5d 260 self.reset_timeout(reset_tout_s)
group-onsemi 0:098463de4c5d 261 return result
group-onsemi 0:098463de4c5d 262
group-onsemi 0:098463de4c5d 263 def copy_image(self, image_path=None, disk=None, copy_method=None):
group-onsemi 0:098463de4c5d 264 """ Closure for copy_image_raw() method.
group-onsemi 0:098463de4c5d 265 Method which is actually copying image to mbed
group-onsemi 0:098463de4c5d 266 """
group-onsemi 0:098463de4c5d 267 # Set closure environment
group-onsemi 0:098463de4c5d 268 image_path = image_path if image_path is not None else self.image_path
group-onsemi 0:098463de4c5d 269 disk = disk if disk is not None else self.disk
group-onsemi 0:098463de4c5d 270 copy_method = copy_method if copy_method is not None else self.copy_method
group-onsemi 0:098463de4c5d 271 # Call proper copy method
group-onsemi 0:098463de4c5d 272 result = self.copy_image_raw(image_path, disk, copy_method)
group-onsemi 0:098463de4c5d 273 return result
group-onsemi 0:098463de4c5d 274
group-onsemi 0:098463de4c5d 275 def copy_image_raw(self, image_path=None, disk=None, copy_method=None):
group-onsemi 0:098463de4c5d 276 """ Copy file depending on method you want to use. Handles exception
group-onsemi 0:098463de4c5d 277 and return code from shell copy commands.
group-onsemi 0:098463de4c5d 278 """
group-onsemi 0:098463de4c5d 279 # image_path - Where is binary with target's firmware
group-onsemi 0:098463de4c5d 280 if copy_method is not None:
group-onsemi 0:098463de4c5d 281 # We override 'default' method with 'shell' method
group-onsemi 0:098463de4c5d 282 if copy_method == 'default':
group-onsemi 0:098463de4c5d 283 copy_method = 'shell'
group-onsemi 0:098463de4c5d 284 else:
group-onsemi 0:098463de4c5d 285 copy_method = 'shell'
group-onsemi 0:098463de4c5d 286
group-onsemi 0:098463de4c5d 287 result = host_tests_plugins.call_plugin('CopyMethod', copy_method, image_path=image_path, destination_disk=disk, program_cycle_s=self.program_cycle_s, target_mcu=self.options.micro)
group-onsemi 0:098463de4c5d 288 return result;
group-onsemi 0:098463de4c5d 289
group-onsemi 0:098463de4c5d 290 def flush(self):
group-onsemi 0:098463de4c5d 291 """ Flush serial ports
group-onsemi 0:098463de4c5d 292 """
group-onsemi 0:098463de4c5d 293 result = False
group-onsemi 0:098463de4c5d 294 if self.serial:
group-onsemi 0:098463de4c5d 295 self.serial.flushInput()
group-onsemi 0:098463de4c5d 296 self.serial.flushOutput()
group-onsemi 0:098463de4c5d 297 result = True
group-onsemi 0:098463de4c5d 298 return result
group-onsemi 0:098463de4c5d 299
group-onsemi 0:098463de4c5d 300
group-onsemi 0:098463de4c5d 301 class HostTestResults:
group-onsemi 0:098463de4c5d 302 """ Test results set by host tests
group-onsemi 0:098463de4c5d 303 """
group-onsemi 0:098463de4c5d 304 def __init__(self):
group-onsemi 0:098463de4c5d 305 self.RESULT_SUCCESS = 'success'
group-onsemi 0:098463de4c5d 306 self.RESULT_FAILURE = 'failure'
group-onsemi 0:098463de4c5d 307 self.RESULT_ERROR = 'error'
group-onsemi 0:098463de4c5d 308 self.RESULT_IO_SERIAL = 'ioerr_serial'
group-onsemi 0:098463de4c5d 309 self.RESULT_NO_IMAGE = 'no_image'
group-onsemi 0:098463de4c5d 310 self.RESULT_IOERR_COPY = "ioerr_copy"
group-onsemi 0:098463de4c5d 311 self.RESULT_PASSIVE = "passive"
group-onsemi 0:098463de4c5d 312 self.RESULT_NOT_DETECTED = "not_detected"
group-onsemi 0:098463de4c5d 313 self.RESULT_MBED_ASSERT = "mbed_assert"
group-onsemi 0:098463de4c5d 314
group-onsemi 0:098463de4c5d 315
group-onsemi 0:098463de4c5d 316 import tools.host_tests as host_tests
group-onsemi 0:098463de4c5d 317
group-onsemi 0:098463de4c5d 318
group-onsemi 0:098463de4c5d 319 class Test(HostTestResults):
group-onsemi 0:098463de4c5d 320 """ Base class for host test's test runner
group-onsemi 0:098463de4c5d 321 """
group-onsemi 0:098463de4c5d 322 # Select default host_test supervision (replaced after autodetection)
group-onsemi 0:098463de4c5d 323 test_supervisor = host_tests.get_host_test("default")
group-onsemi 0:098463de4c5d 324
group-onsemi 0:098463de4c5d 325 def __init__(self):
group-onsemi 0:098463de4c5d 326 self.mbed = Mbed()
group-onsemi 0:098463de4c5d 327
group-onsemi 0:098463de4c5d 328 def detect_test_config(self, verbose=False):
group-onsemi 0:098463de4c5d 329 """ Detects test case configuration
group-onsemi 0:098463de4c5d 330 """
group-onsemi 0:098463de4c5d 331 result = {}
group-onsemi 0:098463de4c5d 332 while True:
group-onsemi 0:098463de4c5d 333 line = self.mbed.serial_readline()
group-onsemi 0:098463de4c5d 334 if "{start}" in line:
group-onsemi 0:098463de4c5d 335 self.notify("HOST: Start test...")
group-onsemi 0:098463de4c5d 336 break
group-onsemi 0:098463de4c5d 337 else:
group-onsemi 0:098463de4c5d 338 # Detect if this is property from TEST_ENV print
group-onsemi 0:098463de4c5d 339 m = re.search('{([\w_]+);([\w\d\+ ]+)}}', line[:-1])
group-onsemi 0:098463de4c5d 340 if m and len(m.groups()) == 2:
group-onsemi 0:098463de4c5d 341 # This is most likely auto-detection property
group-onsemi 0:098463de4c5d 342 result[m.group(1)] = m.group(2)
group-onsemi 0:098463de4c5d 343 if verbose:
group-onsemi 0:098463de4c5d 344 self.notify("HOST: Property '%s' = '%s'"% (m.group(1), m.group(2)))
group-onsemi 0:098463de4c5d 345 else:
group-onsemi 0:098463de4c5d 346 # We can check if this is TArget Id in mbed specific format
group-onsemi 0:098463de4c5d 347 m2 = re.search('^([\$]+)([a-fA-F0-9]+)', line[:-1])
group-onsemi 0:098463de4c5d 348 if m2 and len(m2.groups()) == 2:
group-onsemi 0:098463de4c5d 349 if verbose:
group-onsemi 0:098463de4c5d 350 target_id = m2.group(1) + m2.group(2)
group-onsemi 0:098463de4c5d 351 self.notify("HOST: TargetID '%s'"% target_id)
group-onsemi 0:098463de4c5d 352 self.notify(line[len(target_id):-1])
group-onsemi 0:098463de4c5d 353 else:
group-onsemi 0:098463de4c5d 354 self.notify("HOST: Unknown property: %s"% line.strip())
group-onsemi 0:098463de4c5d 355 return result
group-onsemi 0:098463de4c5d 356
group-onsemi 0:098463de4c5d 357 def run(self):
group-onsemi 0:098463de4c5d 358 """ Test runner for host test. This function will start executing
group-onsemi 0:098463de4c5d 359 test and forward test result via serial port to test suite
group-onsemi 0:098463de4c5d 360 """
group-onsemi 0:098463de4c5d 361 # Copy image to device
group-onsemi 0:098463de4c5d 362 self.notify("HOST: Copy image onto target...")
group-onsemi 0:098463de4c5d 363 result = self.mbed.copy_image()
group-onsemi 0:098463de4c5d 364 if not result:
group-onsemi 0:098463de4c5d 365 self.print_result(self.RESULT_IOERR_COPY)
group-onsemi 0:098463de4c5d 366
group-onsemi 0:098463de4c5d 367 # Initialize and open target's serial port (console)
group-onsemi 0:098463de4c5d 368 self.notify("HOST: Initialize serial port...")
group-onsemi 0:098463de4c5d 369 result = self.mbed.init_serial()
group-onsemi 0:098463de4c5d 370 if not result:
group-onsemi 0:098463de4c5d 371 self.print_result(self.RESULT_IO_SERIAL)
group-onsemi 0:098463de4c5d 372
group-onsemi 0:098463de4c5d 373 # Reset device
group-onsemi 0:098463de4c5d 374 self.notify("HOST: Reset target...")
group-onsemi 0:098463de4c5d 375 result = self.mbed.reset()
group-onsemi 0:098463de4c5d 376 if not result:
group-onsemi 0:098463de4c5d 377 self.print_result(self.RESULT_IO_SERIAL)
group-onsemi 0:098463de4c5d 378
group-onsemi 0:098463de4c5d 379 # Run test
group-onsemi 0:098463de4c5d 380 try:
group-onsemi 0:098463de4c5d 381 CONFIG = self.detect_test_config(verbose=True) # print CONFIG
group-onsemi 0:098463de4c5d 382
group-onsemi 0:098463de4c5d 383 if "host_test_name" in CONFIG:
group-onsemi 0:098463de4c5d 384 if host_tests.is_host_test(CONFIG["host_test_name"]):
group-onsemi 0:098463de4c5d 385 self.test_supervisor = host_tests.get_host_test(CONFIG["host_test_name"])
group-onsemi 0:098463de4c5d 386 result = self.test_supervisor.test(self) #result = self.test()
group-onsemi 0:098463de4c5d 387
group-onsemi 0:098463de4c5d 388 if result is not None:
group-onsemi 0:098463de4c5d 389 self.print_result(result)
group-onsemi 0:098463de4c5d 390 else:
group-onsemi 0:098463de4c5d 391 self.notify("HOST: Passive mode...")
group-onsemi 0:098463de4c5d 392 except Exception, e:
group-onsemi 0:098463de4c5d 393 print str(e)
group-onsemi 0:098463de4c5d 394 self.print_result(self.RESULT_ERROR)
group-onsemi 0:098463de4c5d 395
group-onsemi 0:098463de4c5d 396 def setup(self):
group-onsemi 0:098463de4c5d 397 """ Setup and check if configuration for test is
group-onsemi 0:098463de4c5d 398 correct. E.g. if serial port can be opened.
group-onsemi 0:098463de4c5d 399 """
group-onsemi 0:098463de4c5d 400 result = True
group-onsemi 0:098463de4c5d 401 if not self.mbed.serial:
group-onsemi 0:098463de4c5d 402 result = False
group-onsemi 0:098463de4c5d 403 self.print_result(self.RESULT_IO_SERIAL)
group-onsemi 0:098463de4c5d 404 return result
group-onsemi 0:098463de4c5d 405
group-onsemi 0:098463de4c5d 406 def notify(self, message):
group-onsemi 0:098463de4c5d 407 """ On screen notification function
group-onsemi 0:098463de4c5d 408 """
group-onsemi 0:098463de4c5d 409 print message
group-onsemi 0:098463de4c5d 410 stdout.flush()
group-onsemi 0:098463de4c5d 411
group-onsemi 0:098463de4c5d 412 def print_result(self, result):
group-onsemi 0:098463de4c5d 413 """ Test result unified printing function
group-onsemi 0:098463de4c5d 414 """
group-onsemi 0:098463de4c5d 415 self.notify("\r\n{{%s}}\r\n{{end}}" % result)
group-onsemi 0:098463de4c5d 416
group-onsemi 0:098463de4c5d 417
group-onsemi 0:098463de4c5d 418 class DefaultTestSelector(Test):
group-onsemi 0:098463de4c5d 419 """ Test class with serial port initialization
group-onsemi 0:098463de4c5d 420 """
group-onsemi 0:098463de4c5d 421 def __init__(self):
group-onsemi 0:098463de4c5d 422 HostTestResults.__init__(self)
group-onsemi 0:098463de4c5d 423 Test.__init__(self)
group-onsemi 0:098463de4c5d 424
group-onsemi 0:098463de4c5d 425 if __name__ == '__main__':
group-onsemi 0:098463de4c5d 426 DefaultTestSelector().run()