1 /* btp_aics.h - Bluetooth tester headers */
2 
3 /*
4  * Copyright (c) 2022 Codecoup
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  */
8 
9 #include <stdbool.h>
10 #include <stdint.h>
11 
12 #include <zephyr/bluetooth/addr.h>
13 #include <zephyr/bluetooth/conn.h>
14 #include <zephyr/sys/util.h>
15 
16 /*AICS service */
17 struct btp_aics_instance {
18 	/** Number of Audio Input Control Service instances */
19 	uint8_t aics_cnt;
20 	/** Array of pointers to Audio Input Control Service instances */
21 	struct bt_aics **aics;
22 };
23 
24 extern struct bt_aics_cb aics_client_cb;
25 extern struct btp_aics_instance aics_client_instance;
26 extern struct btp_aics_instance aics_server_instance;
27 void btp_send_aics_state_ev(struct bt_conn *conn, uint8_t att_status, int8_t gain, uint8_t mute,
28 			    uint8_t mode);
29 void btp_send_gain_setting_properties_ev(struct bt_conn *conn, uint8_t att_status, uint8_t units,
30 					 int8_t minimum, int8_t maximum);
31 void btp_send_aics_input_type_event(struct bt_conn *conn, uint8_t att_status, uint8_t input_type);
32 void btp_send_aics_status_ev(struct bt_conn *conn, uint8_t att_status, bool active);
33 void btp_send_aics_description_ev(struct bt_conn *conn, uint8_t att_status, uint8_t data_len,
34 				  char *description);
35 void btp_send_aics_procedure_ev(struct bt_conn *conn, uint8_t att_status, uint8_t opcode);
36 
37 #define BTP_AICS_READ_SUPPORTED_COMMANDS	0x01
38 struct btp_aics_read_supported_commands_rp {
39 	uint8_t data[0];
40 } __packed;
41 
42 /* AICS client/server commands */
43 #define BTP_AICS_SET_GAIN			0x02
44 struct btp_aics_set_gain_cmd {
45 	bt_addr_le_t address;
46 	int8_t gain;
47 } __packed;
48 
49 #define BTP_AICS_MUTE				0x03
50 struct btp_aics_mute_cmd {
51 	bt_addr_le_t address;
52 } __packed;
53 
54 #define BTP_AICS_UNMUTE				0x04
55 struct btp_aics_unmute_cmd {
56 	bt_addr_le_t address;
57 } __packed;
58 
59 #define BTP_AICS_MAN_GAIN_SET			0x05
60 struct btp_aics_manual_gain_cmd {
61 	bt_addr_le_t address;
62 } __packed;
63 
64 #define BTP_AICS_AUTO_GAIN_SET			0x06
65 struct btp_aics_auto_gain_cmd {
66 	bt_addr_le_t address;
67 } __packed;
68 
69 #define BTP_AICS_SET_MAN_GAIN_ONLY		0x07
70 #define BTP_AICS_SET_AUTO_GAIN_ONLY		0x08
71 #define BTP_AICS_AUDIO_DESCRIPTION_SET		0x09
72 struct btp_aics_audio_desc_cmd {
73 	uint8_t desc_len;
74 	uint8_t desc[0];
75 } __packed;
76 
77 #define BTP_AICS_MUTE_DISABLE			0x0a
78 #define BTP_AICS_GAIN_SETTING_PROP_GET		0x0b
79 struct btp_aics_gain_setting_prop_cmd {
80 	bt_addr_le_t address;
81 } __packed;
82 
83 #define BTP_AICS_TYPE_GET			0x0c
84 struct btp_aics_type_cmd {
85 	bt_addr_le_t address;
86 } __packed;
87 
88 #define BTP_AICS_STATUS_GET			0x0d
89 struct btp_aics_status_cmd {
90 	bt_addr_le_t address;
91 } __packed;
92 
93 #define BTP_AICS_STATE_GET			0x0e
94 struct btp_aics_state_cmd {
95 	bt_addr_le_t address;
96 } __packed;
97 
98 #define BTP_AICS_DESCRIPTION_GET		0x0f
99 struct btp_aics_desc_cmd {
100 	bt_addr_le_t address;
101 } __packed;
102 
103 /* AICS events */
104 #define BTP_AICS_STATE_EV			0x80
105 struct btp_aics_state_ev {
106 	bt_addr_le_t address;
107 	uint8_t att_status;
108 	int8_t gain;
109 	uint8_t mute;
110 	uint8_t mode;
111 } __packed;
112 
113 #define BTP_GAIN_SETTING_PROPERTIES_EV		0x81
114 struct btp_gain_setting_properties_ev {
115 	bt_addr_le_t address;
116 	uint8_t att_status;
117 	uint8_t units;
118 	int8_t minimum;
119 	int8_t maximum;
120 } __packed;
121 
122 #define BTP_AICS_INPUT_TYPE_EV			0x82
123 struct btp_aics_input_type_ev {
124 	bt_addr_le_t address;
125 	uint8_t att_status;
126 	uint8_t input_type;
127 } __packed;
128 
129 #define BTP_AICS_STATUS_EV			0x83
130 struct btp_aics_status_ev {
131 	bt_addr_le_t address;
132 	uint8_t att_status;
133 	bool active;
134 } __packed;
135 
136 #define BTP_AICS_DESCRIPTION_EV			0x84
137 struct btp_aics_description_ev {
138 	bt_addr_le_t address;
139 	uint8_t att_status;
140 	uint8_t data_len;
141 	char data[0];
142 } __packed;
143 
144 #define BTP_AICS_PROCEDURE_EV			0x85
145 struct btp_aics_procedure_ev {
146 	bt_addr_le_t address;
147 	uint8_t att_status;
148 	uint8_t opcode;
149 } __packed;
150