57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
# 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')
|