1 /*
2  * Copyright 2020 HIMSA II K/S - www.himsa.com.
3  * Represented by EHIMA - www.ehima.com
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #pragma once
19 
20 #include <cstdint>
21 
22 #include "hcimsgs.h"
23 #include "stack/include/bt_hdr.h"
24 #include "stack/include/btm_ble_api_types.h"
25 
26 namespace bluetooth {
27 namespace hci {
28 constexpr uint8_t kIsoCodingFormatTransparent = 0x03;
29 constexpr uint8_t kIsoCodingFormatLc3 = 0x06;
30 constexpr uint8_t kIsoCodingFormatVendorSpecific = 0xFF;
31 
32 constexpr uint8_t kIsoCigPackingSequential = 0x00;
33 constexpr uint8_t kIsoCigPackingInterleaved = 0x01;
34 
35 constexpr uint8_t kIsoCigFramingUnframed = 0x00;
36 constexpr uint8_t kIsoCigFramingFramed = 0x01;
37 
38 constexpr uint8_t kIsoCigPhy1M = 0x01;
39 constexpr uint8_t kIsoCigPhy2M = 0x02;
40 constexpr uint8_t kIsoCigPhyC = 0x04;
41 
42 namespace iso_manager {
43 
44 constexpr uint8_t kIsoDataPathDirectionIn = 0x00;
45 constexpr uint8_t kIsoDataPathDirectionOut = 0x01;
46 
47 constexpr uint8_t kRemoveIsoDataPathDirectionInput = 0x01;
48 constexpr uint8_t kRemoveIsoDataPathDirectionOutput = 0x02;
49 
50 constexpr uint8_t kIsoDataPathHci = 0x00;
51 constexpr uint8_t kIsoDataPathPlatformDefault = 0x01;
52 constexpr uint8_t kIsoDataPathDisabled = 0xFF;
53 
54 constexpr uint8_t kIsoSca251To500Ppm = 0x00;
55 constexpr uint8_t kIsoSca151To250Ppm = 0x01;
56 constexpr uint8_t kIsoSca101To150Ppm = 0x02;
57 constexpr uint8_t kIsoSca76To100Ppm = 0x03;
58 constexpr uint8_t kIsoSca51To75Ppm = 0x04;
59 constexpr uint8_t kIsoSca31To50Ppm = 0x05;
60 constexpr uint8_t kIsoSca21To30Ppm = 0x06;
61 constexpr uint8_t kIsoSca0To20Ppm = 0x07;
62 
63 constexpr uint8_t kIsoEventCisDataAvailable = 0x00;
64 constexpr uint8_t kIsoEventCisEstablishCmpl = 0x01;
65 constexpr uint8_t kIsoEventCisDisconnected = 0x02;
66 
67 constexpr uint8_t kIsoEventCigOnCreateCmpl = 0x00;
68 constexpr uint8_t kIsoEventCigOnReconfigureCmpl = 0x01;
69 constexpr uint8_t kIsoEventCigOnRemoveCmpl = 0x02;
70 
71 constexpr uint8_t kIsoEventBigOnCreateCmpl = 0x00;
72 constexpr uint8_t kIsoEventBigOnTerminateCmpl = 0x01;
73 
74 struct cig_create_params {
75   uint32_t sdu_itv_mtos;
76   uint32_t sdu_itv_stom;
77   uint8_t sca;
78   uint8_t packing;
79   uint8_t framing;
80   uint16_t max_trans_lat_stom;
81   uint16_t max_trans_lat_mtos;
82   std::vector<EXT_CIS_CFG> cis_cfgs;
83 };
84 
85 struct cig_remove_cmpl_evt {
86   uint8_t status;
87   uint8_t cig_id;
88 };
89 
90 struct cig_create_cmpl_evt {
91   uint8_t status;
92   uint8_t cig_id;
93   std::vector<uint16_t> conn_handles;
94 };
95 
96 struct cis_data_evt {
97   uint8_t cig_id;
98   uint16_t cis_conn_hdl;
99   uint32_t ts;
100   uint16_t evt_lost;
101   uint16_t seq_nb;
102   BT_HDR* p_msg;
103 };
104 
105 struct cis_establish_params {
106   std::vector<EXT_CIS_CREATE_CFG> conn_pairs;
107 };
108 
109 struct cis_establish_cmpl_evt {
110   uint8_t status;
111   uint8_t cig_id;
112   uint16_t cis_conn_hdl;
113   uint32_t cig_sync_delay;
114   uint32_t cis_sync_delay;
115   uint32_t trans_lat_mtos;
116   uint32_t trans_lat_stom;
117   uint8_t phy_mtos;
118   uint8_t phy_stom;
119   uint8_t nse;
120   uint8_t bn_mtos;
121   uint8_t bn_stom;
122   uint8_t ft_mtos;
123   uint8_t ft_stom;
124   uint16_t max_pdu_mtos;
125   uint16_t max_pdu_stom;
126   uint16_t iso_itv;
127 };
128 
129 struct cis_disconnected_evt {
130   uint8_t reason;
131   uint8_t cig_id;
132   uint16_t cis_conn_hdl;
133 };
134 
135 struct big_create_params {
136   uint8_t adv_handle;
137   uint8_t num_bis;
138   uint32_t sdu_itv;
139   uint16_t max_sdu_size;
140   uint16_t max_transport_latency;
141   uint8_t rtn;
142   uint8_t phy;
143   uint8_t packing;
144   uint8_t framing;
145   uint8_t enc;
146   std::array<uint8_t, 16> enc_code;
147 };
148 
149 struct big_create_cmpl_evt {
150   uint8_t status;
151   uint8_t big_id;
152   uint32_t big_sync_delay;
153   uint32_t transport_latency_big;
154   uint8_t phy;
155   uint8_t nse;
156   uint8_t bn;
157   uint8_t pto;
158   uint8_t irc;
159   uint16_t max_pdu;
160   uint16_t iso_interval;
161   std::vector<uint16_t> conn_handles;
162 };
163 
164 struct big_terminate_cmpl_evt {
165   uint8_t big_id;
166   uint8_t reason;
167 };
168 
169 struct iso_data_path_params {
170   uint8_t data_path_dir;
171   uint8_t data_path_id;
172   uint8_t codec_id_format;
173   uint16_t codec_id_company;
174   uint16_t codec_id_vendor;
175   uint32_t controller_delay;
176   std::vector<uint8_t> codec_conf;
177 };
178 
179 }  // namespace iso_manager
180 }  // namespace hci
181 }  // namespace bluetooth
182