blob: 36035ca4db0ce4b56a2d856768d425412bc5b2d5 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.bluetooth;
/**
* The Android Bluetooth API is not finalized, and *will* change. Use at your
* own risk.
*
* Static helper methods and constants to decode the device class bit vector
* returned by the Bluetooth API.
*
* The Android Bluetooth API returns a 32-bit integer to represent the device
* class. This is actually a bit vector, the format defined at
* http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
* (login required). This class provides static helper methods and constants to
* determine what Service Class(es), Major Class, and Minor Class are encoded
* in a 32-bit device class.
*
* Each of the helper methods takes the 32-bit integer device class as an
* argument.
*
* @hide
*/
public class DeviceClass {
// Baseband class information
// See http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
public static final int SERVICE_CLASS_BITMASK = 0xFFE000;
public static final int SERVICE_CLASS_LIMITED_DISCOVERABILITY = 0x002000;
public static final int SERVICE_CLASS_POSITIONING = 0x010000;
public static final int SERVICE_CLASS_NETWORKING = 0x020000;
public static final int SERVICE_CLASS_RENDER = 0x040000;
public static final int SERVICE_CLASS_CAPTURE = 0x080000;
public static final int SERVICE_CLASS_OBJECT_TRANSFER = 0x100000;
public static final int SERVICE_CLASS_AUDIO = 0x200000;
public static final int SERVICE_CLASS_TELEPHONY = 0x400000;
public static final int SERVICE_CLASS_INFORMATION = 0x800000;
public static final int MAJOR_CLASS_BITMASK = 0x001F00;
public static final int MAJOR_CLASS_MISC = 0x000000;
public static final int MAJOR_CLASS_COMPUTER = 0x000100;
public static final int MAJOR_CLASS_PHONE = 0x000200;
public static final int MAJOR_CLASS_NETWORKING = 0x000300;
public static final int MAJOR_CLASS_AUDIO_VIDEO = 0x000400;
public static final int MAJOR_CLASS_PERIPHERAL = 0x000500;
public static final int MAJOR_CLASS_IMAGING = 0x000600;
public static final int MAJOR_CLASS_WEARABLE = 0x000700;
public static final int MAJOR_CLASS_TOY = 0x000800;
public static final int MAJOR_CLASS_MEDICAL = 0x000900;
public static final int MAJOR_CLASS_UNCATEGORIZED = 0x001F00;
// Minor classes for the AUDIO_VIDEO major class
public static final int MINOR_CLASS_AUDIO_VIDEO_BITMASK = 0x0000FC;
public static final int MINOR_CLASS_AUDIO_VIDEO_UNCATEGORIZED = 0x000000;
public static final int MINOR_CLASS_AUDIO_VIDEO_HEADSET = 0x000004;
public static final int MINOR_CLASS_AUDIO_VIDEO_HANDSFREE = 0x000008;
public static final int MINOR_CLASS_AUDIO_VIDEO_MICROPHONE = 0x000010;
public static final int MINOR_CLASS_AUDIO_VIDEO_LOUDSPEAKER = 0x000014;
public static final int MINOR_CLASS_AUDIO_VIDEO_HEADPHONES = 0x000018;
public static final int MINOR_CLASS_AUDIO_VIDEO_PORTABLE_AUDIO = 0x00001C;
public static final int MINOR_CLASS_AUDIO_VIDEO_CAR_AUDIO = 0x000020;
public static final int MINOR_CLASS_AUDIO_VIDEO_SET_TOP_BOX = 0x000024;
public static final int MINOR_CLASS_AUDIO_VIDEO_HIFI_AUDIO = 0x000028;
public static final int MINOR_CLASS_AUDIO_VIDEO_VCR = 0x00002C;
public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_CAMERA = 0x000030;
public static final int MINOR_CLASS_AUDIO_VIDEO_CAMCORDER = 0x000034;
public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_MONITOR = 0x000038;
public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER = 0x00003C;
public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_CONFERENCING = 0x000040;
public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_GAMING_TOY = 0x000048;
// Indicates the Bluetooth API could not retrieve the class
public static final int CLASS_UNKNOWN = 0xFF000000;
/** Returns true if the given device class supports the given Service Class.
* A bluetooth device can claim to support zero or more service classes.
* @param deviceClass The bluetooth device class.
* @param serviceClassType The service class constant to test for. For
* example, DeviceClass.SERVICE_CLASS_AUDIO. This
* must be one of the SERVICE_CLASS_xxx constants,
* results of this function are undefined
* otherwise.
* @return If the deviceClass claims to support the serviceClassType.
*/
public static boolean hasServiceClass(int deviceClass, int serviceClassType) {
if (deviceClass == CLASS_UNKNOWN) {
return false;
}
return ((deviceClass & SERVICE_CLASS_BITMASK & serviceClassType) != 0);
}
/** Returns the Major Class of a bluetooth device class.
* Values returned from this function can be compared with the constants
* MAJOR_CLASS_xxx. A bluetooth device can only be associated
* with one major class.
*/
public static int getMajorClass(int deviceClass) {
if (deviceClass == CLASS_UNKNOWN) {
return CLASS_UNKNOWN;
}
return (deviceClass & MAJOR_CLASS_BITMASK);
}
/** Returns the Minor Class of a bluetooth device class.
* Values returned from this function can be compared with the constants
* MINOR_CLASS_xxx_yyy, where xxx is the Major Class. A bluetooth
* device can only be associated with one minor class within its major
* class.
*/
public static int getMinorClass(int deviceClass) {
if (deviceClass == CLASS_UNKNOWN) {
return CLASS_UNKNOWN;
}
return (deviceClass & MINOR_CLASS_AUDIO_VIDEO_BITMASK);
}
}