19908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta/*
29908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Copyright (C) 2013 The Android Open Source Project
39908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta *
49908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License");
59908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * you may not use this file except in compliance with the License.
69908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * You may obtain a copy of the License at
79908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta *
89908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta *      http://www.apache.org/licenses/LICENSE-2.0
99908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta *
109908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software
119908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS,
129908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * See the License for the specific language governing permissions and
149908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * limitations under the License.
159908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */
169908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
179908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Battapackage android.bluetooth;
189908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
199908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Battaimport java.util.UUID;
209908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
219908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta/**
22ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * Represents a Bluetooth GATT Descriptor
2333ec9840c70ddc7cd008ecf2660c441defc5f302Matthew Xie *
2433ec9840c70ddc7cd008ecf2660c441defc5f302Matthew Xie * <p> GATT Descriptors contain additional information and attributes of a GATT
2533ec9840c70ddc7cd008ecf2660c441defc5f302Matthew Xie * characteristic, {@link BluetoothGattCharacteristic}. They can be used to describe
2633ec9840c70ddc7cd008ecf2660c441defc5f302Matthew Xie * the characteristic's features or to control certain behaviours of the characteristic.
279908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */
289908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Battapublic class BluetoothGattDescriptor {
299908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
309908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
319908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Value used to enable notification for a client configuration descriptor
329908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
339908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final byte[] ENABLE_NOTIFICATION_VALUE = {0x01, 0x00};
349908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
359908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
369908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Value used to enable indication for a client configuration descriptor
379908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
389908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final byte[] ENABLE_INDICATION_VALUE = {0x02, 0x00};
399908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
409908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
419908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Value used to disable notifications or indicatinos
429908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
439908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final byte[] DISABLE_NOTIFICATION_VALUE = {0x00, 0x00};
449908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
459908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
469908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor read permission
479908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
489908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_READ = 0x01;
499908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
509908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
519908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow encrypted read operations
529908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
539908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_READ_ENCRYPTED = 0x02;
549908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
559908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
569908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow reading with man-in-the-middle protection
579908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
589908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_READ_ENCRYPTED_MITM = 0x04;
599908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
609908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
619908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor write permission
629908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
639908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_WRITE = 0x10;
649908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
659908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
669908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow encrypted writes
679908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
689908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_WRITE_ENCRYPTED = 0x20;
699908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
709908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
719908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow encrypted writes with man-in-the-middle
729908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * protection
739908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
749908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 0x40;
759908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
769908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
779908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow signed write operations
789908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
799908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_WRITE_SIGNED = 0x80;
809908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
819908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
829908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Descriptor permission: Allow signed write operations with
839908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * man-in-the-middle protection
849908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
859908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public static final int PERMISSION_WRITE_SIGNED_MITM = 0x100;
869908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
879908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
889908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * The UUID of this descriptor.
899908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @hide
909908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
919908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    protected UUID mUuid;
929908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
939908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
9425b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * Instance ID for this descriptor.
9525b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * @hide
9625b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     */
9725b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach    protected int mInstance;
9825b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach
9925b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach    /**
1009908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Permissions for this descriptor
1019908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @hide
1029908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1039908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    protected int mPermissions;
1049908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1059908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
1069908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Back-reference to the characteristic this descriptor belongs to.
1079908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @hide
1089908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1099908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    protected BluetoothGattCharacteristic mCharacteristic;
1109908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1119908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
1129908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * The value for this descriptor.
1139908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @hide
1149908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1159908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    protected byte[] mValue;
1169908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1179908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
1189908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Create a new BluetoothGattDescriptor.
1199908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
1209908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
121ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * @param uuid The UUID for this descriptor
122ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * @param permissions Permissions for this descriptor
123ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     */
124ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    public BluetoothGattDescriptor(UUID uuid, int permissions) {
12525b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach        initDescriptor(null, uuid, 0, permissions);
126ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    }
127ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie
128ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    /**
129ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * Create a new BluetoothGattDescriptor.
130ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
131ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     *
1329908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @param characteristic The characteristic this descriptor belongs to
1339908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @param uuid The UUID for this descriptor
1349908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @param permissions Permissions for this descriptor
1359908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1369908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /*package*/ BluetoothGattDescriptor(BluetoothGattCharacteristic characteristic, UUID uuid,
13725b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach                                    int instance, int permissions) {
13825b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach        initDescriptor(characteristic, uuid, instance, permissions);
139ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    }
140ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie
141ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    private void initDescriptor(BluetoothGattCharacteristic characteristic, UUID uuid,
14225b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach                                int instance, int permissions) {
1439908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        mCharacteristic = characteristic;
1449908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        mUuid = uuid;
14525b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach        mInstance = instance;
1469908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        mPermissions = permissions;
1479908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
1489908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1499908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
1509908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Returns the characteristic this descriptor belongs to.
1519908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @return The characteristic.
1529908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1539908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public BluetoothGattCharacteristic getCharacteristic() {
1549908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        return mCharacteristic;
1559908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
1569908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1579908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
158ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * Set the back-reference to the associated characteristic
159ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * @hide
160ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     */
161ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    /*package*/ void setCharacteristic(BluetoothGattCharacteristic characteristic) {
162ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie        mCharacteristic = characteristic;
163ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    }
164ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie
165ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie    /**
1669908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Returns the UUID of this descriptor.
1679908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
1689908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @return UUID of this descriptor
1699908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1709908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public UUID getUuid() {
1719908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        return mUuid;
1729908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
1739908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1749908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
17525b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * Returns the instance ID for this descriptor.
17625b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     *
17725b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * <p>If a remote device offers multiple descriptors with the same UUID,
17825b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * the instance ID is used to distuinguish between descriptors.
17925b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     *
18025b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
18125b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     *
18225b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * @return Instance ID of this descriptor
18325b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     * @hide
18425b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach     */
18525b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach    public int getInstanceId() {
18625b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach        return mInstance;
18725b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach    }
18825b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach
18925b9cf953bd3e97f726f8c27d7a752b27c9a2373Andre Eisenbach    /**
1909908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Returns the permissions for this descriptor.
1919908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
1929908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @return Permissions of this descriptor
1939908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
1949908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public int getPermissions() {
1959908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        return mPermissions;
1969908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
1979908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
1989908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
1999908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Returns the stored value for this descriptor
2009908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
2019908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * <p>This function returns the stored value for this descriptor as
202ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie     * retrieved by calling {@link BluetoothGatt#readDescriptor}. The cached
2039908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * value of the descriptor is updated as a result of a descriptor read
2049908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * operation.
2059908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
2069908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @return Cached value of the descriptor
2079908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
2089908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public byte[] getValue() {
2099908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        return mValue;
2109908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
2119908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta
2129908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    /**
2139908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * Updates the locally stored value of this descriptor.
2149908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
2159908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * <p>This function modifies the locally stored cached value of this
2169908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * descriptor. To send the value to the remote device, call
2179908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * {@link BluetoothGatt#writeDescriptor} to send the value to the
2189908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * remote device.
2199908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *
2209908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @param value New value for this descriptor
2219908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     * @return true if the locally stored value has been set, false if the
2229908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     *              requested value could not be stored locally.
2239908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta     */
2249908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    public boolean setValue(byte[] value) {
2259908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        mValue = value;
2269908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta        return true;
2279908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta    }
2289908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta}
229