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 /** 949908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Permissions for this descriptor 959908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @hide 969908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 979908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta protected int mPermissions; 989908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 999908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1009908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Back-reference to the characteristic this descriptor belongs to. 1019908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @hide 1029908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1039908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta protected BluetoothGattCharacteristic mCharacteristic; 1049908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1059908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1069908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * The value for this descriptor. 1079908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @hide 1089908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1099908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta protected byte[] mValue; 1109908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1119908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1129908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Create a new BluetoothGattDescriptor. 1139908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. 1149908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 115ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * @param uuid The UUID for this descriptor 116ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * @param permissions Permissions for this descriptor 117ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie */ 118ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie public BluetoothGattDescriptor(UUID uuid, int permissions) { 119ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie initDescriptor(null, uuid, permissions); 120ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie } 121ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie 122ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie /** 123ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * Create a new BluetoothGattDescriptor. 124ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. 125ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * 1269908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @param characteristic The characteristic this descriptor belongs to 1279908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @param uuid The UUID for this descriptor 1289908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @param permissions Permissions for this descriptor 1299908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1309908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /*package*/ BluetoothGattDescriptor(BluetoothGattCharacteristic characteristic, UUID uuid, 1319908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta int permissions) { 132ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie initDescriptor(characteristic, uuid, permissions); 133ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie } 134ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie 135ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie private void initDescriptor(BluetoothGattCharacteristic characteristic, UUID uuid, 136ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie int permissions) { 1379908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta mCharacteristic = characteristic; 1389908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta mUuid = uuid; 1399908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta mPermissions = permissions; 1409908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 1419908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1429908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1439908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Returns the characteristic this descriptor belongs to. 1449908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @return The characteristic. 1459908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1469908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta public BluetoothGattCharacteristic getCharacteristic() { 1479908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta return mCharacteristic; 1489908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 1499908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1509908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 151ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * Set the back-reference to the associated characteristic 152ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * @hide 153ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie */ 154ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie /*package*/ void setCharacteristic(BluetoothGattCharacteristic characteristic) { 155ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie mCharacteristic = characteristic; 156ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie } 157ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie 158ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie /** 1599908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Returns the UUID of this descriptor. 1609908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1619908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @return UUID of this descriptor 1629908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1639908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta public UUID getUuid() { 1649908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta return mUuid; 1659908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 1669908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1679908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1689908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Returns the permissions for this descriptor. 1699908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1709908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @return Permissions of this descriptor 1719908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1729908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta public int getPermissions() { 1739908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta return mPermissions; 1749908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 1759908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1769908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1779908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Returns the stored value for this descriptor 1789908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1799908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * <p>This function returns the stored value for this descriptor as 180ddf7e4756c31d0ed90802f98abeaa79df6d16b2aMatthew Xie * retrieved by calling {@link BluetoothGatt#readDescriptor}. The cached 1819908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * value of the descriptor is updated as a result of a descriptor read 1829908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * operation. 1839908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1849908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @return Cached value of the descriptor 1859908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 1869908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta public byte[] getValue() { 1879908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta return mValue; 1889908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 1899908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta 1909908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta /** 1919908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * Updates the locally stored value of this descriptor. 1929908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1939908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * <p>This function modifies the locally stored cached value of this 1949908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * descriptor. To send the value to the remote device, call 1959908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * {@link BluetoothGatt#writeDescriptor} to send the value to the 1969908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * remote device. 1979908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * 1989908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @param value New value for this descriptor 1999908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * @return true if the locally stored value has been set, false if the 2009908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta * requested value could not be stored locally. 2019908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta */ 2029908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta public boolean setValue(byte[] value) { 2039908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta mValue = value; 2049908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta return true; 2059908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta } 2069908112fd085d8b0d91e0562d32eebd1884f09a5Ganesh Ganapathi Batta} 207