Lines Matching refs:device

108 	struct cras_bt_device *device;  member
115 void cras_bt_device_set_append_iodev_cb(struct cras_bt_device *device, in cras_bt_device_set_append_iodev_cb() argument
118 device->append_iodev_cb = cb; in cras_bt_device_set_append_iodev_cb()
146 struct cras_bt_device *device; in cras_bt_device_create() local
148 device = calloc(1, sizeof(*device)); in cras_bt_device_create()
149 if (device == NULL) in cras_bt_device_create()
152 device->conn = conn; in cras_bt_device_create()
153 device->object_path = strdup(object_path); in cras_bt_device_create()
154 if (device->object_path == NULL) { in cras_bt_device_create()
155 free(device); in cras_bt_device_create()
159 DL_APPEND(devices, device); in cras_bt_device_create()
161 return device; in cras_bt_device_create()
192 struct cras_bt_device *device, in cras_bt_device_connect_profile() argument
201 device->object_path, in cras_bt_device_connect_profile()
237 struct cras_bt_device *device) in cras_bt_device_disconnect() argument
245 device->object_path, in cras_bt_device_disconnect()
274 void cras_bt_device_destroy(struct cras_bt_device *device) in cras_bt_device_destroy() argument
277 DL_DELETE(devices, device); in cras_bt_device_destroy()
279 if (device->conn_watch_timer) in cras_bt_device_destroy()
280 cras_tm_cancel_timer(tm, device->conn_watch_timer); in cras_bt_device_destroy()
281 if (device->switch_profile_timer) in cras_bt_device_destroy()
282 cras_tm_cancel_timer(tm, device->switch_profile_timer); in cras_bt_device_destroy()
283 if (device->suspend_timer) in cras_bt_device_destroy()
284 cras_tm_cancel_timer(tm, device->suspend_timer); in cras_bt_device_destroy()
285 free(device->object_path); in cras_bt_device_destroy()
286 free(device->address); in cras_bt_device_destroy()
287 free(device->name); in cras_bt_device_destroy()
288 free(device); in cras_bt_device_destroy()
303 struct cras_bt_device *device; in cras_bt_device_get() local
305 DL_FOREACH(devices, device) { in cras_bt_device_get()
306 if (strcmp(device->object_path, object_path) == 0) in cras_bt_device_get()
307 return device; in cras_bt_device_get()
315 struct cras_bt_device *device; in cras_bt_device_get_list() local
319 DL_FOREACH(devices, device) { in cras_bt_device_get_list()
330 device_list[num_devices++] = device; in cras_bt_device_get_list()
337 const char *cras_bt_device_object_path(const struct cras_bt_device *device) in cras_bt_device_object_path() argument
339 return device->object_path; in cras_bt_device_object_path()
343 const struct cras_bt_device *device) in cras_bt_device_adapter() argument
345 return cras_bt_adapter_get(device->adapter_obj_path); in cras_bt_device_adapter()
348 const char *cras_bt_device_address(const struct cras_bt_device *device) in cras_bt_device_address() argument
350 return device->address; in cras_bt_device_address()
353 const char *cras_bt_device_name(const struct cras_bt_device *device) in cras_bt_device_name() argument
355 return device->name; in cras_bt_device_name()
358 int cras_bt_device_paired(const struct cras_bt_device *device) in cras_bt_device_paired() argument
360 return device->paired; in cras_bt_device_paired()
363 int cras_bt_device_trusted(const struct cras_bt_device *device) in cras_bt_device_trusted() argument
365 return device->trusted; in cras_bt_device_trusted()
368 int cras_bt_device_connected(const struct cras_bt_device *device) in cras_bt_device_connected() argument
370 return device->connected; in cras_bt_device_connected()
373 int cras_bt_device_supports_profile(const struct cras_bt_device *device, in cras_bt_device_supports_profile() argument
376 return !!(device->profiles & profile); in cras_bt_device_supports_profile()
379 void cras_bt_device_append_iodev(struct cras_bt_device *device, in cras_bt_device_append_iodev() argument
385 bt_iodev = device->bt_iodevs[iodev->direction]; in cras_bt_device_append_iodev()
390 if (device->append_iodev_cb) { in cras_bt_device_append_iodev()
391 device->append_iodev_cb(device); in cras_bt_device_append_iodev()
392 device->append_iodev_cb = NULL; in cras_bt_device_append_iodev()
394 device->bt_iodevs[iodev->direction] = in cras_bt_device_append_iodev()
395 cras_bt_io_create(device, iodev, profile); in cras_bt_device_append_iodev()
399 static void bt_device_switch_profile(struct cras_bt_device *device,
403 void cras_bt_device_rm_iodev(struct cras_bt_device *device, in cras_bt_device_rm_iodev() argument
409 bt_iodev = device->bt_iodevs[iodev->direction]; in cras_bt_device_rm_iodev()
423 device->active_profile = try_profile; in cras_bt_device_rm_iodev()
424 bt_device_switch_profile(device, bt_iodev, 0); in cras_bt_device_rm_iodev()
436 device->bt_iodevs[iodev->direction] = NULL; in cras_bt_device_rm_iodev()
439 if (!device->bt_iodevs[CRAS_STREAM_INPUT] && in cras_bt_device_rm_iodev()
440 !device->bt_iodevs[CRAS_STREAM_OUTPUT]) in cras_bt_device_rm_iodev()
441 cras_bt_device_set_active_profile(device, 0); in cras_bt_device_rm_iodev()
444 void cras_bt_device_a2dp_configured(struct cras_bt_device *device) in cras_bt_device_a2dp_configured() argument
446 device->connected_profiles |= CRAS_BT_DEVICE_PROFILE_A2DP_SINK; in cras_bt_device_a2dp_configured()
449 int cras_bt_device_has_a2dp(struct cras_bt_device *device) in cras_bt_device_has_a2dp() argument
451 struct cras_iodev *odev = device->bt_iodevs[CRAS_STREAM_OUTPUT]; in cras_bt_device_has_a2dp()
458 int cras_bt_device_can_switch_to_a2dp(struct cras_bt_device *device) in cras_bt_device_can_switch_to_a2dp() argument
460 struct cras_iodev *idev = device->bt_iodevs[CRAS_STREAM_INPUT]; in cras_bt_device_can_switch_to_a2dp()
462 return cras_bt_device_has_a2dp(device) && in cras_bt_device_can_switch_to_a2dp()
466 int cras_bt_device_audio_gateway_initialized(struct cras_bt_device *device) in cras_bt_device_audio_gateway_initialized() argument
473 device->connected_profiles |= in cras_bt_device_audio_gateway_initialized()
479 device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK)) { in cras_bt_device_audio_gateway_initialized()
484 rc = cras_hfp_ag_start(device); in cras_bt_device_audio_gateway_initialized()
489 if (device->conn_watch_timer) { in cras_bt_device_audio_gateway_initialized()
491 cras_tm_cancel_timer(tm, device->conn_watch_timer); in cras_bt_device_audio_gateway_initialized()
492 device->conn_watch_timer = NULL; in cras_bt_device_audio_gateway_initialized()
502 int cras_bt_device_get_active_profile(const struct cras_bt_device *device) in cras_bt_device_get_active_profile() argument
504 return device->active_profile; in cras_bt_device_get_active_profile()
507 void cras_bt_device_set_active_profile(struct cras_bt_device *device, in cras_bt_device_set_active_profile() argument
510 device->active_profile = profile; in cras_bt_device_set_active_profile()
513 static void cras_bt_device_log_profile(const struct cras_bt_device *device, in cras_bt_device_log_profile() argument
519 device->address); in cras_bt_device_log_profile()
523 device->address); in cras_bt_device_log_profile()
527 device->address); in cras_bt_device_log_profile()
531 device->address); in cras_bt_device_log_profile()
535 device->address); in cras_bt_device_log_profile()
539 device->address); in cras_bt_device_log_profile()
543 device->address); in cras_bt_device_log_profile()
547 device->address); in cras_bt_device_log_profile()
553 const struct cras_bt_device *device, in cras_bt_device_is_profile_connected() argument
556 return !!(device->connected_profiles & profile); in cras_bt_device_is_profile_connected()
559 static void bt_device_schedule_suspend(struct cras_bt_device *device,
566 struct cras_bt_device *device = (struct cras_bt_device *)arg; in bt_device_conn_watch_cb() local
568 device->conn_watch_timer = NULL; in bt_device_conn_watch_cb()
572 device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK) && in bt_device_conn_watch_cb()
574 device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK)) { in bt_device_conn_watch_cb()
575 if (0 == device->conn_watch_retries % PROFILE_CONN_RETRIES) in bt_device_conn_watch_cb()
577 device->conn, device, A2DP_SINK_UUID); in bt_device_conn_watch_cb()
583 device, CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE) && in bt_device_conn_watch_cb()
585 device, CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE)) { in bt_device_conn_watch_cb()
586 if (0 == device->conn_watch_retries % PROFILE_CONN_RETRIES) in bt_device_conn_watch_cb()
588 device->conn, device, HFP_HF_UUID); in bt_device_conn_watch_cb()
593 device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK)) { in bt_device_conn_watch_cb()
596 if (!cras_bt_device_supports_profile(device, in bt_device_conn_watch_cb()
601 cras_a2dp_start(device); in bt_device_conn_watch_cb()
605 device, CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE)) in bt_device_conn_watch_cb()
606 cras_hfp_ag_start(device); in bt_device_conn_watch_cb()
611 syslog(LOG_DEBUG, "conn_watch_retries: %d", device->conn_watch_retries); in bt_device_conn_watch_cb()
613 if (--device->conn_watch_retries) { in bt_device_conn_watch_cb()
615 device->conn_watch_timer = cras_tm_create_timer(tm, in bt_device_conn_watch_cb()
617 bt_device_conn_watch_cb, device); in bt_device_conn_watch_cb()
620 bt_device_schedule_suspend(device, 0); in bt_device_conn_watch_cb()
625 struct cras_bt_device *device) in cras_bt_device_start_new_conn_watch_timer() argument
629 if (device->conn_watch_timer) { in cras_bt_device_start_new_conn_watch_timer()
630 cras_tm_cancel_timer(tm, device->conn_watch_timer); in cras_bt_device_start_new_conn_watch_timer()
632 device->conn_watch_retries = CONN_WATCH_MAX_RETRIES; in cras_bt_device_start_new_conn_watch_timer()
633 device->conn_watch_timer = cras_tm_create_timer(tm, in cras_bt_device_start_new_conn_watch_timer()
635 bt_device_conn_watch_cb, device); in cras_bt_device_start_new_conn_watch_timer()
638 static void cras_bt_device_set_connected(struct cras_bt_device *device, in cras_bt_device_set_connected() argument
643 if (device->connected && !value) { in cras_bt_device_set_connected()
644 cras_bt_profile_on_device_disconnected(device); in cras_bt_device_set_connected()
646 device->connected_profiles = 0; in cras_bt_device_set_connected()
649 device->connected = value; in cras_bt_device_set_connected()
651 if (device->connected) { in cras_bt_device_set_connected()
652 cras_bt_device_start_new_conn_watch_timer(device); in cras_bt_device_set_connected()
653 } else if (device->conn_watch_timer) { in cras_bt_device_set_connected()
654 cras_tm_cancel_timer(tm, device->conn_watch_timer); in cras_bt_device_set_connected()
655 device->conn_watch_timer = NULL; in cras_bt_device_set_connected()
659 void cras_bt_device_update_properties(struct cras_bt_device *device, in cras_bt_device_update_properties() argument
687 free(device->adapter_obj_path); in cras_bt_device_update_properties()
688 device->adapter_obj_path = strdup(value); in cras_bt_device_update_properties()
690 free(device->address); in cras_bt_device_update_properties()
691 device->address = strdup(value); in cras_bt_device_update_properties()
693 free(device->name); in cras_bt_device_update_properties()
694 device->name = strdup(value); in cras_bt_device_update_properties()
703 device->bluetooth_class = value; in cras_bt_device_update_properties()
711 device->paired = value; in cras_bt_device_update_properties()
713 device->trusted = value; in cras_bt_device_update_properties()
715 cras_bt_device_set_connected(device, value); in cras_bt_device_update_properties()
738 device->profiles |= profile; in cras_bt_device_update_properties()
739 cras_bt_device_log_profile(device, profile); in cras_bt_device_update_properties()
756 free(device->adapter_obj_path); in cras_bt_device_update_properties()
757 device->adapter_obj_path = NULL; in cras_bt_device_update_properties()
759 free(device->address); in cras_bt_device_update_properties()
760 device->address = NULL; in cras_bt_device_update_properties()
762 free(device->name); in cras_bt_device_update_properties()
763 device->name = NULL; in cras_bt_device_update_properties()
765 device->bluetooth_class = 0; in cras_bt_device_update_properties()
767 device->paired = 0; in cras_bt_device_update_properties()
769 device->trusted = 0; in cras_bt_device_update_properties()
771 device->connected = 0; in cras_bt_device_update_properties()
773 device->profiles = 0; in cras_bt_device_update_properties()
784 if (get_profile && device->connected) { in cras_bt_device_update_properties()
785 cras_bt_device_start_new_conn_watch_timer(device); in cras_bt_device_update_properties()
815 int cras_bt_device_sco_connect(struct cras_bt_device *device) in cras_bt_device_sco_connect() argument
823 adapter = cras_bt_device_adapter(device); in cras_bt_device_sco_connect()
826 cras_bt_device_object_path(device)); in cras_bt_device_sco_connect()
852 if (bt_address(cras_bt_device_address(device), &addr)) in cras_bt_device_sco_connect()
870 bt_device_schedule_suspend(device, 0); in cras_bt_device_sco_connect()
882 int cras_bt_device_sco_mtu(struct cras_bt_device *device, int sco_socket) in cras_bt_device_sco_mtu() argument
888 adapter = cras_bt_adapter_get(device->adapter_obj_path); in cras_bt_device_sco_mtu()
899 void cras_bt_device_set_use_hardware_volume(struct cras_bt_device *device, in cras_bt_device_set_use_hardware_volume() argument
904 device->use_hardware_volume = use_hardware_volume; in cras_bt_device_set_use_hardware_volume()
905 iodev = device->bt_iodevs[CRAS_STREAM_OUTPUT]; in cras_bt_device_set_use_hardware_volume()
910 int cras_bt_device_get_use_hardware_volume(struct cras_bt_device *device) in cras_bt_device_get_use_hardware_volume() argument
912 return device->use_hardware_volume; in cras_bt_device_get_use_hardware_volume()
917 struct cras_bt_device *device, in init_bt_device_msg() argument
925 msg->device = device; in init_bt_device_msg()
930 int cras_bt_device_cancel_suspend(struct cras_bt_device *device) in cras_bt_device_cancel_suspend() argument
935 init_bt_device_msg(&msg, BT_DEVICE_CANCEL_SUSPEND, device, NULL, 0); in cras_bt_device_cancel_suspend()
940 int cras_bt_device_schedule_suspend(struct cras_bt_device *device, in cras_bt_device_schedule_suspend() argument
946 init_bt_device_msg(&msg, BT_DEVICE_SCHEDULE_SUSPEND, device, in cras_bt_device_schedule_suspend()
974 int cras_bt_device_switch_profile_enable_dev(struct cras_bt_device *device, in cras_bt_device_switch_profile_enable_dev() argument
981 device, bt_iodev, 0); in cras_bt_device_switch_profile_enable_dev()
986 int cras_bt_device_switch_profile(struct cras_bt_device *device, in cras_bt_device_switch_profile() argument
993 device, bt_iodev, 0); in cras_bt_device_switch_profile()
998 void cras_bt_device_iodev_buffer_size_changed(struct cras_bt_device *device) in cras_bt_device_iodev_buffer_size_changed() argument
1002 iodev = device->bt_iodevs[CRAS_STREAM_INPUT]; in cras_bt_device_iodev_buffer_size_changed()
1005 iodev = device->bt_iodevs[CRAS_STREAM_OUTPUT]; in cras_bt_device_iodev_buffer_size_changed()
1012 struct cras_bt_device *device = (struct cras_bt_device *)arg; in profile_switch_delay_cb() local
1015 device->switch_profile_timer = NULL; in profile_switch_delay_cb()
1016 iodev = device->bt_iodevs[CRAS_STREAM_OUTPUT]; in profile_switch_delay_cb()
1035 static void bt_device_switch_profile_with_delay(struct cras_bt_device *device, in bt_device_switch_profile_with_delay() argument
1040 if (device->switch_profile_timer) { in bt_device_switch_profile_with_delay()
1041 cras_tm_cancel_timer(tm, device->switch_profile_timer); in bt_device_switch_profile_with_delay()
1042 device->switch_profile_timer = NULL; in bt_device_switch_profile_with_delay()
1044 device->switch_profile_timer = cras_tm_create_timer( in bt_device_switch_profile_with_delay()
1045 tm, delay_ms, profile_switch_delay_cb, device); in bt_device_switch_profile_with_delay()
1051 static void bt_device_switch_profile(struct cras_bt_device *device, in bt_device_switch_profile() argument
1065 iodev = device->bt_iodevs[dir]; in bt_device_switch_profile()
1073 iodev = device->bt_iodevs[dir]; in bt_device_switch_profile()
1092 device, in bt_device_switch_profile()
1101 struct cras_bt_device *device = (struct cras_bt_device *)arg; in bt_device_suspend_cb() local
1103 device->suspend_timer = NULL; in bt_device_suspend_cb()
1105 cras_a2dp_suspend_connected_device(device); in bt_device_suspend_cb()
1106 cras_hfp_ag_suspend_connected_device(device); in bt_device_suspend_cb()
1109 static void bt_device_schedule_suspend(struct cras_bt_device *device, in bt_device_schedule_suspend() argument
1114 if (device->suspend_timer) in bt_device_schedule_suspend()
1116 device->suspend_timer = cras_tm_create_timer(tm, msec, in bt_device_schedule_suspend()
1117 bt_device_suspend_cb, device); in bt_device_schedule_suspend()
1120 static void bt_device_cancel_suspend(struct cras_bt_device *device) in bt_device_cancel_suspend() argument
1123 if (device->suspend_timer == NULL) in bt_device_cancel_suspend()
1125 cras_tm_cancel_timer(tm, device->suspend_timer); in bt_device_cancel_suspend()
1126 device->suspend_timer = NULL; in bt_device_cancel_suspend()
1132 struct cras_bt_device *device = NULL; in bt_device_process_msg() local
1134 DL_FOREACH(devices, device) { in bt_device_process_msg()
1135 if (device == bt_msg->device) in bt_device_process_msg()
1140 if (device == NULL) in bt_device_process_msg()
1145 bt_device_switch_profile(bt_msg->device, bt_msg->dev, 0); in bt_device_process_msg()
1148 bt_device_switch_profile(bt_msg->device, bt_msg->dev, 1); in bt_device_process_msg()
1151 bt_device_schedule_suspend(bt_msg->device, bt_msg->arg); in bt_device_process_msg()
1154 bt_device_cancel_suspend(bt_msg->device); in bt_device_process_msg()
1167 void cras_bt_device_update_hardware_volume(struct cras_bt_device *device, in cras_bt_device_update_hardware_volume() argument
1172 iodev = device->bt_iodevs[CRAS_STREAM_OUTPUT]; in cras_bt_device_update_hardware_volume()
1179 if (!cras_bt_device_get_use_hardware_volume(device)) in cras_bt_device_update_hardware_volume()