Home | History | Annotate | Download | only in bluetooth
      1 /*
      2  * Copyright (C) 2011 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.ParcelFileDescriptor;
     20 import android.util.Log;
     21 
     22 import java.util.ArrayList;
     23 import java.util.List;
     24 
     25 /**
     26  * Public API for Bluetooth Health Profile.
     27  *
     28  * <p>BluetoothHealth is a proxy object for controlling the Bluetooth
     29  * Service via IPC.
     30  *
     31  * <p> How to connect to a health device which is acting in the source role.
     32  * <li> Use {@link BluetoothAdapter#getProfileProxy} to get
     33  * the BluetoothHealth proxy object. </li>
     34  * <li> Create an {@link BluetoothHealth} callback and call
     35  * {@link #registerSinkAppConfiguration} to register an application
     36  * configuration </li>
     37  * <li> Pair with the remote device. This currently needs to be done manually
     38  * from Bluetooth Settings </li>
     39  * <li> Connect to a health device using {@link #connectChannelToSource}. Some
     40  * devices will connect the channel automatically. The {@link BluetoothHealth}
     41  * callback will inform the application of channel state change. </li>
     42  * <li> Use the file descriptor provided with a connected channel to read and
     43  * write data to the health channel. </li>
     44  * <li> The received data needs to be interpreted using a health manager which
     45  * implements the IEEE 11073-xxxxx specifications.
     46  * <li> When done, close the health channel by calling {@link #disconnectChannel}
     47  * and unregister the application configuration calling
     48  * {@link #unregisterAppConfiguration}
     49  *
     50  * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps
     51  * should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
     52  * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
     53  * {@link BluetoothDevice#createL2capChannel(int)}
     54  */
     55 @Deprecated
     56 public final class BluetoothHealth implements BluetoothProfile {
     57     private static final String TAG = "BluetoothHealth";
     58     /**
     59      * Health Profile Source Role - the health device.
     60      *
     61      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
     62      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
     63      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
     64      * {@link BluetoothDevice#createL2capChannel(int)}
     65      */
     66     @Deprecated
     67     public static final int SOURCE_ROLE = 1 << 0;
     68 
     69     /**
     70      * Health Profile Sink Role the device talking to the health device.
     71      *
     72      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
     73      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
     74      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
     75      * {@link BluetoothDevice#createL2capChannel(int)}
     76      */
     77     @Deprecated
     78     public static final int SINK_ROLE = 1 << 1;
     79 
     80     /**
     81      * Health Profile - Channel Type used - Reliable
     82      *
     83      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
     84      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
     85      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
     86      * {@link BluetoothDevice#createL2capChannel(int)}
     87      */
     88     @Deprecated
     89     public static final int CHANNEL_TYPE_RELIABLE = 10;
     90 
     91     /**
     92      * Health Profile - Channel Type used - Streaming
     93      *
     94      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
     95      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
     96      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
     97      * {@link BluetoothDevice#createL2capChannel(int)}
     98      */
     99     @Deprecated
    100     public static final int CHANNEL_TYPE_STREAMING = 11;
    101 
    102     /**
    103      * Hide auto-created default constructor
    104      * @hide
    105      */
    106     BluetoothHealth() {}
    107 
    108     /**
    109      * Register an application configuration that acts as a Health SINK.
    110      * This is the configuration that will be used to communicate with health devices
    111      * which will act as the {@link #SOURCE_ROLE}. This is an asynchronous call and so
    112      * the callback is used to notify success or failure if the function returns true.
    113      *
    114      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    115      *
    116      * @param name The friendly name associated with the application or configuration.
    117      * @param dataType The dataType of the Source role of Health Profile to which the sink wants to
    118      * connect to.
    119      * @param callback A callback to indicate success or failure of the registration and all
    120      * operations done on this application configuration.
    121      * @return If true, callback will be called.
    122      *
    123      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    124      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    125      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    126      * {@link BluetoothDevice#createL2capChannel(int)}
    127      */
    128     @Deprecated
    129     public boolean registerSinkAppConfiguration(String name, int dataType,
    130             BluetoothHealthCallback callback) {
    131         Log.e(TAG, "registerSinkAppConfiguration(): BluetoothHealth is deprecated");
    132         return false;
    133     }
    134 
    135     /**
    136      * Unregister an application configuration that has been registered using
    137      * {@link #registerSinkAppConfiguration}
    138      *
    139      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    140      *
    141      * @param config The health app configuration
    142      * @return Success or failure.
    143      *
    144      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    145      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    146      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    147      * {@link BluetoothDevice#createL2capChannel(int)}
    148      */
    149     @Deprecated
    150     public boolean unregisterAppConfiguration(BluetoothHealthAppConfiguration config) {
    151         Log.e(TAG, "unregisterAppConfiguration(): BluetoothHealth is deprecated");
    152         return false;
    153     }
    154 
    155     /**
    156      * Connect to a health device which has the {@link #SOURCE_ROLE}.
    157      * This is an asynchronous call. If this function returns true, the callback
    158      * associated with the application configuration will be called.
    159      *
    160      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    161      *
    162      * @param device The remote Bluetooth device.
    163      * @param config The application configuration which has been registered using {@link
    164      * #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) }
    165      * @return If true, the callback associated with the application config will be called.
    166      *
    167      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    168      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    169      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    170      * {@link BluetoothDevice#createL2capChannel(int)}
    171      */
    172     @Deprecated
    173     public boolean connectChannelToSource(BluetoothDevice device,
    174             BluetoothHealthAppConfiguration config) {
    175         Log.e(TAG, "connectChannelToSource(): BluetoothHealth is deprecated");
    176         return false;
    177     }
    178 
    179     /**
    180      * Disconnect a connected health channel.
    181      * This is an asynchronous call. If this function returns true, the callback
    182      * associated with the application configuration will be called.
    183      *
    184      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    185      *
    186      * @param device The remote Bluetooth device.
    187      * @param config The application configuration which has been registered using {@link
    188      * #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) }
    189      * @param channelId The channel id associated with the channel
    190      * @return If true, the callback associated with the application config will be called.
    191      *
    192      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    193      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    194      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    195      * {@link BluetoothDevice#createL2capChannel(int)}
    196      */
    197     @Deprecated
    198     public boolean disconnectChannel(BluetoothDevice device,
    199             BluetoothHealthAppConfiguration config, int channelId) {
    200         Log.e(TAG, "disconnectChannel(): BluetoothHealth is deprecated");
    201         return false;
    202     }
    203 
    204     /**
    205      * Get the file descriptor of the main channel associated with the remote device
    206      * and application configuration.
    207      *
    208      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    209      *
    210      * <p> Its the responsibility of the caller to close the ParcelFileDescriptor
    211      * when done.
    212      *
    213      * @param device The remote Bluetooth health device
    214      * @param config The application configuration
    215      * @return null on failure, ParcelFileDescriptor on success.
    216      *
    217      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    218      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    219      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    220      * {@link BluetoothDevice#createL2capChannel(int)}
    221      */
    222     @Deprecated
    223     public ParcelFileDescriptor getMainChannelFd(BluetoothDevice device,
    224             BluetoothHealthAppConfiguration config) {
    225         Log.e(TAG, "getMainChannelFd(): BluetoothHealth is deprecated");
    226         return null;
    227     }
    228 
    229     /**
    230      * Get the current connection state of the profile.
    231      *
    232      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    233      *
    234      * This is not specific to any application configuration but represents the connection
    235      * state of the local Bluetooth adapter with the remote device. This can be used
    236      * by applications like status bar which would just like to know the state of the
    237      * local adapter.
    238      *
    239      * @param device Remote bluetooth device.
    240      * @return State of the profile connection. One of {@link #STATE_CONNECTED}, {@link
    241      * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING}
    242      */
    243     @Override
    244     public int getConnectionState(BluetoothDevice device) {
    245         Log.e(TAG, "getConnectionState(): BluetoothHealth is deprecated");
    246         return STATE_DISCONNECTED;
    247     }
    248 
    249     /**
    250      * Get connected devices for the health profile.
    251      *
    252      * <p> Return the set of devices which are in state {@link #STATE_CONNECTED}
    253      *
    254      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    255      *
    256      * This is not specific to any application configuration but represents the connection
    257      * state of the local Bluetooth adapter for this profile. This can be used
    258      * by applications like status bar which would just like to know the state of the
    259      * local adapter.
    260      *
    261      * @return List of devices. The list will be empty on error.
    262      */
    263     @Override
    264     public List<BluetoothDevice> getConnectedDevices() {
    265         Log.e(TAG, "getConnectedDevices(): BluetoothHealth is deprecated");
    266         return new ArrayList<>();
    267     }
    268 
    269     /**
    270      * Get a list of devices that match any of the given connection
    271      * states.
    272      *
    273      * <p> If none of the devices match any of the given states,
    274      * an empty list will be returned.
    275      *
    276      * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission.
    277      * This is not specific to any application configuration but represents the connection
    278      * state of the local Bluetooth adapter for this profile. This can be used
    279      * by applications like status bar which would just like to know the state of the
    280      * local adapter.
    281      *
    282      * @param states Array of states. States can be one of {@link #STATE_CONNECTED}, {@link
    283      * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING},
    284      * @return List of devices. The list will be empty on error.
    285      */
    286     @Override
    287     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
    288         Log.e(TAG, "getDevicesMatchingConnectionStates(): BluetoothHealth is deprecated");
    289         return new ArrayList<>();
    290     }
    291 
    292     /** Health Channel Connection State - Disconnected
    293      *
    294      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    295      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    296      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    297      * {@link BluetoothDevice#createL2capChannel(int)}
    298      */
    299     @Deprecated
    300     public static final int STATE_CHANNEL_DISCONNECTED = 0;
    301     /** Health Channel Connection State - Connecting
    302      *
    303      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    304      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    305      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    306      * {@link BluetoothDevice#createL2capChannel(int)}
    307      */
    308     @Deprecated
    309     public static final int STATE_CHANNEL_CONNECTING = 1;
    310     /** Health Channel Connection State - Connected
    311      *
    312      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    313      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    314      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    315      * {@link BluetoothDevice#createL2capChannel(int)}
    316      */
    317     @Deprecated
    318     public static final int STATE_CHANNEL_CONNECTED = 2;
    319     /** Health Channel Connection State - Disconnecting
    320      *
    321      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    322      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    323      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    324      * {@link BluetoothDevice#createL2capChannel(int)}
    325      */
    326     @Deprecated
    327     public static final int STATE_CHANNEL_DISCONNECTING = 3;
    328 
    329     /** Health App Configuration registration success
    330      *
    331      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    332      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    333      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    334      * {@link BluetoothDevice#createL2capChannel(int)}
    335      */
    336     @Deprecated
    337     public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0;
    338     /** Health App Configuration registration failure
    339      *
    340      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    341      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    342      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    343      * {@link BluetoothDevice#createL2capChannel(int)}
    344      */
    345     @Deprecated
    346     public static final int APP_CONFIG_REGISTRATION_FAILURE = 1;
    347     /** Health App Configuration un-registration success
    348      *
    349      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    350      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    351      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    352      * {@link BluetoothDevice#createL2capChannel(int)}
    353      */
    354     @Deprecated
    355     public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2;
    356     /** Health App Configuration un-registration failure
    357      *
    358      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
    359      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
    360      * {@link BluetoothAdapter#listenUsingL2capChannel()(int)}, or
    361      * {@link BluetoothDevice#createL2capChannel(int)}
    362      */
    363     @Deprecated
    364     public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3;
    365 }
    366