1ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh/* 22c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta * Copyright (C) 2012-2014 The Android Open Source Project 3ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * 4ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * Licensed under the Apache License, Version 2.0 (the "License"); 5ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * you may not use this file except in compliance with the License. 6ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * You may obtain a copy of the License at 7ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * 8ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * http://www.apache.org/licenses/LICENSE-2.0 9ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * 10ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * Unless required by applicable law or agreed to in writing, software 11ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * distributed under the License is distributed on an "AS IS" BASIS, 12ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * See the License for the specific language governing permissions and 14ede67c26e7b2564ea35db6d9b3027a269c150e13Zhihai Xu * limitations under the License. 15ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 16ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 17ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshpackage com.android.bluetooth.btservice; 18ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 19ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.bluetooth.BluetoothAdapter; 20ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.bluetooth.BluetoothClass; 21ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.bluetooth.BluetoothDevice; 222c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Guptaimport android.bluetooth.BluetoothMasInstance; 23ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.content.Context; 24ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.content.Intent; 25ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.os.Handler; 26ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.os.Message; 27ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.os.ParcelUuid; 28ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport android.util.Log; 29ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 30ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport com.android.bluetooth.Utils; 31ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport com.android.bluetooth.btservice.RemoteDevices.DeviceProperties; 32ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 337aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelliimport java.util.concurrent.atomic.AtomicInteger; 34ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport java.util.ArrayList; 357aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelliimport java.util.Arrays; 36ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport java.util.HashMap; 37ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshimport java.util.LinkedList; 38ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 39ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 40ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganeshfinal class RemoteDevices { 41fd1da115cbf09b7dd9bca3c7d3a4fb816a835dc5Matthew Xie private static final boolean DBG = false; 42ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static final String TAG = "BluetoothRemoteDevices"; 43ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 4474ae04c73312403e89db0f8e9bd9601d403b4783fredc 45ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static BluetoothAdapter mAdapter; 46ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static AdapterService mAdapterService; 47ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static ArrayList<BluetoothDevice> mSdpTracker; 482c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta private static ArrayList<BluetoothDevice> mSdpMasTracker; 49ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 50ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private Object mObject = new Object(); 51ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 52ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static final int UUID_INTENT_DELAY = 6000; 53ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private static final int MESSAGE_UUID_INTENT = 1; 54ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 552c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta private static final int MAS_INSTANCE_INTENT_DELAY = 6000; 562c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta private static final int MESSAGE_MAS_INSTANCE_INTENT = 2; 572c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 58ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private HashMap<BluetoothDevice, DeviceProperties> mDevices; 59ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 6074ae04c73312403e89db0f8e9bd9601d403b4783fredc RemoteDevices(AdapterService service) { 61ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mAdapter = BluetoothAdapter.getDefaultAdapter(); 62ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mAdapterService = service; 63ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mSdpTracker = new ArrayList<BluetoothDevice>(); 642c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mSdpMasTracker = new ArrayList<BluetoothDevice>(); 65ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mDevices = new HashMap<BluetoothDevice, DeviceProperties>(); 66ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 67ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 68ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 6974ae04c73312403e89db0f8e9bd9601d403b4783fredc void cleanup() { 7015d36984a79d6e35c659edb0efdf929f0b526bd5Fred if (mSdpTracker !=null) 7115d36984a79d6e35c659edb0efdf929f0b526bd5Fred mSdpTracker.clear(); 7215d36984a79d6e35c659edb0efdf929f0b526bd5Fred 732c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta if (mSdpMasTracker != null) 742c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mSdpMasTracker.clear(); 752c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 7615d36984a79d6e35c659edb0efdf929f0b526bd5Fred if (mDevices != null) 7715d36984a79d6e35c659edb0efdf929f0b526bd5Fred mDevices.clear(); 786654f5c903de510a70f9e72cd5ad7837b615d93ffredc } 796654f5c903de510a70f9e72cd5ad7837b615d93ffredc 803a91ac3eefe23a22aa0abc1a89ac253a2b0dbae9Nick Kralevich @Override 813a91ac3eefe23a22aa0abc1a89ac253a2b0dbae9Nick Kralevich public Object clone() throws CloneNotSupportedException { 82ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh throw new CloneNotSupportedException(); 83ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 84ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 85ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties getDeviceProperties(BluetoothDevice device) { 86ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mDevices) { 87ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mDevices.get(device); 88ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 89ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 90ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 91ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh BluetoothDevice getDevice(byte[] address) { 92ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh for (BluetoothDevice dev : mDevices.keySet()) { 93ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (dev.getAddress().equals(Utils.getAddressStringFromByte(address))) { 94ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return dev; 95ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 96ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 97ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return null; 98ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 99ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 100ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties addDeviceProperties(byte[] address) { 101ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mDevices) { 102ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties prop = new DeviceProperties(); 103ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh BluetoothDevice device = 104ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mAdapter.getRemoteDevice(Utils.getAddressStringFromByte(address)); 10574a598e0a8d50343227e3f96bbe56c6be1c240f9Ganesh Ganapathi Batta prop.mAddress = address; 106ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mDevices.put(device, prop); 107ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return prop; 108ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 109ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 110ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 111ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh class DeviceProperties { 112ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private String mName; 113ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private byte[] mAddress; 114ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private int mBluetoothClass; 115ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private short mRssi; 116ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private ParcelUuid[] mUuids; 117ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private int mDeviceType; 118ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private String mAlias; 119ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private int mBondState; 120ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 121ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties() { 122ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mBondState = BluetoothDevice.BOND_NONE; 123ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 124ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 125ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 126ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mName 127ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 128ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh String getName() { 129ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 130ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mName; 131ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 132ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 133ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 134ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 135ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mClass 136ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 137ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh int getBluetoothClass() { 138ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 139ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mBluetoothClass; 140ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 141ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 142ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 143ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 144ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mUuids 145ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 146ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh ParcelUuid[] getUuids() { 147ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 148ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mUuids; 149ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 150ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 151ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 152ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 153ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mAddress 154ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 155ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh byte[] getAddress() { 156ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 157ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mAddress; 158ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 159ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 160ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 161ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 162ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return mRssi 163ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 164ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh short getRssi() { 165ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 166ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mRssi; 167ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 168ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 169ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 170ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 171ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return mDeviceType 172ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 173ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh int getDeviceType() { 174ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 175ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mDeviceType; 176ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 177ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 178ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 179ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 180ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mAlias 181ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 182ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh String getAlias() { 183ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 184ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mAlias; 185ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 186ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 187ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 188ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 189ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @param mAlias the mAlias to set 190ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 191ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh void setAlias(String mAlias) { 192ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 19374277677d2a51d7c8ff60a778889f71e69763c21Matthew Xie this.mAlias = mAlias; 194ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mAdapterService.setDevicePropertyNative(mAddress, 195ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh AbstractionLayer.BT_PROPERTY_REMOTE_FRIENDLY_NAME, mAlias.getBytes()); 196ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 197ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 198ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 199ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 200ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @param mBondState the mBondState to set 201ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 202ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh void setBondState(int mBondState) { 203ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 204ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh this.mBondState = mBondState; 205d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T if (mBondState == BluetoothDevice.BOND_NONE) 206d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T { 207d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T /* Clearing the Uuids local copy when the device is unpaired. If not cleared, 208d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T cachedBluetoothDevice issued a connect using the local cached copy of uuids, 209d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T without waiting for the ACTION_UUID intent. 210d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T This was resulting in multiple calls to connect().*/ 211d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T mUuids = null; 212d807ba48ed4418c1a60549abe1c3a98ced8c428dSreenidhi T } 213ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 214ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 215ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 216ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh /** 217ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh * @return the mBondState 218ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh */ 219ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh int getBondState() { 220ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh synchronized (mObject) { 221ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return mBondState; 222ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 223ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 2247aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelli } 225ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 226ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private void sendUuidIntent(BluetoothDevice device) { 227ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties prop = getDeviceProperties(device); 228ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Intent intent = new Intent(BluetoothDevice.ACTION_UUID); 229ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); 230c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc intent.putExtra(BluetoothDevice.EXTRA_UUID, prop == null? null: prop.mUuids); 23134409f35db6e9ca74f727e3fe92141388ae5b069Ganesh Ganapathi Batta mAdapterService.initProfilePriorities(device, prop.mUuids); 23274ae04c73312403e89db0f8e9bd9601d403b4783fredc mAdapterService.sendBroadcast(intent, AdapterService.BLUETOOTH_ADMIN_PERM); 233c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc 234c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc //Remove the outstanding UUID request 235c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc mSdpTracker.remove(device); 236ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 237ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 23811b41d8123241ba8e693e21c4db308bacff23f57Mudumba Ananth 2392c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta private void sendMasInstanceIntent(BluetoothDevice device, 2402c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta ArrayList<BluetoothMasInstance> instances) { 2412c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta Intent intent = new Intent(BluetoothDevice.ACTION_MAS_INSTANCE); 2422c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 2432c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); 2442c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta if (instances != null) intent.putExtra(BluetoothDevice.EXTRA_MAS_INSTANCE, instances); 2452c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mAdapterService.sendBroadcast(intent, AdapterService.BLUETOOTH_ADMIN_PERM); 2462c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 2472c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta //Remove the outstanding UUID request 2482c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mSdpMasTracker.remove(device); 2492c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 250ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh void devicePropertyChangedCallback(byte[] address, int[] types, byte[][] values) { 251ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Intent intent; 252ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh byte[] val; 253ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh int type; 254ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh BluetoothDevice bdDevice = getDevice(address); 255ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties device; 256ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (bdDevice == null) { 257ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh device = addDeviceProperties(address); 258ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh bdDevice = getDevice(address); 259ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } else { 260ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh device = getDeviceProperties(bdDevice); 261ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 262ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 263ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh for (int j = 0; j < types.length; j++) { 264ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh type = types[j]; 265ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh val = values[j]; 266caa3723eaa20e57aac086d54a41106108503debczzy if(val.length <= 0) 267caa3723eaa20e57aac086d54a41106108503debczzy errorLog("devicePropertyChangedCallback: bdDevice: " + bdDevice + ", value is empty for type: " + type); 268caa3723eaa20e57aac086d54a41106108503debczzy else { 269caa3723eaa20e57aac086d54a41106108503debczzy synchronized(mObject) { 270caa3723eaa20e57aac086d54a41106108503debczzy switch (type) { 271caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_BDNAME: 272caa3723eaa20e57aac086d54a41106108503debczzy device.mName = new String(val); 273caa3723eaa20e57aac086d54a41106108503debczzy intent = new Intent(BluetoothDevice.ACTION_NAME_CHANGED); 274caa3723eaa20e57aac086d54a41106108503debczzy intent.putExtra(BluetoothDevice.EXTRA_DEVICE, bdDevice); 275caa3723eaa20e57aac086d54a41106108503debczzy intent.putExtra(BluetoothDevice.EXTRA_NAME, device.mName); 276caa3723eaa20e57aac086d54a41106108503debczzy intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); 277caa3723eaa20e57aac086d54a41106108503debczzy mAdapterService.sendBroadcast(intent, mAdapterService.BLUETOOTH_PERM); 278caa3723eaa20e57aac086d54a41106108503debczzy debugLog("Remote Device name is: " + device.mName); 279caa3723eaa20e57aac086d54a41106108503debczzy break; 280caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_REMOTE_FRIENDLY_NAME: 281caa3723eaa20e57aac086d54a41106108503debczzy if (device.mAlias != null) { 282caa3723eaa20e57aac086d54a41106108503debczzy System.arraycopy(val, 0, device.mAlias, 0, val.length); 283caa3723eaa20e57aac086d54a41106108503debczzy } 2840322ae1f5e8ea55c391145e7925cb5962a97c11fGanesh Ganapathi Batta else { 2850322ae1f5e8ea55c391145e7925cb5962a97c11fGanesh Ganapathi Batta device.mAlias = new String(val); 2860322ae1f5e8ea55c391145e7925cb5962a97c11fGanesh Ganapathi Batta } 287caa3723eaa20e57aac086d54a41106108503debczzy break; 288caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_BDADDR: 289caa3723eaa20e57aac086d54a41106108503debczzy device.mAddress = val; 290caa3723eaa20e57aac086d54a41106108503debczzy debugLog("Remote Address is:" + Utils.getAddressStringFromByte(val)); 291caa3723eaa20e57aac086d54a41106108503debczzy break; 292caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_CLASS_OF_DEVICE: 293caa3723eaa20e57aac086d54a41106108503debczzy device.mBluetoothClass = Utils.byteArrayToInt(val); 294caa3723eaa20e57aac086d54a41106108503debczzy intent = new Intent(BluetoothDevice.ACTION_CLASS_CHANGED); 295caa3723eaa20e57aac086d54a41106108503debczzy intent.putExtra(BluetoothDevice.EXTRA_DEVICE, bdDevice); 296caa3723eaa20e57aac086d54a41106108503debczzy intent.putExtra(BluetoothDevice.EXTRA_CLASS, 297caa3723eaa20e57aac086d54a41106108503debczzy new BluetoothClass(device.mBluetoothClass)); 298caa3723eaa20e57aac086d54a41106108503debczzy intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); 299caa3723eaa20e57aac086d54a41106108503debczzy mAdapterService.sendBroadcast(intent, mAdapterService.BLUETOOTH_PERM); 300caa3723eaa20e57aac086d54a41106108503debczzy debugLog("Remote class is:" + device.mBluetoothClass); 301caa3723eaa20e57aac086d54a41106108503debczzy break; 302caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_UUIDS: 303caa3723eaa20e57aac086d54a41106108503debczzy int numUuids = val.length/AbstractionLayer.BT_UUID_SIZE; 304caa3723eaa20e57aac086d54a41106108503debczzy device.mUuids = Utils.byteArrayToUuid(val); 305caa3723eaa20e57aac086d54a41106108503debczzy sendUuidIntent(bdDevice); 306caa3723eaa20e57aac086d54a41106108503debczzy break; 307caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_TYPE_OF_DEVICE: 308d235269f06e99d76a0f63c8fe9e224e0f951f799Matthew Xie // The device type from hal layer, defined in bluetooth.h, 309d235269f06e99d76a0f63c8fe9e224e0f951f799Matthew Xie // matches the type defined in BluetoothDevice.java 310caa3723eaa20e57aac086d54a41106108503debczzy device.mDeviceType = Utils.byteArrayToInt(val); 311caa3723eaa20e57aac086d54a41106108503debczzy break; 312caa3723eaa20e57aac086d54a41106108503debczzy case AbstractionLayer.BT_PROPERTY_REMOTE_RSSI: 3133cedf3d57aff20e1876a5b450f41b05e975cb8e0Matthew Xie // RSSI from hal is in one byte 3143cedf3d57aff20e1876a5b450f41b05e975cb8e0Matthew Xie device.mRssi = val[0]; 315caa3723eaa20e57aac086d54a41106108503debczzy break; 316caa3723eaa20e57aac086d54a41106108503debczzy } 317ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 318ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 319ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 320ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 321ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 322ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh void deviceFoundCallback(byte[] address) { 323ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh // The device properties are already registered - we can send the intent 324ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh // now 325ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh BluetoothDevice device = getDevice(address); 326ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh debugLog("deviceFoundCallback: Remote Address is:" + device); 327ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh DeviceProperties deviceProp = getDeviceProperties(device); 328ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (deviceProp == null) { 329ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh errorLog("Device Properties is null for Device:" + device); 330ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh return; 331ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 332ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 333ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Intent intent = new Intent(BluetoothDevice.ACTION_FOUND); 334ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); 335ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh intent.putExtra(BluetoothDevice.EXTRA_CLASS, 336ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh new BluetoothClass(Integer.valueOf(deviceProp.mBluetoothClass))); 337ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh intent.putExtra(BluetoothDevice.EXTRA_RSSI, deviceProp.mRssi); 338ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh intent.putExtra(BluetoothDevice.EXTRA_NAME, deviceProp.mName); 339ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 34074ae04c73312403e89db0f8e9bd9601d403b4783fredc mAdapterService.sendBroadcast(intent, mAdapterService.BLUETOOTH_PERM); 341ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 342ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 34301a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy void aclStateChangeCallback(int status, byte[] address, int newState) { 34401a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy BluetoothDevice device = getDevice(address); 34501a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy 34601a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy if (device == null) { 34701a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy errorLog("aclStateChangeCallback: Device is NULL"); 34801a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy return; 34901a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy } 35001a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy 3517aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelli DeviceProperties prop = getDeviceProperties(device); 3527aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelli if (prop == null) { 3537aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelli errorLog("aclStateChangeCallback reported unknown device " + Arrays.toString(address)); 3547aa3a71e508e4f95a0a74f41ab8389979809191bJay Civelli } 35501a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy Intent intent = null; 35601a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy if (newState == AbstractionLayer.BT_ACL_STATE_CONNECTED) { 35701a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy intent = new Intent(BluetoothDevice.ACTION_ACL_CONNECTED); 35801a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy debugLog("aclStateChangeCallback: State:Connected to Device:" + device); 35901a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy } else { 36001a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy intent = new Intent(BluetoothDevice.ACTION_ACL_DISCONNECTED); 36101a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy debugLog("aclStateChangeCallback: State:DisConnected to Device:" + device); 36201a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy } 36301a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); 36401a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); 36574ae04c73312403e89db0f8e9bd9601d403b4783fredc mAdapterService.sendBroadcast(intent, mAdapterService.BLUETOOTH_PERM); 36601a8cf98f070a6996b2e8974edc229ac402f3f0cKausik Sinnaswamy } 367ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 3682c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta void deviceMasInstancesFoundCallback(int status, byte[] address, String[] name, int[] scn, 3692c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta int[] id, int[] msgtype) { 3702c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta BluetoothDevice device = getDevice(address); 3712c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3722c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta if (device == null) { 3732c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta errorLog("deviceMasInstancesFoundCallback: Device is NULL"); 3742c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta return; 3752c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 3762c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3772c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta debugLog("deviceMasInstancesFoundCallback: found " + name.length + " instances"); 3782c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3792c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta ArrayList<BluetoothMasInstance> instances = new ArrayList<BluetoothMasInstance>(); 3802c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3812c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta for (int i = 0; i < name.length; i++) { 3822c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta BluetoothMasInstance inst = new BluetoothMasInstance(id[i], name[i], 3832c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta scn[i], msgtype[i]); 3842c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3852c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta debugLog(inst.toString()); 3862c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3872c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta instances.add(inst); 3882c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 3892c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 3902c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta sendMasInstanceIntent(device, instances); 3912c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 3922c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 393c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc void fetchUuids(BluetoothDevice device) { 394ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (mSdpTracker.contains(device)) return; 395ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mSdpTracker.add(device); 396ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 397ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Message message = mHandler.obtainMessage(MESSAGE_UUID_INTENT); 398ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh message.obj = device; 399ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh mHandler.sendMessageDelayed(message, UUID_INTENT_DELAY); 400ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 401c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc //mAdapterService.getDevicePropertyNative(Utils.getBytesFromAddress(device.getAddress()), AbstractionLayer.BT_PROPERTY_UUIDS); 402c55ac7d42cf2d78c7edc67abf6c66813245b2c93fredc mAdapterService.getRemoteServicesNative(Utils.getBytesFromAddress(device.getAddress())); 403ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 404ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 4052c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta void fetchMasInstances(BluetoothDevice device) { 4062c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta if (mSdpMasTracker.contains(device)) return; 4072c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mSdpMasTracker.add(device); 4082c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 4092c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta Message message = mHandler.obtainMessage(MESSAGE_MAS_INSTANCE_INTENT); 4102c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta message.obj = device; 4112c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mHandler.sendMessageDelayed(message, MAS_INSTANCE_INTENT_DELAY); 4122c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 4132c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta mAdapterService.getRemoteMasInstancesNative(Utils.getBytesFromAddress(device.getAddress())); 4142c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 4152c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta 416ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private final Handler mHandler = new Handler() { 417ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh @Override 418ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh public void handleMessage(Message msg) { 419ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh switch (msg.what) { 420ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh case MESSAGE_UUID_INTENT: 421ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh BluetoothDevice device = (BluetoothDevice)msg.obj; 422ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (device != null) { 423ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh sendUuidIntent(device); 424ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 425ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh break; 4262c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta case MESSAGE_MAS_INSTANCE_INTENT: 4272c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta BluetoothDevice dev = (BluetoothDevice)msg.obj; 4282c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta if (dev != null) { 4292c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta sendMasInstanceIntent(dev, null); 4302c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta } 4312c0df0560ad5ae3fd6022b17b17a6a70143e216aHemant Gupta break; 432ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 433ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 434ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh }; 435ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 436ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private void errorLog(String msg) { 437ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Log.e(TAG, msg); 438ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 439ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 440ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private void debugLog(String msg) { 4416458cffaca286611e898c75ad86e2d98c89008b6Matthew Xie if (DBG) Log.d(TAG, msg); 442ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 443ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 444ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private void infoLog(String msg) { 445ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh if (DBG) Log.i(TAG, msg); 446ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 447ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh 448ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh private void warnLog(String msg) { 449ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh Log.w(TAG, msg); 450ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh } 45174ae04c73312403e89db0f8e9bd9601d403b4783fredc 452ff4f17bf64978d0738c66e1b6dd70be8664efc24Jaikumar Ganesh} 453