@@ -140,6 +140,7 @@ int I2SClass::_installDriver(){
140
140
// TODO there will much more work with slave mode
141
141
i2s_mode = (esp_i2s::i2s_mode_t )(i2s_mode | esp_i2s::I2S_MODE_SLAVE);
142
142
}
143
+ #if SOC_I2S_SUPPORTS_ADC_DAC
143
144
if (_mode == I2S_ADC_DAC){
144
145
#if SOC_I2S_SUPPORTS_ADC_DAC
145
146
if (_bitsPerSample != 16 ){ // ADC/DAC can only work in 16-bit sample mode
@@ -151,7 +152,9 @@ int I2SClass::_installDriver(){
151
152
log_e (" This chip does not support DAC / ADC" );
152
153
return 0 ; // ERR
153
154
#endif
154
- }else if (_mode == I2S_PHILIPS_MODE ||
155
+ }else
156
+ #endif
157
+ if (_mode == I2S_PHILIPS_MODE ||
155
158
_mode == I2S_RIGHT_JUSTIFIED_MODE ||
156
159
_mode == I2S_LEFT_JUSTIFIED_MODE){ // End of ADC/DAC mode; start of Normal mode
157
160
if (_bitsPerSample != 16 && _bitsPerSample != 24 && _bitsPerSample != 32 ){
@@ -179,7 +182,7 @@ int I2SClass::_installDriver(){
179
182
.sample_rate = _sampleRate,
180
183
.bits_per_sample = (esp_i2s::i2s_bits_per_sample_t )_bitsPerSample,
181
184
.channel_format = esp_i2s::I2S_CHANNEL_FMT_RIGHT_LEFT,
182
- .communication_format = (esp_i2s::i2s_comm_format_t )(esp_i2s::I2S_COMM_FORMAT_STAND_I2S | esp_i2s::I2S_COMM_FORMAT_STAND_PCM_SHORT ), // 0x01 | 0x04 // default
185
+ .communication_format = (esp_i2s::i2s_comm_format_t )(esp_i2s::I2S_COMM_FORMAT_STAND_I2S), // 0x01 // default
183
186
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL2,
184
187
.dma_buf_count = _I2S_DMA_BUFFER_COUNT,
185
188
.dma_buf_len = _i2s_dma_buffer_size
@@ -198,6 +201,7 @@ int I2SClass::_installDriver(){
198
201
}
199
202
} // try installing with increasing size
200
203
204
+ #if SOC_I2S_SUPPORTS_ADC_DAC
201
205
if (_mode == I2S_ADC_DAC){
202
206
esp_i2s::adc_unit_t adc_unit = (esp_i2s::adc_unit_t ) 1 ;
203
207
esp_i2s::adc1_channel_t adc_channel = (esp_i2s::adc1_channel_t ) 6 ; //
@@ -212,13 +216,15 @@ int I2SClass::_installDriver(){
212
216
esp_i2s::adc1_config_channel_atten (adc_channel, esp_i2s::ADC_ATTEN_DB_11);
213
217
esp_i2s::i2s_adc_enable ((esp_i2s::i2s_port_t ) _deviceIndex);
214
218
_initialized = true ;
215
- }else { // End of ADC/DAC mode; start of Normal mode
219
+ }else // End of ADC/DAC mode
220
+ #endif
221
+ if (_mode == I2S_PHILIPS_MODE){ // if Normal mode
216
222
_initialized = true ;
217
223
if (!_applyPinSetting ()){
218
224
end ();
219
225
return 0 ; // ERR
220
226
}
221
- }
227
+ } // if _mode == ?
222
228
223
229
return 1 ; // OK
224
230
}
@@ -257,7 +263,9 @@ int I2SClass::begin(int mode, int sampleRate, int bitsPerSample, bool driveClock
257
263
// TODO implement left / right justified modes
258
264
switch (mode) {
259
265
case I2S_PHILIPS_MODE:
266
+ #if SOC_I2S_SUPPORTS_ADC_DAC
260
267
case I2S_ADC_DAC:
268
+ #endif
261
269
case I2S_PDM:
262
270
break ;
263
271
@@ -309,10 +317,10 @@ int I2SClass::_applyPinSetting(){
309
317
pin_config.data_out_num = _outSdPin>0 ? _outSdPin : _sdPin;
310
318
pin_config.data_in_num = I2S_PIN_NO_CHANGE;
311
319
}else {
320
+ pin_config.data_out_num = I2S_PIN_NO_CHANGE;
321
+ pin_config.data_in_num = _sdPin;
312
322
}
313
323
}
314
- // pinMode(_inSdPin, INPUT_PULLDOWN);
315
- // TODO if there is any default pinMode - set it to old input
316
324
if (ESP_OK != esp_i2s::i2s_set_pin ((esp_i2s::i2s_port_t ) _deviceIndex, &pin_config)){
317
325
log_e (" i2s_set_pin failed; attempted settings: SCK=%d; FS=%d; DIN=%d; DOUT=%d\n " , _sckPin, _fsPin, pin_config.data_in_num , pin_config.data_out_num );
318
326
return 0 ; // ERR
@@ -424,9 +432,11 @@ int I2SClass::getDataOutPin(){
424
432
}
425
433
426
434
void I2SClass::_uninstallDriver (){
435
+ #if SOC_I2S_SUPPORTS_ADC_DAC
427
436
if (_mode == I2S_ADC_DAC){
428
437
esp_i2s::i2s_adc_disable ((esp_i2s::i2s_port_t ) _deviceIndex);
429
438
}
439
+ #endif
430
440
esp_i2s::i2s_driver_uninstall ((esp_i2s::i2s_port_t ) _deviceIndex);
431
441
432
442
if (_state != I2S_STATE_DUPLEX){
@@ -494,11 +504,13 @@ int I2SClass::read(void* buffer, size_t size){
494
504
tmp_buffer = xRingbufferReceiveUpTo (_input_ring_buffer, &item_size, pdMS_TO_TICKS (1000 ), size);
495
505
if (tmp_buffer != NULL ){
496
506
memcpy (buffer, tmp_buffer, item_size);
507
+ #if SOC_I2S_SUPPORTS_ADC_DAC
497
508
if (_mode == I2S_ADC_DAC){
498
509
for (size_t i = 0 ; i < item_size / 2 ; ++i){
499
510
((uint16_t *)buffer)[i] = ((uint16_t *)buffer)[i] & 0x0FFF ;
500
511
}
501
512
} // ADC/DAC mode
513
+ #endif
502
514
vRingbufferReturnItem (_input_ring_buffer, tmp_buffer);
503
515
return item_size;
504
516
}else {
0 commit comments