Zephyr Project API  3.1.0
A Scalable Open Source RTOS
ots.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020-2022 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_OTS_H_
8#define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_OTS_H_
9
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#include <stdbool.h>
25#include <zephyr/types.h>
27#include <sys/types.h>
28#include <zephyr/sys/util.h>
32
34#define BT_OTS_OBJ_ID_SIZE 6
35
37#define BT_OTS_OBJ_ID_MIN 0x000000000100
38
40#define BT_OTS_OBJ_ID_MAX 0xFFFFFFFFFFFF
41
43#define OTS_OBJ_ID_DIR_LIST 0x000000000000
44
46#define BT_OTS_OBJ_ID_MASK BIT64_MASK(48)
47
49#define BT_OTS_OBJ_ID_STR_LEN 15
50
53 union {
54 /* Used to indicate UUID type */
55 struct bt_uuid uuid;
56
57 /* 16-bit UUID value */
59
60 /* 128-bit UUID value */
62 };
63};
64
66enum {
69
72
75
78
84
87
94
97};
98
103#define BT_OTS_OBJ_SET_PROP_DELETE(prop) \
104 WRITE_BIT(prop, BT_OTS_OBJ_PROP_DELETE, 1)
105
110#define BT_OTS_OBJ_SET_PROP_EXECUTE(prop) \
111 WRITE_BIT(prop, BT_OTS_OBJ_PROP_EXECUTE, 1)
112
117#define BT_OTS_OBJ_SET_PROP_READ(prop) \
118 WRITE_BIT(prop, BT_OTS_OBJ_PROP_READ, 1)
119
124#define BT_OTS_OBJ_SET_PROP_WRITE(prop) \
125 WRITE_BIT(prop, BT_OTS_OBJ_PROP_WRITE, 1)
126
131#define BT_OTS_OBJ_SET_PROP_APPEND(prop) \
132 WRITE_BIT(prop, BT_OTS_OBJ_PROP_APPEND, 1)
133
138#define BT_OTS_OBJ_SET_PROP_TRUNCATE(prop) \
139 WRITE_BIT(prop, BT_OTS_OBJ_PROP_TRUNCATE, 1)
140
145#define BT_OTS_OBJ_SET_PROP_PATCH(prop) \
146 WRITE_BIT(prop, BT_OTS_OBJ_PROP_PATCH, 1)
147
152#define BT_OTS_OBJ_SET_PROP_MARKED(prop) \
153 WRITE_BIT(prop, BT_OTS_OBJ_PROP_MARKED, 1)
154
159#define BT_OTS_OBJ_GET_PROP_DELETE(prop) \
160 ((prop) & BIT(BT_OTS_OBJ_PROP_DELETE))
161
166#define BT_OTS_OBJ_GET_PROP_EXECUTE(prop) \
167 ((prop) & BIT(BT_OTS_OBJ_PROP_EXECUTE))
168
173#define BT_OTS_OBJ_GET_PROP_READ(prop) \
174 ((prop) & BIT(BT_OTS_OBJ_PROP_READ))
175
180#define BT_OTS_OBJ_GET_PROP_WRITE(prop) \
181 ((prop) & BIT(BT_OTS_OBJ_PROP_WRITE))
182
187#define BT_OTS_OBJ_GET_PROP_APPEND(prop) \
188 ((prop) & BIT(BT_OTS_OBJ_PROP_APPEND))
189
194#define BT_OTS_OBJ_GET_PROP_TRUNCATE(prop) \
195 ((prop) & BIT(BT_OTS_OBJ_PROP_TRUNCATE))
196
201#define BT_OTS_OBJ_GET_PROP_PATCH(prop) \
202 ((prop) & BIT(BT_OTS_OBJ_PROP_PATCH))
203
208#define BT_OTS_OBJ_GET_PROP_MARKED(prop) \
209 ((prop) & BIT(BT_OTS_OBJ_PROP_MARKED))
210
215
218} __packed;
219
221enum {
224
227
230
233
236
239
242
245
248
251};
252
257#define BT_OTS_OACP_SET_FEAT_CREATE(feat) \
258 WRITE_BIT(feat, BT_OTS_OACP_FEAT_CREATE, 1)
259
264#define BT_OTS_OACP_SET_FEAT_DELETE(feat) \
265 WRITE_BIT(feat, BT_OTS_OACP_FEAT_DELETE, 1)
266
271#define BT_OTS_OACP_SET_FEAT_CHECKSUM(feat) \
272 WRITE_BIT(feat, BT_OTS_OACP_FEAT_CHECKSUM, 1)
273
278#define BT_OTS_OACP_SET_FEAT_EXECUTE(feat) \
279 WRITE_BIT(feat, BT_OTS_OACP_FEAT_EXECUTE, 1)
280
285#define BT_OTS_OACP_SET_FEAT_READ(feat) \
286 WRITE_BIT(feat, BT_OTS_OACP_FEAT_READ, 1)
287
292#define BT_OTS_OACP_SET_FEAT_WRITE(feat) \
293 WRITE_BIT(feat, BT_OTS_OACP_FEAT_WRITE, 1)
294
299#define BT_OTS_OACP_SET_FEAT_APPEND(feat) \
300 WRITE_BIT(feat, BT_OTS_OACP_FEAT_APPEND, 1)
301
306#define BT_OTS_OACP_SET_FEAT_TRUNCATE(feat) \
307 WRITE_BIT(feat, BT_OTS_OACP_FEAT_TRUNCATE, 1)
308
313#define BT_OTS_OACP_SET_FEAT_PATCH(feat) \
314 WRITE_BIT(feat, BT_OTS_OACP_FEAT_PATCH, 1)
315
320#define BT_OTS_OACP_SET_FEAT_ABORT(feat) \
321 WRITE_BIT(feat, BT_OTS_OACP_FEAT_ABORT, 1)
322
327#define BT_OTS_OACP_GET_FEAT_CREATE(feat) \
328 ((feat) & BIT(BT_OTS_OACP_FEAT_CREATE))
329
334#define BT_OTS_OACP_GET_FEAT_DELETE(feat) \
335 ((feat) & BIT(BT_OTS_OACP_FEAT_DELETE))
336
341#define BT_OTS_OACP_GET_FEAT_CHECKSUM(feat) \
342 ((feat) & BIT(BT_OTS_OACP_FEAT_CHECKSUM))
343
348#define BT_OTS_OACP_GET_FEAT_EXECUTE(feat) \
349 ((feat) & BIT(BT_OTS_OACP_FEAT_EXECUTE))
350
355#define BT_OTS_OACP_GET_FEAT_READ(feat) \
356 ((feat) & BIT(BT_OTS_OACP_FEAT_READ))
357
362#define BT_OTS_OACP_GET_FEAT_WRITE(feat) \
363 ((feat) & BIT(BT_OTS_OACP_FEAT_WRITE))
364
369#define BT_OTS_OACP_GET_FEAT_APPEND(feat) \
370 ((feat) & BIT(BT_OTS_OACP_FEAT_APPEND))
371
376#define BT_OTS_OACP_GET_FEAT_TRUNCATE(feat) \
377 ((feat) & BIT(BT_OTS_OACP_FEAT_TRUNCATE))
378
383#define BT_OTS_OACP_GET_FEAT_PATCH(feat) \
384 ((feat) & BIT(BT_OTS_OACP_FEAT_PATCH))
385
390#define BT_OTS_OACP_GET_FEAT_ABORT(feat) \
391 ((feat) & BIT(BT_OTS_OACP_FEAT_ABORT))
392
394enum {
397
400
403
406};
407
412#define BT_OTS_OLCP_SET_FEAT_GO_TO(feat) \
413 WRITE_BIT(feat, BT_OTS_OLCP_FEAT_GO_TO, 1)
414
419#define BT_OTS_OLCP_SET_FEAT_ORDER(feat) \
420 WRITE_BIT(feat, BT_OTS_OLCP_FEAT_ORDER, 1)
421
426#define BT_OTS_OLCP_SET_FEAT_NUM_REQ(feat) \
427 WRITE_BIT(feat, BT_OTS_OLCP_FEAT_NUM_REQ, 1)
428
433#define BT_OTS_OLCP_SET_FEAT_CLEAR(feat) \
434 WRITE_BIT(feat, BT_OTS_OLCP_FEAT_CLEAR, 1)
435
440#define BT_OTS_OLCP_GET_FEAT_GO_TO(feat) \
441 ((feat) & BIT(BT_OTS_OLCP_FEAT_GO_TO))
442
447#define BT_OTS_OLCP_GET_FEAT_ORDER(feat) \
448 ((feat) & BIT(BT_OTS_OLCP_FEAT_ORDER))
449
454#define BT_OTS_OLCP_GET_FEAT_NUM_REQ(feat) \
455 ((feat) & BIT(BT_OTS_OLCP_FEAT_NUM_REQ))
456
461#define BT_OTS_OLCP_GET_FEAT_CLEAR(feat) \
462 ((feat) & BIT(BT_OTS_OLCP_FEAT_CLEAR))
463
466 /* OACP Features */
468
469 /* OLCP Features */
471} __packed;
472
474enum {
491};
492
501};
502#define BT_OTS_DATE_TIME_FIELD_SIZE 7
503
510
511#if defined(CONFIG_BT_OTS)
513 char *name;
514#endif /* CONFIG_BT_OTS */
515
516#if defined(CONFIG_BT_OTS_CLIENT)
517 /* TODO: Unify client/server name */
519 char name_c[CONFIG_BT_OTS_OBJ_MAX_NAME_LEN + 1];
520#endif /* CONFIG_BT_OTS_CLIENT */
521
524
527
528#if defined(CONFIG_BT_OTS_CLIENT)
530 struct bt_ots_date_time first_created;
531
533 struct bt_ots_date_time modified;
534
536 uint64_t id;
537#endif /* CONFIG_BT_OTS_CLIENT */
538
541};
542
544struct bt_ots;
545
550
553};
554
571 char *name;
572
583
586};
587
589struct bt_ots_cb {
612 int (*obj_created)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id,
613 const struct bt_ots_obj_add_param *add_param,
614 struct bt_ots_obj_created_desc *created_desc);
615
637 int (*obj_deleted)(struct bt_ots *ots, struct bt_conn *conn,
638 uint64_t id);
639
648 void (*obj_selected)(struct bt_ots *ots, struct bt_conn *conn,
649 uint64_t id);
650
671 ssize_t (*obj_read)(struct bt_ots *ots, struct bt_conn *conn,
672 uint64_t id, void **data, size_t len,
673 off_t offset);
674
701 ssize_t (*obj_write)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id,
702 const void *data, size_t len, off_t offset,
703 size_t rem);
704
717 void (*obj_name_written)(struct bt_ots *ots, struct bt_conn *conn,
718 uint64_t id, const char *cur_name, const char *new_name);
719};
720
723 /* OTS features */
725
726 /* Callbacks */
727 struct bt_ots_cb *cb;
728};
729
742int bt_ots_obj_add(struct bt_ots *ots, const struct bt_ots_obj_add_param *param);
743
756int bt_ots_obj_delete(struct bt_ots *ots, uint64_t id);
757
767void *bt_ots_svc_decl_get(struct bt_ots *ots);
768
776int bt_ots_init(struct bt_ots *ots, struct bt_ots_init *ots_init);
777
782struct bt_ots *bt_ots_free_instance_get(void);
783
784#define BT_OTS_STOP 0
785#define BT_OTS_CONTINUE 1
786
787/* TODO: Merge server and client instance as opaque type */
802
807
811
813
815};
816
830 void (*obj_selected)(struct bt_ots_client *ots_inst,
831 struct bt_conn *conn, int err);
832
833
850 int (*obj_data_read)(struct bt_ots_client *ots_inst,
851 struct bt_conn *conn, uint32_t offset,
852 uint32_t len, uint8_t *data_p, bool is_complete);
853
867 void (*obj_metadata_read)(struct bt_ots_client *ots_inst,
868 struct bt_conn *conn, int err,
869 uint8_t metadata_read);
870};
871
883
896 struct bt_gatt_subscribe_params *params,
897 const void *data, uint16_t length);
898
907 struct bt_conn *conn);
908
918 struct bt_conn *conn,
919 uint64_t obj_id);
920
929 struct bt_conn *conn);
930
939 struct bt_conn *conn);
940
949 struct bt_conn *conn);
950
959 struct bt_conn *conn);
960
973 struct bt_conn *conn,
974 uint8_t metadata);
975
989 struct bt_conn *conn);
990
1002
1014
1026static inline int bt_ots_obj_id_to_str(uint64_t obj_id, char *str, size_t len)
1027{
1028 uint8_t id[6];
1029
1030 sys_put_le48(obj_id, id);
1031
1032 return snprintk(str, len, "0x%02X%02X%02X%02X%02X%02X",
1033 id[5], id[4], id[3], id[2], id[1], id[0]);
1034}
1035
1042 uint16_t count);
1043
1044#ifdef __cplusplus
1045}
1046#endif
1047
1052#endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_OTS_H_ */
Byte order helpers.
static void sys_put_le48(uint64_t val, uint8_t dst[6])
Put a 48-bit integer as little-endian to arbitrary location.
Definition: byteorder.h:346
ZTEST_BMEM int count
Definition: main.c:33
Bluetooth connection handling.
Generic Attribute Profile handling.
int bt_ots_client_select_id(struct bt_ots_client *otc_inst, struct bt_conn *conn, uint64_t obj_id)
Select an object by its Object ID.
int bt_ots_client_select_first(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Select the first object.
int bt_ots_client_select_next(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Select the next object.
void bt_ots_metadata_display(struct bt_ots_obj_metadata *metadata, uint16_t count)
Displays one or more object metadata as text with BT_INFO.
int bt_ots_obj_delete(struct bt_ots *ots, uint64_t id)
Delete an object from the OTS instance.
int bt_ots_client_select_last(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Select the last object.
int bt_ots_client_read_object_data(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Read the data of the current selected object.
int bt_ots_client_read_object_metadata(struct bt_ots_client *otc_inst, struct bt_conn *conn, uint8_t metadata)
Read the metadata of the current object.
int(* bt_ots_client_dirlisting_cb)(struct bt_ots_obj_metadata *meta)
Directory listing object metadata callback.
Definition: ots.h:1001
int bt_ots_client_decode_dirlisting(uint8_t *data, uint16_t length, bt_ots_client_dirlisting_cb cb)
Decode Directory Listing object into object metadata.
void * bt_ots_svc_decl_get(struct bt_ots *ots)
Get the service declaration attribute.
int bt_ots_obj_add(struct bt_ots *ots, const struct bt_ots_obj_add_param *param)
Add an object to the OTS instance.
int bt_ots_init(struct bt_ots *ots, struct bt_ots_init *ots_init)
Initialize the OTS instance.
uint8_t bt_ots_client_indicate_handler(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, const void *data, uint16_t length)
OTS Indicate Handler function.
int bt_ots_client_select_prev(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Select the previous object.
static int bt_ots_obj_id_to_str(uint64_t obj_id, char *str, size_t len)
Converts binary OTS Object ID to string.
Definition: ots.h:1026
int bt_ots_client_register(struct bt_ots_client *ots_inst)
Register an Object Transfer Service Instance.
int bt_ots_client_read_feature(struct bt_ots_client *otc_inst, struct bt_conn *conn)
Read the OTS feature characteristic.
struct bt_ots * bt_ots_free_instance_get(void)
Get a free instance of OTS from the pool.
@ BT_OTS_OBJ_PROP_MARKED
Definition: ots.h:96
@ BT_OTS_OBJ_PROP_DELETE
Definition: ots.h:68
@ BT_OTS_OBJ_PROP_TRUNCATE
Definition: ots.h:86
@ BT_OTS_OBJ_PROP_APPEND
Bit 4 Appending data to this object is permitted.
Definition: ots.h:83
@ BT_OTS_OBJ_PROP_READ
Definition: ots.h:74
@ BT_OTS_OBJ_PROP_EXECUTE
Definition: ots.h:71
@ BT_OTS_OBJ_PROP_PATCH
Bit 6 Patching this object is permitted.
Definition: ots.h:93
@ BT_OTS_OBJ_PROP_WRITE
Definition: ots.h:77
@ BT_OTS_OLCP_FEAT_ORDER
Definition: ots.h:399
@ BT_OTS_OLCP_FEAT_NUM_REQ
Definition: ots.h:402
@ BT_OTS_OLCP_FEAT_CLEAR
Definition: ots.h:405
@ BT_OTS_OLCP_FEAT_GO_TO
Definition: ots.h:396
@ BT_OTS_METADATA_REQ_ALL
Request all object metadata.
Definition: ots.h:490
@ BT_OTS_METADATA_REQ_MODIFIED
Request object last modified time.
Definition: ots.h:484
@ BT_OTS_METADATA_REQ_ID
Request object ID.
Definition: ots.h:486
@ BT_OTS_METADATA_REQ_CREATED
Request object first created time.
Definition: ots.h:482
@ BT_OTS_METADATA_REQ_SIZE
Request object size.
Definition: ots.h:480
@ BT_OTS_METADATA_REQ_NAME
Request object name.
Definition: ots.h:476
@ BT_OTS_METADATA_REQ_PROPS
Request object properties.
Definition: ots.h:488
@ BT_OTS_METADATA_REQ_TYPE
Request object type.
Definition: ots.h:478
@ BT_OTS_OACP_FEAT_ABORT
Definition: ots.h:250
@ BT_OTS_OACP_FEAT_DELETE
Definition: ots.h:226
@ BT_OTS_OACP_FEAT_APPEND
Definition: ots.h:241
@ BT_OTS_OACP_FEAT_READ
Definition: ots.h:235
@ BT_OTS_OACP_FEAT_TRUNCATE
Definition: ots.h:244
@ BT_OTS_OACP_FEAT_CHECKSUM
Definition: ots.h:229
@ BT_OTS_OACP_FEAT_WRITE
Definition: ots.h:238
@ BT_OTS_OACP_FEAT_EXECUTE
Definition: ots.h:232
@ BT_OTS_OACP_FEAT_PATCH
Definition: ots.h:247
@ BT_OTS_OACP_FEAT_CREATE
Definition: ots.h:223
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition: util_macro.h:44
__SIZE_TYPE__ ssize_t
Definition: types.h:28
int snprintk(char *str, size_t size, const char *fmt,...)
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
GATT Discover Attributes parameters.
Definition: gatt.h:1337
GATT Read parameters.
Definition: gatt.h:1421
GATT Subscribe parameters.
Definition: gatt.h:1685
GATT Write parameters.
Definition: gatt.h:1509
OTS callback structure.
Definition: ots.h:589
int(* obj_created)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id, const struct bt_ots_obj_add_param *add_param, struct bt_ots_obj_created_desc *created_desc)
Object created callback.
Definition: ots.h:612
int(* obj_deleted)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id)
Object deleted callback.
Definition: ots.h:637
void(* obj_name_written)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id, const char *cur_name, const char *new_name)
Object name written callback.
Definition: ots.h:717
ssize_t(* obj_read)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id, void **data, size_t len, off_t offset)
Object read callback.
Definition: ots.h:671
ssize_t(* obj_write)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id, const void *data, size_t len, off_t offset, size_t rem)
Object write callback.
Definition: ots.h:701
void(* obj_selected)(struct bt_ots *ots, struct bt_conn *conn, uint64_t id)
Object selected callback.
Definition: ots.h:648
Definition: ots.h:818
void(* obj_metadata_read)(struct bt_ots_client *ots_inst, struct bt_conn *conn, int err, uint8_t metadata_read)
Callback function for metadata of the selected object.
Definition: ots.h:867
void(* obj_selected)(struct bt_ots_client *ots_inst, struct bt_conn *conn, int err)
Callback function when a new object is selected.
Definition: ots.h:830
int(* obj_data_read)(struct bt_ots_client *ots_inst, struct bt_conn *conn, uint32_t offset, uint32_t len, uint8_t *data_p, bool is_complete)
Callback function for the data of the selected object.
Definition: ots.h:850
OTS client instance.
Definition: ots.h:789
struct bt_gatt_write_params write_params
Definition: ots.h:808
uint16_t start_handle
Definition: ots.h:790
struct bt_ots_client_cb * cb
Definition: ots.h:810
uint16_t feature_handle
Definition: ots.h:792
uint16_t obj_id_handle
Definition: ots.h:799
struct bt_gatt_subscribe_params olcp_sub_params
Definition: ots.h:805
uint16_t obj_size_handle
Definition: ots.h:795
uint16_t obj_modified_handle
Definition: ots.h:798
struct bt_gatt_read_params read_proc
Definition: ots.h:809
struct bt_gatt_discover_params oacp_sub_disc_params
Definition: ots.h:804
struct bt_ots_feat features
Definition: ots.h:812
struct bt_gatt_subscribe_params oacp_sub_params
Definition: ots.h:803
uint16_t end_handle
Definition: ots.h:791
uint16_t olcp_handle
Definition: ots.h:801
uint16_t obj_properties_handle
Definition: ots.h:796
struct bt_ots_obj_metadata cur_object
Definition: ots.h:814
struct bt_gatt_discover_params olcp_sub_disc_params
Definition: ots.h:806
uint16_t oacp_handle
Definition: ots.h:800
uint16_t obj_type_handle
Definition: ots.h:794
uint16_t obj_name_handle
Definition: ots.h:793
uint16_t obj_created_handle
Definition: ots.h:797
Date and Time structure.
Definition: ots.h:494
uint8_t day
Definition: ots.h:497
uint8_t seconds
Definition: ots.h:500
uint8_t month
Definition: ots.h:496
uint8_t minutes
Definition: ots.h:499
uint8_t hours
Definition: ots.h:498
uint16_t year
Definition: ots.h:495
Features of the OTS.
Definition: ots.h:465
uint32_t olcp
Definition: ots.h:470
uint32_t oacp
Definition: ots.h:467
Descriptor for OTS initialization.
Definition: ots.h:722
struct bt_ots_feat features
Definition: ots.h:724
struct bt_ots_cb * cb
Definition: ots.h:727
Descriptor for OTS object addition.
Definition: ots.h:547
uint32_t size
Object size to allocate.
Definition: ots.h:549
struct bt_ots_obj_type type
Object type.
Definition: ots.h:552
Descriptor for OTS created object.
Definition: ots.h:561
uint32_t props
Object properties.
Definition: ots.h:585
struct bt_ots_obj_size size
Object size.
Definition: ots.h:582
char * name
Object name.
Definition: ots.h:571
Metadata of an OTS object.
Definition: ots.h:509
uint32_t props
Object Properties.
Definition: ots.h:540
struct bt_ots_obj_type type
Object Type.
Definition: ots.h:523
struct bt_ots_obj_size size
Object Size.
Definition: ots.h:526
Descriptor for OTS Object Size parameter.
Definition: ots.h:212
uint32_t cur
Current Size.
Definition: ots.h:214
uint32_t alloc
Allocated Size.
Definition: ots.h:217
Type of an OTS object.
Definition: ots.h:52
struct bt_uuid uuid
Definition: ots.h:55
struct bt_uuid_16 uuid_16
Definition: ots.h:58
struct bt_uuid_128 uuid_128
Definition: ots.h:61
Definition: uuid.h:64
Definition: uuid.h:50
This is a 'tentative' type and should be used as a pointer only.
Definition: uuid.h:46
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static qdata_t data_p[2]
Definition: test_queue_contexts.c:19
Misc utilities.
Bluetooth UUID handling.