• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
isAudioSource(ParcelUuid uuid)72     public static boolean isAudioSource(ParcelUuid uuid) {
73         return uuid.equals(AudioSource);
74     }
75 
isAudioSink(ParcelUuid uuid)76     public static boolean isAudioSink(ParcelUuid uuid) {
77         return uuid.equals(AudioSink);
78     }
79 
isAdvAudioDist(ParcelUuid uuid)80     public static boolean isAdvAudioDist(ParcelUuid uuid) {
81         return uuid.equals(AdvAudioDist);
82     }
83 
isHandsfree(ParcelUuid uuid)84     public static boolean isHandsfree(ParcelUuid uuid) {
85         return uuid.equals(Handsfree);
86     }
87 
isHeadset(ParcelUuid uuid)88     public static boolean isHeadset(ParcelUuid uuid) {
89         return uuid.equals(HSP);
90     }
91 
isAvrcpController(ParcelUuid uuid)92     public static boolean isAvrcpController(ParcelUuid uuid) {
93         return uuid.equals(AvrcpController);
94     }
95 
isAvrcpTarget(ParcelUuid uuid)96     public static boolean isAvrcpTarget(ParcelUuid uuid) {
97         return uuid.equals(AvrcpTarget);
98     }
99 
isInputDevice(ParcelUuid uuid)100     public static boolean isInputDevice(ParcelUuid uuid) {
101         return uuid.equals(Hid);
102     }
103 
isPanu(ParcelUuid uuid)104     public static boolean isPanu(ParcelUuid uuid) {
105         return uuid.equals(PANU);
106     }
107 
isNap(ParcelUuid uuid)108     public static boolean isNap(ParcelUuid uuid) {
109         return uuid.equals(NAP);
110     }
111 
isBnep(ParcelUuid uuid)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      */
isUuidPresent(ParcelUuid[] uuidArray, ParcelUuid uuid)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      */
containsAnyUuid(ParcelUuid[] uuidA, ParcelUuid[] uuidB)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      */
containsAllUuids(ParcelUuid[] uuidA, ParcelUuid[] uuidB)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      */
getServiceIdentifierFromParcelUuid(ParcelUuid parcelUuid)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