Home | History | Annotate | Download | only in server
      1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 #ifndef CRAS_BT_DEVICE_H_
      7 #define CRAS_BT_DEVICE_H_
      8 
      9 #include <dbus/dbus.h>
     10 
     11 struct cras_bt_adapter;
     12 struct cras_bt_device;
     13 struct cras_iodev;
     14 struct cras_timer;
     15 
     16 enum cras_bt_device_profile {
     17 	CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE	= (1 << 0),
     18 	CRAS_BT_DEVICE_PROFILE_A2DP_SINK	= (1 << 1),
     19 	CRAS_BT_DEVICE_PROFILE_AVRCP_REMOTE	= (1 << 2),
     20 	CRAS_BT_DEVICE_PROFILE_AVRCP_TARGET	= (1 << 3),
     21 	CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE	= (1 << 4),
     22 	CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY	= (1 << 5),
     23 	CRAS_BT_DEVICE_PROFILE_HSP_HEADSET	= (1 << 6),
     24 	CRAS_BT_DEVICE_PROFILE_HSP_AUDIOGATEWAY = (1 << 7)
     25 };
     26 
     27 enum cras_bt_device_profile cras_bt_device_profile_from_uuid(const char *uuid);
     28 
     29 struct cras_bt_device *cras_bt_device_create(DBusConnection *conn,
     30 					     const char *object_path);
     31 void cras_bt_device_destroy(struct cras_bt_device *device);
     32 void cras_bt_device_reset();
     33 
     34 struct cras_bt_device *cras_bt_device_get(const char *object_path);
     35 size_t cras_bt_device_get_list(struct cras_bt_device ***device_list_out);
     36 
     37 const char *cras_bt_device_object_path(const struct cras_bt_device *device);
     38 struct cras_bt_adapter *cras_bt_device_adapter(
     39 	const struct cras_bt_device *device);
     40 const char *cras_bt_device_address(const struct cras_bt_device *device);
     41 const char *cras_bt_device_name(const struct cras_bt_device *device);
     42 int cras_bt_device_paired(const struct cras_bt_device *device);
     43 int cras_bt_device_trusted(const struct cras_bt_device *device);
     44 int cras_bt_device_connected(const struct cras_bt_device *device);
     45 
     46 void cras_bt_device_update_properties(struct cras_bt_device *device,
     47 				      DBusMessageIter *properties_array_iter,
     48 				      DBusMessageIter *invalidated_array_iter);
     49 
     50 /* Sets the append_iodev_cb to bt device. */
     51 void cras_bt_device_set_append_iodev_cb(struct cras_bt_device *device,
     52 					void (*cb)(void *data));
     53 
     54 /* Checks if profile is claimed supported by the device. */
     55 int cras_bt_device_supports_profile(const struct cras_bt_device *device,
     56 				    enum cras_bt_device_profile profile);
     57 
     58 /* Sets if the BT audio device should use hardware volume.
     59  * Args:
     60  *    device - The remote bluetooth audio device.
     61  *    use_hardware_volume - Set to true to indicate hardware volume
     62  *        is preferred over software volume.
     63  */
     64 void cras_bt_device_set_use_hardware_volume(struct cras_bt_device *device,
     65 					    int use_hardware_volume);
     66 
     67 /* Gets if the BT audio device should use hardware volume. */
     68 int cras_bt_device_get_use_hardware_volume(struct cras_bt_device *device);
     69 
     70 /* Forces disconnect the bt device. Used when handling audio error
     71  * that we want to make the device be completely disconnected from
     72  * host to reflect the state that an error has occurred.
     73  * Args:
     74  *    conn - The dbus connection.
     75  *    device - The bt device to disconnect.
     76  */
     77 int cras_bt_device_disconnect(DBusConnection *conn,
     78 			      struct cras_bt_device *device);
     79 
     80 /* Gets the SCO socket for the device.
     81  * Args:
     82  *     device - The device object to get SCO socket for.
     83  */
     84 int cras_bt_device_sco_connect(struct cras_bt_device *device);
     85 
     86 /* Queries the preffered mtu value for SCO socket. */
     87 int cras_bt_device_sco_mtu(struct cras_bt_device *device, int sco_socket);
     88 
     89 /* Appends an iodev to bt device.
     90  * Args:
     91  *    device - The device to append iodev to.
     92  *    iodev - The iodev to add.
     93  *    profile - The profile of the iodev about to add.
     94  */
     95 void cras_bt_device_append_iodev(struct cras_bt_device *device,
     96 				 struct cras_iodev *iodev,
     97 				 enum cras_bt_device_profile profile);
     98 
     99 /* Removes an iodev from bt device.
    100  * Args:
    101  *    device - The device to remove iodev from.
    102  *    iodev - The iodev to remove.
    103  */
    104 void cras_bt_device_rm_iodev(struct cras_bt_device *device,
    105 			     struct cras_iodev *iodev);
    106 
    107 /* Gets the active profile of the bt device. */
    108 int cras_bt_device_get_active_profile(const struct cras_bt_device *device);
    109 
    110 /* Sets the active profile of the bt device. */
    111 void cras_bt_device_set_active_profile(struct cras_bt_device *device,
    112 				       unsigned int profile);
    113 
    114 /* Switches profile after the active profile of bt device has changed and
    115  * enables bt iodev immediately. This function is used for profile switching
    116  * at iodev open.
    117  * Args:
    118  *    device - The bluetooth device.
    119  *    bt_iodev - The iodev triggers the reactivaion.
    120  */
    121 int cras_bt_device_switch_profile_enable_dev(struct cras_bt_device *device,
    122 					     struct cras_iodev *bt_iodev);
    123 
    124 /* Switches profile after the active profile of bt device has changed. This
    125  * function is used when we want to switch profile without changing the
    126  * iodev's status.
    127  * Args:
    128  *    device - The bluetooth device.
    129  *    bt_iodev - The iodev triggers the reactivaion.
    130  */
    131 int cras_bt_device_switch_profile(struct cras_bt_device *device,
    132 				  struct cras_iodev *bt_iodev);
    133 
    134 /* Calls this function when the buffer size of an underlying profile iodev
    135  * has changed and update it for the virtual bt iodev. */
    136 void cras_bt_device_iodev_buffer_size_changed(struct cras_bt_device *device);
    137 
    138 void cras_bt_device_start_monitor();
    139 
    140 /* Checks if the device has an iodev for A2DP. */
    141 int cras_bt_device_has_a2dp(struct cras_bt_device *device);
    142 
    143 /* Returns true if and only if device has an iodev for A2DP and the bt device
    144  * is not opening for audio capture.
    145  */
    146 int cras_bt_device_can_switch_to_a2dp(struct cras_bt_device *device);
    147 
    148 /* Updates the volume to bt_device when a volume change event is reported. */
    149 void cras_bt_device_update_hardware_volume(struct cras_bt_device *device,
    150 					   int volume);
    151 
    152 /* Notifies bt_device that a2dp connection is configured. */
    153 void cras_bt_device_a2dp_configured(struct cras_bt_device *device);
    154 
    155 /* Cancels any scheduled suspension of device. */
    156 int cras_bt_device_cancel_suspend(struct cras_bt_device *device);
    157 
    158 /* Schedules device to suspend after given delay. */
    159 int cras_bt_device_schedule_suspend(struct cras_bt_device *device,
    160 				    unsigned int msec);
    161 
    162 /* Notifies bt device that audio gateway is initialized.
    163  * Args:
    164  *   device - The bluetooth device.
    165  * Returns:
    166  *   0 on success, error code otherwise.
    167  */
    168 int cras_bt_device_audio_gateway_initialized(struct cras_bt_device *device);
    169 
    170 #endif /* CRAS_BT_DEVICE_H_ */
    171