Lines Matching refs:inst
115 static int read_recv_state(struct bap_broadcast_assistant_instance *inst, uint8_t idx);
117 static int16_t lookup_index_by_handle(struct bap_broadcast_assistant_instance *inst, in lookup_index_by_handle() argument
120 for (size_t i = 0U; i < ARRAY_SIZE(inst->recv_state_handles); i++) { in lookup_index_by_handle()
121 if (inst->recv_state_handles[i] == handle) { in lookup_index_by_handle()
133 struct bap_broadcast_assistant_instance *inst; in inst_by_conn() local
140 inst = &broadcast_assistants[bt_conn_index(conn)]; in inst_by_conn()
142 if (inst->conn == conn) { in inst_by_conn()
143 return inst; in inst_by_conn()
152 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in bap_broadcast_assistant_discover_complete() local
156 if (inst != NULL) { in bap_broadcast_assistant_discover_complete()
157 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bap_broadcast_assistant_discover_complete()
158 atomic_clear_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS); in bap_broadcast_assistant_discover_complete()
343 static void bap_long_read_reset(struct bap_broadcast_assistant_instance *inst) in bap_long_read_reset() argument
345 inst->long_read_handle = 0; in bap_long_read_reset()
347 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bap_long_read_reset()
356 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in parse_and_send_recv_state() local
358 if (inst == NULL) { in parse_and_send_recv_state()
369 index = lookup_index_by_handle(inst, handle); in parse_and_send_recv_state()
376 inst->recv_states[index].src_id = recv_state->src_id; in parse_and_send_recv_state()
377 inst->recv_states[index].past_avail = past_available(conn, &recv_state->addr, in parse_and_send_recv_state()
392 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in broadcast_assistant_bap_ntf_read_func() local
394 if (inst == NULL) { in broadcast_assistant_bap_ntf_read_func()
403 bap_long_read_reset(inst); in broadcast_assistant_bap_ntf_read_func()
415 bap_long_read_reset(inst); in broadcast_assistant_bap_ntf_read_func()
429 bap_long_read_reset(inst); in broadcast_assistant_bap_ntf_read_func()
440 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in long_bap_read() local
442 if (inst == NULL) { in long_bap_read()
446 if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in long_bap_read()
460 err = k_work_reschedule(&inst->bap_read_work, in long_bap_read()
464 bap_long_read_reset(inst); in long_bap_read()
470 inst->read_params.func = broadcast_assistant_bap_ntf_read_func; in long_bap_read()
471 inst->read_params.handle_count = 1U; in long_bap_read()
472 inst->read_params.single.handle = handle; in long_bap_read()
473 inst->read_params.single.offset = att_buf.len; in long_bap_read()
475 err = bt_gatt_read(conn, &inst->read_params); in long_bap_read()
479 bap_long_read_reset(inst); in long_bap_read()
485 struct bap_broadcast_assistant_instance *inst = in delayed_bap_read_handler() local
488 long_bap_read(inst->conn, inst->long_read_handle); in delayed_bap_read_handler()
499 struct bap_broadcast_assistant_instance *inst; in notify_handler() local
506 inst = inst_by_conn(conn); in notify_handler()
508 if (inst == NULL) { in notify_handler()
512 if (atomic_test_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS)) { in notify_handler()
526 index = lookup_index_by_handle(inst, handle); in notify_handler()
537 (void)k_work_cancel_delayable(&inst->bap_read_work); in notify_handler()
545 inst->long_read_handle = handle; in notify_handler()
547 if (!atomic_test_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in notify_handler()
556 inst->recv_states[index].past_avail = false; in notify_handler()
557 bap_broadcast_assistant_recv_state_removed(conn, inst->recv_states[index].src_id); in notify_handler()
567 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in read_recv_state_cb() local
569 if (inst == NULL) { in read_recv_state_cb()
574 uint8_t last_handle_index = inst->recv_state_cnt - 1; in read_recv_state_cb()
575 uint16_t last_handle = inst->recv_state_handles[last_handle_index]; in read_recv_state_cb()
589 index = lookup_index_by_handle(inst, handle); in read_recv_state_cb()
599 &inst->recv_states[index]; in read_recv_state_cb()
605 inst->recv_states[index].past_avail = in read_recv_state_cb()
615 if (atomic_test_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS)) { in read_recv_state_cb()
618 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in read_recv_state_cb()
622 if (atomic_test_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS)) { in read_recv_state_cb()
623 const uint8_t recv_state_cnt = inst->recv_state_cnt; in read_recv_state_cb()
627 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in read_recv_state_cb()
633 for (uint8_t i = 0U; i < inst->recv_state_cnt; i++) { in read_recv_state_cb()
634 if (handle != inst->recv_state_handles[i]) { in read_recv_state_cb()
638 if (i + 1 < ARRAY_SIZE(inst->recv_state_handles)) { in read_recv_state_cb()
639 cb_err = read_recv_state(inst, i + 1); in read_recv_state_cb()
643 if (atomic_test_bit(inst->flags, in read_recv_state_cb()
648 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in read_recv_state_cb()
661 static void discover_init(struct bap_broadcast_assistant_instance *inst) in discover_init() argument
663 k_work_init_delayable(&inst->bap_read_work, delayed_bap_read_handler); in discover_init()
665 atomic_set_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS); in discover_init()
679 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in char_discover_func() local
681 if (inst == NULL) { in char_discover_func()
686 LOG_DBG("Found %u BASS receive states", inst->recv_state_cnt); in char_discover_func()
689 err = read_recv_state(inst, 0); in char_discover_func()
705 inst->cp_handle = attr->handle + 1; in char_discover_func()
707 if (inst->recv_state_cnt < in char_discover_func()
709 uint8_t idx = inst->recv_state_cnt++; in char_discover_func()
711 LOG_DBG("Receive State %u", inst->recv_state_cnt); in char_discover_func()
712 inst->recv_state_handles[idx] = in char_discover_func()
714 sub_params = &inst->recv_state_sub_params[idx]; in char_discover_func()
715 sub_params->disc_params = &inst->recv_state_disc_params[idx]; in char_discover_func()
720 sub_params->end_handle = inst->end_handle; in char_discover_func()
748 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in service_discover_func() local
750 if (inst == NULL) { in service_discover_func()
769 inst->start_handle = attr->handle + 1; in service_discover_func()
770 inst->end_handle = prim_service->end_handle; in service_discover_func()
772 inst->disc_params.uuid = NULL; in service_discover_func()
773 inst->disc_params.start_handle = inst->start_handle; in service_discover_func()
774 inst->disc_params.end_handle = inst->end_handle; in service_discover_func()
775 inst->disc_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; in service_discover_func()
776 inst->disc_params.func = char_discover_func; in service_discover_func()
778 err = bt_gatt_discover(conn, &inst->disc_params); in service_discover_func()
793 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in bap_broadcast_assistant_write_cp_cb() local
795 if (inst == NULL) { in bap_broadcast_assistant_write_cp_cb()
802 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bap_broadcast_assistant_write_cp_cb()
847 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_common_cp() local
855 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_common_cp()
857 if (inst == NULL) { in bt_bap_broadcast_assistant_common_cp()
861 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_common_cp()
866 inst->write_params.offset = 0; in bt_bap_broadcast_assistant_common_cp()
867 inst->write_params.data = buf->data; in bt_bap_broadcast_assistant_common_cp()
868 inst->write_params.length = buf->len; in bt_bap_broadcast_assistant_common_cp()
869 inst->write_params.handle = inst->cp_handle; in bt_bap_broadcast_assistant_common_cp()
870 inst->write_params.func = bap_broadcast_assistant_write_cp_cb; in bt_bap_broadcast_assistant_common_cp()
872 err = bt_gatt_write(conn, &inst->write_params); in bt_bap_broadcast_assistant_common_cp()
874 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_common_cp()
941 static bool broadcast_src_is_duplicate(struct bap_broadcast_assistant_instance *inst, in broadcast_src_is_duplicate() argument
944 for (size_t i = 0; i < ARRAY_SIZE(inst->recv_states); i++) { in broadcast_src_is_duplicate()
946 &inst->recv_states[i]; in broadcast_src_is_duplicate()
961 static int broadcast_assistant_reset(struct bap_broadcast_assistant_instance *inst) in broadcast_assistant_reset() argument
963 inst->scanning = false; in broadcast_assistant_reset()
964 inst->pa_sync = 0U; in broadcast_assistant_reset()
965 inst->recv_state_cnt = 0U; in broadcast_assistant_reset()
966 inst->start_handle = 0U; in broadcast_assistant_reset()
967 inst->end_handle = 0U; in broadcast_assistant_reset()
968 inst->cp_handle = 0U; in broadcast_assistant_reset()
969 inst->long_read_handle = 0; in broadcast_assistant_reset()
970 (void)k_work_cancel_delayable(&inst->bap_read_work); in broadcast_assistant_reset()
973 memset(&inst->recv_states[i], 0, sizeof(inst->recv_states[i])); in broadcast_assistant_reset()
974 inst->recv_states[i].broadcast_id = BT_BAP_INVALID_BROADCAST_ID; in broadcast_assistant_reset()
975 inst->recv_states[i].adv_sid = BT_HCI_LE_EXT_ADV_SID_INVALID; in broadcast_assistant_reset()
976 inst->recv_states[i].past_avail = false; in broadcast_assistant_reset()
977 inst->recv_state_handles[i] = 0U; in broadcast_assistant_reset()
980 if (inst->conn != NULL) { in broadcast_assistant_reset()
981 struct bt_conn *conn = inst->conn; in broadcast_assistant_reset()
991 for (size_t i = 0U; i < ARRAY_SIZE(inst->recv_state_sub_params); i++) { in broadcast_assistant_reset()
995 err = bt_gatt_unsubscribe(conn, &inst->recv_state_sub_params[i]); in broadcast_assistant_reset()
1005 inst->conn = NULL; in broadcast_assistant_reset()
1009 memset(&inst->disc_params, 0, sizeof(inst->disc_params)); in broadcast_assistant_reset()
1010 memset(&inst->recv_state_disc_params, 0, sizeof(inst->recv_state_disc_params)); in broadcast_assistant_reset()
1011 memset(&inst->read_params, 0, sizeof(inst->read_params)); in broadcast_assistant_reset()
1012 memset(&inst->write_params, 0, sizeof(inst->write_params)); in broadcast_assistant_reset()
1019 struct bap_broadcast_assistant_instance *inst = inst_by_conn(conn); in disconnected_cb() local
1021 if (inst) { in disconnected_cb()
1022 (void)broadcast_assistant_reset(inst); in disconnected_cb()
1033 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_discover() local
1041 inst = &broadcast_assistants[bt_conn_index(conn)]; in bt_bap_broadcast_assistant_discover()
1044 if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_discover()
1049 err = broadcast_assistant_reset(inst); in bt_bap_broadcast_assistant_discover()
1051 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_discover()
1058 inst->conn = bt_conn_ref(conn); in bt_bap_broadcast_assistant_discover()
1061 discover_init(inst); in bt_bap_broadcast_assistant_discover()
1064 inst->disc_params.func = service_discover_func; in bt_bap_broadcast_assistant_discover()
1065 inst->disc_params.uuid = &uuid.uuid; in bt_bap_broadcast_assistant_discover()
1066 inst->disc_params.type = BT_GATT_DISCOVER_PRIMARY; in bt_bap_broadcast_assistant_discover()
1067 inst->disc_params.start_handle = BT_ATT_FIRST_ATTRIBUTE_HANDLE; in bt_bap_broadcast_assistant_discover()
1068 inst->disc_params.end_handle = BT_ATT_LAST_ATTRIBUTE_HANDLE; in bt_bap_broadcast_assistant_discover()
1069 err = bt_gatt_discover(conn, &inst->disc_params); in bt_bap_broadcast_assistant_discover()
1071 atomic_clear_bit(inst->flags, BAP_BA_FLAG_DISCOVER_IN_PROGRESS); in bt_bap_broadcast_assistant_discover()
1072 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_discover()
1125 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_scan_start() local
1133 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_scan_start()
1134 if (inst == NULL) { in bt_bap_broadcast_assistant_scan_start()
1138 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_scan_start()
1142 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_scan_start()
1154 if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_SCANNING)) { in bt_bap_broadcast_assistant_scan_start()
1157 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_scan_start()
1171 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_scan_start()
1172 atomic_clear_bit(inst->flags, BAP_BA_FLAG_SCANNING); in bt_bap_broadcast_assistant_scan_start()
1201 atomic_clear_bit(inst->flags, BAP_BA_FLAG_SCANNING); in bt_bap_broadcast_assistant_scan_start()
1211 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_scan_stop() local
1219 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_scan_stop()
1220 if (inst == NULL) { in bt_bap_broadcast_assistant_scan_stop()
1224 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_scan_stop()
1228 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_scan_stop()
1234 if (atomic_test_bit(inst->flags, BAP_BA_FLAG_SCANNING)) { in bt_bap_broadcast_assistant_scan_stop()
1239 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_scan_stop()
1244 atomic_clear_bit(inst->flags, BAP_BA_FLAG_SCANNING); in bt_bap_broadcast_assistant_scan_stop()
1366 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_add_src() local
1374 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_add_src()
1376 if (inst == NULL) { in bt_bap_broadcast_assistant_add_src()
1381 if (broadcast_src_is_duplicate(inst, param->broadcast_id, param->adv_sid, in bt_bap_broadcast_assistant_add_src()
1392 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_add_src()
1396 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_add_src()
1434 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_add_src()
1501 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_mod_src() local
1513 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_mod_src()
1514 if (inst == NULL) { in bt_bap_broadcast_assistant_mod_src()
1518 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_mod_src()
1522 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_mod_src()
1540 for (size_t i = 0; i < ARRAY_SIZE(inst->recv_states); i++) { in bt_bap_broadcast_assistant_mod_src()
1541 if (inst->recv_states[i].src_id == param->src_id) { in bt_bap_broadcast_assistant_mod_src()
1543 past_avail = inst->recv_states[i].past_avail; in bt_bap_broadcast_assistant_mod_src()
1577 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_mod_src()
1607 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_set_broadcast_code() local
1615 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_set_broadcast_code()
1616 if (inst == NULL) { in bt_bap_broadcast_assistant_set_broadcast_code()
1620 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_set_broadcast_code()
1624 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_set_broadcast_code()
1647 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_rem_src() local
1655 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_rem_src()
1656 if (inst == NULL) { in bt_bap_broadcast_assistant_rem_src()
1660 if (inst->cp_handle == 0) { in bt_bap_broadcast_assistant_rem_src()
1664 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_rem_src()
1680 static int read_recv_state(struct bap_broadcast_assistant_instance *inst, uint8_t idx) in read_recv_state() argument
1684 inst->read_params.func = read_recv_state_cb; in read_recv_state()
1685 inst->read_params.handle_count = 1; in read_recv_state()
1686 inst->read_params.single.handle = inst->recv_state_handles[idx]; in read_recv_state()
1688 err = bt_gatt_read(inst->conn, &inst->read_params); in read_recv_state()
1690 (void)memset(&inst->read_params, 0, sizeof(inst->read_params)); in read_recv_state()
1700 struct bap_broadcast_assistant_instance *inst; in bt_bap_broadcast_assistant_read_recv_state() local
1708 inst = inst_by_conn(conn); in bt_bap_broadcast_assistant_read_recv_state()
1709 if (inst == NULL) { in bt_bap_broadcast_assistant_read_recv_state()
1713 CHECKIF(idx >= ARRAY_SIZE(inst->recv_state_handles)) { in bt_bap_broadcast_assistant_read_recv_state()
1719 if (inst->recv_state_handles[idx] == 0) { in bt_bap_broadcast_assistant_read_recv_state()
1723 } else if (atomic_test_and_set_bit(inst->flags, BAP_BA_FLAG_BUSY)) { in bt_bap_broadcast_assistant_read_recv_state()
1729 err = read_recv_state(inst, idx); in bt_bap_broadcast_assistant_read_recv_state()
1731 (void)memset(&inst->read_params, 0, in bt_bap_broadcast_assistant_read_recv_state()
1732 sizeof(inst->read_params)); in bt_bap_broadcast_assistant_read_recv_state()
1733 atomic_clear_bit(inst->flags, BAP_BA_FLAG_BUSY); in bt_bap_broadcast_assistant_read_recv_state()