arduino-audio-driver
Loading...
Searching...
No Matches
TAS2563.h
Go to the documentation of this file.
1
9#pragma once
10
12
13namespace audio_driver {
14
17 Rate8kHz = 0x00,
18 Rate16kHz = 0x01,
19 Rate24kHz = 0x02,
20 Rate32kHz = 0x03,
21 Rate48kHz = 0x04,
22 Rate96kHz = 0x05,
23 Rate192kHz = 0x06,
24};
25
27enum class TAS2563Format {
28 I2S,
30};
31
33enum class TAS2563PowerMode {
34 Active = 0x00,
35 Mute = 0x01,
36 Shutdown = 0x02,
37 LoadDiagnostics = 0x03,
38};
39
49 public:
50 // ---- Register addresses (Book 0, Page 0) ----
102
103 // ---- SW_RESET (0x01) ----
104 static constexpr uint8_t SW_RESET_BIT = 1U << 0;
105
106 // ---- PWR_CTL (0x02) ----
107 static constexpr uint8_t PWR_MODE_MASK = 0x03; // bits[1:0]
108 static constexpr uint8_t VSNS_PD_MASK = 1U << 2;
109 static constexpr uint8_t ISNS_PD_MASK = 1U << 3;
110
111 // ---- PB_CFG1 (0x03) ----
112 static constexpr uint8_t AMP_LEVEL_MASK = 0x3E; // bits[5:1]
113 static constexpr uint8_t AMP_LEVEL_SHIFT = 1;
114 static constexpr uint8_t DC_BLOCKER_DIS = 1U << 6;
115
116 // Amplifier output level settings (in dBV)
117 static constexpr uint8_t AMP_LEVEL_8_5DBV = 0x01;
118 static constexpr uint8_t AMP_LEVEL_9_0DBV = 0x02;
119 static constexpr uint8_t AMP_LEVEL_10_0DBV = 0x04;
120 static constexpr uint8_t AMP_LEVEL_11_0DBV = 0x06;
121 static constexpr uint8_t AMP_LEVEL_12_0DBV = 0x08;
122 static constexpr uint8_t AMP_LEVEL_13_0DBV = 0x0A;
123 static constexpr uint8_t AMP_LEVEL_14_0DBV = 0x0C;
124 static constexpr uint8_t AMP_LEVEL_15_0DBV = 0x0E;
125 static constexpr uint8_t AMP_LEVEL_16_0DBV = 0x10;
126 static constexpr uint8_t AMP_LEVEL_17_0DBV = 0x12;
127 static constexpr uint8_t AMP_LEVEL_18_0DBV = 0x14;
128 static constexpr uint8_t AMP_LEVEL_19_0DBV = 0x16;
129 static constexpr uint8_t AMP_LEVEL_20_0DBV = 0x18;
130 static constexpr uint8_t AMP_LEVEL_21_0DBV = 0x1A;
131 static constexpr uint8_t AMP_LEVEL_22_0DBV = 0x1C;
132
133 // ---- MISC_CFG2 (0x05) ----
134 static constexpr uint8_t I2C_GLOBAL_EN = 1U << 1;
135
136 // ---- TDM_CFG0 (0x06) ----
137 static constexpr uint8_t FRAME_START = 1U << 0;
138 static constexpr uint8_t SAMP_RATE_MASK = 0x0E; // bits[3:1]
139 static constexpr uint8_t SAMP_RATE_SHIFT = 1;
140 static constexpr uint8_t AUTO_RATE = 1U << 4;
141 static constexpr uint8_t RAMP_RATE = 1U << 5;
142 static constexpr uint8_t CLASS_D_SYNC = 1U << 6;
143
144 // ---- TDM_CFG1 (0x07) ----
145 static constexpr uint8_t RX_EDGE = 1U << 0;
146 static constexpr uint8_t RX_OFFSET_MASK = 0x3E; // bits[5:1]
147 static constexpr uint8_t RX_OFFSET_SHIFT = 1;
148 static constexpr uint8_t RX_JUSTIFY = 1U << 6;
149
150 // ---- TDM_CFG2 (0x08) ----
151 static constexpr uint8_t RX_SLEN_MASK = 0x03; // bits[1:0]
152 static constexpr uint8_t RX_SLEN_16BITS = 0x00;
153 static constexpr uint8_t RX_SLEN_24BITS = 0x01;
154 static constexpr uint8_t RX_SLEN_32BITS = 0x02;
155
156 static constexpr uint8_t RX_WLEN_MASK = 0x0C; // bits[3:2]
157 static constexpr uint8_t RX_WLEN_SHIFT = 2;
158 static constexpr uint8_t RX_WLEN_16BITS = 0x00;
159 static constexpr uint8_t RX_WLEN_20BITS = 0x01;
160 static constexpr uint8_t RX_WLEN_24BITS = 0x02;
161 static constexpr uint8_t RX_WLEN_32BITS = 0x03;
162
163 static constexpr uint8_t RX_SCFG_MASK = 0x30; // bits[5:4]
164 static constexpr uint8_t RX_SCFG_SHIFT = 4;
165 static constexpr uint8_t RX_SCFG_MONO_I2C = 0x00;
166 static constexpr uint8_t RX_SCFG_MONO_LEFT = 0x01;
167 static constexpr uint8_t RX_SCFG_MONO_RIGHT = 0x02;
168 static constexpr uint8_t RX_SCFG_STEREO_DOWNMIX = 0x03;
169
170 static constexpr uint8_t CFG2_CONFIG_MASK = 0x3F; // bits[5:0]
171
172 // ---- TDM_CFG3 (0x09) ----
173 static constexpr uint8_t RX_SLOT_LEFT_MASK = 0x0F;
174 static constexpr uint8_t RX_SLOT_RIGHT_MASK = 0xF0;
175
176 // ---- TDM_CFG4 (0x0A) ----
177 static constexpr uint8_t TX_EDGE = 1U << 0;
178 static constexpr uint8_t TX_OFFSET_MASK = 0x0E; // bits[3:1]
179 static constexpr uint8_t TX_FILL = 1U << 4;
180 static constexpr uint8_t TX_KEEP_EN = 1U << 5;
181
182 // ---- INT_LTCH0 (0x24) ----
183 static constexpr uint8_t INT_OTE = 1U << 0;
184 static constexpr uint8_t INT_OI = 1U << 1;
185 static constexpr uint8_t INT_TDMCKE = 1U << 2;
186
187 // ---- BOOST_CFG1 (0x33) ----
188 static constexpr uint8_t BOOST_EN = 1U << 5;
189 static constexpr uint8_t BOOST_MODE_MASK = 0xC0; // bits[7:6]
190 static constexpr uint8_t BOOST_MODE_CLASS_H = 0x00;
191 static constexpr uint8_t BOOST_MODE_CLASS_G = 0x01;
192 static constexpr uint8_t BOOST_MODE_ALWAYS_ON = 0x02;
193 static constexpr uint8_t BOOST_MODE_ALWAYS_OFF = 0x03;
194
195 // ---- INT_CLK_CFG (0x30) ----
196 static constexpr uint8_t IRQ_PIN_CFG_MASK = 0x03;
197 static constexpr uint8_t IRQ_PIN_CFG_LIVE = 0x00;
198 static constexpr uint8_t IRQ_PIN_CFG_LATCHED = 0x01;
199 static constexpr uint8_t CLR_INT_LTCH = 1U << 2;
200
201 // ---- MISC (0x32) ----
202 static constexpr uint8_t IRQ_POL = 1U << 7;
203
204 // ---- Defaults ----
205 static constexpr uint8_t DEFAULT_PAGE = 0x00;
206 static constexpr uint8_t DEFAULT_BOOK = 0x00;
207
208 // ---- I2C Addresses (7-bit) ----
209 static constexpr uint8_t I2C_ADDR_DEFAULT = 0x4C;
210 static constexpr uint8_t I2C_ADDR_GLOBAL = 0x48;
211
213
225 bool begin(uint32_t sample_rate, uint8_t bits) {
227 if (sample_rate <= 8000)
229 else if (sample_rate <= 16000)
231 else if (sample_rate <= 24000)
233 else if (sample_rate <= 32000)
235 else if (sample_rate <= 48000)
237 else if (sample_rate <= 96000)
239 else
241 return begin(rate, bits);
242 }
243
244 bool begin(uint32_t sample_rate, uint8_t bits, codec_mode_t mode,
245 i2s_format_t fmt, bool is_master, uint8_t channels) override {
246 (void)mode;
247 (void)fmt;
248 (void)is_master;
249 (void)channels;
250 return begin(sample_rate, bits);
251 }
252
254 uint8_t word_size = 16,
256 bool rc = true;
257
258 rc &= softReset();
259
260 uint8_t rev_id = 0;
261 readReg(REG_REV_ID, rev_id);
262
263 // shut down before re-configuring
266
267 rc &= setFormat(rate, word_size, format);
268
269 // default amplifier level (16.0 dBV)
271
272 return rc;
273 }
274
277
279 bool getRevisionId(uint8_t& rev_id) { return readReg(REG_REV_ID, rev_id); }
280
285 bool setFormat(TAS2563SampleRate rate, uint8_t word_size = 16,
287 bool rc = true;
288 uint8_t tdm_cfg0 = 0, tdm_cfg1 = 0, tdm_cfg2 = 0;
289
290 tdm_cfg0 |= (uint8_t)((uint8_t)rate << SAMP_RATE_SHIFT) & SAMP_RATE_MASK;
291
292 switch (word_size) {
293 case 16:
294 tdm_cfg2 |= RX_WLEN_16BITS << RX_WLEN_SHIFT;
295 tdm_cfg2 |= RX_SLEN_16BITS;
296 break;
297 case 24:
298 tdm_cfg2 |= RX_WLEN_24BITS << RX_WLEN_SHIFT;
299 tdm_cfg2 |= RX_SLEN_32BITS;
300 break;
301 case 32:
302 tdm_cfg2 |= RX_WLEN_32BITS << RX_WLEN_SHIFT;
303 tdm_cfg2 |= RX_SLEN_32BITS;
304 break;
305 default:
306 return false;
307 }
308
309 switch (format) {
311 tdm_cfg0 |= FRAME_START;
312 tdm_cfg1 |= (uint8_t)(1U << RX_OFFSET_SHIFT) & RX_OFFSET_MASK;
313 break;
315 tdm_cfg0 &= (uint8_t)~FRAME_START;
316 tdm_cfg1 &= (uint8_t)~RX_OFFSET_MASK;
317 break;
318 }
319
321
322 rc &= writeReg(REG_TDM_CFG0, tdm_cfg0);
323 rc &= writeReg(REG_TDM_CFG1, tdm_cfg1);
324 rc &= updateReg(REG_TDM_CFG2, CFG2_CONFIG_MASK, tdm_cfg2);
325
326 return rc;
327 }
328
330 bool setAmpLevel(uint8_t level) {
332 (uint8_t)(level << AMP_LEVEL_SHIFT) & AMP_LEVEL_MASK);
333 }
334
336 bool setVolume(int volume) override {
337 uint8_t amp_level;
338 if (volume <= 0) {
339 amp_level = AMP_LEVEL_8_5DBV;
340 } else if (volume >= 100) {
341 amp_level = AMP_LEVEL_22_0DBV;
342 } else {
343 amp_level = (uint8_t)(AMP_LEVEL_8_5DBV +
344 (volume * (AMP_LEVEL_22_0DBV - AMP_LEVEL_8_5DBV)) /
345 100);
346 }
347 return setAmpLevel(amp_level);
348 }
349
351 bool setMute(bool mute) override {
353 (uint8_t)(mute ? TAS2563PowerMode::Mute
355 }
356
358 bool start() {
360 (uint8_t)TAS2563PowerMode::Active);
361 }
362
364 bool stop() {
367 }
368
370 bool selectPage(uint8_t page) { return writeReg(REG_PAGE, page); }
371
373 bool selectBook(uint8_t book) { return writeReg(REG_BOOK, book); }
374};
375
376} // namespace audio_driver
Header only C++ driver for the TAS2563 mono Class-D smart amplifier.
Definition TAS2563.h:48
static constexpr uint8_t TX_FILL
Definition TAS2563.h:179
static constexpr uint8_t AMP_LEVEL_16_0DBV
Definition TAS2563.h:125
static constexpr uint8_t IRQ_POL
Definition TAS2563.h:202
static constexpr uint8_t I2C_ADDR_GLOBAL
Definition TAS2563.h:210
bool begin(uint32_t sample_rate, uint8_t bits)
Initialize the codec: software reset, set TDM/I2S format and sample rate, set the default amplifier o...
Definition TAS2563.h:225
static constexpr uint8_t BOOST_MODE_ALWAYS_ON
Definition TAS2563.h:192
static constexpr uint8_t DEFAULT_BOOK
Definition TAS2563.h:206
static constexpr uint8_t RX_WLEN_32BITS
Definition TAS2563.h:161
static constexpr uint8_t BOOST_MODE_MASK
Definition TAS2563.h:189
static constexpr uint8_t FRAME_START
Definition TAS2563.h:137
static constexpr uint8_t RX_SLEN_24BITS
Definition TAS2563.h:153
static constexpr uint8_t BOOST_EN
Definition TAS2563.h:188
static constexpr uint8_t BOOST_MODE_CLASS_H
Definition TAS2563.h:190
bool softReset()
Software reset (TAS2563_SW_RESET register)
Definition TAS2563.h:276
static constexpr uint8_t AMP_LEVEL_19_0DBV
Definition TAS2563.h:128
bool begin(TAS2563SampleRate rate=TAS2563SampleRate::Rate48kHz, uint8_t word_size=16, TAS2563Format format=TAS2563Format::I2S)
Definition TAS2563.h:253
static constexpr uint8_t AMP_LEVEL_14_0DBV
Definition TAS2563.h:123
static constexpr uint8_t TX_EDGE
Definition TAS2563.h:177
static constexpr uint8_t RAMP_RATE
Definition TAS2563.h:141
static constexpr uint8_t RX_EDGE
Definition TAS2563.h:145
static constexpr uint8_t AMP_LEVEL_12_0DBV
Definition TAS2563.h:121
bool setMute(bool mute) override
Mute / unmute the amplifier output (Mute power mode vs. Active)
Definition TAS2563.h:351
static constexpr uint8_t AMP_LEVEL_17_0DBV
Definition TAS2563.h:126
static constexpr uint8_t TX_OFFSET_MASK
Definition TAS2563.h:178
static constexpr uint8_t IRQ_PIN_CFG_MASK
Definition TAS2563.h:196
static constexpr uint8_t CLASS_D_SYNC
Definition TAS2563.h:142
static constexpr uint8_t AMP_LEVEL_8_5DBV
Definition TAS2563.h:117
static constexpr uint8_t AMP_LEVEL_10_0DBV
Definition TAS2563.h:119
static constexpr uint8_t SW_RESET_BIT
Definition TAS2563.h:104
static constexpr uint8_t SAMP_RATE_MASK
Definition TAS2563.h:138
bool setAmpLevel(uint8_t level)
Set the amplifier output level register value directly (see AMP_LEVEL_* constants)
Definition TAS2563.h:330
static constexpr uint8_t RX_SLEN_MASK
Definition TAS2563.h:151
static constexpr uint8_t IRQ_PIN_CFG_LIVE
Definition TAS2563.h:197
bool stop()
Stop the amplifier output (PWR_MODE = Shutdown)
Definition TAS2563.h:364
static constexpr uint8_t CLR_INT_LTCH
Definition TAS2563.h:199
static constexpr uint8_t TX_KEEP_EN
Definition TAS2563.h:180
Reg
Definition TAS2563.h:51
@ REG_TDM_CFG1
Definition TAS2563.h:59
@ REG_INT_MASK1
Definition TAS2563.h:75
@ REG_BOP_CFG0
Definition TAS2563.h:72
@ REG_BOOST_CFG3
Definition TAS2563.h:94
@ REG_SW_RESET
Definition TAS2563.h:53
@ REG_LIM_CFG0
Definition TAS2563.h:70
@ REG_PDM_CONFIG3
Definition TAS2563.h:97
@ REG_LIM_CFG1
Definition TAS2563.h:71
@ REG_INT_LIVE3
Definition TAS2563.h:81
@ REG_TDM_CFG0
Definition TAS2563.h:58
@ REG_MISC
Definition TAS2563.h:91
@ REG_TEMP
Definition TAS2563.h:88
@ REG_INT_MASK3
Definition TAS2563.h:77
@ REG_PB_CFG1
Definition TAS2563.h:55
@ REG_TDM_CFG6
Definition TAS2563.h:64
@ REG_INT_MASK2
Definition TAS2563.h:76
@ REG_TDM_CFG9
Definition TAS2563.h:67
@ REG_TDM_CFG2
Definition TAS2563.h:60
@ REG_TDM_CFG3
Definition TAS2563.h:61
@ REG_TDM_CFG7
Definition TAS2563.h:65
@ REG_BOOK
Definition TAS2563.h:100
@ REG_BST_ILIM_CFG0
Definition TAS2563.h:95
@ REG_INT_CLK_CFG
Definition TAS2563.h:89
@ REG_MISC_CFG2
Definition TAS2563.h:57
@ REG_BOP_CFG1
Definition TAS2563.h:73
@ REG_VBAT_LSB
Definition TAS2563.h:87
@ REG_PDM_CONFIG0
Definition TAS2563.h:96
@ REG_PAGE
Definition TAS2563.h:52
@ REG_PWR_CTL
Definition TAS2563.h:54
@ REG_BOOST_CFG2
Definition TAS2563.h:93
@ REG_DIN_PD
Definition TAS2563.h:90
@ REG_INT_LIVE0
Definition TAS2563.h:78
@ REG_MISC_CFG1
Definition TAS2563.h:56
@ REG_BOOST_CFG1
Definition TAS2563.h:92
@ REG_TDM_CFG4
Definition TAS2563.h:62
@ REG_I2C_CKSUM
Definition TAS2563.h:99
@ REG_INT_LTCH3
Definition TAS2563.h:85
@ REG_TDM_CFG5
Definition TAS2563.h:63
@ REG_VBAT_MSB
Definition TAS2563.h:86
@ REG_TDM_CFG10
Definition TAS2563.h:68
@ REG_REV_ID
Definition TAS2563.h:98
@ REG_INT_LIVE1
Definition TAS2563.h:79
@ REG_TDM_CFG8
Definition TAS2563.h:66
@ REG_INT_LTCH1
Definition TAS2563.h:83
@ REG_INT_MASK0
Definition TAS2563.h:74
@ REG_INT_LTCH0
Definition TAS2563.h:82
@ REG_TDM_DET
Definition TAS2563.h:69
@ REG_INT_LTCH2
Definition TAS2563.h:84
@ REG_INT_LIVE2
Definition TAS2563.h:80
static constexpr uint8_t BOOST_MODE_CLASS_G
Definition TAS2563.h:191
static constexpr uint8_t RX_OFFSET_MASK
Definition TAS2563.h:146
static constexpr uint8_t DEFAULT_PAGE
Definition TAS2563.h:205
static constexpr uint8_t AMP_LEVEL_MASK
Definition TAS2563.h:112
static constexpr uint8_t PWR_MODE_MASK
Definition TAS2563.h:107
static constexpr uint8_t RX_SLOT_RIGHT_MASK
Definition TAS2563.h:174
static constexpr uint8_t IRQ_PIN_CFG_LATCHED
Definition TAS2563.h:198
static constexpr uint8_t AMP_LEVEL_18_0DBV
Definition TAS2563.h:127
bool selectBook(uint8_t book)
Set the active register book (only Book 0 is defined by this driver)
Definition TAS2563.h:373
static constexpr uint8_t RX_SCFG_MONO_LEFT
Definition TAS2563.h:166
static constexpr uint8_t RX_WLEN_MASK
Definition TAS2563.h:156
static constexpr uint8_t RX_SLEN_32BITS
Definition TAS2563.h:154
static constexpr uint8_t RX_SCFG_MASK
Definition TAS2563.h:163
static constexpr uint8_t BOOST_MODE_ALWAYS_OFF
Definition TAS2563.h:193
static constexpr uint8_t RX_SCFG_STEREO_DOWNMIX
Definition TAS2563.h:168
static constexpr uint8_t AMP_LEVEL_SHIFT
Definition TAS2563.h:113
static constexpr uint8_t INT_OI
Definition TAS2563.h:184
static constexpr uint8_t INT_TDMCKE
Definition TAS2563.h:185
static constexpr uint8_t SAMP_RATE_SHIFT
Definition TAS2563.h:139
static constexpr uint8_t RX_SCFG_MONO_I2C
Definition TAS2563.h:165
bool begin(uint32_t sample_rate, uint8_t bits, codec_mode_t mode, i2s_format_t fmt, bool is_master, uint8_t channels) override
Initializes the codec.
Definition TAS2563.h:244
static constexpr uint8_t AMP_LEVEL_15_0DBV
Definition TAS2563.h:124
bool start()
Start the amplifier output (PWR_MODE = Active)
Definition TAS2563.h:358
static constexpr uint8_t RX_OFFSET_SHIFT
Definition TAS2563.h:147
static constexpr uint8_t AMP_LEVEL_11_0DBV
Definition TAS2563.h:120
static constexpr uint8_t RX_SCFG_MONO_RIGHT
Definition TAS2563.h:167
static constexpr uint8_t INT_OTE
Definition TAS2563.h:183
bool selectPage(uint8_t page)
Set the active register page (only Page 0 is defined by this driver)
Definition TAS2563.h:370
static constexpr uint8_t RX_SCFG_SHIFT
Definition TAS2563.h:164
static constexpr uint8_t RX_WLEN_16BITS
Definition TAS2563.h:158
TAS2563()
Definition TAS2563.h:212
static constexpr uint8_t RX_WLEN_24BITS
Definition TAS2563.h:160
static constexpr uint8_t RX_WLEN_SHIFT
Definition TAS2563.h:157
static constexpr uint8_t AMP_LEVEL_20_0DBV
Definition TAS2563.h:129
static constexpr uint8_t AMP_LEVEL_9_0DBV
Definition TAS2563.h:118
static constexpr uint8_t RX_WLEN_20BITS
Definition TAS2563.h:159
static constexpr uint8_t ISNS_PD_MASK
Definition TAS2563.h:109
static constexpr uint8_t I2C_ADDR_DEFAULT
Definition TAS2563.h:209
static constexpr uint8_t RX_JUSTIFY
Definition TAS2563.h:148
bool setVolume(int volume) override
Set output volume in percent (0..100), mapped to the amplifier level range.
Definition TAS2563.h:336
static constexpr uint8_t DC_BLOCKER_DIS
Definition TAS2563.h:114
static constexpr uint8_t CFG2_CONFIG_MASK
Definition TAS2563.h:170
static constexpr uint8_t RX_SLEN_16BITS
Definition TAS2563.h:152
bool setFormat(TAS2563SampleRate rate, uint8_t word_size=16, TAS2563Format format=TAS2563Format::I2S)
Configure the TDM/I2S digital audio interface: sample rate, word size and frame format.
Definition TAS2563.h:285
static constexpr uint8_t RX_SLOT_LEFT_MASK
Definition TAS2563.h:173
static constexpr uint8_t I2C_GLOBAL_EN
Definition TAS2563.h:134
static constexpr uint8_t AMP_LEVEL_13_0DBV
Definition TAS2563.h:122
static constexpr uint8_t AMP_LEVEL_22_0DBV
Definition TAS2563.h:131
static constexpr uint8_t AUTO_RATE
Definition TAS2563.h:140
static constexpr uint8_t VSNS_PD_MASK
Definition TAS2563.h:108
static constexpr uint8_t AMP_LEVEL_21_0DBV
Definition TAS2563.h:130
bool getRevisionId(uint8_t &rev_id)
Read the chip revision / product ID register.
Definition TAS2563.h:279
Common parent class for codec drivers that have been ported from the Zephyr RTOS audio driver impleme...
Definition ZephyrDriverCommon.h:22
uint8_t i2c_addr
Definition ZephyrDriverCommon.h:87
bool updateReg(uint8_t reg, uint8_t mask, uint8_t value)
Read-Modify-Write of a single byte register.
Definition ZephyrDriverCommon.h:110
bool readReg(uint8_t reg, uint8_t &value, bool stopBit=true)
Reads a single byte from an 8 bit register address.
Definition ZephyrDriverCommon.h:100
bool writeReg(uint8_t reg, uint8_t value)
Writes a single byte to an 8 bit register address.
Definition ZephyrDriverCommon.h:94
Namespace for audio driver components.
Definition AudioBoard.h:5
TAS2563PowerMode
Power control modes (PWR_CTL PWR_MODE field)
Definition TAS2563.h:33
codec_mode_t
Definition DriverCommon.h:290
TAS2563SampleRate
I2S sample rate selection (TDM_CFG0 SAMP_RATE field)
Definition TAS2563.h:16
TAS2563Format
Digital audio interface format.
Definition TAS2563.h:27
i2s_format_t
Definition DriverCommon.h:250