103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/* 203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Copyright (C) 2013 The Android Open Source Project 303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * you may not use this file except in compliance with the License. 603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * You may obtain a copy of the License at 703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 1003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 1103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 1203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * See the License for the specific language governing permissions and 1403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * limitations under the License. 1503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 1603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battapackage com.android.bluetooth.gatt; 1703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport android.util.Log; 1903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.ArrayList; 2003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.HashMap; 2103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.Iterator; 2203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.List; 2303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.Map; 2403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaimport java.util.UUID; 2503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 2603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaclass HandleMap { 2703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta private static final boolean DBG = GattServiceConfig.DBG; 2803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta private static final String TAG = GattServiceConfig.TAG_PREFIX + "HandleMap"; 2903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 3003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta public static final int TYPE_UNDEFINED = 0; 3103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta public static final int TYPE_SERVICE = 1; 3203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta public static final int TYPE_CHARACTERISTIC = 2; 3303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta public static final int TYPE_DESCRIPTOR = 3; 3403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 3503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta class Entry { 3603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int serverIf = 0; 3703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int type = TYPE_UNDEFINED; 3803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int handle = 0; 3903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta UUID uuid = null; 4003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int instance = 0; 4103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int serviceType = 0; 4203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int serviceHandle = 0; 4303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int charHandle = 0; 4403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta boolean started = false; 45a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang boolean advertisePreferred = false; 4603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 4703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry(int serverIf, int handle, UUID uuid, int serviceType, int instance) { 4803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serverIf = serverIf; 4903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.type = TYPE_SERVICE; 5003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.handle = handle; 5103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.uuid = uuid; 5203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.instance = instance; 5303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serviceType = serviceType; 5403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 5503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 56a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang Entry(int serverIf, int handle, UUID uuid, int serviceType, int instance, 57a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang boolean advertisePreferred) { 58a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.serverIf = serverIf; 59a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.type = TYPE_SERVICE; 60a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.handle = handle; 61a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.uuid = uuid; 62a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.instance = instance; 63a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.serviceType = serviceType; 64a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang this.advertisePreferred = advertisePreferred; 65a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang } 66a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang 6703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry(int serverIf, int type, int handle, UUID uuid, int serviceHandle) { 6803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serverIf = serverIf; 6903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.type = type; 7003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.handle = handle; 7103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.uuid = uuid; 7203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.instance = instance; 7303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serviceHandle = serviceHandle; 7403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 7503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 7603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry(int serverIf, int type, int handle, UUID uuid, int serviceHandle, int charHandle) { 7703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serverIf = serverIf; 7803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.type = type; 7903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.handle = handle; 8003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.uuid = uuid; 8103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.instance = instance; 8203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.serviceHandle = serviceHandle; 8303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta this.charHandle = charHandle; 8403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 8503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 8603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 8703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta List<Entry> mEntries = null; 8803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Map<Integer, Integer> mRequestMap = null; 8903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int mLastCharacteristic = 0; 9003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 9103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta HandleMap() { 9203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mEntries = new ArrayList<Entry>(); 9303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mRequestMap = new HashMap<Integer, Integer>(); 9403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 9503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 9603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void clear() { 9703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mEntries.clear(); 9803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mRequestMap.clear(); 9903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 10003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 101a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang void addService(int serverIf, int handle, UUID uuid, int serviceType, int instance, 102a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang boolean advertisePreferred) { 103a08fff0ae81757bdab00ae8865a906c711d5572fWei Wang mEntries.add(new Entry(serverIf, handle, uuid, serviceType, instance, advertisePreferred)); 10403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 10503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void addCharacteristic(int serverIf, int handle, UUID uuid, int serviceHandle) { 10703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mLastCharacteristic = handle; 10803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mEntries.add(new Entry(serverIf, TYPE_CHARACTERISTIC, handle, uuid, serviceHandle)); 10903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 11003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void addDescriptor(int serverIf, int handle, UUID uuid, int serviceHandle) { 11203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mEntries.add(new Entry(serverIf, TYPE_DESCRIPTOR, handle, uuid, serviceHandle, mLastCharacteristic)); 11303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 11403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void setStarted(int serverIf, int handle, boolean started) { 11603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for(Entry entry : mEntries) { 11703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.type != TYPE_SERVICE || 11803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.serverIf != serverIf || 11903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.handle != handle) 12003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta continue; 12103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.started = started; 12303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 12403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 12503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 12603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry getByHandle(int handle) { 12803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for(Entry entry : mEntries) { 12903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.handle == handle) 13003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return entry; 13103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 13203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Log.e(TAG, "getByHandle() - Handle " + handle + " not found!"); 13303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return null; 13403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 13503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 13603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int getServiceHandle(UUID uuid, int serviceType, int instance) { 13703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for(Entry entry : mEntries) { 13803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.type == TYPE_SERVICE && 13903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.serviceType == serviceType && 14003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.instance == instance && 14103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.uuid.equals(uuid)) { 14203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return entry.handle; 14303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 14403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 14503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Log.e(TAG, "getServiceHandle() - UUID " + uuid + " not found!"); 14603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return 0; 14703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 14803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 14903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int getCharacteristicHandle(int serviceHandle, UUID uuid, int instance) { 15003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for(Entry entry : mEntries) { 15103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.type == TYPE_CHARACTERISTIC && 15203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.serviceHandle == serviceHandle && 15303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.instance == instance && 15403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.uuid.equals(uuid)) { 15503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return entry.handle; 15603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 15703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 15803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Log.e(TAG, "getCharacteristicHandle() - Service " + serviceHandle 15903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta + ", UUID " + uuid + " not found!"); 16003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return 0; 16103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 16203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 16303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void deleteService(int serverIf, int serviceHandle) { 16403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for(Iterator <Entry> it = mEntries.iterator(); it.hasNext();) { 16503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry entry = it.next(); 16603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.serverIf != serverIf) continue; 16703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 16803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (entry.handle == serviceHandle || 16903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta entry.serviceHandle == serviceHandle) 17003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta it.remove(); 17103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 17203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 17303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 17403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta List<Entry> getEntries() { 17503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return mEntries; 17603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 17703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 17803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void addRequest(int requestId, int handle) { 17903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mRequestMap.put(requestId, handle); 18003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 18103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 18203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta void deleteRequest(int requestId) { 18303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mRequestMap.remove(requestId); 18403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 18503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 18603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Entry getByRequestId(int requestId) { 18703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Integer handle = mRequestMap.get(requestId); 18803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (handle == null) { 18903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta Log.e(TAG, "getByRequestId() - Request ID " + requestId + " not found!"); 19003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return null; 19103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 19203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return getByHandle(handle); 19303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 19403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 19503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 19603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /** 19703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Logs debug information. 19803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 199a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach void dump(StringBuilder sb) { 200a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(" Entries: " + mEntries.size() + "\n"); 201a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(" Requests: " + mRequestMap.size() + "\n"); 20203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (Entry entry : mEntries) { 204a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(" " + entry.serverIf + ": [" + entry.handle + "] "); 20503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta switch(entry.type) { 20603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta case TYPE_SERVICE: 207a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append("Service " + entry.uuid); 208a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(", started " + entry.started); 20903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta break; 21003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta case TYPE_CHARACTERISTIC: 212a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(" Characteristic " + entry.uuid); 21303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta break; 21403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta case TYPE_DESCRIPTOR: 216a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append(" Descriptor " + entry.uuid); 21703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta break; 21803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 21903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 220a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach sb.append("\n"); 221a02de6484f9b6cac6b8c811edae11be55746b555Andre Eisenbach } 22203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 22303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 224