1 /* Copyright (c) 2014 The Chromium OS 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_IODEV_H_
7 #define CRAS_BT_IODEV_H_
8 
9 #include "cras_bt_device.h"
10 
11 struct cras_iodev;
12 
13 /* Creates a bluetooth iodev. */
14 struct cras_iodev *cras_bt_io_create(struct cras_bt_device *device,
15 				     struct cras_iodev *dev,
16 				     enum cras_bt_device_profile profile);
17 
18 /* Destroys a bluetooth iodev. */
19 void cras_bt_io_destroy(struct cras_iodev *bt_iodev);
20 
21 /* Looks up for the node of given profile, returns NULL if doesn't exist. */
22 struct cras_ionode *cras_bt_io_get_profile(struct cras_iodev *bt_iodev,
23 					   enum cras_bt_device_profile profile);
24 
25 /* Appends a profile specific iodev to bt_iodev. */
26 int cras_bt_io_append(struct cras_iodev *bt_iodev, struct cras_iodev *dev,
27 		      enum cras_bt_device_profile profile);
28 
29 /* Checks if the active node of bt_io matches a profile. */
30 int cras_bt_io_on_profile(struct cras_iodev *bt_iodev,
31 			  enum cras_bt_device_profile profile);
32 
33 /* Returns A2DP, HFP or HSP that this bt_iodev is running for.
34  * Do NOT use this function except for logging.
35  */
36 enum cras_bt_device_profile
37 cras_bt_io_profile_to_log(struct cras_iodev *bt_iodev);
38 
39 /* Dry-run the profile device removal from bt_iodev.
40  * Returns:
41  *    0 if the bt_iodev will be empty and should to be destroied
42  *    after the removal, othersie the value of the next preffered
43  *    profile to use.
44  */
45 unsigned int cras_bt_io_try_remove(struct cras_iodev *bt_iodev,
46 				   struct cras_iodev *dev);
47 
48 /* Removes a profile specific iodev from bt_iodev.
49  * Returns:
50  *    0 if dev is removed and bt_iodev successfully updated to
51  *    the new profile, otherwise return negative error code. */
52 int cras_bt_io_remove(struct cras_iodev *bt_iodev, struct cras_iodev *dev);
53 
54 #endif /* CRAS_BT_IODEV_H_ */
55