1 # Copyright 2015 The Chromium OS Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 6 """This module provides the information of Chameleon board.""" 7 8 9 import collections 10 import logging 11 12 13 # Mapping from Chameleon MAC address to other information including 14 # bluetooth MAC address on audio board. 15 ChameleonInfo = collections.namedtuple( 16 'ChameleonInfo', ['bluetooth_mac_address']) 17 18 _CHAMELEON_BOARD_INFO = { 19 '94:eb:2c:00:00:fb': ChameleonInfo('00:1F:84:01:03:68'), 20 '94:eb:2c:00:00:f9': ChameleonInfo('00:1F:84:01:03:73'), 21 '94:eb:2c:00:01:25': ChameleonInfo('00:1F:84:01:03:4F'), 22 '94:eb:2c:00:01:27': ChameleonInfo('00:1F:84:01:03:5B'), 23 '94:eb:2c:00:01:28': ChameleonInfo('00:1F:84:01:03:46'), 24 '94:eb:2c:00:01:29': ChameleonInfo('00:1F:84:01:03:26'), 25 '94:eb:2c:00:01:2b': ChameleonInfo('00:1F:84:01:03:5E'), 26 '94:eb:2c:00:01:2d': ChameleonInfo('00:1F:84:01:03:B6'), 27 '94:eb:2c:00:01:30': ChameleonInfo('00:1F:84:01:03:2F'), 28 '94:eb:2c:00:01:3a': ChameleonInfo('00:1F:84:01:03:42'), 29 '94:eb:2c:00:01:3b': ChameleonInfo('00:1F:84:01:03:44'), 30 '94:eb:2c:00:01:3c': ChameleonInfo('00:1F:84:01:03:62'), 31 '94:eb:2c:00:01:3d': ChameleonInfo('00:1F:84:01:03:59'), 32 '94:eb:2c:00:01:3e': ChameleonInfo('00:1F:84:01:03:74'), 33 '94:eb:2c:00:01:3f': ChameleonInfo('00:1F:84:01:03:8C'), 34 '94:eb:2c:00:01:41': ChameleonInfo('00:1F:84:01:03:B3'), 35 '94:eb:2c:10:06:65': ChameleonInfo('00:1F:84:01:03:6A'), 36 '94:eb:2c:10:06:66': ChameleonInfo('00:1F:84:01:03:21'), 37 '94:eb:2c:10:06:67': ChameleonInfo('00:1F:84:01:03:38'), 38 '94:eb:2c:10:06:68': ChameleonInfo('00:1F:84:01:03:52'), 39 '94:eb:2c:10:06:6c': ChameleonInfo('00:1F:84:01:03:2E'), 40 '94:eb:2c:10:06:6d': ChameleonInfo('00:1F:84:01:03:84'), 41 '94:eb:2c:10:06:6e': ChameleonInfo('00:1F:84:01:03:98'), 42 '94:eb:2c:10:06:72': ChameleonInfo('00:1F:84:01:03:61'), 43 '94:eb:2c:10:06:73': ChameleonInfo('00:1F:84:01:03:2C'), 44 '94:eb:2c:10:06:76': ChameleonInfo('00:1F:84:01:03:83'), 45 '94:eb:2c:10:06:74': ChameleonInfo('00:1F:84:01:03:61'), 46 '94:eb:2c:10:06:7a': ChameleonInfo('00:1F:84:01:03:1C'), 47 '94:eb:2c:10:06:7b': ChameleonInfo('00:1F:84:01:03:A7'), 48 '94:eb:2c:10:06:7c': ChameleonInfo('00:1F:84:01:03:4B'), 49 '94:eb:2c:10:06:7d': ChameleonInfo('00:1F:84:01:03:78'), 50 '94:eb:2c:10:06:7e': ChameleonInfo('00:1F:84:01:03:7B'), 51 '94:eb:2c:10:06:7f': ChameleonInfo('00:1F:84:01:03:36'), 52 '94:eb:2c:00:01:26': ChameleonInfo('00:1F:84:01:03:56'), 53 '94:eb:2c:00:01:17': ChameleonInfo('00:1F:84:01:03:76'), 54 '94:eb:2c:00:01:31': ChameleonInfo('00:1F:84:01:03:20'), 55 '94:eb:2c:00:01:18': ChameleonInfo('00:1F:84:01:03:A1'), 56 '94:eb:2c:10:06:84': ChameleonInfo('00:1F:84:01:03:32'), 57 } 58 59 class ChameleonInfoError(Exception): 60 """Error in chameleon_info.""" 61 pass 62 63 64 def get_bluetooth_mac_address(chameleon_board): 65 """Gets bluetooth MAC address of a ChameleonBoard. 66 67 @param chameleon_board: A ChameleonBoard object. 68 69 @returns: A string for bluetooth MAC address of bluetooth module on the 70 audio board. 71 72 @raises: ChameleonInfoError if bluetooth MAC address of this Chameleon 73 board can not be found. 74 75 """ 76 chameleon_mac_address = chameleon_board.get_mac_address().lower() 77 if chameleon_mac_address not in _CHAMELEON_BOARD_INFO: 78 raise ChameleonInfoError( 79 'Chameleon info not found for %s' % chameleon_mac_address) 80 board_info = _CHAMELEON_BOARD_INFO[chameleon_mac_address] 81 logging.debug('Chameleon board info: %r', board_info) 82 return board_info.bluetooth_mac_address 83