| # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import logging |
| import re |
| import socket |
| import time |
| |
| from autotest_lib.client.bin import test |
| from autotest_lib.client.common_lib import error, utils |
| |
| |
| class hardware_GPS(test.test): |
| version = 1 |
| |
| def run_once(self): |
| # Default gpsd port. Can be changed in /etc/init/gpsd.conf. |
| gpsd_port = 2947 |
| match = False |
| gpsd_started = False |
| |
| gpsd_status = utils.system_output('initctl status gpsd') |
| if not 'start/running' in gpsd_status: |
| utils.system('initctl start gpsd') |
| gpsd_started = True |
| for _ in range(10): |
| try: |
| c = socket.create_connection(('localhost', gpsd_port)) |
| except socket.error: |
| time.sleep(1) |
| continue |
| c.close() |
| break |
| |
| gpspipe = utils.system_output( |
| 'gpspipe -r -n 10 localhost:%d' % gpsd_port, timeout=60) |
| logging.debug(gpspipe) |
| for line in gpspipe.split('\n'): |
| line = line.strip() |
| |
| # For now - just look for any GPS sentence in the output. |
| match = re.search( |
| r'^\$GP(BOD|BWC|GGA|GLL|GSA|GSV|HDT|R00|RMA|RMB|' + |
| r'RMC|RTE|STN|TRF|VBW|VTG|WPL|XTE|ZDA)', |
| line) |
| |
| if match: |
| break |
| |
| if gpsd_started: |
| # If it was us who started it - shut it back down. |
| utils.system('initctl stop gpsd') |
| |
| if not match: |
| raise error.TestFail('Unable to find GPS device') |