1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.bluetooth; 18 19 import android.os.ParcelUuid; 20 21 import java.util.Arrays; 22 import java.util.HashSet; 23 import java.util.UUID; 24 25 /** 26 * Static helper methods and constants to decode the ParcelUuid of remote devices. 27 * @hide 28 */ 29 public final class BluetoothUuid { 30 31 /* See Bluetooth Assigned Numbers document - SDP section, to get the values of UUIDs 32 * for the various services. 33 * 34 * The following 128 bit values are calculated as: 35 * uuid * 2^96 + BASE_UUID 36 */ 37 public static final ParcelUuid AudioSink = 38 ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); 39 public static final ParcelUuid AudioSource = 40 ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); 41 public static final ParcelUuid AdvAudioDist = 42 ParcelUuid.fromString("0000110D-0000-1000-8000-00805F9B34FB"); 43 public static final ParcelUuid HSP = 44 ParcelUuid.fromString("00001108-0000-1000-8000-00805F9B34FB"); 45 public static final ParcelUuid HSP_AG = 46 ParcelUuid.fromString("00001112-0000-1000-8000-00805F9B34FB"); 47 public static final ParcelUuid Handsfree = 48 ParcelUuid.fromString("0000111E-0000-1000-8000-00805F9B34FB"); 49 public static final ParcelUuid Handsfree_AG = 50 ParcelUuid.fromString("0000111F-0000-1000-8000-00805F9B34FB"); 51 public static final ParcelUuid AvrcpController = 52 ParcelUuid.fromString("0000110E-0000-1000-8000-00805F9B34FB"); 53 public static final ParcelUuid AvrcpTarget = 54 ParcelUuid.fromString("0000110C-0000-1000-8000-00805F9B34FB"); 55 public static final ParcelUuid ObexObjectPush = 56 ParcelUuid.fromString("00001105-0000-1000-8000-00805f9b34fb"); 57 public static final ParcelUuid Hid = 58 ParcelUuid.fromString("00001124-0000-1000-8000-00805f9b34fb"); 59 public static final ParcelUuid PANU = 60 ParcelUuid.fromString("00001115-0000-1000-8000-00805F9B34FB"); 61 public static final ParcelUuid NAP = 62 ParcelUuid.fromString("00001116-0000-1000-8000-00805F9B34FB"); 63 public static final ParcelUuid BNEP = 64 ParcelUuid.fromString("0000000f-0000-1000-8000-00805F9B34FB"); 65 public static final ParcelUuid PBAP_PSE = 66 ParcelUuid.fromString("0000112f-0000-1000-8000-00805F9B34FB"); 67 68 public static final ParcelUuid[] RESERVED_UUIDS = { 69 AudioSink, AudioSource, AdvAudioDist, HSP, Handsfree, AvrcpController, AvrcpTarget, 70 ObexObjectPush, PANU, NAP}; 71 72 public static boolean isAudioSource(ParcelUuid uuid) { 73 return uuid.equals(AudioSource); 74 } 75 76 public static boolean isAudioSink(ParcelUuid uuid) { 77 return uuid.equals(AudioSink); 78 } 79 80 public static boolean isAdvAudioDist(ParcelUuid uuid) { 81 return uuid.equals(AdvAudioDist); 82 } 83 84 public static boolean isHandsfree(ParcelUuid uuid) { 85 return uuid.equals(Handsfree); 86 } 87 88 public static boolean isHeadset(ParcelUuid uuid) { 89 return uuid.equals(HSP); 90 } 91 92 public static boolean isAvrcpController(ParcelUuid uuid) { 93 return uuid.equals(AvrcpController); 94 } 95 96 public static boolean isAvrcpTarget(ParcelUuid uuid) { 97 return uuid.equals(AvrcpTarget); 98 } 99 100 public static boolean isInputDevice(ParcelUuid uuid) { 101 return uuid.equals(Hid); 102 } 103 104 public static boolean isPanu(ParcelUuid uuid) { 105 return uuid.equals(PANU); 106 } 107 108 public static boolean isNap(ParcelUuid uuid) { 109 return uuid.equals(NAP); 110 } 111 112 public static boolean isBnep(ParcelUuid uuid) { 113 return uuid.equals(BNEP); 114 } 115 /** 116 * Returns true if ParcelUuid is present in uuidArray 117 * 118 * @param uuidArray - Array of ParcelUuids 119 * @param uuid 120 */ 121 public static boolean isUuidPresent(ParcelUuid[] uuidArray, ParcelUuid uuid) { 122 if ((uuidArray == null || uuidArray.length == 0) && uuid == null) 123 return true; 124 125 if (uuidArray == null) 126 return false; 127 128 for (ParcelUuid element: uuidArray) { 129 if (element.equals(uuid)) return true; 130 } 131 return false; 132 } 133 134 /** 135 * Returns true if there any common ParcelUuids in uuidA and uuidB. 136 * 137 * @param uuidA - List of ParcelUuids 138 * @param uuidB - List of ParcelUuids 139 * 140 */ 141 public static boolean containsAnyUuid(ParcelUuid[] uuidA, ParcelUuid[] uuidB) { 142 if (uuidA == null && uuidB == null) return true; 143 144 if (uuidA == null) { 145 return uuidB.length == 0 ? true : false; 146 } 147 148 if (uuidB == null) { 149 return uuidA.length == 0 ? true : false; 150 } 151 152 HashSet<ParcelUuid> uuidSet = new HashSet<ParcelUuid> (Arrays.asList(uuidA)); 153 for (ParcelUuid uuid: uuidB) { 154 if (uuidSet.contains(uuid)) return true; 155 } 156 return false; 157 } 158 159 /** 160 * Returns true if all the ParcelUuids in ParcelUuidB are present in 161 * ParcelUuidA 162 * 163 * @param uuidA - Array of ParcelUuidsA 164 * @param uuidB - Array of ParcelUuidsB 165 * 166 */ 167 public static boolean containsAllUuids(ParcelUuid[] uuidA, ParcelUuid[] uuidB) { 168 if (uuidA == null && uuidB == null) return true; 169 170 if (uuidA == null) { 171 return uuidB.length == 0 ? true : false; 172 } 173 174 if (uuidB == null) return true; 175 176 HashSet<ParcelUuid> uuidSet = new HashSet<ParcelUuid> (Arrays.asList(uuidA)); 177 for (ParcelUuid uuid: uuidB) { 178 if (!uuidSet.contains(uuid)) return false; 179 } 180 return true; 181 } 182 183 /** 184 * Extract the Service Identifier or the actual uuid from the Parcel Uuid. 185 * For example, if 0000110B-0000-1000-8000-00805F9B34FB is the parcel Uuid, 186 * this function will return 110B 187 * @param parcelUuid 188 * @return the service identifier. 189 */ 190 public static int getServiceIdentifierFromParcelUuid(ParcelUuid parcelUuid) { 191 UUID uuid = parcelUuid.getUuid(); 192 long value = (uuid.getMostSignificantBits() & 0x0000FFFF00000000L) >>> 32; 193 return (int)value; 194 } 195 } 196