Lines Matching refs:ots
124 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_feature_read() local
128 return bt_gatt_attr_read(conn, attr, buf, len, offset, &ots->features, in ots_feature_read()
129 sizeof(ots->features)); in ots_feature_read()
136 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_name_read() local
140 if (!ots->cur_obj) { in ots_obj_name_read()
146 ots->cur_obj->metadata.name, in ots_obj_name_read()
147 strlen(ots->cur_obj->metadata.name)); in ots_obj_name_read()
156 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_name_write() local
163 if (!ots->cur_obj) { in ots_obj_name_write()
169 ots->cur_obj->id == OTS_OBJ_ID_DIR_LIST) { in ots_obj_name_write()
188 rc = bt_gatt_ots_obj_manager_first_obj_get(ots->obj_manager, &obj); in ots_obj_name_write()
190 if (obj != ots->cur_obj && strcmp(name, obj->metadata.name) == 0) { in ots_obj_name_write()
194 rc = bt_gatt_ots_obj_manager_next_obj_get(ots->obj_manager, obj, &obj); in ots_obj_name_write()
198 if (ots->cb->obj_name_written) { in ots_obj_name_write()
199 ots->cb->obj_name_written(ots, conn, ots->cur_obj->id, in ots_obj_name_write()
200 ots->cur_obj->metadata.name, name); in ots_obj_name_write()
203 strcpy(ots->cur_obj->metadata.name, name); in ots_obj_name_write()
213 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_type_read() local
218 if (!ots->cur_obj) { in ots_obj_type_read()
223 obj_meta = &ots->cur_obj->metadata; in ots_obj_type_read()
242 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_size_read() local
246 if (!ots->cur_obj) { in ots_obj_size_read()
252 &ots->cur_obj->metadata.size, in ots_obj_size_read()
253 sizeof(ots->cur_obj->metadata.size)); in ots_obj_size_read()
260 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_id_read() local
266 if (!ots->cur_obj) { in ots_obj_id_read()
271 sys_put_le48(ots->cur_obj->id, id); in ots_obj_id_read()
273 bt_ots_obj_id_to_str(ots->cur_obj->id, id_str, in ots_obj_id_read()
284 struct bt_ots *ots = (struct bt_ots *) attr->user_data; in ots_obj_prop_read() local
288 if (!ots->cur_obj) { in ots_obj_prop_read()
294 &ots->cur_obj->metadata.props, in ots_obj_prop_read()
295 sizeof(ots->cur_obj->metadata.props)); in ots_obj_prop_read()
298 int bt_ots_obj_add_internal(struct bt_ots *ots, struct bt_conn *conn, in bt_ots_obj_add_internal() argument
306 if (IS_ENABLED(CONFIG_BT_OTS_DIR_LIST_OBJ) && ots->dir_list && in bt_ots_obj_add_internal()
307 !bt_ots_dir_list_is_idle(ots->dir_list)) { in bt_ots_obj_add_internal()
312 err = bt_gatt_ots_obj_manager_obj_add(ots->obj_manager, &new_obj); in bt_ots_obj_add_internal()
320 if (ots->cb->obj_created) { in bt_ots_obj_add_internal()
321 err = ots->cb->obj_created(ots, conn, new_obj->id, param, &created_desc); in bt_ots_obj_add_internal()
329 if (!ots_obj_validate_prop_against_oacp(created_desc.props, ots->features.oacp)) { in bt_ots_obj_add_internal()
331 created_desc.props, ots->features.oacp); in bt_ots_obj_add_internal()
333 (void)bt_ots_obj_delete(ots, new_obj->id); in bt_ots_obj_add_internal()
340 (void)bt_ots_obj_delete(ots, new_obj->id); in bt_ots_obj_add_internal()
347 (void)bt_ots_obj_delete(ots, new_obj->id); in bt_ots_obj_add_internal()
364 int bt_ots_obj_add(struct bt_ots *ots, const struct bt_ots_obj_add_param *param) in bt_ots_obj_add() argument
370 err = bt_ots_obj_add_internal(ots, NULL, param, &obj); in bt_ots_obj_add()
379 (void)bt_ots_obj_delete(ots, obj->id); in bt_ots_obj_add()
386 (void)bt_ots_obj_delete(ots, obj->id); in bt_ots_obj_add()
393 int bt_ots_obj_delete(struct bt_ots *ots, uint64_t id) in bt_ots_obj_delete() argument
404 err = bt_gatt_ots_obj_manager_obj_get(ots->obj_manager, id, &obj); in bt_ots_obj_delete()
413 if (IS_ENABLED(CONFIG_BT_OTS_DIR_LIST_OBJ) && ots->dir_list && in bt_ots_obj_delete()
414 !bt_ots_dir_list_is_idle(ots->dir_list)) { in bt_ots_obj_delete()
419 if (ots->cb->obj_deleted) { in bt_ots_obj_delete()
420 err = ots->cb->obj_deleted(ots, NULL, obj->id); in bt_ots_obj_delete()
431 if (ots->cur_obj == obj) { in bt_ots_obj_delete()
432 ots->cur_obj = NULL; in bt_ots_obj_delete()
439 void *bt_ots_svc_decl_get(struct bt_ots *ots) in bt_ots_svc_decl_get() argument
441 return ots->service->attrs; in bt_ots_svc_decl_get()
448 struct bt_ots *ots = CONTAINER_OF(ind, struct bt_ots, oacp_ind); in oacp_indicate_work_handler() local
450 bt_gatt_indicate(NULL, &ots->oacp_ind.params); in oacp_indicate_work_handler()
456 struct bt_ots *ots = CONTAINER_OF(ind, struct bt_ots, olcp_ind); in olcp_indicate_work_handler() local
458 bt_gatt_indicate(NULL, &ots->olcp_ind.params); in olcp_indicate_work_handler()
461 int bt_ots_init(struct bt_ots *ots, in bt_ots_init() argument
466 if (!ots || !ots_init || !ots_init->cb) { in bt_ots_init()
485 ots->cb = ots_init->cb; in bt_ots_init()
496 ots->features.oacp = ots_init->features.oacp; in bt_ots_init()
497 LOG_DBG("OACP features: 0x%04X", ots->features.oacp); in bt_ots_init()
503 ots->features.olcp = ots_init->features.olcp; in bt_ots_init()
504 LOG_DBG("OLCP features: 0x%04X", ots->features.olcp); in bt_ots_init()
507 err = bt_gatt_ots_l2cap_register(&ots->l2cap); in bt_ots_init()
512 err = bt_gatt_service_register(ots->service); in bt_ots_init()
514 bt_gatt_ots_l2cap_unregister(&ots->l2cap); in bt_ots_init()
520 bt_ots_dir_list_init(&ots->dir_list, ots->obj_manager); in bt_ots_init()
523 k_work_init(&ots->oacp_ind.work, oacp_indicate_work_handler); in bt_ots_init()
524 k_work_init(&ots->olcp_ind.work, olcp_indicate_work_handler); in bt_ots_init()
594 static void ots_delete_empty_name_objects(struct bt_ots *ots, struct bt_conn *conn) in ots_delete_empty_name_objects() argument
601 err = bt_gatt_ots_obj_manager_first_obj_get(ots->obj_manager, &next_obj); in ots_delete_empty_name_objects()
608 err = bt_gatt_ots_obj_manager_next_obj_get(ots->obj_manager, obj, &next_obj); in ots_delete_empty_name_objects()
614 if (ots->cb && ots->cb->obj_deleted) { in ots_delete_empty_name_objects()
615 ots->cb->obj_deleted(ots, conn, obj->id); in ots_delete_empty_name_objects()