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