XenevaOS
Loading...
Searching...
No Matches
parse.h
Go to the documentation of this file.
1
30#ifndef __BT_PARSE_H__
31#define __BT_PARSE_H__
32
33#include <stdint.h>
34
35int bt_ad_name(const uint8_t* ad, int len, char* out, int cap);
36int bt_hci_cmd(uint8_t* out, uint16_t opcode, const uint8_t* param, uint8_t plen);
38int bt_att_read_rsp(const uint8_t* pdu, int len, uint8_t* val, int cap);
39
40/* Minimal SDP client (Service Discovery Protocol) for the A2DP source
41 * role, as every desktop initiator does before AVDTP: find the Audio Sink
42 * record and read its Protocol Descriptor List (L2CAP PSM + AVDTP
43 * version). Plain <stdint.h>, covered by the host unit test.
44 *
45 * Mirrors BlueZ behaviour (lib/sdp + profiles/audio/a2dp.c):
46 * - ServiceSearchAttributeReq (combined, one round) first, falling back
47 * to separate ServiceSearch + ServiceAttribute reads;
48 * - MaxServiceRecordCount / MaxAttributeByteCount 0xFFFF;
49 * - continuationState loop when a response does not fit one L2CAP MTU
50 * (Sony ULT WEAR fragments its AudioSink record). */
51#define SDP_PSM 1
52#define SDP_ERR_RSP 0x01
53#define SDP_SS_REQ 0x02
54#define SDP_SS_RSP 0x03
55#define SDP_SA_REQ 0x04
56#define SDP_SA_RSP 0x05
57#define SDP_SSA_REQ 0x06
58#define SDP_SSA_RSP 0x07
59#define SDP_UUID_AUDIOSINK 0x110B
60#define SDP_UUID_L2CAP 0x0100
61#define SDP_UUID_AVDTP 0x0019
62#define SDP_ATTR_PROTO_LIST 0x0004
63
64int sdp_build_search(uint8_t* o, uint16_t tid, uint16_t uuid16);
65int sdp_build_attr(uint8_t* o, uint16_t tid, uint32_t handle, uint16_t attr);
66/* Combined ServiceSearchAttribute request (BlueZ a2dp record query):
67 * pattern = single UUID16, attr = single UINT16 id. Returns length.
68 * o must hold 18 bytes (parameter length 13, no trailing pad). */
70 uint16_t attr);
71/* Continuation helpers (SDP spec 4.2, BlueZ sdp_send_req loop):
72 * sdp_cont_get() returns the continuation-state length byte count
73 * (0 = complete) or -1 on truncation. The state bytes (if any) start at
74 * *state. sdp_cont_append() appends a previous continuation state to a
75 * fresh request buffer; returns the new total length. */
76int sdp_cont_get(const uint8_t* p, int len, const uint8_t** state);
77int sdp_cont_append(uint8_t* o, int clen, const uint8_t* state, int slen);
78int sdp_parse_search_rsp(const uint8_t* p, int len, uint16_t tid, uint32_t* handle);
79int sdp_parse_attr_psm(const uint8_t* p, int len, uint16_t tid, uint16_t* psm,
80 uint16_t* ver);
81/* Scan a combined SSA response for the L2CAP PSM / AVDTP version pair.
82 * 0 when found. */
83int sdp_parse_ssa_psm(const uint8_t* p, int len, uint16_t tid, uint16_t* psm,
84 uint16_t* ver);
85
86#define BT_BOND_MAGIC 0x31444e42u /* 'BND1' little-endian */
87
100
101#endif
int sdp_build_attr(uint8_t *o, uint16_t tid, uint32_t handle, uint16_t attr)
Definition parse.c:92
int bt_att_read_rsp(const uint8_t *pdu, int len, uint8_t *val, int cap)
Definition parse.c:335
int bt_att_read_req(uint8_t *out, uint16_t handle)
Definition parse.c:328
int sdp_cont_append(uint8_t *o, int clen, const uint8_t *state, int slen)
Definition parse.c:166
int sdp_build_search(uint8_t *o, uint16_t tid, uint16_t uuid16)
Definition parse.c:71
int sdp_parse_attr_psm(const uint8_t *p, int len, uint16_t tid, uint16_t *psm, uint16_t *ver)
Definition parse.c:221
int sdp_build_search_attr(uint8_t *o, uint16_t tid, uint16_t uuid16, uint16_t attr)
Definition parse.c:117
struct _bt_bond_rec_ BtBondRec
int bt_hci_cmd(uint8_t *out, uint16_t opcode, const uint8_t *param, uint8_t plen)
Definition parse.c:319
int sdp_cont_get(const uint8_t *p, int len, const uint8_t **state)
Definition parse.c:143
int sdp_parse_search_rsp(const uint8_t *p, int len, uint16_t tid, uint32_t *handle)
Definition parse.c:185
int sdp_parse_ssa_psm(const uint8_t *p, int len, uint16_t tid, uint16_t *psm, uint16_t *ver)
Definition parse.c:268
int bt_ad_name(const uint8_t *ad, int len, char *out, int cap)
Definition parse.c:287
#define out(...)
Definition main.cpp:65
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
size_t len
Definition initial.c:23
Definition parse.h:88
uint8_t addr[6]
Definition parse.h:90
uint8_t key_size
Definition parse.h:93
uint8_t rand[8]
Definition parse.h:96
uint8_t irk_ok
Definition parse.h:94
uint8_t ltk[16]
Definition parse.h:97
uint16_t ediv
Definition parse.h:95
uint8_t lesc
Definition parse.h:92
uint8_t addr_type
Definition parse.h:91
uint32_t magic
Definition parse.h:89
uint8_t irk[16]
Definition parse.h:98
#define state(x)