1*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Li 6*9c5db199SXin Li"""This module provides the information of Chameleon board.""" 7*9c5db199SXin Li 8*9c5db199SXin Li 9*9c5db199SXin Liimport collections 10*9c5db199SXin Liimport logging 11*9c5db199SXin Li 12*9c5db199SXin Li 13*9c5db199SXin Li# Mapping from Chameleon MAC address to other information including 14*9c5db199SXin Li# bluetooth MAC address on audio board. 15*9c5db199SXin LiChameleonInfo = collections.namedtuple( 16*9c5db199SXin Li 'ChameleonInfo', ['bluetooth_mac_address']) 17*9c5db199SXin Li 18*9c5db199SXin Li_CHAMELEON_BOARD_INFO = { 19*9c5db199SXin Li '94:eb:2c:00:00:fb': ChameleonInfo('00:1F:84:01:03:68'), 20*9c5db199SXin Li '94:eb:2c:00:00:f9': ChameleonInfo('00:1F:84:01:03:73'), 21*9c5db199SXin Li '94:eb:2c:00:01:25': ChameleonInfo('00:1F:84:01:03:4F'), 22*9c5db199SXin Li '94:eb:2c:00:01:27': ChameleonInfo('00:1F:84:01:03:5B'), 23*9c5db199SXin Li '94:eb:2c:00:01:28': ChameleonInfo('00:1F:84:01:03:46'), 24*9c5db199SXin Li '94:eb:2c:00:01:29': ChameleonInfo('00:1F:84:01:03:26'), 25*9c5db199SXin Li '94:eb:2c:00:01:2b': ChameleonInfo('00:1F:84:01:03:5E'), 26*9c5db199SXin Li '94:eb:2c:00:01:2d': ChameleonInfo('00:1F:84:01:03:B6'), 27*9c5db199SXin Li '94:eb:2c:00:01:30': ChameleonInfo('00:1F:84:01:03:2F'), 28*9c5db199SXin Li '94:eb:2c:00:01:3a': ChameleonInfo('00:1F:84:01:03:42'), 29*9c5db199SXin Li '94:eb:2c:00:01:3b': ChameleonInfo('00:1F:84:01:03:44'), 30*9c5db199SXin Li '94:eb:2c:00:01:3d': ChameleonInfo('00:1F:84:01:03:59'), 31*9c5db199SXin Li '94:eb:2c:00:01:3e': ChameleonInfo('00:1F:84:01:03:74'), 32*9c5db199SXin Li '94:eb:2c:00:01:3f': ChameleonInfo('00:1F:84:01:03:8C'), 33*9c5db199SXin Li '94:eb:2c:00:01:41': ChameleonInfo('00:1F:84:01:03:B3'), 34*9c5db199SXin Li '94:eb:2c:10:06:65': ChameleonInfo('00:1F:84:01:03:6A'), 35*9c5db199SXin Li '94:eb:2c:10:06:66': ChameleonInfo('00:1F:84:01:03:21'), 36*9c5db199SXin Li '94:eb:2c:10:06:67': ChameleonInfo('00:1F:84:01:03:38'), 37*9c5db199SXin Li '94:eb:2c:10:06:68': ChameleonInfo('00:1F:84:01:03:52'), 38*9c5db199SXin Li '94:eb:2c:10:06:6c': ChameleonInfo('00:1F:84:01:03:2E'), 39*9c5db199SXin Li '94:eb:2c:10:06:6d': ChameleonInfo('00:1F:84:01:03:84'), 40*9c5db199SXin Li '94:eb:2c:10:06:6e': ChameleonInfo('00:1F:84:01:03:98'), 41*9c5db199SXin Li '94:eb:2c:10:06:72': ChameleonInfo('00:1F:84:01:03:61'), 42*9c5db199SXin Li '94:eb:2c:10:06:73': ChameleonInfo('00:1F:84:01:03:2C'), 43*9c5db199SXin Li '94:eb:2c:10:06:76': ChameleonInfo('00:1F:84:01:03:83'), 44*9c5db199SXin Li '94:eb:2c:10:06:7a': ChameleonInfo('00:1F:84:01:03:1C'), 45*9c5db199SXin Li '94:eb:2c:10:06:7b': ChameleonInfo('00:1F:84:01:03:A7'), 46*9c5db199SXin Li '94:eb:2c:10:06:7c': ChameleonInfo('00:1F:84:01:03:4B'), 47*9c5db199SXin Li '94:eb:2c:10:06:7d': ChameleonInfo('00:1F:81:88:88:9D'), 48*9c5db199SXin Li '94:eb:2c:10:06:7e': ChameleonInfo('00:1F:81:88:88:91'), 49*9c5db199SXin Li '94:eb:2c:10:06:7f': ChameleonInfo('00:1F:84:01:03:36'), 50*9c5db199SXin Li '94:eb:2c:00:01:26': ChameleonInfo('00:1F:84:01:03:56'), 51*9c5db199SXin Li '94:eb:2c:00:01:17': ChameleonInfo('00:1F:84:01:03:76'), 52*9c5db199SXin Li '94:eb:2c:00:01:31': ChameleonInfo('00:1F:84:01:03:20'), 53*9c5db199SXin Li '94:eb:2c:00:01:18': ChameleonInfo('00:1F:84:01:03:A1'), 54*9c5db199SXin Li '94:eb:2c:10:06:84': ChameleonInfo('00:1F:84:01:03:32'), 55*9c5db199SXin Li 56*9c5db199SXin Li # TODO (rjahagir@): Verify the addresses listed above as 57*9c5db199SXin Li # as many were reworked/relocated. Some are duplicates. 58*9c5db199SXin Li # Listed below are added as of 4/13/17. 59*9c5db199SXin Li '94:eb:2c:10:06:74': ChameleonInfo('00:1F:84:01:03:88'), 60*9c5db199SXin Li '94:eb:2c:10:06:a9': ChameleonInfo('00:1F:84:01:03:6C'), 61*9c5db199SXin Li '94:eb:2c:10:06:89': ChameleonInfo('00:1F:84:01:03:40'), 62*9c5db199SXin Li '94:eb:2c:10:06:a3': ChameleonInfo('00:1F:84:01:03:24'), 63*9c5db199SXin Li '94:eb:2c:10:06:99': ChameleonInfo('00:1F:84:01:03:93'), 64*9c5db199SXin Li '94:eb:2c:10:06:9a': ChameleonInfo('00:1F:84:01:03:B1'), 65*9c5db199SXin Li '94:eb:2c:10:06:90': ChameleonInfo('00:1F:84:01:03:6E'), 66*9c5db199SXin Li '94:eb:2c:00:01:00': ChameleonInfo('00:1F:84:01:03:54'), 67*9c5db199SXin Li '94:eb:2c:00:01:01': ChameleonInfo('00:1F:84:01:03:3E'), 68*9c5db199SXin Li '94:eb:2c:10:06:9e': ChameleonInfo('00:1F:84:01:03:97'), 69*9c5db199SXin Li '94:eb:2c:10:06:9f': ChameleonInfo('00:1F:84:01:03:49'), 70*9c5db199SXin Li 71*9c5db199SXin Li # Listed below added as of 5/12/17. 72*9c5db199SXin Li '94:eb:2c:10:06:98': ChameleonInfo('00:1F:84:01:03:65'), 73*9c5db199SXin Li '94:eb:2c:00:01:19': ChameleonInfo('00:1F:84:01:03:91'), 74*9c5db199SXin Li '94:eb:2c:10:06:8a': ChameleonInfo('00:1F:84:01:03:AB'), 75*9c5db199SXin Li '94:eb:2c:00:01:1d': ChameleonInfo('00:1F:84:01:03:A6'), 76*9c5db199SXin Li '94:eb:2c:10:06:95': ChameleonInfo('00:1F:84:01:03:66'), 77*9c5db199SXin Li 78*9c5db199SXin Li # Lars device changed as of 10/17/17. 79*9c5db199SXin Li '94:eb:2c:00:01:1a': ChameleonInfo('00:1F:84:01:03:20') 80*9c5db199SXin Li} 81*9c5db199SXin Li 82*9c5db199SXin Liclass ChameleonInfoError(Exception): 83*9c5db199SXin Li """Error in chameleon_info.""" 84*9c5db199SXin Li pass 85*9c5db199SXin Li 86*9c5db199SXin Li 87*9c5db199SXin Lidef get_bluetooth_mac_address(chameleon_board): 88*9c5db199SXin Li """Gets bluetooth MAC address of a ChameleonBoard. 89*9c5db199SXin Li 90*9c5db199SXin Li @param chameleon_board: A ChameleonBoard object. 91*9c5db199SXin Li 92*9c5db199SXin Li @returns: A string for bluetooth MAC address of bluetooth module on the 93*9c5db199SXin Li audio board. 94*9c5db199SXin Li 95*9c5db199SXin Li @raises: ChameleonInfoError if bluetooth MAC address of this Chameleon 96*9c5db199SXin Li board can not be found. 97*9c5db199SXin Li 98*9c5db199SXin Li """ 99*9c5db199SXin Li chameleon_mac_address = chameleon_board.get_mac_address().lower() 100*9c5db199SXin Li if chameleon_mac_address not in _CHAMELEON_BOARD_INFO: 101*9c5db199SXin Li raise ChameleonInfoError( 102*9c5db199SXin Li 'Chameleon info not found for %s' % chameleon_mac_address) 103*9c5db199SXin Li board_info = _CHAMELEON_BOARD_INFO[chameleon_mac_address] 104*9c5db199SXin Li logging.debug('Chameleon board info: %r', board_info) 105*9c5db199SXin Li return board_info.bluetooth_mac_address 106