xref: /netbsd-src/usr.sbin/bta2dpd/bta2dpd/avdtp_signal.h (revision 41b650d061aa151a34533d88d5e4f1b8ac646673)
1 /* $NetBSD: avdtp_signal.h,v 1.2 2025/01/06 11:19:35 mlelstv Exp $ */
2 
3 /*-
4  * Copyright (c) 2015 - 2016 Nathanial Sloss <nathanialsloss@yahoo.com.au>
5  * All rights reserved.
6  *
7  *		This software is dedicated to the memory of -
8  *	   Baron James Anlezark (Barry) - 1 Jan 1949 - 13 May 2012.
9  *
10  *		Barry was a man who loved his music.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #include <sys/types.h>
35 #include <stdbool.h>
36 /* Our endpoint. */
37 #define INTSEP				8
38 
39 /* AVDTP signals. */
40 
41 #define	AVDTP_DISCOVER			0x01
42 #define	AVDTP_GET_CAPABILITIES		0x02
43 #define	AVDTP_SET_CONFIGURATION		0x03
44 #define	AVDTP_GET_CONFIGURATION		0x04
45 #define	AVDTP_RECONFIGURE		0x05
46 #define	AVDTP_OPEN			0x06
47 #define	AVDTP_START			0x07
48 #define	AVDTP_CLOSE			0x08
49 #define	AVDTP_SUSPEND			0x09
50 #define	AVDTP_ABORT			0x0a
51 #define	AVDTP_SECURITY_CONTROL		0x0b
52 #define	AVDTP_GET_ALL_CAPABILITIES	0x0c
53 #define	AVDTP_DELAYREPORT		0x0d
54 
55 /* Signal Command & Response Header Masks. */
56 
57 #define TRANSACTIONLABEL		0xf0
58 #define TRANSACTIONLABEL_S		4
59 #define SIGNALID_MASK			0x3f
60 #define PACKETTYPE			0x0c
61 #define PACKETTYPE_S			0x02
62 #define MESSAGETYPE			0x03
63 #define	SIGNALIDENTIFIER		0x3f
64 #define DISCOVER_SEP_IN_USE		0x02
65 
66 /* Packet Types */
67 #define singlePacket			0x0
68 #define startPacket			0x1
69 #define continuePacket			0x2
70 #define endPacket			0x3
71 
72 /* Message Types */
73 #define COMMAND				0x0
74 #define RESPONSEACCEPT			0x2
75 #define RESPONSEREJECT			0x3
76 
77 /* Response general error/success lengths */
78 #define AVDTP_LEN_SUCCESS		2
79 #define AVDTP_LEN_ERROR			3
80 
81 /* Error codes */
82 #define BAD_HEADER_FORMAT		0x01
83 #define BAD_LENGTH			0x11
84 #define BAD_ACP_SEID			0x12
85 #define SEP_IN_USE			0x13
86 #define SEP_NOT_IN_USE			0x14
87 #define BAD_SERV_CATAGORY		0x17
88 #define BAD_PAYLOAD_FORMAT		0x18
89 #define NOT_SUPPORTED_COMMAND		0x19
90 #define INVALID_CAPABILITIES		0x1a
91 
92 #define BAD_RECOVERY_TYPE		0x22
93 #define BAD_MEDIA_TRANSPORT_FORMAT	0x23
94 #define BAD_RECOVERY_FORMAT		0x25
95 #define BAD_ROHC_FORMAT			0x26
96 #define BAD_CP_FORMAT			0x27
97 #define BAD_MULTIPLEXING_FORMAT		0x28
98 #define UNSUPPORTED_CONFIGURATION	0x29
99 #define BAD_STATE			0x31
100 
101 /* Service Capabilities Field. */
102 #define mediaTransport			0x1
103 #define reporting			0x2
104 #define recovery			0x3
105 #define contentProtection		0x4
106 #define headerCompression		0x5
107 #define multiplexing			0x6
108 #define mediaCodec			0x7
109 
110 /* Media Codec Capabilities */
111 #define mediaType			0xf0
112 
113 struct avdtp_sepInfo {
114 	uint8_t sep;
115 	uint8_t media_Type;
116 };
117 
118 int avdtpSendCommand(int fd, uint8_t command, uint8_t type,
119     uint8_t *data, size_t datasize);
120 int avdtpCheckResponse(int recvfd, bool *isCommand, uint8_t *trans, uint8_t
121     *signalId, uint8_t *pkt_type, uint8_t *data, size_t *datasize, uint8_t
122     *sep);
123 int avdtpDiscover(uint8_t *buffer, size_t recvsize, struct avdtp_sepInfo
124     *sepInfo, bool sink);
125 void avdtpGetCapabilities(int fd, int recvfd, uint8_t sep);
126 int avdtpAutoConfigSBC(int fd, int recvfd, uint8_t * capabilities, size_t
127     caplen, uint8_t sep, u_int8_t *freq, u_int8_t *mode, u_int8_t *alloc_method,
128     u_int8_t *bitpool, u_int8_t* bands, u_int8_t *blocks, u_int8_t srcsep);
129 int avdtpSetConfiguration(int fd, int recvfd, uint8_t sep, uint8_t *data,
130     size_t datasize, int srcsep);
131 void avdtpOpen(int fd, int recvfd, uint8_t sep);
132 void avdtpStart(int fd, int recvfd, uint8_t sep);
133 void avdtpClose(int fd, int recvfd, uint8_t sep);
134 void avdtpSuspend(int fd, int recvfd, uint8_t sep);
135 void avdtpAbort(int fd, int recvfd, uint8_t sep);
136 int avdtpSendDiscResponseAudio(int, int, uint8_t, uint8_t, bool);
137 int avdtpSendCapabilitiesResponseSBC(int, int, int, uint8_t, uint8_t,
138     uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
139 int avdtpSendAccept(int, int, uint8_t, uint8_t);
140 int avdtpSendReject(int, int, uint8_t, uint8_t);
141 
142