Blob: eir.h
Blob id: b9f7c3874eb364b1f7a3cee45c417700cd07928a
Size: 3.9 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | /* SPDX-License-Identifier: GPL-2.0-or-later */ /* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2011 Nokia Corporation * Copyright (C) 2011 Marcel Holtmann <marcel@holtmann.org> * * */ #include <glib.h> #include "bluetooth/sdp.h" #include "bluetooth/uuid.h" #define EIR_FLAGS 0x01 /* flags */ #define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */ #define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */ #define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */ #define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */ #define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */ #define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */ #define EIR_NAME_SHORT 0x08 /* shortened local name */ #define EIR_NAME_COMPLETE 0x09 /* complete local name */ #define EIR_TX_POWER 0x0A /* transmit power level */ #define EIR_CLASS_OF_DEV 0x0D /* Class of Device */ #define EIR_SSP_HASH 0x0E /* SSP Hash */ #define EIR_SSP_RANDOMIZER 0x0F /* SSP Randomizer */ #define EIR_DEVICE_ID 0x10 /* device ID */ #define EIR_SOLICIT16 0x14 /* LE: Solicit UUIDs, 16-bit */ #define EIR_SOLICIT128 0x15 /* LE: Solicit UUIDs, 128-bit */ #define EIR_SVC_DATA16 0x16 /* LE: Service data, 16-bit UUID */ #define EIR_PUB_TRGT_ADDR 0x17 /* LE: Public Target Address */ #define EIR_RND_TRGT_ADDR 0x18 /* LE: Random Target Address */ #define EIR_GAP_APPEARANCE 0x19 /* GAP appearance */ #define EIR_SOLICIT32 0x1F /* LE: Solicit UUIDs, 32-bit */ #define EIR_SVC_DATA32 0x20 /* LE: Service data, 32-bit UUID */ #define EIR_SVC_DATA128 0x21 /* LE: Service data, 128-bit UUID */ #define EIR_TRANSPORT_DISCOVERY 0x26 /* Transport Discovery Service */ #define EIR_CSIP_RSI 0x2e /* Resolvable Set Identifier */ #define EIR_BC_NAME 0x30 /* Broadcast Name */ #define EIR_MANUFACTURER_DATA 0xFF /* Manufacturer Specific Data */ /* Flags Descriptions */ #define EIR_LIM_DISC 0x01 /* LE Limited Discoverable Mode */ #define EIR_GEN_DISC 0x02 /* LE General Discoverable Mode */ #define EIR_BREDR_UNSUP 0x04 /* BR/EDR Not Supported */ #define EIR_CONTROLLER 0x08 /* Simultaneous LE and BR/EDR to Same Device Capable (Controller) */ #define EIR_SIM_HOST 0x10 /* Simultaneous LE and BR/EDR to Same Device Capable (Host) */ #define EIR_SD_MAX_LEN 238 /* 240 (EIR) - 2 (len) */ #define EIR_MSD_MAX_LEN 236 /* 240 (EIR) - 2 (len & type) - 2 */ struct eir_msd { uint16_t company; uint8_t data[EIR_MSD_MAX_LEN]; uint8_t data_len; }; struct eir_sd { char *uuid; uint8_t data[EIR_SD_MAX_LEN]; uint8_t data_len; }; struct eir_ad { uint8_t type; uint8_t len; void *data; }; struct eir_data { GSList *services; unsigned int flags; char *name; uint32_t class; uint16_t appearance; bool name_complete; bool rsi; int8_t tx_power; uint8_t *hash; uint8_t *randomizer; bdaddr_t addr; uint16_t did_vendor; uint16_t did_product; uint16_t did_version; uint16_t did_source; GSList *msd_list; GSList *sd_list; GSList *data_list; }; void eir_data_free(struct eir_data *eir); void eir_parse(struct eir_data *eir, const uint8_t *eir_data, uint8_t eir_len); int eir_parse_oob(struct eir_data *eir, uint8_t *eir_data, uint16_t eir_len); int eir_create_oob(const bdaddr_t *addr, const char *name, uint32_t cod, const uint8_t *hash, const uint8_t *randomizer, uint16_t did_vendor, uint16_t did_product, uint16_t did_version, uint16_t did_source, sdp_list_t *uuids, uint8_t *data); struct eir_sd *eir_get_service_data(struct eir_data *eir, const char *uuid); |