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