# 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')